Principles of Software Design for Human Beings
Table of Contents
- 1. My own rules for software design
This will be freeform, but hopefully crystallizing into more organized thoughts. These principles come from careful consideration and frustration with software as an end user and end programmer (w/r/t apis and other DSLs).
1. My own rules for software design
1.1. Be aware of your own biases in what's "intuitive"
Evergreen insight from XKCD 2501:
This also extends to what's intuitive to the cultures of computer programmers!
1.2. That being said, bias usability towards non-programmers over programmers
Within reason, ofc. Example: lisp is notoriously weird for programmers of traditional C-based education backgrounds, but its consistent and minimal syntax makes it an excellent teaching language. Traditions become stuck in programming culture as intuitive based solely on existing tribal knowledge. There is a usability cost in designing for the curious non-programmer who simply wants to fix or extend something broken, but it's better to put that cost on the programmer who's already accustomed to learning new sets of language rules and above all…
1.3. Lower the cost of entry to tinker with your stuff!
Making things easy for existing programmers over non-programmers simply makes that barrier to entry stick around longer
1.3.1. CLI apps should always have help available
1.3.2. Interactive CLI prompts should always have "help", "?", "quit", "exit" keywords
These keywords should always do what you expect them to, and running the program should always show how to get help, locally
1.3.3. GUI apps should always show keyboard shortcuts on the dialog options
1.3.4. GUI apps should always have a global "command-palette"
1.4. Language syntax should be simple enough to not need syntax highlighting
The best languages are "blackboard" languages:
- Scheme
- Python
- Lua
- Clojure
- Forth?