Ten questions

Jaroslaw Rzeszótko sent a list of ten questions to some of the best known programmers in/on the net1. It was a great idea, I love it. The questions are very basic, but what else would you ask? Anyway I started to answer them myself, so here they are2:

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

I taught myself GWA Basic on an Atari ST 2600. After I got a PC I started working with Turbo Pascal, Borland C++ and even Assembler.

Then I chose a technical school (HTBLuVA Villach) where I’ve been re-introduced to programming, this time in a more systematic way. We were taught C, C++, Cobol (CICS), Assembler and Java which was very, very good.

Now I’m happy that I was forced to learn Cobol and programming for the Windows using MFC since I would have never looked at it (and hopefully never have to do so again).

Later I went to the Technical University of Vienna. I’m not very satisfied with it’s introduction courses in programming (if I had to do them, I wouldn’t know much about programming), but the advanced courses are pretty interesting and challenging.

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

Personal view: Communication abilities
Esoteric view: Focus and taste

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

I don’t think that physics is an important skill for programmers. Of course, everything you know helps you in some way, but we (as programmers) live in a idealized world where the laws of physics are abstracted. I think biology would be much more important than physics (think of genetic algorithms, cellular automata etc), but that’s only a guess.

Mathematics is very important, it’s hard to explain, but it gives you the ability to analyze your programs in a easily reproducible manner. If you know math, you’ll stand out of the programmer mess mass.

If you had three months to learn one relatively new technology, which one would you choose?

Currently I’m on the Web-side of life, so there is a lot I’d like to know and learn:

  • Compilers are always a hot topic for me.
  • Mobile computing will be big in the future.
  • Game-development for consoles, handhelds or even PCs would be cool too.
  • Artificial Intelligence and Desktop programming (on the Mac) are also interesting candidates.

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

Honestly I think the most important habit is to keep learning and adapt to changing environments (call it requirements). You can be pretty fast by practicing bad habits, but learning new techniques will boost you in the mid/long term.

What are your favorite tools and why do you like them more than others?

  • Operating System
    • I’m currently a big OS X fan, it gives me a Unix OS with commercial support and applications.
    • Linux, because it had the biggest impact on me in my “early days”.
    • Certainly not MS Win. I don’t know why, I just don’t like it. Maybe because “everyone” has it.
  • Programming Languages
    • For Web applications and scripts
      • Ruby it is a lot of fun and gives you immediate satisfaction. Python and Perl didn’t win my heart.
    • For larger programs (like my IMAP4 and POP3 Server)
      • Java because I’m very used to it and too lazy to learn equivalent programming languages like C#. C++ is the only language I know knew well enough to compare it with Java (I know these two languages far longer than all other languages combined).
    • For Desktop applications
      • Sadly I don’t really know much about it. Java is no option (IMO), and my last native desktop applications (written in C++) is about seven years old. I guess I would choose Cocoa, C or C# depending on the operating system (Mac OS X, Linux, or Windows respectively).
    • Functional Programming (I really like this style)
      • Haskell has many interesting ideas and is very powerful. Lisp/Scheme are nice too, but I’m more into Haskell.
  • Text Editor
    • TextMate it made me dream – you can still make money with a text editor.
    • VIm (although I could use some practice with it) because it is omnipresent.
  • Version Control System
    • Darcs innovative and intuitive.
  • Shell
  • Database Engine
  • Other tools
    • Firefox it’s extensible and does it’s job.

What is your favorite book related to computer programming?

I really like Donald Knuth’s The Art of Computer Programming 1-3. I never finished a single book of this series, but I know that Mr. Knuth put a tremendous amount of work into them3. They simply have the touch of “old school” and superiority.

I also love Test Driven Development by Kent Beck. It’s only a small book but had a huge impact on my programming style.

Then I’d like to include Agile Software Development. Principles, Patterns, and Practices from Robert C. Martin which gave me an idea what “professional software development” could be.

More on the “soft” side is The Pragmatic Programmer from Andrew Hunt and Dave Thomas.

What is your favorite book NOT related to computer programming?

Fiction Neil Stephenson’s “Cryptonomicon”:
Non-Fiction Edwart Tufte’s The Visual Display of Quantitative Information
Soft Skills Tom DeMarco, Timothy Lister Peopleware

What are your favorite music bands?

System of a Down, Pearl Jam, Alanis Morissette…

1 I think only because they are very present in/on the net, they are not necessarily the best programmers in the world.

2 Please not that I don’t consider myself anywhere near the people Jaroslaw asked.

3 Almost any hard problem is scared only by opening one of them.

If you hire people for their brains, you can’t treat them like modular components and expect an able, creative crew to emerge. That’s the basic message in Peopleware.
— PC World about Peopleware