# Coders at Work

Coders at Work: Reflections on the Craft of Programming (ISBN 1-430-21948-3) is a 2009 book by Peter Seibel comprising interviews with 15 highly accomplished programmers. The primary topics in these interviews include how the interviewees learned programming, how they debug code, their favorite languages and tools, their opinions on literate programming, proofs, code reading, and so on.

## Interviewees

* Jamie Zawinski
* Brad Fitzpatrick
** For studying Perl he recommends Higher-Order Perl by Mark Jason Dominus.
* Douglas Crockford
* Brendan Eich
* Joshua Bloch
* Joe Armstrong
* Simon 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.
** 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.
** Mentions the paper "Can Programming be Liberated from the von Neumann Style" by John Backus.
** 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".
** 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.
** 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.
** Wrote 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; McConnell.
** 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.
** 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
** 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
** 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