My favorite conference of the year was, not surprisingly, this summer's Software Craftsmanship North America, which was co-organized by Obtiva.
The presentations were challenging, diverse, and at times, uncomfortable. Because of several of those presentations, I've since had opportunities to question my own closely-held beliefs about our profession and my career as a professional programmer.
The presentation that had the biggest impact on me personally was Michael Feathers' "Self-Education and the Craftsman." (See the whole presentation.) Maybe this is because I am largely a self-educated programmer myself. And, many of the best hackers I've worked with have been self-educated. (That is an interesting phenomenon in our industry, which I'll save for a future post.)
Instead of a list of flavor-of-the-day APIs, frameworks, and languages, Feathers gave us a laundry list of important programming language topics that are widely-unknown or misunderstood among otherwise well-heeled programmers. These are topics that separate the master from the journeyman.
(Of course, it takes more than knowledge to achieve mastery. As George Leonard explains in Mastery, "to achieve mastery, you must practice a new skill patiently, diligently, and consistently."
Language Topics
In Feathers' talk, there was hardly a mention of Ruby on Rails or Spring 2.x or the JVM. Instead, he gave us this list of topics to wrestle with:
- Big-O, Little-O, Theta Notation,
- Covariance and contravariance,
- Types,
- Objects are closures,
- State machines,
- Regular expressions and automata,
- Turing machines,
- Halting problem,
- Worse is better,
- Redundancy is not a strength: How to make logic stronger,
- Security on Sand: "On Trusting Trust"
- Location transparency is a myth,
- Objects are clay.
Book Recommendations
In addition to the above list of topics to review or introduced myself to, as the case may be, Feathers gave us this list of must-read books:
- Structure and Interpretation of Computer Programs, by Abelson and Sussman
- Designing Object Systems, by Cook and Daniels
- Graphs: Theory and Algorithms, by Thulasiraman and Swamy
- Compilers: Principles, Techniques, and Tools, by Aho
- Discrete Mathematics with Combinatorics, by Anderson
- Introduction to the Theory of Computation, by Sipser
SICP Study Groups
Another of the outcomes of the Feathers presentation was the formation of several SICP study groups, based on his recommendation of the book.
Compilers: Principles, Techniques, and Tools study group, anyone?










Recent Comments