I Don’t Like My Computer Science Classes

It’s not the classes themselves, but what we’re taught that annoys me. This semester was decent, because it involved Data structures and (rather boring) assembly-level programming. But it seems the higher we go in our education, the more theoretical things get. First it started with understanding software design, then going deeper into computer architecture and micro-controllers/processors1. Whatever little bit of programming we’re taught, is pre-written, verified programs which anyone can learn up and write down in the final exam. Presto! Instant engineers. No techniques, no real-world problems. Just concepts and concepts. Ask someone to design and program a software solution (regardless of the bugs), and see the looks you get.

Keep it real

The main problem as I see it is that we are told how to do things, not the ‘what’ and ‘why’ that are usually associated with them. Any self-respecting programmer will know that you shouldn’t have to write more than one statement to do a basic conditional assignment operation on a variable (sorry, couldn’t think of a better example). The more if-else ladders you form, the harder it gets to understand what the program is finally doing. However, in our classes, it doesn’t matter. As long as the program works, we’re good to go.

What should matter is how effective the program is. We’re taught virtually nothing of time-complexity and considerations when writing code. No consideration of delay due to modules, and forget about portability and uniformity of outputs. And we are in second year of college.

99% of the class loathes having to work on a project (even if it’s in a group), and I know this is not the case just my college. I’ve heard accounts from my friends in other universities as well. A look at the curriculum reveals some problems. But I believe the main problem is not the curriculum, it’s the teachers.

Yep… They’re a bore!

Do they know what’s hip?

With the exception of the IITs, I don’t know any college which invites software-engineers with industry experience. The teachers themselves are not obliged to stay up-to-date on what is happening in computers today. We don’t have the concept of ‘academic papers’ which professors should publish to gain credibility. A degree is what tells us who should teach and who shouldn’t.

If a college can make placements at companies like Microsoft and Sun, why can’t they arrange for engineers from those companies to come and give a 1-2 hour talk on the latest developments, which direction our focus should take and what these companies are looking for? The problem isn’t lack of time, it’s lack of motivation. Everybody needs motivation, especially students. It’s these people that’ll tell them what they should be looking forward to.

Ultimately, the fact is that we’re trying to make better engineers in practical life, not on paper. The closer we keep students to the present computer industry, technology and awareness-wise, the better they’ll do when they’re ready to get a job and start working for real. As it is, computer science graduates need to constantly learn new things in their niche/speciality. I’m sure we can make things easier on them by starting early.

Further Reading

How Should We Teach Computer Science on Coding Horror


  1. The 8086 line from Intel. A microprocessor line that went out of production about 20 years ago. Go figure! 


4 Comments

gravatar

You can see similar problems even from elementary level, ie schools. At school(even 10th grade), we’re taught how to do science experiments, but not much practice of doing experiments happens. Yet, we get more marks for writing the steps for experiments. Sigh!

I can only wonder how horrible computer classes will be in 11th grade.

Btw, would you consider telling me how you have recently dugg list? I see its XHTML, hence not a digg widget . A WP plugin, perhaps? Or your own hack?

gravatar

@Sumesh » It’s actually more interesting in the 11th standard. It’s harder, definitely, but much more interesting. College on the other hand, is a whole different ball game. You’ll see :)

I’ve mailed you the Digg widget code.

gravatar

I absolutely loved Assembly programming; I just don’t have a concrete reason. They are more painful to code, a horror to debug (more so if you don’t know how to interpret the memory address locations and values), but I just loved that.

And if you mean to say (in the footnote) that Microprocessor classes should keep up with the current technology, say Pentium, that’s asking for too much. (Not the school, but the brain) It is tough enough to learn the internals of 16 bits; you want 32 bits? Your head will start spinning in no time. It is much easier to graduate to 32 bit from 16 bit, than jumping directly into 32 bit.

gravatar

I loved assembly-programming too. I just said that it was boring … because of the way it was taught to us. It really tests your algorithm building skills because you have to use the existing resources (which aren’t a lot) in the most effective way. Like they say … you want to really speed up your programs, start at the processor level.

I know 32 bits is hard. After spending 6 months with 16 bits, I know how complicated it can get. My point was that if we’re being taught how to generate Fibonacci numbers, factorials and find the GCD/LCM of two numbers using assembly language, isn’t it better to work with 32 bits, and cut to the chase? If you’re going to teach for concepts, teach something ‘real’.


Leave a comment

You can use all presentational tags, but I prefer if you use Markdown. It's just easier to use.

RSS feed for comments on this post. TrackBack URL

Copyright © 2006-08 Aditya Mukherjee | Valid XHTML 1.0 Transitional Valid CSS!