I feel this is one area of my computer science education that is rather weak. The years I spent in schooling learning C, C++, or another derivative, either my teachers / professors really didn’t teach it well, or were only around of half a semester. Truly, computer science teachers when I was in school were the “professor of defense against the dark arts,” as they were always changing, even mid semester.
Also, I’ve never had a very strong need to learn C. Almost all of my work is web based, and so traditional LAMP skills were more than enough. However, things are changing in the industry, and there are a few reasons why I want to polish up on my C and re-learn it.
First off, there are a lot of new, cool technologies coming out for web development. The whole NoSQL concept and the different solutions for it are being written in C based languages. Even after all these years, many are being written in C. Now, I doubt I would be willing to write my own NoSQL solution when there are great ones out there, but I would love to contribute bug fixes, or be able to read and understand on a lower level how they work.
Second, I’ve been cautious or nervous compiling my own binaries on Linux. Almost always, if a new PHP release came out, I would want to wait for my distribution to release and update. Sometimes, that can be months, and even years. By learning C and learning more how it works, I hope to be able to compile my own binaries when needed, and not feel so hopeless if something breaks.
Third, PHP is written in C. There have been times where I’ve wondered exactly how a specific function or worked, or have found a bug I would love to submit a fix for. Its amazing how large the PHP community is, and yet how few contribute to help. I would love to become a code contributer, and learning C is a prerequisite definitely. Also, with web development and PHP, sometimes certain tasks could be performed much quicker when compiled, such as the score generation system for Dating DNA. It would be great if I could generate millions of compatibility scores at a C level, instead of just in PHP.
Fourth, is iPhone development is not going anywhere but up. We pay the bills and more with our iPhone sales for Dating DNA and Clipish, and having the option to do some iPhone Development when needed would be great. Granted, iPhone Development is done in Obj-C 2.0, but when I first tried iPhone development, almost every single one of my problems were from a fundamental lack of understanding on how Obj-C 2.0 worked. A better of understanding of C would help me greatly in this.
Firth, it would just be good to learn. Even if I don’t use it a lot, learning the programming language that is used by so many of my tools would be great. So, along side my posts on Redis, PHP, and web service development, you might be seeing on beginner information on Learning C.
5 thoughts on “Goal for 2011: Learn C”
Well, I certainly didn’t see this post coming. C is great, but let me recommend just one step up with C++. I only say that because once you understand C++ you will most definitely understand the semantics of C and the knowledge gained will span across many other OO variants (i.e. Obj-C, Java, C#, etc.).
Anyway, that is just my two cents. If you would like I could certainly recommend a C++ book. Good luck and keep us posted on your progress. It would be interesting to read.
Doing a build of PHP from source doesn’t require any knowledge of C, so that’s something you can try out right now.
I’m probably biased because of my history, but I consider C a good foundational language for programmers. Most will move on and likely use it very little, but the concepts will still be lingering around, which can be helpful in understanding how other languages work.
Well, the two big reasons for learning C at first and not C++ off the bat were PHP and Redis, both written in C. I am approaching it more from a fundamentals perspective rather than to actually produce a lot of code. But I’m hoping to use it more as a stepping stone for maybe some C++ work, and definitely Objective C.
But I’d definitely be interested in a good C++ book, since I might be doing some work in it. We’ll see.
My only complaint with learning C is its procedural nature. Sometimes learning C will hinder thought in OO principles and design later on. I’ll get off my soapbox now. Either way learning a new language (or buffing up on a long forgotten one) is always a good idea.
Your post has served as inspiration for me. The language I’m choosing is Ruby. It is the fad and it was created by a Japanese *Mormon* (http://bit.ly/fUHvFM) so what more reason do you need, right?
Here are my book recommendations for C++:
– Object-Oriented Programming in C++ – By: Robert Lafore (http://amzn.to/hbd5kS)
And as auxiliary books these are great:
– Effective C++ (http://amzn.to/eoHiqs)
– Effective STL (http://amzn.to/gJdUjV)
– Design Patterns (http://amzn.to/gklFM0) … This one is a must in any developers library.
Oh, and one last book that is free/electronic:
– Thinking in C++ – By: Bruce Eckel (http://bit.ly/e4HScW) [I’ve never really read this one, but they say it is good.]
Good luck carnal!