Expert Texture Home Contact me About Subscribe Digipede Connect on LinkedIn rwandering on Twitter rwandering on FriendFeed

The blogged wandering of Robert W. Anderson

Perils of poor Computer Science Education — Part II

In Perils of a poor Computer Science Education — Part I, I said that I basically agree with Joel Spolsky in his post, The Perils of Java Schools. I do, but I can’t give the impression that this is the only path to being a great developer.

At UC Berkeley, the classes used Scheme, assembly, other languages, and primarily C. The very first course was nearly all functional programming using Scheme. I think using Scheme had three main purposes: to teach recursion (duh), to expand the students view into other programming models, and take the hot-shots down a peg — it leveled the playing field (a little). Most of the rest of the program was C. Here we used C for nearly everything including, of course, the complex data structures. Yes, lots of pointers.

So were the Scheme, C, and pointers necessary to help me become a developer of production-quality code? How often have I written a hash table for production? Rarely, but I’m way better at what I do because I know how to implement a hash table, and heinous balancing trees that I can’t even remember the names of, and how to debug at the machine level, and what a functional language is, etc.

That said, managed or scripted code is the way to go for 90% of the applications written today. Pointers aren’t so important and the data structures are covered by the frameworks. Clearly this kind of coding doesn’t demand the old-school Computer Science graduate. Merely great C#, Java, PHP, etc. developers run the gamut from important role-players, team members, to team leaders, etc.

I think the most important thing you can learn as a developer is to be flexible. Think outside of the constraints of the languages and tools that you use. If it helps you to learn a different language to enable this, do so. If it helps to go deeper into the runtime environment (e.g., deeper into the CLR or the Java runtime or the compiler / assembler, etc), do so.

Flexibility that is the practical lesson of the Computer Science program.

Tags: , , ,


1 Comment »

    Dan Ciruli wrote @ January 24th, 2006 at 10:12 pm

I’ve enjoyed watching the threads about Scheme. When I took CS 60A at Berkeley, it was Lisp/Scheme. At the time, I had taken classes in BASIC, Fortran, and COBOL. Scheme opened my eyes to a whole new world of development–the recursion, the functions, everything about it. It was amazing, and it really convinced me to become a computer science major.

I never thought about the fact that it was a way of levelling the playing field–I bet you’re right. If they had chosen any other language, some of us would have had an advantage. But no one had been exposed to Scheme before, so it was a better test of how we could grasp new concepts.

I agree that the language isn’t the thing. There is certainly something to be said for being an expert in a language or a technology, but I think that the general problem solving, planning, and development that we learned in computer science are what makes us good developers today.

Your comment

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>