Oh and as long as I'm pimping Peter Norvig. Here's his essay "Teach
Yourself Programming in Ten Years"

http://norvig.com/21-days.html

Here's my recipe for programming success:

Get interested in programming, and do some because it is fun. Make
sure that it keeps being enough fun so that you will be willing to put
in ten years.

Talk to other programmers; read other programs. This is more important
than any book or training course.

Program. The best kind of learning is learning by doing. To put it
more technically, "the maximal level of performance for individuals in
a given domain is not attained automatically as a function of extended
experience, but the level of performance can be increased even by
highly experienced individuals as a result of deliberate efforts to
improve." (p. 366) and "the most effective learning requires a
well-defined task with an appropriate difficulty level for the
particular individual, informative feedback, and opportunities for
repetition and corrections of errors." (p. 20-21) The book Cognition
in Practice: Mind, Mathematics, and Culture in Everyday Life is an
interesting reference for this viewpoint.

If you want, put in four years at a college (or more at a graduate
school). This will give you access to some jobs that require
credentials, and it will give you a deeper understanding of the field,
but if you don't enjoy school, you can (with some dedication) get
similar experience on the job. In any case, book learning alone won't
be enough. "Computer science education cannot make anybody an expert
programmer any more than studying brushes and pigment can make
somebody an expert painter" says Eric Raymond, author of The New
Hacker's Dictionary. One of the best programmers I ever hired had only
a High School degree; he's produced a lot ofgreat software, has his
own news group, and made enough in stock options to buy his own
nightclub.
Work on projects with other programmers. Be the best programmer on
some projects; be the worst on some others. When you're the best, you
get to test your abilities to lead a project, and to inspire others
with your vision. When you're the worst, you learn what the masters
do, and you learn what they don't like to do (because they make you do
it for them).

Work on projects after other programmers. Be involved in understanding
a program written by someone else. See what it takes to understand and
fix it when the original programmers are not around. Think about how
to design your programs to make it easier for those who will maintain
it after you.

Learn at least a half dozen programming languages. Include one
language that supports class abstractions (like Java or C++), one that
supports functional abstraction (like Lisp or ML), one that supports
syntactic abstraction (like Lisp), one that supports declarative
specifications (like Prolog or C++ templates), one that supports
coroutines (like Icon or Scheme), and one that supports parallelism
(like Sisal).

Remember that there is a "computer" in "computer science". Know how
long it takes your computer to execute an instruction, fetch a word
from memory (with and without a cache miss), read consecutive words
from disk, and seek to a new location on disk. (Answers here.)

Get involved in a language standardization effort. It could be the
ANSI C++ committee, or it could be deciding if your local coding style
will have 2 or 4 space indentation levels. Either way, you learn about
what other people like in a language, how deeply they feel so, and
perhaps even a little about why they feel so.

Have the good sense to get off the language standardization effort as
quickly as possible.

-- Charles

Reply via email to