Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

Michigan State University

Computer Science

Mai Dao
WRA 110
Christie Daniels
March, 22, 2015

Computer Science as a discipline encompasses many fields of research. At baseline, a


computer scientist is someone who uses computers to solve practical problems. These can
range from simple, to very complex and abstract. All computer scientists utilize
programming languages to instruct a computer to solve these problems, and the results of
their research are often of massive practical use. Because computer scientists actually
write the code, research in the field is a very hands on experience, and one that benefits
from near instant confirmation or denial of novel solutions. In this essay I will attempt to
explain what a computer scientists job is, and how they go about it.

I.

The Importance of Mathematics

Many fields of research are observation based, where researchers take a look at
how something behaves in the real world and make conclusions based on what is
observed. Computer science, however, is almost entirely a field of trial. Researchers write
programs designed to either solve a new problem, or solve a problem in a better way than
what is current. Research may yield a new way to sort through enormous quantities of
data, or something as simple as a simulation of a two-player game, as is the case in a
study called Two-Player Tower of Hanoi by Chappelon, Larsson, and Matsura. In it,
they explore devise a way to simulate a game called Tower of Hanoi.
It may not seem like it, but computer science is very much a math intensive
discipline. To simulate a game like Tower of Hanoi, one needs to perform many
different calculations based on specific conditions in order to achieve a realistic, and all
encompassing result. Much of what the study consists of is simply a devising of
algorithms to do these calculations efficiently, and that is how it is presented. The study

breaks each set of conditions down, and solves them somewhat independently, with
discussion, mostly, about the reasoning behind using a particular sort of algorithm for a
given solution stack.
The language of technical papers in computer science is, as expected, complex.
These studies often deal in game theory, and the amount of math included in the average
sentence that requires prior knowledge to comprehend is very high. Most people would
be unable to understand the substance of this research, and would probably have a hard
time even picking out what the general idea is. The only difference between a study by
computer scientists and mathematicians is that the computational method is explained in
the context of writing a routine to solve the problem, rather than just explaining the
problem and calculations alone. In fact, the two fields often overlap. Computer scientists
are mathematicians in disguise, and often, mathematicians are computer scientists. High
end mathematics very, very often utilizes computing in solving complex problems,
because without it, the time required would increase exponentially.
A study illustrating a way to simulate a game doesnt sound particularly useful,
but that is what computer scientists do. Their time is spent exploring the solutions to all
computational questions, no matter what they are. Often, seemingly simple questions are
actually very computationally complex. Not only are they complex to the computer, the
programming expertise required is very extensive. Because of this, the education required
of hopeful computer scientists is rather intensive. Almost all have at least a four year
degree, and many positions relating to theoretical computer science require further
education.

A typical computer scientist practicing in the field has knowledge of a large


amount of mathematics, and of course many different programming languages. There is
no such thing as a programmer who only knows one language, and knowing many is
practically required in order to use the advantages certain ones bring to the table. Being
able to use the right tools for each job is something required of every sort of researcher,
and the tools of a computer scientist are the programming languages they specialize in.
For example, in the entry An Efficient Image Generation Algorithm Using
Fractals and Chaos Theory by K. Thamizhchelvy and G. Geetha of the Sci Pub Journal
of Computer Science, the authors propose a new way to generate a type of random image,
fractals. A fractal image follows a pattern, and no matter the level of detail, the image
continues to follow the exact same pattern down to the smallest detail, growing off of
itself continuously. This type of image has been generated for a very long time by
computers, but Thamizhchelvy et al. have devised a way to generate them more
efficiently using pseudo-random numbers and chaos theory.
The reason chaos theory is important is because of its very definition: systems
that develop differently depending on initial conditions and are very sensitive to
differences in said conditions. A fractal generated with algorithms devised from chaos
theory will always be different given different initial input, leading to this image being
useful in authentication systems. The entry begins with a brief introduction of fractals,
their uses, and the concepts of Chaos Theory and how it is applied using PRNG (pseudorandom number generation) and Lucas numbers to generate a result that is always
different given different input. The underlying math here is very carefully explained, with
examples and equations written out (Thamizhchelvy et al.). Only after explaining all of

this do the authors begin to detail the algorithms used, using pseudocode to demonstrate
how it would be programmed in an arbitrary language. Here, the knowledge of multiple
programming languages comes into play, as each element of these calculations likely is
suited to different languages than the rest. Careful programming in order to make them
work together would be required.
Using charts, the authors now demonstrate two fractals generated with their
algorithm using the same input with the only difference being a randomly generated
number. When the input was 1982 and PRNG gave a 1, a fractal was generated. With
the same input, but PRNG giving a 4, a second, completely different fractal was
generated, effectively demonstrating the importance of the initial conditions given to the
algorithm.

Fig. 1. The First Fractal

Fig. 2. The Second Fractal

Following this, after a short analysis of what happened, reiterating the points
above, the authors conclude the entry. From this journal entry, it is clear that the
discussion in Computer Science is very involved when it comes to how familiar one must
be with mathematical concepts in order to be successful.

II. Programming as a Discipline, or How to Be a Code Monkey


The main objective of the aspiring Computer Scientist is usually to become a
professional programmer, for whatever purpose they intend, such as research as above, or
working in the many industries that need things run on computers. Programming begins
very simple, as most things do. Nearly everyone who has ever even looked at
programming is familiar with the Hello World program. All it does is print Hello,
World!, but it is considered the best origin point for a new programmer.

