Learning C

My first assignment at Georgia Institute of Technology was written in C. I thought I knew enough about C to get by on a simple project involving network programming using sockets. I was wrong. It is simple enough to learn the basics of C, but the basics are very shallow. Memory errors plagued me. I did not fully understand what the machine was doing with my code.

After a couple of years of lightly using C, I still only know some basics, but in the meantime, I have learned more about compilers, assembly, memory management, etc. Now that I am between classes for a couple of weeks (I just finished Advanced Operation Systems last night), I've decided to read a few books about C on O'Reilly Learning. This is not an advertisement for O'Reilly, but I highly recommend using their service. I get it free through work and school. I still will not have the professional experience required to get a job programming C, but now that I know more about how the machine works, the books can fill in some gaps.

I've realized that superficially knowing a few languages (being able to get by by searching some syntax) is different from deeply understanding one language. It seems like those who know a lot about one language also tend to understand other languages better, even if they don't use them every day. Learning just a little C for class has given me a better understanding of other languages, namely C++ and Go. In addition to C, I am also interested in learning more about Valgrind to find memory errors and using a command line debugger.

In my day-to-day job, I use Go, which is simpler for memory management because it is a garbage-collected language. You still have to be careful, though - especially with shared memory.

I don't currently have any specific projects I am planning for C, but last year, I got an entry-level electronics kit with a Raspberry Pi for the holidays. C may be great for that. In the spring, I will be limited on time; my next class has a reputation for being difficult and taking all your spare time (unfortunately, it is in Java, not C), but possibly next summer, I can build a little robot using C.

Please let me know if you recommend any books or courses to learn C at a more advanced level. Hopefully, this adventure will spark some ideas for my next blog - is there anything you are interested in seeing?

Subscribe to Stidd's Journal

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.