Computer Science

grardb:

Most of you have no idea what goes on in the world of G-Rard B, so let me tell you a little bit about computer science…

Computer science is not information technology

I know a lot of people who mess these two things up. If you’re really interested in what the differences are, check out Wikipedia. In all honesty, these two fields are so incredibly different that there’s no point in comparing them. There is some overlap, but not much. Please don’t ever say that I’m “in the IT field” or anything like that. I’m not. There’s nothing wrong with being in the IT field, but that’s not where I am.

Computer science is not programming

This. A lot of people, including students studying computer science, don’t realize that programming is only one specific branch of computer science. Many computer science students end up becoming programmers, but don’t get it twisted; there are plenty of computer scientists who have no clue how to program. There are even computer science professors at Rutgers who openly admit that they don’t know how to code. There are many more programmers than theorists in computer science, but programming couldn’t exist without the brilliant minds on the theoretical side.

Also, it is very possibly to be a programmer without a degree in computer science. Anybody can pick up a book on programming and learn how to code. It’ll likely be crappy code, but it’s programming nonetheless.

Computer science is math

Many people don’t know this, but computer science is the theory of computation; it is a branch of mathematics. It’s not math in the same way that physics, engineering, or economics are math. Computer science is literally math. In fact, many of the early computer scientists had PhDs in mathematics (look up Donald Knuth). At Rutgers, we’ve got a computer science professor who teaches the math department’s graph theory course.

A lot of people say things like, “to be an engineer, you have to be really good at math.” I don’t want to sound harsh on engineers, but that’s not entirely true. Aside from those in computer engineering, most engineers only need to know a bunch of calculus, which is only a small part of mathematics. Many of them don’t even know of the existence of discrete math, numerical analysis, and many other topics in math.

Theoretical computer scientists often need to write mathematical proofs for solutions to problems, just like mathematicians do.

Computer science is science

Just like the name implies, there is science in our field. Theoretical computer scientists have to test out algorithms that cannot be proven mathematically. For example, if a computer scientist develops an algorithm for facial recognition, do you think that even if a mathematical proof could be written, it is going to convince people to use it? No. The algorithm likely needs to go through experimentation and many revisions before it is completely ready for use.

I admit that it isn’t quite science in the same way that physics, biology, and chemistry are sciences, but it is a science nonetheless.

Computer science is engineering

I’m serious. There’s a reason that many computer science graduates take up software engineering jobs (in fact, there are more software engineers with computer science degrees than any other degree, including the software engineering degree).

What about computer engineering?

This is where things can get confusing. There are some computer engineers who take up jobs that are normally more suited for those with a computer science degree. Not all computer engineers can do this however; it usually requires quite a bit of self-learning and hard work because computer engineering is closer to electrical engineering than it is to computer science. Despite the fact that computer engineers hold the “engineering” title, they are not the only engineers in the field of computing. Software engineering often requires tons of knowledge of computer science in order to solve difficult problems.

Engineering is the practice of using math and science to solve problems. Software engineering is no different, so yes, computer science is engineering for some people.

Oh, and remember when I said that anyone can be a programmer? Well, not everyone can be a software engineer. It’s a tough job.

Computer science is design

We may be left-brained people, but we have to get creative sometimes. As of right now, I am what people call an “end-to-end web developer.” This means that I am knowledgable about the back and front ends in web development. That may not make sense to you, so let me explain in it simpler terms: I can make a website work, and I can make it look pretty. Web developers don’t always have a designer, so we sometimes have to make our own designs. In fact, there are many web developers who create wonderful designs to compliment their programming without the help of a graphic designer. I’m not quite on that level, but these people exist. Without design, nobody uses the work of a software developer except other software developers.

Recently, I completed a programming challenge for a startup company in order to be considered for a summer internship position. What was the challenge? I had to create several visualizations in order to present data graphically, as opposed to textually. This required at least over 700 lines of code for eight visualizations total. This challenge was a mixture of programming and design. (Side note: the CTO of the company said he liked my visualizations; I’m pretty sure I’m getting an offer from them, haha :D ).

