In a bid to expiate myself, I’m currently reading “The C Programming Language, Second Edition.” Written by Brian Kernighan and Dennis Richie, the inventors of the language, this book is the bible when it comes to learning the language. Most modern languages owe their existence to this one. All modern operating systems are primarily written in C. Most client applications are written with C’s direct descendants. Since I work at a high technology company, it would behoove me to bother trying to learn it again. Most of the high-level languages I’ve used in the past 2 decades cannot match the speed, specificity, and hardware-level capability of C. But these aren’t reasons enough for me to learn it.
When I say “expiate”, I mean to make amends for failing a semester of C in college. In a class of 3 students, it was difficult to stand alongside my classmates and lean on them for support. When they started excelling, I fell behind and somewhere around a month after learning about pointers and indirect references, I just gave up. I swore I’d never bother learning the language again. But that’s all changed now. I could do well if I could wrap my head around it and succeed where I failed before.
What bothers me is I still have a lack of support from my fellow programmers. Even the guys who I thought would support my decision to take up the language again are saying things like, “Man, why are you messing around with C?” or “You must really want to punish yourself.” I say they’re missing the point. I’ve had my time with the high-level languages. I know that I can split a sentence into an array of words in three lines in Perl; I know that doing the same in C would require a bit of memory allocation, a handful of variable declarations, and a set of functions to perform each bit of the search and copy operation. But you know what? I don’t care. I’m getting thrilled with seeing how it all actually happens under the covers of all the other languages.
I want to succeed in this. I want to use C to make stuff that runs fast. I want the chance to flip bits in hardware without needing special libraries. I want to have a shallow learning curve if I decide to go into microcontroller programming. Some people put puzzles together; I have this.