Engineering
I built the Kenputer as part of
6.004, one of many MIT courses with material now available on the
Open Courseware Project.
The text for
6.001,
Structure and Interpretation of Computer Programs,
demonstrates programming can be an esthetic and intellectual endeavor.
Abstraction and Specification in Program Development
is no longer used for
6.170
(and
CLU
was never that useful), but the material was my first introduction to useful data abstraction and documentation of function and module interfaces.
Henry
Petroski writes on engineering design and engineering failures.
The Evolution of Useful Things: How Everyday Artifacts-From Forks and Pins to Paper Clips and Zippers-Came to be as They are
explains how engineering
design is more of an evolutionary process than a one-shot design.
To Engineer Is Human: The Role of Failure in Successful Design
examines high-profile engineering
failures and their causes.
Bob
Colwell writes on various engineering issues, including amusing
anecdotes from his days as a processor architect at Intel.
For a trip down memory lane, check out
Apple folklore,
Mac system notes,
the
Symbolics Museum,
and the
Old Computers Museum.
The movie Office Space
is required viewing.
And of course, there's
Dilbert,
which is funny until you realize it's all true.
Software Development
If you're going to read one book on software development, read
Steve McConnell's
Rapid Development,
a compendium of modern software development practices.
Gordon Bell's
High-Tech Ventures, although dated, is my favorite how-to guide for startups.
Fred Brook's
The
Mythical Man-Month is another classic (the title refers to the
point that adding unnecessary people on a project is not only useless,
but counterproductive). Everyone should expend some thought on the
intellectual property issues of software and the commons that benefit
us all - read the analyses and explanations
by Lawrence Lessig.
See
game development resources
for recommended books and web sites on game development.
I was largely inspired to put my own thoughts in writing by the
essays on hacker culture by
Eric Raymond,
thoughts on programmers and program languages by
Paul Graham,
the personal anecdotes and insights into software design
of
Richard Gabriel,
and the intelligent rants of
Joel on Software.
Eric Sink
offers tips on one-person software developer outfits ("Micro-ISV"'s).