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.
3 Responses to "learning the lingua franca of cs"
“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”
I think thats applicable to any project regardless of language.
Indeed it is.
However, I meant that 99% of the time, my jobs are rush jobs and not that 99% of my work is C++ rush jobs. Thankfully, because of welcome change in the API I use at work, C++ projects a becoming rare.
Those projects that require C++ make it un-fun. Given the task of creating an application with a dialog as the GUI, I am much more productive with C# or Visual Basic than I am with, say, C++ with MFC. Oh, the C++ application would probably run a bit faster and have some pointers strewn about resulting in swift yet tricky-to-read code, but I’d get the job done sooner with C# and the speed difference would be negligable. I’m not folding protein chains 😉
I am a fan of knowing how something works. In C#, or any .NET language, I would quickly reach for the StringDictionary class of the System.Collections namespace when I need an associative array. However, knowing how to implement a hash table in C/C++ helps understand how that StringDictionary class works in the first place.
Pings responses :
Dave
Interesting topic… I’m working in this industry myself and I don’t agree about this in 100%, but I added your page to my bookmarks and hope to see more interesting articles in the future