Coders at work
|This article relies on references to primary sources. (January 2013)|
|Coders at Work: Reflections on the Craft of Programming|
|September 16, 2009|
Coders at Work: Reflections on the Craft of Programming (ISBN 1-430-21948-3) is a book by Peter Seibel about interviews with 15 highly accomplished programmers. The primary topics in these interviews include how the interviewees learned programming, how do they debug code, their favorite languages and tools, their opinions on literate programming, proofs, code reading and so on.
Below is the list of interviewees for this book and some highlights.
- Jamie Zawinski
- Brad Fitzpatrick
- Douglas Crockford
- Brendan Eich
- Joshua Bloch
- Joe Armstrong
- Simon Peyton Jones
- Peyton Jones mentions David Turner's paper on S-K combinators (cf. SKI combinator calculus). The S-K combinators are a way of translating and then executing the lambda calculus. Turner showed in his paper how to translate lambda calculus into the three combinators S, K and I which are all just closed lambda terms and I = SKK. So in effect you take a lambda term and compile to just Ss and Ks.
- Peyton Jones recalls his first instance of learning functional programming when taking a course by Arthur Norman who showed how to build doubly linked lists without any side effects at all.
- Peyton Jones mentions the paper "Can Programming be Liberated from the von Neumann Style" by John Backus.
- Peyton Jones wants John Hughes to write a paper for the Journal of Functional Programming on why static typing is bad. Hughes has written a popular paper titled "Why Functional Programming Matters".
- Peyton Jones mentions a data structure called "zipper" that is a very useful functional data structure. Peyton Jones also mentions the 4-5 line program that Hughes wrote to calculate an arbitrary number of digits of e lazily.
- Peyton Jones mentions that the sequential implementation of a double-ended queue is a first year undergraduate programming problem. For a concurrent implementation with a lock per node, it's a research paper problem. With transactional memory, it's an undergraduate problem again.
- Favorite books/authors: Programming Pearls by Jon Bentley, a chapter titled "Writing Programs for 'The Book'" by Brian Hayes from the book Beautiful Code where he explores the problem of determining which side of the line a given point is, Art of Computer Programming by Don Knuth, Purely Functional Data Structures by Chris Okasaki exploring how to build data structures like queues and heaps without side effects and reasonable complexity bounds, Structure and Interpretation of Computer Programs by Abelson and Sussman, Compiling with Continuations by Andrew Appel, A Discipline of Programming by Dijkstra, Per Brinch Hansen's book about writing concurrent operating systems.
- Peyton Jones mentions Fred Brook's paper that he reread and liked "The Computer Scientist as Toolsmith".
- Peter Norvig
- In 1972/73 when Norvig was still in high school, he found the Knuth algorithm for shuffling cards.
- The first interesting program that Norvig wrote was Game of Life.
- Norvig has written an essay called "Teach Yourself Programming in Ten Years".
- On practical applications of academic concepts, he mentions that part of the problem is that academics do not see the whole problem and another part is education. If you have a bunch of programmers who don't understand what a monad is and haven't taken courses in category theory, there's a gap.
- Books/Authors he recommends include Knuth; Cormen, Leiserson and Rivest; Sally Goldman, Abelson and Sussman, Code Complete.
- Knuth has written an essay about developing TeX where he talks about flipping over to his pure, destructive QA personality and doing his darnedest to break his own code.
- Norvig talks about the job interview process at Google and says that the best signal is if somebody has worked with one of their employees and they can vouch for the candidate. He also talks about "resume predictor" that takes resume attributes such as experience, winning a programming contest, working on open source project etc. and predicts fit. He also mentions assigning of scores 1 to 4 by interviewers and generally turning down candidates who get a 1 by any of the interviewers unless someone at Google fights for hiring them.
- Guy Steele
- Guy collaborated with Gerald Sussman on a series of papers now known as "The Lambda Papers" which included the original definition of the Scheme programming language.
- On getting degree in Computer Science, Guy mentions that he had set out to be a pure math major but he realized that he had no intuition whatsoever for infinite dimensional Banach spaces and that's what did it for him to switch to applied math major.
- Favorite authors and books: Knuth; Aho, Hopcroft and Ullman (Guy says that this book is where he learned sorting for "real"), Gerald Weinberg on the Psychology of Computer Programming, Fred Brook's Mythical Man-Month
- On designing, Guy suggests that you want to design the specification of what's in the middle in such a way that it naturally is also correct on the boundaries rather than treating boundaries as special cases.
- A parallel garbage collector algorithm developed by Dijkstra which fit on half a page. David Gries wrote a paper for CACM using techniques developed by his student Susan Owicki to prove correctness of this algorithm.
- Dan Ingalls
- L Peter Deutsch
- Ken Thompson
- Fran Allen
- Bernie Cosell
- Donald Knuth