Thursday, October 12, 2006

Great Programmers Answer

Great programmers answer a young programmers questions. He basically emailed a set of questions to some fo the most famous programmers of our time and collected their answers. It's an interesting read.

Hm, I don't do surveys' much but I thought I'd answer these myself.

- How did you learn programming? Were any schools of any use? Or maybe you didn’t even bother with ending any schools :) ?


I first learned to program by reading a brochure on an HP-25 calculator which had a program for something, maybe parametrically plotting a circle. Later, as a college student I owned an HP-25 and later HP-25C, calculators and learned to program them. I also took FORTRAN and a number of other programming classes in undergraduate school.

- What do you think is the most important skill every programmer should posses?

I think it's the ability to figure out an algorithm for solving a problem, then converting that algorithm into a program. Over time, one builds up a collection of learned algorithms which can be applied over and over.

I also think being able to break a problem into manageable chunks is important.

- Do you think mathematics and/or physics are an important skill for a programmer? Why?

I personally think both are since almost all of my education is in physics with the accompanying math. I use them both on a regular basis in my work. Solving systems problems is very often a matter of collecting and analyzing data. Knowing how to manipulate data, and plot it, and how to do things like integrate over particular variables, etc., are important in getting to a picture of what's going on.

- What do you think will be the next big thing in computer programming? X-oriented programming, y language, quantum computers, what?

I think computers may change in a very fundamental way, in the way the personal computer somewhat changed our world. I'm not sure what the next thing will be, but I suspect it will have to do with being small, portable and ubiquitous. Cell phones, MP3 players, PDAs and UMPCs all seem to be sort of moving toward something. I think what they are moving toward may be the next big thing.

In actual programming itself, I'm not sure. OO programming was a major shift in how to think about things for me. Something along that line would be big but I'm not sure what it would be. Some new paradigm.

- If you had three months to learn one relativly new technology, which one would You choose?

I might learn more about the world of Java and the endless variety of tools that surround it.

- What do you think makes some programmers 10 or 100 times more productive than others?

I'm not sure about this, really. Probably things like having a good set of patterns in their head that they can draw on, familiarity with a number of tools, knowing their environment and tools well—being skillful at using them. Having good collections (libraries) of reusable code!

Once you have all of these things in place, you can assemble new programs by just putting the pieces together and you can do it reliably and quickly.

- What are your favourite tools (operating system, programming/scripting language, text editor, version control system, shell, database engine, other tools you can’t live without) and why do you like them more than others?

  • OS: UNIX, Linux, currently Ubuntu
  • Programming lang: Perl
  • Scripting lang: Perl
  • Text editor: GNU Emacs
  • Shell: Bash
  • dB: MySQL
Ubuntu gets the desktop right and it's built on Linux which is a form of UNIX. I've never enjoyed a programming language as much as object-oriented Perl. GNU Emacs is the most wonderful editor.

- What is your favourite book related to computer programming?


The book that probably had the greatest impact on me was Niklaus Wirth's original book on Pascal, User Manual and Report. I fell in love with Pascal reading that book, and with structured programming in general. Years later, Turbo Pascal on an early PC was a wonderful programming environment.

Another book that had a great effect on me and my career was Kernighan and Ritchie's C book. I actually read it twice before ever writing a C program, because I didn't have access to a UNIX system or C compiler.

- What is Your favourite book NOT related to computer programming?

There are many. I always liked 2001: A Space Odyssey.

- What are your favourite music bands/performers/compositors?


I like all kinds of music ranging from classical to jazz to progressive and popular rock and pop music. My favorite band of all time is Emerson, Lake and Palmer. I also like Pink Floyd and Yes, the great progressive rock bands of the 70s. In the classical genre, my favorite is Baroque music, e.g., J.S. Bach as composer. Also Aaron Copeland. Many, many others.