Monday, August 10, 2009

Depth or Breath?

I was reading this on Slashdot the other day about a person going back to school to complete their computer science degree.

Here's a quick quote:

I recently went back to college to finish my CS degree, however this time I moved to a new school. My previous school taught only C++, except for a few higher level electives (OpenGL). The school I am now attending teaches what seems like every language in the book. The first two semesters are Java, and then you move to Python, C, Bash, Oracle, and Assembly. While I feel that it would be nice to get a well-rounded introduction to the programming world, I also feel that I am going to come out of school not having the expertise required in a single language to land a good job. After reading the syllabi, all the higher level classes appear to teach concepts rather than work to develop advanced techniques in a specific language. Which method of teaching is going to better provide me with the experience I need, as well as the experience an employer wants to see in a college graduate?

Now there are a ton of opinions in the slashdot article that geeks and non-geeks alike should have a look because it poses a good question about what type of education you should get. Should it be as broad as possible? Or should it be more contained but more comprehensive?

This story also brings up an interesting exchange that I had with my undergraduate advisor in computer science. My computer science program did not take the breadth approach, but rather took the more narrow approach. Yes we did learn about automata, basic and advanced algorithms, logic and so on (so all the things that are mentioned in the comments section, and all the things that every computer scientist should know) BUT we didn't do a lot of languages. We covered Java, ANSI C, and x86 Assembly, and if you took specific electives you would get PL/SQL and SmallTalk.

The problem for me was that I was not being familiarized with more languages that exist out there in the real world (like C# for example). What I failed to realize back then is that Java, C and assembly is really what you need to get started. My advisor told me that the program focuses on concepts (well duh!) and that I can learn any language I want on my own easily. The issue I had was that the languages used in the curriculum were not used a whole heck of a lot. Two semester of Java, 2 of C, and one of assembly.

Yes you need to take the bull by the horns and program you own projects and have what the Greeks call μεράκι (I guess the closest equivalent is the concept of being "jazzed about something"), but as an undergraduate with a full course load, and a job, it's not easy to fit in project just for fun.

Personally I would have preferred more familiar with more languages and then I can practice more on my own, rather than this uncomfortable in-between.

What do you think?
blog comments powered by Disqus