Err malloc, free, pthreads are all abstractions and are not black box generally. You can look in them and find out what the hell is going on if you need to.
C is great at networking (sockets), concurrency (pthreads), security (brain) and readability (brain). If you know what you are doing. The same is true with any language. You can write shitty C# and JavaScript.
I agree entirely with this. I am not intending to start a flame war here, but this is how I see it:
My rationale is that C/C++-based software powers nearly of all computer CPU cycles these days either directly or indirectly.
From mobile phones to massive distributed systems like Google, it's there. It's probably even there in your fridge or smoke alarm these days albeit somewhat feature constrained.
For the Ruby, PHP and Python users, most of your language is written in C!
The .Net framework is mostly C/C++ underneath (Google for shared source CLI). Even the C# compiler is written in C++.
Java is mostly written in C as well.
The iPod software is written in C (not it's not objective-C - check out the About/Legal section for the libraries it uses).
Objective-C even started as a load of C preprocessor macros.
Ultimately, C/C++ is the foundation of the most software in frequent use, the Internet and our society. That's why they should teach it over Lisp/Scheme/Smalltalk/etc etc.
> Objective-C even started as a load of C preprocessor macros.
So did C++, IIRC.
{edit} To add a bit more than a one-line comment, it seems to me that the gist of the article was that young programmers should be exposed to a wide variety of different programming paradigms. (i.e. functional languages, procedural languages, etc) Teaching only C and C-like languages is encouraging a monoculture. It doesn't matter whether or not they will use Lisp or SmallTalk in the real world. The idea is for them to come away with ideas and concepts they would not have been exposed to otherwise. I mean this is a university and not a vocational school. I would expect university students to be exposed to more ideas (even if they are ideas that never get commonly applied in the real world) than someone coming out of a vocational school. {/edit}
The problem with a university education is that it is becoming less relevant. A formal education doesn't necessarily teach people to deliver software, which is critical for the captialist society we live in to operate.
A monoculture is seen to be negative due to this insane emphasis on diversity recently. Diversity generally hinders resource pooling which is what allows monumental things to be created.
For the record, I am a pure autodidact with no formal qualifications.
I'm not necessarily saying that people need to have a university education to be a productive member of the tech/developer community. But I believe that without a diversity of ideas, the tech community will languish.
Requiring a university education for everyone isn't necessarily the answer, but neither is diluting a university education by turning it into a vocational curriculum.
"For the Ruby, PHP and Python users, most of your language is written in C!"
Are you seriously trying to suggest that understanding the concepts behind C teach you the concepts behind how Ruby works, just because Ruby has a runtime written in C? If not, what are you getting at?
"That's why they should teach it over Lisp/Scheme/Smalltalk/etc etc."
Are you seriously trying to suggest that Computer Science students should learn only one language, or only closely related languages?
That is the part that bugs me. That GT is deciding that their Computer Science students are too dumb to learn more than one kind of language. I wish someone at that school had read Joel's rant about "Java schools."
> Are you seriously trying to suggest that understanding the concepts behind C teach you the concepts behind how Ruby works, just because Ruby has a runtime written in C?
That sounds reasonable to me...certainly not ripe for a "seriously?" label. Of course knowing C would help one to understand how Ruby, Python, etc. work, just like knowing assembler helps one to understand what C is doing. Rich languages like these don't just happen out of the blue.
You need to understand C to understand how Ruby works via observation. Observation and reverse-engineering visually is more important than you think. Understanding programs and being at one with them is the true path to enlightenment, not poking several different languages down your throat.
They should however understand theory and implementation separately. Implementation should be the most common form.
People forget that you need a job when you leave university.
> C/C++ is the foundation of the most software in frequent use, the Internet and our society. That's why they should teach it over Lisp/Scheme/Smalltalk/etc
But maybe this is like saying that the oppression of women is the foundation of our households, economy and our society. That's why they should teach it over justice/equality/common sense.
But maybe in school they should at least give one a glimpse of other possible utopias....
I think the people who buy enterprise software should read this. It's about "how to get raped" and can teach you some policies to counter things like this.
They also forgot: Try doing a cash back-hander to the CTO, which is considered almost standard practice in the consultancy business in the UK. I could name some rather big names on that front.
Best buy (which I will get flamed off the site for): Buy SharePoint, MS CRM and a number of Office licenses and hire a couple of decent people permanently to look after it and build your apps on it. It's cheaper and you get what you want, according to your schedule.