“You have a guaranteed job after college.”

This statement is such a ridiculous generalization that it bothers me. Everyone is guaranteed a job after college. You can become a waiter/waitress or a sanitary worker, right?

Listen. Getting a job with a computer science degree isn’t difficult; I’ll admit to that. What is difficult, however, is getting a good job with a computer science degree. Tons of mindless students go through school and earn a B.S. in computer science without spending an hour out of class learning on their own, then end up taking programming jobs at financial firms or other non-technical companies. They usually don’t face engineering problems, they usually work on Windows (something that most good software engineers don’t do), and they don’t get paid as much.

Do you think I want to get a job paying me $60,000/year to program crappy software for a company in the middle of nowhere, where nobody will appreciate me? No. I’m shooting for at least $75,000 starting at a company where they treat developers with respect.

If you work at a bank, your bosses don’t know what you do. They give you boring work, they tell you to do the impossible, and they give you ridiculous deadlines. The computers you work on are likely crappy Dell computers with Windows installed. You program in one programming language called Java and nobody knows how to develop software correctly. This job is easy to get.

If you work at a tech company, your bosses are probably software engineers as well. Your work is fun, your hours are long as hell, and your pay is great. You program on an awesome Mac, and you push your code to a Linux server. You use whatever programming language(s) you need in order to do the job right, and your coworkers are masters when it comes to code. Your algorithms are efficient and your product is awesome. This job is very hard to get.

Remember that programming challenge that I just mentioned? The CTO interviewed me over the phone, asked me for a sample of my code, made me complete a programming challenge, and then interviewed again over Skype. What’s the last step? Working at their office one day to see how well I work with the team. This is for a summer internship at a small company, people. The interviewing process is even more rigorous for big tech companies like Google, Apple, and (bleh) Microsoft.

When you tell me that I’m guaranteed a job, I take some offense to that. I do so much outside of the classroom just to make sure that I’ll have a great career after college (and there are still plenty of people who are more skilled than I am). I read programming books. I take up web development jobs to gain experience. I watch online lectures offered by other universities. I visit Reddit daily, and the only subreddits that I am subscribed to are related to programming (24 total). I attend hackathons and ruin my health just to try to create something cool. I get involved in every way I can to try to get my foot in the door of the New York tech community.

I don’t want to take up a crappy programming job. I want to make a great living, I want people to call me a software engineer, and I want to love what I do. Most computer science students are not guaranteed these things.

Nobody knows it all

There were obviously some contradictions in this post. How can computer science be math, science, and engineering? How can computer science be programming, but not programming (PRINCIPLE OF EXPLOSION)? This post can’t fit everything that there is to know about computer science. You would need an entire book series for that kind of information. The truth is that there are a ridiculous number of branches of computer science, and nobody can be good at all of them.

Do you think that theoretical computer scientists created Tumblr and Facebook? Do you think that game developers come up with sorting algorithms? Do you think systems programmers and system administrators work alongside electrical and computer engineers to create video cards and other hardware? Do you think network programmers contribute much to artificial intelligence and machine learning? Do you think web developers are experts on cryptography or programming language theory?

Nobody can learn it all. Computer science is such a huge field that it is literally impossible to know everything. It’s a bit sad, because there are so many things that I enjoy, but I know I cannot possibly be good at all of them. I think I’ve chosen web development as my career of choice, but it would be so cool to be an expert on some of those other things. Perhaps in another lifetime…

I love computer science.

I hope you enjoyed this post. Thanks for reading.


POST DETAILS:
Posted on January/28/2012
Tagged as: truf, not that I'm even CS,
Originally Posted by: grardb Reblogged From: grardb

POST NOTES:
  1. lovecommajane reblogged this from grardb
  2. kirbi-mrqz said: tl;dr
  3. grardb posted this


ABOUT

jane rhymes with name
And for all your probing questions:
http://www.formspring.me/lovecommajane

Tweets

Follow alphajane on Twitter

I'm following: