Home > Personal, Tech > Computer science

Computer science

I was reading this interview with Bjarne Stroustrup (via /.) and it got me thinking about my own CS education at Montana State.

I came into the CS program having done little more than HTML and a chapter of a Java book. That first Java program (after “hello, world,” of course) was one where when my brother’s name was entered in a prompt it printed “you suck” and when anyone else’s name was entered it printed “you’re cool.” Good times.

Anyway, the first CS class I took went well, despite the realization that a lot of kids in the class already knew more than I did coming in. Actually, the entire four years went pretty well. I got good grades and I graduated. What more can you ask?

Then I tried to get a job. I ended up getting one shortly after graduating, but it was an eye-opening experience. I was clearly lacking as a candidate. I’m pretty thankful at this point that my first job was not a software development job, but a QA job. I pretty clearly wasn’t ready. The QA job helped with a lot of the problems I would have had. I got used to working in a Linux environment (something I had seriously overestimated my skills with). I got used to the basic software process: installing, testing, reading code when it was available, etc. Then I started doing scripting work for the department, which helped with developing software for other people to use. Eventually, I jumped to a development in the same company and was in a good position to fit what I learned in QA with what I had learned in college. Now having been a developer for a little while, most of my challenges are ones born of my lack of experience with various aspects of development; I have a sufficient understand of software engineering to be a productive employee, but I am by no means a great developer (over the next decade, hopefully I will become one).

Why is this so? My biggest mistake in college was not getting some kind of an internship. That would have helped immensely and is my own fault. So we’ll gloss over that for now. What about my education? The CS program at MSU suffers from a problem that lots of CS programs apparently suffer from: they want to be two things at once. They want to teach programming and software engineering. After all, that’s what attracts students: preparation for a career. They also want to teach computer science. So we get a hash. We learn basic programming, data structures, algorithms, theory, etc, both generally and for specific areas of computing (databases, AI, graphics, etc). The computer science side of it seems fine for the most part (though maybe someone who went through MSU’s program for that instead of programming might think differently), but there are definitely issues for anyone who wants to go on to a development job. Like Stroustrup says in his interview, writing code for other people is not taught well. When I thought about how to use exception handling, it was more “do I have to do this for this project?” and less “where is it good practice to do so”? When I took the software development course offered, they did try to make us write a program as in the real world. But my group failed pretty obviously at this and our project got an A. I have a feeling most groups didn’t do so well here, but it’s still a little disconcerting.

I mean, Java was one of the main languages I was taught and I was fuzzy on the idea of classpathes upon graduating. A class where we we looked at different approaches to programming languages and were able to compare and contrast them would have been incredibly useful. We had such a course, but it wasn’t well executed; we were shown so many different languages that we didn’t have time to really compare them. And a question on a test was literally “write down the comment symbol for each of these languages.” I think I would have gotten more out of a more limited comparison.

Now, I realize that a university CS program can’t focus too much on practicality. There are two-year programs where you could get a solid programming background and do very well with simpler development (like a lot of what I’ve done). That said, CS programs have advantages over those programs. You get a broader education which will make you a better developer in the long run. But that’s hampered by the deficiencies in short preparation. For MSU, maybe it’s just a programming practices course and a push for less constrained programming projects. It’s not like they’re far away from a pretty reasonable compromise. I don’t regret my educational path, but Stroustrup’s points definitely apply to my education. I could have been better prepared. If you push yourself as a student you can overcome these deficiencies. With some changes, though, maybe we can more students where they need to be.

Categories: Personal, Tech
  1. No comments yet.
  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: