[nf-icon-black.png] [1]noteflakes

    * by Sharon Rosner
    * [2]archive
    * [3]code
    * [4]about

                        How I Write Code: Pen & Paper

 02·09·2021

  I am a self taught programmer. I first started programming as a kid,
  and have never bothered to formally study this discipline. To me,
  programming is first of all a pleasant creative pursuit. It’s a bit
  like putting together and taking apart all kinds of machines, except
  these machines happen to be virtual constructions, and you get to keep
  your hands clean (well, mostly…) Incidentally, this pleasant activity
  is also how I support my family.

  But even though I love programming, I try not to sit in front of a
  computer screen too much. I do not find staring at a screen all day
  beneficial, not for my physical health, nor for my mental health. In
  the last few years, I’ve started a habit of sketching my programming
  ideas using pen and paper. I’m not talking here about todo lists, or
  making diagrams. I’m talking about actually writing code using pen and
  paper. Let me explain.

 Why pen & paper

  A lot has been written about the [5]advantages of handwriting vs
  typing. I will not enumerate all of them here, but I will tell you that
  since I started this practice I find I’m more productive, and I seem to
  produce better-quality code.

  The mere fact that I can concentrate on a single problem without any
  distractions is already a big advantage, and it seems to me that
  through writing pages upon pages with a pen, scratching bad ideas,
  rewriting small bits of code, I gain (as if by magic) a deeper
  understanding of my code.

 What about debugging? What about testing?

  When you write code on paper, you have no way to see if your code
  works. Maybe someday I’ll be able to handwrite code on an e-Ink device
  and then run it. Until that day, all that I have is my ideas, my
  intuition, my knowledge, and my “mental runtime” - a mental thought
  process that simulates some kind of computer runtime that goes through
  the code, evaluating it.

  Of course, my mental process is not perfect. It will let slip through
  all kinds of bugs, things I’m not smart enough to detect before
  actually feeding the code to a computer. That’s why I try to
  concentrate on one small problem at a time. Nothing bigger than a page
  or two, and mostly short snippets that implement a specific algorithm.

  [pen-and-paper-1.jpg]

 Iterate, iterate, iterate

  So once I start exploring a problem space with pen & paper, I just
  iterate on it until I feel I’ve found the best solution to the problem.
  Once I’ve achieved that, I can finally open my laptop and type the code
  into my favorite editor.

  Sometimes it works like magic, I just type in the code and everything
  works. Sometimes it needs some additional effort in editing and
  elaborating. But still, even if my handwritten code turned out to be
  only partially correct, or needed some reworking for it to fit in with
  other components, I feel like spending time sketching code and
  reflecting on it before turning to the computer has given me a deeper
  understanding of the code.

 A recent example

  Here’s an example of coding I did completely with pen & paper: a few
  days ago I published a new open-source project called [6]Ever - a
  libev-based event reactor for Ruby. The entire design was done with pen
  & paper. I did it over three evenings, taking a couple hours each
  evening to work through the design and different aspects of the
  implementation.

  [pen-and-paper-2.jpg]

  Finally, when I felt the design was solid and that I had resolved all
  the issues I could see, I opened my laptop, created a new Github
  repository, typed in the code, added some tests and wrote the README.
  It was probably all done in 4 or 5 hours of concentrated work.

  At the end of the process, in addition to being able to create a small
  Ruby gem in a single day without too much fussing around looking for
  solutions to problems encountered during development, I feel like I
  have a deeper knowledge of the code, a deeper understanding of the
  implications of different choices, and a greater appreciation for
  writing the least amount of code.

  When I hold a pen in my hand and set it to paper, I find it much easier
  to be “in the zone”, and I feel much closer to the ideas I’m exploring.
  Somehow, I never get this feeling of connectedness when laying my hands
  on a computer keyboard. It also empowers me to know that I don’t need a
  computer in order to create code. I’m not dependent in my creative
  pursuits on a machine that sometimes seems to disturb my creative
  process rather than facilitate it.

  Steve Jobs once talked about computers being like a [7]bicycle for our
  minds. To me it feels like a lot of times we expend lots of energy on
  [8]bikeshedding rather than actually riding our bikes. And maybe we
  should also get off our bikes every once in a while, and just [9]walk.
    __________________________________________________________________

  Copyright © 2021 Sharon Rosner. This site runs on [10]Impression and
  [11]Tipi.

References

  1. https://noteflakes.com/
  2. https://noteflakes.com/archive
  3. https://github.com/ciconia
  4. https://noteflakes.com/about
  5. https://www.theguardian.com/science/2014/dec/16/cognitive-benefits-handwriting-decline-typing
  6. https://github.com/digital-fabric/ever
  7. https://www.youtube.com/watch?v=ob_GX50Za6c
  8. https://en.wiktionary.org/wiki/bikeshedding
  9. https://lithub.com/on-the-link-between-great-thinking-and-obsessive-walking/
 10. https://github.com/digital-fabric/impression
 11. https://github.com/digital-fabric/tipi