main( ) {
printf("hello, world");
}
Fig. 3. Hello, World! in the C Programming Language
While it is very simple, that program demonstrates the basics of all programs.
When you boil it down, almost all programs, at base level, share the structure of Hello,
World! says Jacob B. Adam, a programmer. According to him, programming is a very
iterative discipline. Every program, script, and design process starts with the absolute
basic structure defined, and then fleshed out over hundreds, or thousands of different
iterations during development. The idea, he says, is to avoid bugs in the code, things that
cause the program to either not run, or give a wrong result (J. Adam, personal
communication, March 2015). If a programmer sat down and wrote 1000 lines of code in
one session without running it, the amount of errors just from mis-typing things would be
enormous. The computer is perfect in executing what is written, but unfortunately
humans are not perfect in writing it. This leads to a lengthy development process for even
relatively simple programs, making sure everything runs correctly.
Despite this process, the end result almost invariably is not perfect. Things are
fixed after being released complete all the time. Because of this, programming, and
computer science in general requires a lot of patience. Development of any sort of
complex program can take months, or even years. According to Jacob, Sometimes, when
programming, 4 or 5 hours can go by without any sort of real progress except
debugging.
Programmers often work in teams, and because of this communication is a must.
Code contains comments all the time, and indeed it is almost mandatory for all but the

simplest of code in order for one programmer to understand something another


programmer wrote, simply because of the multitude of different ways something can be
written in a given programming language. In many ways, each programming language is
essentially like learning a spoken one, and programmers are generally experts in both. If
they cannot communicate well with their team, progress will be very slow. If they cannot
communicate well with the computer (programming), then, well, they shouldnt be a
programmer.
Even though there are many complex programs being worked on all the time,
much of what is written in practice consists of small scripts and snippets of code that
perform a very specific function very quickly. Entire projects often consist of an
omnipresent layer of code, an execution engine, executing many small, modular scripts in
order to produce the end result. Video game development, specifically, consists of this.
There is a main program called the Game Engine running all the time, and then most of
what is seen in game is scripted with instructions for the engine to run. Very few large
projects are one enormous program, going back to how difficult it is to keep bugs out of
code. Additionally, this system allows the main program to essentially be modular,
executing new scripts as they are given to it. Everything used to be monolithic, and it
wasnt very fast or efficient. Smaller subsets of code make it easier to program, and also
make it easier for the computer to run, so its a win-win. (J. Adam).

Fig. 4. A script that creates a button in a game engine, written in LUA

Jacob has worked with both scientific applications and things like video games.
To compare them, he says, is almost like comparing two of the same thing, essentially.
The knowledge of certain theories is of course different depending on the application, but
the underlying programming knowledge is the same, as is the mathematical knowledge,
in a general sense. Video games use many of the same calculations that occur in real life
simulation, for physics and rendering of things like light. Visual rendering knowledge, for
example, has uses in science as well as in entertainment. So, computer science in general
is at once very broad in application as well as very narrow in execution. The skills
generally overlap, no matter where a computer scientist applies them (J. Adam).

3. Outlook for a Computer Scientist


While it is frustrating, sometimes, having things that dont work on the first, third,
or even 100th try, finally getting a program to work is a very satisfying experience, and it
is what keeps many of them going. That, and the fact that the professions that computer
scientists keep are always in demand, and almost invariably pay very well. A researching
computer scientist, on average, makes over $100,000 per year (bls.gov, Quick Facts:
Computer and Information Research Scientist), with the top end being much higher than

that. Your average programmer working for a public company can expect over $70,000
per year (bls.gov, Quick Facts: Computer Programmer), with seniority granting large
pay increases. These people are in demand, and that is not going to change any time soon.
With the rate that technology is advancing, theres always demand for people to push the
limits of what it can do, and Computer Scientists, along with their hardware counterparts
Computer Engineers, are the ones to do it. Those two specializations often work very
carefully with one another, in order to achieve the best results possible with any given
hardware.

4. Conclusion
All in all, Computer Science might as well be called Mathematics in the 21st
Century for the amount that it overlaps with mathematics. The computer scientist can be
a researcher, a programmer, and a mathematician rolled into one, solving complex and
simple problems with computing in novel ways every day. Because of the demand, and
nature of the profession, computer science as a field is very promising, career wise. The
work is satisfying, but challenging, according to people in the field, and pays very well.
A good programmer wont have any trouble finding work any time soon, and that holds
true for just about anything one can do with a degree in computer science. For a
rewarding, in demand field that encompasses many different applications, Computer
Science is one of the premiere places to look.

"Summary." U.S. Bureau of Labor Statistics. U.S. Bureau of Labor Statistics, n.d. Web.
19 Mar. 2015.
"Summary." U.S. Bureau of Labor Statistics. U.S. Bureau of Labor Statistics, n.d. Web.
01 Mar. 2015.
"Emote-Button - World of Warcraft Programming: A Guide and Reference for Creating
WoW Addons." Emote-Button - World of Warcraft Programming: A Guide and Reference
for Creating WoW Addons. N.p., n.d. Web. 23 Mar. 2015.
Paper, Original Research. An Efficient Image Generation Algorithm Using Fractals and
Chaos Theory (n.d.): n. pag. Web.
"ArXiv.org Cs ArXiv:1503.03345." [1503.03345] Two-Player Tower of Hanoi. N.p., n.d.
Web. 23 Mar. 2015.
J. Adam, Personal Communication, March 2015 (Interview stuff)

You might also like