If you had to recommend a single book to introduce the way programmers think to anyone, but it had to be from outside the field of CS, what would it be?

For programmers, my hands down, all-time, crushing winner would be "Becoming a Technical Leader" by Gerald M. Weinberg, which is mainly about self-development but still for an already technical audience. When I was in High School ,the book "Godel, Escher, Bach" by Douglas R. Hofstadter had just come out, and we had an entire course devoted to it. It is probably one of the most quoted books of all time.

What one book (besides "Alice in Wonderland") conveys the mindset and enjoyment of mental processes similar to programming, to a non-technical person? What is it that makes this book important/vital?

  • 5
    $\begingroup$ To quote the help center: 'avoid asking subjective questions where … every answer is equally valid: “What’s your favorite ______?”' In addition, if you would like to suggest a book, that belongs in a self answer, not in the question. $\endgroup$
    – thesecretmaster
    Commented Jul 20, 2017 at 14:18
  • 2
    $\begingroup$ What's the "CS mindset"? $\endgroup$
    – nova
    Commented Jul 20, 2017 at 15:29
  • 2
    $\begingroup$ @nocomprende The problem is that we can all agree to many good books. There isn't a single best or most correct book. That's why this question is a "list question" which is generally off-topic on Stack Exchange sites. $\endgroup$ Commented Jul 20, 2017 at 18:43
  • 3
    $\begingroup$ But I'm very popular, achingly handsome, and very charming. Who will downvote me, even if they don't quite understand my answer? Without explicit criteria, we are left to guess at what the votes might ultimately represent, and we have little expectation that better answers will float to the top. $\endgroup$
    – Ben I.
    Commented Jul 21, 2017 at 1:30
  • 3
    $\begingroup$ I'm voting to close this question as off-topic because it is a list question with no objective answer. I find the question interesting, but it doesn't fit the Stack Exchange model. $\endgroup$ Commented Jul 21, 2017 at 2:55

5 Answers 5


The hardest part of determining anything in computer science is the requirements first. If you don't know what the program should do, then there is no way to do it correctly.

Thus, Winnie the Pooh is a wonderful book on the matter. It clearly describes time and time again how simple misunderstandings of the base assumptions lead to absurdities of action. From tracking a woozle of one's own making (and debugging where the error was actually being originated) to trying to define a heffalump and building something completely wrong as a result.

With the summary of Winnie the Pooh in "In which Christoffer Robin gives a Pooh party, and we say good-bye" we realize that our jobs as writers of code is to take the stuff of dreams and make it into reality.

Winnie the Pooh has the advantage over many other books by being accessible by all levels of readers and can often be found in less expensive books compared to many other textbooks.

  • 2
    $\begingroup$ That's outrageous, but I really can't argue. The book is wonderful anyway. Read it to your kids if/when you have them. :) $\endgroup$
    – Wildcard
    Commented Jul 21, 2017 at 23:25
  • $\begingroup$ Winnie the Pooh is also available in many translations, even in Latin, as Winnie Ille Pu $\endgroup$ Commented Aug 6, 2018 at 6:52

