Friday, January 29, 2010

What I am reading

Lately I've been busy, (what else is new?)

I am supposed to be 50/50 between two projects, but in reality is more like 100/100, working a lot of hours.
I am taking Wireless Communication at UF, this is my last Communication Class, after this I have two electives and a math class and then I am done with the master's. I am trying desperately to get an A. I have a 2.91 course avg, I am not that worried, I am not ashamed of that GPA either, in fact, I am darn proud that I can go to school while holding a full time job and fulfilling the role of being a father and a husband.

I wouldn't trade them for anything in this world.

Anyway, I have a long book queue that I am trying to get trough, but at the top of the queue are two books that were lent to me by good friends.

I am reading The Name of the Rose by Umberto Ecco, It's pretty awesome, the made that movie in the 80's with Sean Connery based on the book, and as always, the book is much better, I am 200 pages into it. It's going slow because of what's in the first paragraph of this blog post.

Right behind in the queue is Parenting Beyond Belief, it's about Raising Ethical Caring kids without religion. It's a series of anecdotes and essays about the tough job of being a parent, for people who choose to be superstition-free.

Speaking of religion, I am reading the transcripts for a History of the New Testament class from Yale University Open Courses, they are going over Bartman's book. Very interesting, I am in lecture 16.

I am reading Steve Yegge's Drunken Blog Rants, awesome. blog. period. It's a programmer who used to work at Amazon and basically drinks a lot of wine and rants, he is full of great insight with regards to the craft of building software, good stuff.


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.