Tuesday, September 27, 2005

As I've made my way from being a greenhorn programmer (It's now around 8 years since I wrote my first C program, and more than 12 since my first BASIC program) to being reasonably competent, I find reading technology-specific programming books less useful. Unless I am doing work with some newfangled technology (or some oldfangled technology that's new to me), I've stopped reading books related to the latest C# fu, or .NET remoting, or managed sockets, or whatever is the newest buzzword in network programming. Books more generally related to programming per se, with insight into general, non-language-specific concepts seem more useful to me. Language and platform-specific books serve as great references, to be picked up when a task is to be accomplished at work(or elsewhere - but I am a mercenary coder right now :-))

I just started reading "The Practice of Programming" by Bob Kernighan and Rob Pike. So far, I've liked concepts put forth in the book related to the real-world practice of writing efficient yet readable and maintainable code. It talks about things like how much commenting in a program is important (my answer: go with what feels right - is fairly close to theirs). Another gem is how using funky operator combinations to do ten things in a single line of code is a bad idea. It will take the reader two hours to understand it, and a day to decode issues with it. The "if A ? A:B" format for a condition in C is as complex as a line of code should get.

I'm still reading the book, and it's been a fascinating one and a quarter chapters so far. Most of these things I've picked up over the course of time, with experience. Some are probably situations I haven't encountered, so knowing the scenario a priori isn't too bad.

Also on the list: The much-revered Art of Computer Programming by Donald Knuth.

While I'm at it, "Code Complete" and "Writing Secure Code" too. It shall all be done. One insight at a time.

Another area that I would like to explore is languages. Being an Electronics student in my undergraduate years and a networking/systems major in grad school, languages/compilers and the evolution of these concepts is an area I've never really explored. I've heard good things about The Design and Evolution of C++ which may be a reasonable place to start.


Ramanand said...

You are reading some good books :-) I have always wished our teachers would read and use some of these books in their teaching. Perhaps a course of the histories and philosophies of CS - I'd sign up.

I would also recommend the art of unix programming by ESR (online at http://www.catb.org/~esr/writings/taoup/html/) even if you don't work with Unix.

Ajay said...

About our teachers, very true.
I too would sign on for a similar class - some very fascinating stuff in the origins of Unix/Linux/GNU et al.

I'd forgotten about that ESR book. Thanks.I started really 'getting' programming first when on Unix at grad school, so no letting that go :-)