Teach Yourself Programming in Ten Years
Teach Yourself Programming in Ten Years
(1908-2004)
said
"Your
first
10,000
photographs
are
your
worst,"
but
he
shot
more
than
one
an
hour.)
Samuel
Johnson
(1709-1784)
thought
it
took
even
longer:
"Excellence
in
any
department
can
be
attained
only
by
the
labor
of
a
lifetime;
it
is
not
to
be
purchased
at
a
lesser
price."
And
Chaucer
(1340-
1400)
complained
"the
lyf
so
short,
the
craft
so
long
to
lerne."
Hippocrates
(c.
400BC)
is
known
for
the
excerpt
"ars
longa,
vita
brevis",
which
is
part
of
the
longer
quotation
"Ars
longa,
vita
brevis,
occasio
praeceps,
experimentum
periculosum,
iudicium
difficile",
which
in
English
renders
as
"Life
is
short,
[the]
craft
long,
opportunity
fleeting,
experiment
treacherous,
judgment
difficult."
Although
in
Latin,
ars
can
mean
either
art
or
craft,
in
the
original
Greek
the
word
"techne"
can
only
mean
"skill",
not
"art".
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
of
great
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.
Understand
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
them
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.
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.