LWN.net Logo

Where have the universities gone?

Where have the universities gone?

Posted Jul 25, 2007 4:09 UTC (Wed) by mikov (subscriber, #33179)
In reply to: Where have the universities gone? by ms
Parent article: Where have the universities gone?

Let's be objective here. Today knowing C is one of the most fundamental requirements for being a programmer, software engineer or a CS. C may be a terrible language (in certain contexts), but _everything_ is written in C and there is no way (in hell) of achieving an understanding of how computers work today without a very good knowledge of C.

Let's be practical. Regardless of our opinion of C (I am not a big fan :-), I see zero chance of this changing, say, in the next decade.

For example even when our company is hiring Java programmers, they wouldn't touch one who doesn't know C well with a ten foot pole.

So, if teachers and students in universities don't know C well, that means only one thing - that they are both sadly incompetent.

I remember my own unfortunate CS education 12 years ago. We hard courses in ML, Pascal and a tiny bit of C and C++. It was ridiculous, and I can say outright that I learned zero about programming during my days in the university. Today there are just a few of us, from the entire class, that work in the field of computers at all, let alone as programmers.

In my opinion nowadays it is far too late to learn how to program in the university. I don't think it is something that can be _taught_ from scratch. Obviously most good programmers who now are in their 30s started programming much earlier on their own. (It wasn't like that for previous generations, as they simply didn't have access to computers that early)


(Log in to post comments)

Where have the universities gone?

Posted Jul 25, 2007 6:18 UTC (Wed) by khim (subscriber, #9252) [Link]

So, if teachers and students in universities don't know C well, that means only one thing - that they are both sadly incompetent.

Why so ? C is easy, almost trivial. The CS is hard. Pointers are hard (and you can conjure classical pointer-related problems in FORTRAN with one array). I know of one guy who was hired as C++ programmer by Google who knew nothing about C (let alone C++) - but he knew CS, Pascal+Assembler and little Lisp. And Google's standards are pretty high.

I remember my own unfortunate CS education 12 years ago. We hard courses in ML, Pascal and a tiny bit of C and C++. It was ridiculous, and I can say outright that I learned zero about programming during my days in the university.

That's not a problem of language. The important courses learn about algorithms and basic principles. You can learn any language by just buying book and reading it. But paradigms - these are harder. These must be taught.

Where have the universities gone?

Posted Jul 25, 2007 6:29 UTC (Wed) by roelofs (subscriber, #2599) [Link]

Today knowing C is one of the most fundamental requirements for being a programmer, software engineer or a CS.

Absolutely. And I'd add that knowing assembly language (for any processor, not necessarily x86) is a highly desirable bonus; if you don't have a clue what the compiler is doing under the covers, how are you going to understand even basic performance issues like branch (mis)prediction and so forth? Hearing about them in some lecture is one thing; understanding what's going on at a gut level is entirely another.

It's sad that one of my standard interview questions, involving a certain aspect of CPU architectures, is known to no more than 25% of interview candidates. Assembly programmers would tend to do much better on it, I suspect. (I should go back and correlate resume skillsets with performance on that question and see...)

Greg

Where have the universities gone?

Posted Jul 25, 2007 7:01 UTC (Wed) by ms (subscriber, #41272) [Link]

if you don't have a clue what the compiler is doing under the covers, how are you going to understand even basic performance issues like branch (mis)prediction and so forth? Hearing about them in some lecture is one thing; understanding what's going on at a gut level is entirely another.

I fail to see how that has anything to do with C. I've done two courses on hardware - I have the P&H and the H&P books on my shelf and I've read them. I can talk for hours about the different types of branch prediction, superscalar design, different tradeoffs in cache design etc etc etc. I've written compilers. I can recite algorithms for garbage collection.

But I would not claim to have any knowledge of C. Some of the brightest programmers I know are similarly inclined. The London Banks certainly don't care about knowledge of C and I can't think of many companies in London that really do...

Where have the universities gone?

Posted Jul 25, 2007 16:53 UTC (Wed) by mikov (subscriber, #33179) [Link]

There are exceptions, of course. Perhaps for financial programming in Cobol, or for mainframe development, or simply for very smart people who can grasp the principles without actually using them, etc.

But look at it this way: 99% of all PC software, not to mention _all_ PC OS-es, system libraries, etc, are written in C or C++. Can you explain how someone can understand and program reasonably in this environment without knowing C ?

Additionally, C is not _that_ hard. Refusing (or worse - not being able) to learn it, strikes me as very surprising given C's absolute dominance. One doesn't really need to be a C wizard. It is like not being able to read, because there are audio books. Or like developing software without having any knowledge of English. Simply cannot happen.

You say that you don't know C yourself, but I strongly suspect you actually do. Even if you don't actually develop software in C, you probably can read and understand C source code, no ?

On a practical note, what language would a hypothetical professional programmer in a PC environment use ? There are not that many choices. Further, it is actually impossible to develop any sufficiently complex piece of software in a different language without ever falling back to C. C#, Java, Python, Lisp, Haskel, ML, whatever - none of them have 100% of libraries and operations that would ever be needed.

Where have the universities gone?

Posted Jul 26, 2007 4:29 UTC (Thu) by roelofs (subscriber, #2599) [Link]

I fail to see how that has anything to do with C.

Perhaps you missed the first response to your comment: C is pretty much high-level assembly language. I further opinionized that assembler itself is a highly useful thing to know, and then connected that to a more fundamental understanding of the underlying hardware.

I can talk for hours about the different types of branch prediction, superscalar design, different tradeoffs in cache design etc etc etc.

That's wonderful, but it's also highly unusual, in my experience. Most CS grads (or whatever, but looking for a job that includes doing high-performance system programming) do not have that background--or, if they do, it's all theoretical, and they're unable to make the connection between the hardware concepts and actual code. It's lamentable, but I can't say I'm terribly surprised; others have written about it over the years, and I've personally witnessed an analogous phenomenon with EEs (i.e., graduating without ever experiencing a hands-on, Horowitz-and-Hill-style lab course).

The London Banks certainly don't care about knowledge of C and I can't think of many companies in London that really do...

Banks are a world unto themselves, so that doesn't surprise me. Other companies? That does, but perhaps London really is unusual in that respect. Silicon Valley jobs (beyond scripting/web development) tend to emphasize C/C++ and/or Java experience, with less-frequent mention of C# and other languages. (Of course, maybe we're the weird ones...)

Greg

Where have the universities gone?

Posted Jul 26, 2007 11:08 UTC (Thu) by nix (subscriber, #2304) [Link]

London banks definitely do care about C. A lot of new code is written in Java, but C is still heavily used (and not just for legacy stuff, either).

The employment phase often emphasises Java because it's a buzzword, but get down to the actual work and C is still everywhere.

Copyright © 2008, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds