Software Engineering meets Poetry


  1. Susan Cain
    • “Tom Demarco, a principal of the Atlantic Systems Guild team of consultants … and his colleague Timothy Lister devised a study called the Coding War Games. The purpose of the games was to identify the characteristics of the best and worst computer programmers; more than six hundred developers from ninety-two different companies participated. Each designed, coded, and tested a program, working in his normal office space during business hours. Each participant was also assigned a partner from the same company. The partners worked separately, however, without any communication, a feature of the games that turned out to be critical.When the results came in, they revealed an enormous performance gap. The best outperformed the worst by a 10:1 ratio. The top programmers were also about 2.5 times better than the median. When DeMarco and Lister tried to figure out what accounted for this astonishing range, the factors that you’d think would matter — such as years of experience, salary, even the time spent completing the work — had little correlation to outcome. Programmers with 10 years’ experience did no better than those with two years. The half who performed above the median earned less than 10 percent more than the half below — even though they were almost twice as good. The programmers who turned in “zero-defect” work took slightly less, not more, time to complete the exercise than those who made mistakes.It was a mystery with one intriguing clue: programmers from the same companies performed at more or less the same level, even though they hadn’t worked together. That’s because top performers overwhelmingly worked for companies that gave their workers the most privacy, personal space, control over their physical environments, and freedom from interruption. Sixty-two percent of the best performers said that their workspace was acceptably private, compared to only 19 percent of the worst performers; 76 percent of the worst performers but only 38 percent of the top performers said that people often interrupted them needlessly.”
      ― Susan Cain, Quiet: The Power of Introverts in a World That Can’t Stop Talking
  2.  Prince
    • “Our consciousness is programmed. We see things a certain way from a young age – we’re programmed to keep doing them that way. Then you have to spend adulthood learning how to overcome it, to read out the programs. Try to create. I want to tell people to create. Just start by creating your day. Then create your life.”
      ― Prince, The Beautiful Ones
  3. Joseph Rain
    • Along every step of our journey through life, our mind is being programmed. If we are not programming it ourselves, someone else is doing it to us.
      ― Joseph Rain, The Unfinished Book About Who We Are
  4. Rosangel Perez
    • “Who do you listen to? Who influences your day to day decisions? Many of us are being led & misled away from our own thinking power.”
      ― Rosangel Perez
  5. Alan J. Perlis
    • A language that doesn’t affect the way you think about programming is not worth knowing.
      ― Alan J. Perlis
    • A year spent in artificial intelligence is enough to make one believe in God.
    • Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.
    • Is it possible that software is not like anything else, that it is meant
      to be discarded: that the whole point is to always see it as a soap
      ― Alan J Perlis
    • I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out it was an awful lot of fun. Of course the paying customers got shafted every now and then and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful error-free perfect use of these machines. I don’t think we are. I think we’re responsible for stretching them setting them off in new directions and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all I hope we don’t become missionaries. Don’t feel as if you’re Bible sales-men. The world has too many of those already. What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands I think and hope is intelligence: the ability to see the machine as more than when you were first led up to it that you can make it more.
  6. Brian Kernighan
    • Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?
      ― Brian Kernighan
  7. Douglas Rushkoff
    • We are looking at a society increasingly dependent on machines, yet decreasingly capable of making or even using them effectively.
      ― Douglas Rushkoff, Program or Be Programmed: Ten Commands for a Digital Age
  8. Douglas Crockford
    • We see a lot of feature-driven product design in which the cost of features is not properly accounted. Features can have a negative value to customers because they make the products more difficult to understand and use. We are finding that people like products that just work. It turns out that designs that just work are much harder to produce that designs that assemble long lists of features.
      ― Douglas Crockford, JavaScript: The Good Parts
  9. Andrew Hunt
    • Don’t gloss over a routine or piece of code involved in the bug because you “know” it works. Prove it. Prove it in this context, with this data, with these boundary conditions.
      ― Andrew Hunt, The Pragmatic Programmer: From Journeyman to Master
  10. James Alan Gardner
    • What kind of programmer is so divorced from reality that she thinks she’ll get complex software right the first time?
      ― James Alan Gardner, Ascending
  11. Halgurd Hussein
    • I am committed to push my branch to the master
      ― Halgurd Hussein
  12. Robert C. Martin
    • “Any organisation that designs a system will produce a design whose structure is a copy of the organisation’s communication structure”
      ― Robert C. Martin, Clean Architecture
    • “The only way to go fast, is to go well.”
      ― Robert C. Martin, Clean Architecture
  13. Steve Klabnik
    • “In languages with a garbage collector (GC), the GC keeps track and cleans up memory that isn’t being used anymore, and we don’t need to think about it. Without a GC, it’s our responsibility to identify when memory is no longer being used and call code to explicitly return it, just as we did to request it. Doing this correctly has historically been a difficult programming problem. If we forget, we’ll waste memory. If we do it too early, we’ll have an invalid variable. If we do it twice, that’s a bug too. We need to pair exactly one allocate with exactly one free.
      Rust takes a different path: the memory is automatically returned once the variable that owns it goes out of scope.”
      ― Steve Klabnik, The Rust Programming Language
    • “Inheritance has recently fallen out of favor as a programming design solution in many programming languages because it’s often at risk of sharing more code than necessary. Subclasses shouldn’t always share all characteristics of their parent class but will do so with inheritance. This can make a program’s design less flexible. It also introduces the possibility of calling methods on subclasses that don’t make sense or that cause errors because the methods don’t apply to the subclass. In addition, some languages will only allow a subclass to inherit from one class, further restricting the flexibility of a program’s design.
      For these reasons, Rust takes a different approach, using trait objects instead of inheritance.”
      ― Steve Klabnik, The Rust Programming Language
  14. Samuel R. Delany
    • You can program a computer to make mistakes, and you do it not by crossing wires, but by manipulating the ‘language’ you teach it to ‘think’ in.
      ― Samuel R. Delany, Babel-17
  15. David Thomas
    • Delivering good software today is often better than perfect software tomorrow, so finish things and ship.
      ― David Thomas, The Pragmatic Programmer: From Journeyman to Master
  16. Steve McConnell
    • The big optimizations come from refining the high-level design, not the individual routines.
      ― Steve McConnell, Code Complete
  17. Maurice Wilkes
    • The realization came over me with full force that a good part of the remainder of my life was going to be spent in finding errors in my own programs.
      ― Maurice Wilkes, Memoirs of a Computer Pioneer
  18. Martin Fowler
    • Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
      ― Martin Fowler
    • I’m a programmer. I like programming. And the best way I’ve found to have a positive impact on code is to write it.
      ― Robert C. Martin, Clean Architecture
  19. Joe Armstrong
    • The really good programmers spend a lot of time programming. I haven’t seen very good programmers who don’t spend a lot of time programming. If I don’t program for two or three days, I need to do it. And you get better at it—you get quicker at it. The side effect of writing all this other stuff is that when you get to doing ordinary problems, you can do them very quickly. – Joe Armstrong― Peter Seibel, Coders at Work: Reflections on the Craft of Programming
  20. Ken Thompson
    • [On identifying talented programmers] It’s just enthusiasm. You ask them what’s the most interesting program they worked on. And then you get them to describe it and its algorithms and what’s going on. If they can’t withstand my questioning on their program, then they’re not good. I’m asking them to describe something they’ve done that they’ve spent blood on. I’ve never met anybody who really did spend blood on something who wasn’t eager to describe what they’ve done and how they did it and why. I let them pick the subject. I don’t pick the subject, so I’m the amateur and they’re the professional in this subject. If they can’t stand an amateur asking them questions about their profession, then they don’t belong. – Ken Thompson
      ― Peter Seibel, Coders at Work: Reflections on the Craft of Programming
  21. Audrey Watters
    • The personal computer isn’t “personal” because it’s small and portable and yours to own. It’s “personal” because you pour yourself into it – your thoughts, your programming.
      ― Audrey Watters, The Monsters of Education Technology
  22. Keith Bostic
    • “Perl – The only language that looks the same before and after RSA encryption.”
      ― Keith Bostic
  23. Larry Wall
    • When they first built the University of California at Irvine they just put the buildings in. They did not put any sidewalks, they just planted grass. The next year, they came back and put the sidewalks where the trails were in the grass. Perl is just that kind of language. It is not designed from first principles. Perl is those sidewalks in the grass.
      ― Larry Wall
  24. Paul Graham
    • Object-oriented programming offers a sustainable way to write spaghetti code. It lets you accrete programs as a series of patches.
      ― Paul Graham, Hackers & Painters: Big Ideas from the Computer Age
    • “If you understand McCarthy’s eval, you understand more than just a stage in the history of languages. These ideas are still the semantic core of Lisp today. So studying McCarthy’s original paper shows us, in a sense, what Lisp really is. It’s not something that McCarthy designed so much as something he discovered. It’s not intrinsically a language for AI or for rapid prototyping, or any other task at that level. It’s what you get (or one thing you get) when you try to axiomatize computation.”
      ― Paul Graham
  25. Donald Knuth
    • I decry the current tendency to seek patents on algorithms. There are better ways to earn a living than to prevent other people from making use of one’s contributions to computer science.
    • The manuals we got from IBM would show examples of programs and I knew I could do a heck of a lot better than that. So I thought I might have some talent.
    • I can’t be as confident about computer science as I can about biology. Biology easily has 500 years of exciting problems to work on. It’s at that level.
    • The psychological profiling [of a programmer] is mostly the ability to shift levels of abstraction, from low level to high level. To see something in the small and to see something in the large.
      Jack Woehr. An interview with Donald Knuth. Dr. Dobb’s Journal, pages 16-22 (April 1996)
    • If you find that you’re spending almost all your time on theory, start turning some attention to practical things; it will improve your theories. If you find that you’re spending almost all your time on practice, start turning some attention to theoretical things; it will improve your practice.
      • Donald Knuth, quoted in: Arturo Gonzalez-Gutierrez (2007) Minimum-length Corridors: Complexity and Approximations. p. 99
    • To summarize: We have seen that computer programming is an art, because it applies accumulated knowledge to the world, because it requires skill and ingenuity, and especially because it produces objects of beauty. A programmer who subconsciously views himself as an artist will enjoy what he does and will do it better. Therefore we can be glad that people who lecture at computer conferences speak of the state of the Art.
      • p. 673 [italics in source]
    • The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature optimization is the root of all evil (or at least most of it) in programming.
      • p. 671
      • Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%.
        • Variant in Knuth, “Structured Programming with Goto Statements”. Computing Surveys 6:4 (December 1974), pp. 261–301, §1. doi:10.1145/356635.356640
    • Email is a wonderful thing for those people whose role in life is to be on top of things, but not for me: my role is to be on the bottom of things.
    • I’ve never been a good estimator of how long things are going to take.
    • I am worried that algorithms are getting too prominent in the world. It started out that computer scientists were worried nobody was listening to us. Now I’m worried that too many people are listening.
    • My general working style is to write everything first with pencil and paper, sitting beside a big wastebasket. Then I use Emacs to enter the text into my machine.
    • The hardest thing is to go to sleep at night, when there are so many urgent things needing to be done. A huge gap exists between what we know is possible with today’s machines and what we have so far been able to finish.
  26. Itzik Ben-Gan
    • I can’t stress enough the importance of switching from a sequential files mindset to set-based thinking. After you make the switch, you can spend your time tuning and optimizing your queries instead of maintaining lengthy, poor-performing code.
      — Itzik Ben-Gan 2001
  27. Lubok
    • If you work at home, you have a higher level of introspection and concentration and you avoid most of distractions that happen at the office.
      Daily agile meetings are a basic tool to avoid loosing personal connections.
  28. Tim “Agile Otter” Ottinger ( @tottinge )
    • Incremental Work
      • People who don’t understand incremental work think it means to serve raw chicken, then undercooked chicken, then the finished chicken.
        That’s not how it works.
        You deliver a small amount of fully-cooked chicken right away, then adjust the recipe, deliver more fully-cooked.
        10:43 AM · Apr 10, 2020·Twitter Web App


  1. Donald Knuth
  2. Premature Optimization


Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s