The timeless way of building — Christopher Alexander (https://www.patternlanguage.com/patterns/justsostory.html)

This is a 3 volume book that includes A Pattern Language. This set of books is probably one of the most influential book from outside of computing to affect computing. It was the seed that started Patterns.

The volume A Pattern Language has about 250 pattern on architecture, ranging from world scale, through countries, regions, towns, building, shelves, to screws. (It also states that by no means is this all of them. Where as the 1st pattern book on programming had about 20 patterns and declared that to be all of them. It got better after that.)

The Nature of Order — Christopher Alexander (http://www.natureoforder.com/overview.htm)

This explores nature and architectural styles, and demonstrates:

  • The beauty of a design can be fairly and with repeatability, judged: to do this ask how it makes you feel, avoid intellect. You will need to practice to be good at it, but most people (80%) agree on the simple ones (in blinded trials). The other 20% just argue that it is silly, this can not be done. After several round almost everyone is in agreement.
  • There are about 15 properties that occur in nature and good design.
  • By using these 15 properties you can create good designs.

He also extends on Darwin (it is not random, there is a lot of order. Therefore the probability of it happening by chance is better than you would think).

The 15 properties are:

  • LEVELS OF SCALE is the way that a strong center is made stronger partly by smaller strong centers contained in it, and partly by its larger strong centers which contain it.
  • STRONG CENTERS defines the way that a strong center requires a spatial field-like effect, created by other centers, as the primary source of its strength.
  • BOUNDARIES is the way in which the field-like effect of a center is strengthened by the creation of a ring-like center, made of smaller centers which surround and intensify the first. The boundary also unites the center with the centers beyond it, thus strengthening it further.
  • ALTERNATING REPETITION is the way in which centers are strengthened when they repeat, by the insertion of other centers between the repeating ones.
  • POSITIVE SPACE is the way that a given center must draw its strength, in part, from the strength of other centers immediately adjacent to it in space.
  • GOOD SHAPE is the way that the strength of a given center depends on its actual shape, and the way this effect requires that even the shape, its boundary, and the space around it are made up of strong centers.
  • LOCAL SYMMETRIES is the way that the intensity of a given center is increased by the extent to which other smaller centers which it contains are themselves arranged in locally symmetrical groups.
  • DEEP INTERLOCK AND AMBIGUITY is the way in which the intensity of a given center can be increased when it is attached to nearby strong centers, through a third set of strong centers that ambiguously belong to both.
  • CONTRAST is the way that a center is strengthened by the sharpness of the distinction between its character and the character of surrounding centers.
  • ROUGHNESS is the way that the field effect of a given center draws its strength, necessarily, from irregularities in the sizes, shapes, and arrangements of other nearby centers.
  • GRADIENTS is the way a center is strengthened by a graded series of different-sized centers which then “point” to the new center and intensify its field effect.
  • ECHOES is the way that the strength of a given center depends on similarities of angle and orientation and systems of centers forming characteristic angles thus forming larger centers, among the centers it contains.
  • THE VOID is the way that the intensity of every center depends on the existence of a still place–an empty center–somewhere in its field.
  • SIMPLICITY AND INNER CALM is the way the strength of a center depends on its simplicity–on the process of reducing the number of different centers which exist in it, while increasing the strength of these centers to make them weigh more.
  • NON-SEPARATENESS is the way the life and strength of a center is merged smoothly-sometimes even indistinguishably–with the centers that form its surroundings.

Examples in programming (not from the book)

  • THE VOID: The space made my indentation and blank lines (paragraphing).
  • BOUNDARIES: When we use contracts, each method has a strong boundary, that is of similar size to the implementation 1:1 to 1:3.
  • DEEP INTERLOCK AND AMBIGUITY: are the contract part of the method/callee or of the caller.
  • GRADIENTS: each layer in the design should be about 3× more abstract than the layer below.
  • ALTERNATING REPETITION: Test driven development, see https://cseducators.stackexchange.com/a/4869/204

Some languages, and some source code, exhibit the 15 properties more than others. I have noticed that there is a correlation — the higher it exhibits these properties, the easier it is to write powerful, bug free software.

How Building Learn — Stewart Brand

This covers piecemeal growth: Creating a design one step at a time (like agile). Don't design it all up front; learn as you build, so that you can make a better design.

  • $\begingroup$ @nocomprende The nature of order was made after the timeless way, it is the elements that you are looking for. $\endgroup$ Commented Jul 21, 2017 at 14:42
  • $\begingroup$ @nocomprende these elements/properties are different, to those 5, or to chemical, physical elements. I have added them to the answer, and will add some programming examples. $\endgroup$ Commented Jul 21, 2017 at 15:11
  • $\begingroup$ @nocomprende's account was deleted, so the comments are no longer here. Hope my comments make some sense without them. $\endgroup$ Commented Aug 5, 2018 at 16:58

Since you said non-programming, rather than non-CS I'd like to add a couple of very small books by V.J Rayward-Smith:

  • A First Course In Formal Language Theory
  • First Course in Computability

Both books give an excellent, compact, introduction to important topics and important background for upper-level courses.

Both are available at GoodReads. Hard copies are a bit hard to come by. I treasure my copies.

Also, there are, I think, only a few books on computing that qualify for the tag "Literature". One is On Pascal Compilers, by Per Brinch Hansen.

But Godel, Escher, Bach is hard to beat for a general book on deep thinking.

  • $\begingroup$ I would endorse any book by Vic; I was taught by him. A great teacher and a wonderful person. $\endgroup$ Commented Jul 20, 2017 at 21:08
  • $\begingroup$ @BrianTompsett-汤莱恩 You were very lucky if he teaches anything like he writes. $\endgroup$
    – Buffy
    Commented Jul 20, 2017 at 21:16

I find Henry Petroski's book "To Engineer is Human - The Role of Failure in Successful Design" a useful read.

I also suggest Tracy Kidder's "The soul of a new machine", but mainly because I was there...

I also suggest "Scam: Find Out All About Popular Online and Offline Scams and How to Avoid Them" which can be an eyeopener for the naive student.

I also endorse Fred Brooks' "The Mythical Man month"

I'm sure my shelf has a few more...

  • $\begingroup$ Please add some more details on the books and their applicability to the question. Simply a list of what is on your shelf isn't an answer. As the notice states, "Answers that don't include explanations may be removed." $\endgroup$
    – thesecretmaster
    Commented Jul 21, 2017 at 1:51
  • Software Requirements and Specifications — Michael Jackson
  • The Mythical Man Month, revisited — Fredrick Brooks

Both are software engineering books, however they are very approachable for non computer-scientists / software-engineers. They both have a set essays of various aspects of software engineering.

Examples from the books

De-skilling from SRS:

SRS talks about the introduction of structured programming, and the introduction of the number zero and the Arabic number system, in to the Roman empire, along with its methods for adding, subtracting, multiplying, and dividing. And how the mathematicians, that where super skilled university graduates, that worked in the markets working out the total price of sales (adding, multiplying), went on strike, because they thought they would be out of a job. Well the army just killed them all, and the next generations moved on to invent calculus and other more interesting stuff. (my account of when calculus was invented may be out by a few years).

Brilliance (SRS):

  • a: “Bob is brilliant”
  • b: “Yes he does the most amazing stuff, even he does not understand it”
  • a: “What about kate?”
  • b: “We thought she would be brilliant, but she has not proved her self yet. Every time we give her something hard, it turns out to be easy. Her solutions are simple, even the most junior people understand how she did it.”

Mythical Man Month (MMM):

Just one of the chapter is MMM. Talks about how if it takes 1 man 2 hours to dig a hole, it will not necessarily be true that 2 men will take 1 hour. He also states that if you add people toward the end of the project (which is what normally happens), then the project will take longer.