Make sure you're using a C compiler, not a C++ compiler
Here is why not C++: http://news.ycombinator.com/item?id=1463592 and why not java
Edit: Was there something wrong with my comment? Or were you downvoting merely because you disagree?
21–30 of 98 posts
Make sure you're using a C compiler, not a C++ compiler
Here is why not C++: http://news.ycombinator.com/item?id=1463592 and why not java
Edit: Was there something wrong with my comment? Or were you downvoting merely because you disagree?
There's no downside in learning C, and there's not much fluff in the language core to complicate things, or slow things down.
I'd suggest you get a copy of K&R: The C Programming Language and just work through the text and examples. You might also want to pick an existing C-based project and work on bugs in it, maintenance programming being one of the best ways to get to grips with using the key tools, gcc and gdb.
This way you'll get a feel for the language, and also for what you'll need to debug and fix code.
Any language you learn will make learning additional languages easier and faster. But, the boost you get from learning C is arguably greater than for other languages. It's also the single most powerful backup language you can know.
I don't write C for a living at all, but it is great to know how everything is working under the hood, and APUE will teach you that.
To be honest, I wouldn't bother with Java. I think in ten years Java will look like Ada does now: we will all be asking ourselves "What were we thinking?"
I also wouldn't bother working on anything but Unix, but that is just bias...
This, for the same reason you should learn some provisional level of assembler on an older 8 or 16 bit processor with a simple instruction set (intel 8080 or 8086, and then maybe something RISC just for kicks). You don't need to be an expert, just dabble enough that you "get" how it works.
Also learn how to implemenet a few other progrmaming patterns in C - you can do OO in C, you can do functional in C, you can do concurrent in C. You likely won't have to in real life, but understanding those concepts at the level of C will really help you understand the benefits of higher level languages.
I'd say the same for any of the Lisps - learn one, even if you'll never use it - the insights it gives you are worth it and will make your other code better.
One thing you might want to look at is cython[1]. It allows you to write C extensions in a Python-like language. Could be useful as a "bridge".
If you ever have to do low-level programming or Mac/iOS development it will definitely be of great use.
Think of it this way: Why not learning it?
Absolutely, yes. + From the point of view of Python or Java (say), it's close enough to assembly language to let you understand how things might work; + If you need speed or control over hardware, sometimes it's your best route to extend whatever you're working in; + In many jobs you'll be the only one who has the knowledge to do unusual things, hence you'll be more valuable; + It gives you another point of view when…
A lot of people take the route of not learning C. If you do web development and your team finds something hard or impossible to do, watch their reaction when you say "I'll just write a C extension." The stack-frame comment is spot-freaking-on. Knowing this level of detail will make you a way better programmer in every other language because you won't make stupid memory hogging decisions or mistakes. You also understa…
I'd never heard of Pintos before. This looks like something I'd really enjoy working on, thanks for bringing it up.