- Takeaways
- General Takeaways
- Music Lessons
- Main Takeaway
- Music Notation
- Whiteboards
- Main Takeaway
- Tell
- Layered Details
- Engineers Don’t Write Code
- What Does “Reasoning About a Problem” Mean?
- Anti-Takeaway
- What Does “Reasoning About a Problem” Mean?
- Construction Industry
- Main Takeaway
- Discussion
- Software Development Roles
- Takeaways from LEGO® Blocks
- Main Takeaways
- API - Single, Simple Type
- Astronomy and Cosmology
- Main Takeaway
- Epicycles
- Code Bloat
- Examples
- See Also
- ORG Charts
- Main Takeaways
- Trees
- Breaking the Tree Structure
- Scalability
- Optimizations
- Business
- Main Takeaway
- Business Organization - Departments
- Need To Know
- Going Over The Boss’ Head
- Programming Takeaways
- Hierarchy
- Main Takeaway
- Relative Organization of Code
- Diagrams
- Mars Pathfinder Disaster
- Anti-Takeaway
- Mars Pathfinder Disaster
- Priority Inversion
- See Also
- Multitasking
- Anti-Takeaways
- Mid-1900’s
- How To Avoid Time-Sharing
- How To Avoid Memory-Sharing
- Isolation
- Referential Transparency
- S/SL
- Main Takeaways
- S/SL
- Support Functions - Mechanisms
- Dataless Language
- Typeless Language
- Inputs
- Outputs
- Errors
- Restricted API To/From Mechanism Functions
- Datalessness In Other PLs
- Typelessness in Other PLs
- Input in Other PLs
- Output in Other PLs
- Error in Other PLs
- Encouraging Behavior vs Enabling Behavior
- The Hidden Gem
- UNIX®
- Main Takeaways
- Anti-Takeaways
- Isolation
- Coordination Language
- PID
- Concurrency
- Continuations
- Dependency Spaghetti
- Rendezvous
- Syntax for Distributed Programming is Minimal
- Conflation of Programming Languages and O/Ss
- Union of Coordination and String Processing and …
- Pipes
- Time-Sharing and Memory-Sharing
- See Also
- UNIX® 2
- Takeaway - Restricted Interface
- Restricted Interfaces
- Low-Level Types
- Type Pipelines
- FBP
- Edge-Cases
- Agile
- Main Takeaway
- Anti-Takeway
- Goal of Agile
- Religion of Agile
- Sprints Are Too Long
- APIs
- Main Takeaway
- Input APIs
- Output APIs
- DLLs
- Imports
- Normalized Interfaces, APIs
- Components
- Compiler Technology (1)
- Takeaway - Parsing
- Parsing
- REGEX
- Flexibility
- PEG (Ohm-JS)
- Command Line Tool (to augment GREP)
- PREP
- Parsing Combinators
- State Machines or Recursive Descent
- See Also
- Compiler Technology (2)
- Takeaway - Portability
- Portability
- Making a Program Portable
- Portability is a Subset of Optimization
- Projectional Editing
- See Also
- Compiler Technology (3)
- Takeaway - Optimization
- Design and Optimization Don’t Mix
- Optimizing a Program Automatically
- Transpiling - Using Existing Languages as Assembly Code
- Failure Drive Design
- See Also
- Denotational Semantics
- Main Takeaways
- Anti-Takeaways
- Denotational Semantics
- Control Flow
- Making Everything Explicit
- Gotchas
- See Also
- Functional Programming - Explicitness
- Takeaway - Explicitness
- Functional Programming - First Class Functions
- Takeaway - First Class Functions
- GOTO
- Utility
- Anonymous Functions
- Lambdas
- C’s First-Class Functions
- First-Class Functions in Assembler
- Function Syntax 1D vs. 2D
- Functional Programming - Immutability
- Takeaway - Immutability
- Functional Programming - Pattern Matching
- Takeaway - Pattern Matching
- Pattern Matching
- Text Manipulation
- General Purpose Languages
- Anti-Takeaways
- Java
- Main Takeaways
- Anti-Takeaways from Java
- Garbage Collection
- Backtrace
- Javascript
- Main Takeaways
- Anti-Takeaways from Javascript
- Prototypes
- Counting Parameters
- HTML + JavaScript - GUI Programming
- See Also
- Lisp
- Main Takeaways
- Machine Readability vs. Human Readability
- Lack of Syntax
- Expression Language
- Programs That Write Programs
- Object Oriented
- Main Takeaway
- Case on Type
- See Also
- Pattern Matching
- Main Takeaway
- Exhaustive Search
- See Also
- Refactoring - Architecture
- Main Takeaway
- Anti-Takeaway
- Refactoring
- One Line Of Code
- Refactoring is a Tell
- Locality
- Refactoring - DI
- Main Takeaway
- Refactoring DI - Design Intent
- Tipping Point
- Relational Programming
- Main Takeaways
- Anti-Takeaways from Relational Programming
- Triples
- Exhaustive Search
- Separation of Concerns
- Barliman
- See Also
- Scalability
- Main Takeaway
- Scalability
- Isolation
- Structured Programming
- Main Takeaway
- Nesting / Scoping
- Q: What Could Be Further Nested In Today’s PLs?
- Package Managers
- Docker
- Environment Variables
- Environments
- The Takeaway
- Tricky Uses of Paradigms - Tricky Code
- Anti-Takeaways from Tricky Uses of Paradigms
- Loops vs. Recursion
- Continuations
- Thread Libraries
- Layers
- Waterfall Design
- Main Takeaway
- Anti-Takeaways from Waterfall Design
- Happy Path
- Other Paths
- Second Class Paths
- Waterfall Thinking
- StateCharts
- Functions
- Send ()
- Drakon
- Concurrency
- Tell: Backtraces
- Tell: Poor Error Messages
- FP - Functional Programming
- FP Encourages Waterfall Design
- Writing Less Code
- Main Takeaway
- Anti-Takeaways from Writing Less Code
- More Time for Thinking
- Flexibility
- Write-only Code
- References
- References
Programming Simplicity - Takeaways
Minimum price
$19.00
$29.00
You pay
Author earns
About
About the Book
Author
About the Author
Who Am I and Why Should You Care?
I'm a retired electrical engineer who ran a software consultancy for over 25 years. Embedded systems (credit card terminals, the kind of hardware that has to work every single time), Y2K renovation of COBOL codebases using advanced parsing and backtracking tools and design recovery, tax platforms, business strategy tools — I've built the unglamorous stuff that actually runs the world. None of it was glamorous. All of it taught me something.
What it taught me, mostly, is that software is far more complicated than it needs to be.
Hardware designers work with schematics and ICs — reliable, composable, and honest about time. Software designers inherited notation from the 15th century printing press, then the 19th century QWERTY typewriter, and never stopped to ask whether those tools were the right fit for a fundamentally different medium.
They aren't.
There's a trap worth naming early: casting deep thinking into mathematical form is a one-way operation, not two-way. Once you understand something, you can express it in math — but the math doesn't contain everything you understood. Whatever was elided to make the expression concise is gone. The map is not the territory, and the equation is not the insight. I try to keep that distinction front of mind in everything I write here.
The core thesis
Real life is asynchronous. Software pretends it isn't. That pretense is the source of most of the accidental complexity we spend our careers managing — callback hell, promises, mutex locks, race conditions, the whole zoo.
I've spent years asking one question: why are hardware designs more robust than software designs? Hardware is fundamentally asynchronous — components react to signals, they don't wait their turn. If we expressed software the same way, would reliability go up? I think yes. And I don't think the current answers — threads, promises, async/await — are the right path. Bolting asynchrony onto a synchronous foundation feels fundamentally backwards. What we're doing today is like writing assembler. We need better notations for expressing compositions of asynchronous components. Can we just start from asynchrony instead? I'm now convinced the answer is yes, and that doing so leads to something almost embarrassingly simple. If you know how to build a queue, you're most of the way there.
What I publish
I've put out hundreds of articles on GitHub Pages and Substack, and hundreds of videos on YouTube. Most of it is free. I believe in partial marks — publish the unpolished thought, not just the finished paper. A lot of what I write reads more like a working diary than a journal article, and I think that's a feature, not a bug.
The topics look scattered from the outside. Diagrams as code. Prolog. Forth. Functional programming's hidden assumptions.
They're connected. The connecting thread is always the same question: what is being elided, and what does that cost us?
What I'm driving at
We are still using 2D notation — text, math symbols, sequential syntax — to describe programs that run on hardware that lets us think in four dimensions. x, y, z, and time. We have the technology to express programs in 4D. We just haven't built the habit.
Functional programming elides time and ordering. That's fine for ballistics computations. It is not fine for systems that need to respond to the world as it actually is — concurrent, event-driven, asynchronous by nature.
I'm not arguing that functions are wrong. I'm arguing that functions are not enough, and that treating them as the only legitimate notation is what got us into this mess.
The path out involves asynchronous-by-default design, diagram-based notations, staged computation, and the willingness to admit that no single notation covers all bases. Software is catching up slowly.
I'm trying to help it catch up faster.
Contents
Table of Contents
Contributors
About the Contributors
Ken Deaton
Rajiv Abraham
Boken Lin
Ken Kan
The Leanpub 60 Day 100% Happiness Guarantee
Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
See full terms...
Earn $8 on a $10 Purchase, and $16 on a $20 Purchase
We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.
(Yes, some authors have already earned much more than that on Leanpub.)
In fact, authors have earned over $15 million writing, publishing and selling on Leanpub.
Learn more about writing on Leanpub
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.
Learn more about Leanpub's ebook formats and where to read them
Write and Publish on Leanpub
You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!
Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.
Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.