Frequently Asked Questions

Are you the Trevor Blackwell I met somewhere?

You may have met me in: Saskatoon (1969-1985), Ottawa (1985-1993), Cambridge, Mass (1993-1998), Silicon Valley (1998-), Gloucestershire (2020-).

I've worked or studied at: Nortel (1988-1993), Carleton University Engineering (1988-1992), Harvard University Computer Science (1993-1998), Viaweb (1995-1998), Yahoo (1998-2001), Anybots (2001-), Y Combinator (2005-2019), Umbrella Research (2011-). OpenAI (2016-2017).

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.

Will you invest in my company?

Y Combinator, in which I was a partner, invests and helps early-stage startups more than I can. 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:

  • The kernel and utilities for FreeBSD.
  • Bittorrent, an elegant Python program with both serious algorithms and good UI.
  • Squeak, which is written in itself. It includes the complete source to its powerful GUI system, and is the only GUI toolkit I know of that is clean, readable, and hackable.
  • Python, both the interpreter (in C) and libraries (in Python.)
  • LCC, the lightweight C compiler along with the excellent book documenting it: A Retargetable C Compiler: Design and Implementation by David R. Hanson. It's worth reading even if you have no interest in writing compilers.

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.