Towards Understandable Software

10 points by liberty


Internet_Janitor

I'm not convinced that abandoning code or making it subservient to natural language prose is an effective solution to the accessibility problems of programming.

Programming languages are user interfaces which strike a balance between the needs of computers and the needs of humans. At their best, crisp formal notations are tools of thought which facilitate personal understanding as well as communication of ideas to other humans and machines. Like any user interface, there is inherent tension between designs which prioritize ease and familiarity for beginners and designs which give proficient users leverage and efficiency.

Learning APL-family languages has been especially influential for me. Like any formal programming language they took time and effort to learn, but once learnt they help me fit larger problems in my head at once and let me think about programming more precisely when I'm away from my computers, going for a walk or sitting with a chicken perched on my knee. I don't need a complex IDE to write K; I can think through problems in my head, on paper, or with a simple REPL.

Well-documented projects are a laudable goal, and literate programming can have benefits, but all documentation still takes time to read, write, and revise. As with testing, more documentation is not strictly better; favor concise, well-structured explanations, and concise programs that lend themselves to explanation. Code can be poetry, but most poems are not programs.