learning the lingua franca of cs

January 30, 2006 under Computer Science, Computers, Programming

What’s the best language to learn the fundamentals of Computer Science?

Joel Spolsky is against Java – he posted this a while back. Then I was reading an article linked on Digg by veteran programmer named Doug Ross and he says pretty much the same thing. I will too.

At Lake State, the first programming language that we were introduced to was Borland Delphi (Pascal with RAD features). For a frame of reference, this was 1997. Delphi taught us the bare basics; variables, functions, conditionals and loops. I don’t know if it was possible to fail CS105: Intro to Computer Programming and I still doubt that it was a weed-out class. However, the next course, CS121: Principles Of Programming, was the first of two weed-out classes. This course used C++ instead of what Joel and Doug prefer, C, but not a whole lot is different in an “intro” type of course. Now we were being bombarded with pointers, simple data structures, recursion and a smidgen of OOP. This class was also the breaking point for many; they’d usually change their majors to Math or Business at some point during the semester. I found it hard since I had done hardly any programming prior to switching my major to Computer Science, but I hung in there somehow. The following class, CS201: Data Structures And Algorithms, was the final weed-out class. If you could survive that course and the subsequent math courses, you were pretty much on your way to earning your CS degree.

Now, did I benefit from learning the ugly nitty gritties of Computer Science using a “hard” language like C++ instead of an “easy” one like Java? You bet. Pointers in C and C++ force you to think about what that code that you’re writing is actually doing to the computer. Sure Assembly would really give you insight into what’s going on, but then I find you’re fighting with the language more than learning the basics. Java, on the other hand, is suited for building a cross-platform application quickly and glosses over the fundamentals. I think that learning the basics with C/C++ gives programmers a solid foundation. I don’t particularily like C/C++ for day-to-day use. Up to this point in my career, I’ve never worked on a project that offered me the time and resources I’d need to make a C++ project slick. 99% of time they are rush jobs that are customized for clients and I remember hating the overhead associated with C++ when I didn’t have a choice in the matter. When given a choice nowadays, I’ll opt for languages other than C or C++, if possible. But having that C++ experience is like a badge of honor that you can take into the battles that are real-world software projects, be it with languages like C#, Visual Basic, Java, Python, Perl, Ruby, PHP or whatever.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)
comments: 3 »