Sunday, January 03, 2010

Finally finished reading Coders at Work

This was a fascinating book, basically interviews with notable programmers, there are a bunch of reviews out there that will tell you why you should read this book if you write software for a living. Here's one that I liked.

I just want to write the snips and pieces that stuck together, some simple things I had heard before, others were new and unexpected. There isn't any structure to the ideas I have so I am going to put it in list format:

1. Lisp

I was a bit surprised to see how many of the programmers that were interviewed for this book were lisp developers, after all, Lisp is not as widely used as Java and C++, but then I found out that the author Peter Seibel also wrote a book titled "Practical Common Lisp" so that kind of explains it. I guess the message that I get from all these Lisp hackers is that the perfect programming language well, not perfect, but the most advanced programming language was actually invented first, but it was not adapted for reasons x, y and z. So these inferior things came along and became popular, programmers who don't know Lisp just don't get it. Of course I am exaggerating a bit here, but the point I am making is that Lisp is not what gets used in the industry. However, it aroused my interest, and I think I am going to look into it. I started by reading some wikipedia articles, but I can tell this is going to be an intellectual challenge, I can't say I understand lamda calculus yet.

This is the starting point from my Lisp endeavors. (It's a bunch of free Lisp resources in the web, gotta love the internet.)

2. Is Programming an Engineering Discipline, an Art a Craft or a Science?

It can be argued that Computer Programming is all the above and more, it can be approached as an Art the way Picasso approached his paintings or the way Hemmingway, Tolstoy or Dostoevsky approached writing prose. In the other extreme there are those that say that we should build software the way we build bridges, there's a formal process and bridges don't fall, well, with some exceptions in Minnesota.

Personally, I am aware that Programming is craft that it's a bit different than building bridges, engines or any other physical thing, software is more like math in the sense that it's is made up of thought stuff, it's more abstract ideas, A "program" is just a bunch of instructions. I always think of it as writing a recipe for a very very dumb cook. Great Programmers can combine characteristics from all of these approaches and create great software.

I think that all programmers should treat it as a craft and therefore should practice and sharpen theirs skills constantly, I think that just learning enough to do your job is a grave mistake, programmers should always try to improve, to grow, to push their limit.

However, I agree that Software Engineering should be formalized, we should find out the things that work and stick to them, but we need to understand why it works and we need to be flexible to accept and try out new ideas.

This field is so young, we've only been programming computers for about 60 years, that's nothing compared to the 2000 + years that we've been making buildings, for example.

3. Is programming a young person's game?

Some people would say it is, I think that you gain so much wisdom with experience that an older person can still make huge amounts of contribution. I do see how a person with a lot of responsibilities and commitment outside of just writing code would have a lot less time to sit there and code for hours and hours continuously. This is why I am having such a hard time developing apps for the Iphone, I just don't have the time to sit for 20 hours trying to put something together, specially in the beginning when there's a learning curve to get over.

4. Don Knuth is a bad-ass

This I already knew. If you can read and understand the Art of Computer Programming, you know what you're doing.

5. What books to read?

The author asked this question to all the Programmers interviewed, there were a variety of answers, not much overlap, among the books that I have read was Code Complete and Zen and the art of motorcycle maintenance, and Design Patterns, there are some books that already were in my list of books to read, like Structure and Interpretation of Computer Programs and the Red Dragon Compiler Book.

Other books have been added to my list like the bit twiddling book "Haker's Delight"

Read Source Code

It's amazing how many other programmers stress the importance of reading other people's code, not only to educate one's self to seeing how an interesting program might work but also to force yourself to understand what another mind was thinking when they were solving a particular problem. This leads to an expansion of the imaginations and provides tools for future use.

Overall, nice book. Highly recommended.


1 comment:

Froyd said...

Re: Lisp - Back in the day before I switched from Comp Sci, our prof had us do recursion with Lisp for a few assignments. Unless things have changed in a few years (doubtful if Lisp is still being utilized) this was the program that was most useful for working on Artificial Intelligence due to the powerful way it handled recursive functions.