Are you the Trevor Blackwell I met at X?
Here are some times and places you might have met me: Saskatoon, (1969-1985), Ottawa (1985-1993), Gloucester High School (1985-1988), Carleton Unversity, B.Eng (1988-1992), BNR/Nortel, Ottawa (1988-1993), Harvard University, Ph.D in Computer Science (1993-1998), Viaweb (1995-1998), Los Altos, CA (1998-2005), Yahoo (1998-2001), Mountain View, CA (2005-), Anybots (2001-), Y Combinator (2005-).
You might have seen me talk at: Stanford University (2003, 2004), Harvard University (1993-1998), Carnegie Mellon University (2004), IEEE Infocom (1996), ACM Sigcomm (1994, 1996), The Hackers Conference (2003-2006), USENIX (1995, 2006). I've also been at: the International Physics Olypiad (1988), the ACM Programming contest (1993), The Spam Conference (2003), RoboNexus (2004), IROS (2002, 2004), Burning Man (2001, 2005). I've vacationed in Hawaii (1999, 2000, 2003), Istanbul (2005), Iceland (2004), France (1996), England (1984), Munich (1997). I've been at the Homebrew Robotics Club in Mountain View (2001-).
Can I have the source code for your balancing scooter?
You can download the source code for the electric unicycle. All the hard parts are the same; it's just missing the steering control.
Some of your predictions are wrong!
I'll let history be the judge. Only send me your arguments if you think I'm unlikely to have heard that point of view before.
Will you invest in my company?
Y Combinator, in which I was a partner, invests and helps early-stage startups. They do two funding cycles per year.
What programming language should I learn?
Start with Python. It's clean, powerful, aesthetically pleasing, and simple to learn. Squeak, a modern version of Smalltalk, is also excellent, but it's out of the mainstream. You'll need to learn C at some point, but you'll write better programs if you think in terms of the high-level abstractions provided by Python and translate to C as you type. At some point, you should learn Lisp.
Besides their intrinsic characteristics, languages define commmunities of programmers. You want to choose one that lets you communicate with good programmers, because you'll learn from them. They tend to prefer powerful languages like Python, Lisp, and C++. So for example, although Visual Basic is actually a powerful and complete language, few good programmers use it. C++, on the other hand, is a poorly designed language, but for historical reasons a lot of smart people use it so at least you'll be in good company.
The principle applies to operating systems too. Although Windows 2000 and its successors are perfectly reasonable operating systems, few of the good programmers use them, so if you do, most of your colleagues will be mediocre. FreeBSD or Linux have much better communities around them.
How should I become a better programmer?
Spend time reading other people's well-written programs. Sadly, a lot of Linux and Gnome open source is poorly written. Good code bases that I know of include:
I'm an expert programmer. Can you recommend good books?
Algorithms by Cormen, Leiserson and Rivest; The Structure and Interpretation of Computer Programs by Abelson and Sussman; On Lisp by Paul Graham (whether or not you use Lisp); all of Don Knuth's books, though you'll have to buckle down to get through them. Some good books on specific topics include: Unix Network Programming by Stevens; Garbage Collection by Jones and Lin; A Retargetable C Compiler: Design and Implementation by Fraser & Hanson.
I want to get into robotics. How should I start?
Get a robot kit you can program from a PC, and start making it do interesting things. I think the best one is the Bioloid, a kit that can make anything from a humanoid to a snake and has a usable programming interface from the PC. Their actuators are much more smooth and reliable than the hobby servos that people used to build such robots out of.
Robotics is a huge, multidisciplinary field. Anything you learn in mechanical engineering, electronics, real-time software, machine vision, or learning or planning techniques will be useful.
I just got my Bachelor's degree in CS. Should I get a Ph.D.?
I did, and I value the experience greatly. It was much more satisfying and more fun than my undergrad degree. I learned something from taking classes, something from writing papers and grant applications, and a measure of self-discipline from having to actually produce a thesis. But the best part was interacting with all the smart people there. I learned a lot from them, and met people who became important friends and business partners.
On the other hand, many smart and successful people I've known in industry didn't have any degree at all. Programming courses aren't the place to learn programming -- you can only learn it by doing. (However, grad school is an excellent time and place to work on cool extracurricular programming projects with friends.)
If you have a longer time horizon, I think the most promising fields are robotics and biotechnology.