3 ms·
I do think there is some value in learning C (and Assembly), but it should definitely not be the first language you use. How most colleges seem to work these d
by morgante 12y ago
I do think there is some value in learning C (and Assembly), but it should definitely not be the first language you use.
How most colleges seem to work these days is that your first 2 years or so are nearly all Java or Python. That makes total sense: at this point, you're learning conceptual techniques (algorithms, data structures, etc.).
C is introduced through an Operating Systems course, and there its value is absolutely apparent. The big problem though is that C and OS are hard. Without the compulsion of a grade, I almost certainly would have given up dozens of times, even though looking back I truly appreciate the course. While I've never touched C in my professional career, that one course was enough for me to reason about the impact of OS choices on my programs. Unfortunately I don't think 99% of "self-taught programmers" will ever bother to struggle through OS because it's very hard and there's no immediately obvious gain.
- tptacek 12y agoWhy shouldn't C be the first language people learn? It was the first language I learned, by myself, and I promise you that I'm not a particularly smart programmer. If there's value in understand how a program actually executes on a computer, why not teach that at the same time as "loops and functions"?
- Klinky 12y agoIf we're talking about general educational courses, then accessibility is important. Dynamic object-oriented languages can offer immediate feedback and gratification which can feed into keeping students engaged and motivated. There is also something to be said about the low-level features of C not being as important today as they once were. Many people make their living in languages that don't involve low-level access at all, and may even go their entire lives relying on a garbage collector. C offers freedom, control, understanding, but those features held as virtues by some feel more like busywork and bookkeeping to others.
- tptacek 12y agoAre we talking about vocational training or computer science? If the former, Python or Ruby is probably all you'll need.
- Klinky 12y agoI think we're talking about first languages, which many people will be introduced to in either college, advanced placement courses, or standard high school classes. The USA has generally poor vocational training opportunities, especially for coding. If we're talking about learning a language on your own, there is no way to force anyone to learn the specific language you want them too, so going down that rabbit hole seems moot. Some people will have the drive and opportunity to learn to code in C, just like the author had his father's car with a manual transmission and parents who forced him to learn how to use it. However, not everyone is coming from the same background. Joe Nerd Jr could probably start with C. Joe Public Jr probably needs an easier introduction. We don't have med students immediately dissecting cadavers, nor do we have basic math classes that start you off with calculus. While some people will feel starting with these advanced classes makes you understand the subject better, many people will bomb out completely and become alienated with the topic. Perhaps some like the concept of survival of the fittest, but it may not be beneficial to society in the long run. Most computer science students end up in the programming field. They do not stay in academia perpetually. Usually if someone wants to become a pro coder, they're told to go get a BS in CS. We could debate what a True Computer Scientist is, but in the end most people are there because they like technology and want a well paying job. Some just won't be hardcore enough for some people's liking.
- tptacek 12y agoWait, we do have med students dissect cadavers immediately, right? Anatomy lab is a year 1 course.
- aroberge 12y agoI don't know about the country where you live but in Canada, student take some anatomy and physiology classes first before they are admitted into a medical program, and they certainly do not dissect human cadavers in those anatomy courses.
- morgante 12y ago> If there's value in understand how a program actually executes on a computer, why not teach that at the same time as "loops and functions"? Because that's doubling the amount you have to learn in early CS courses. Most students already struggle with wrapping their heads around basic programming, algorithms, and data structures. Adding the challenges of pointers, memory allocation, etc. into the mix can only drive up dropout rates. I don't think anybody should graduate with a CS degree if they don't know C, but I also don't see any value in forcing them to learn it first.
- pbhjpbhj 12y agoI've only done a UK Diploma in Computing, and then only as a part time course (OU), however we started with C and a hardware module (temperature sensor connected by parallel port - that dates it, though they were on their way out - IIRC it was the last year they used that module) and learnt binary operations, some assembler, memory addressing schemes and what have you. It was a great way to introduce the computer as a general purpose device and be able to link the computer language back to assembler and machine code and ultimately to physical operations on binary data within the processors and memory/RAM. The other modules I took covered OOP using C++; Smalltalk, SQL, db design (JNF and all that jazz). We're going back more than a decade here so no doubt there was a whole heap more too. Personally I liked starting with the hardware, jumping in with C and then linking the two together. Gave a good basis to understanding computers, I think that first module might have been called something like "understanding microprocessor based computing".