Simplicity == lack of nuance simple anti-simple comment




Parameter List
anti-simple SEND() is sufficient
Return Value
anti-simple SEND() is sufficient
Exceptions
anti-simple SEND() is sufficient
CALL / RETURN
anti-simple leaves breadcrumbs on stack
aka dynamic call chain
Aka hidden state
Conflating control flow with data structuring
anti-simple OOP does not handle control flow well
(in an encapsulated manner)
Composition simple

Inheritance
anti-simple
Scalability

needs simplicity
Synchronicity built on top of parallelism simple

Multi-tasking built on top of parallelism simple

Multi-Tasking built on top of synchronicity
anti-simple
Time Sharing
anti-simple
Scapple simple

FreeMind
anti-simple asks what kind of diagram, before jotting down thought(s)
TL;DR

another way of saying not-simple
Complexity

another way of saying not-simple
One-line manual / one-page manual / docs simple

More than one-page manual
anti-simple
Dependencies
anti-simple
Make
anti-simple accommodates dependencies
Data Structures
anti-simple
Optimization
anti-simple
Single parameter stack
anti-simple
A Stack for every Type

simpler
A Stack for input

simpler
A Stack for output

simpler
Multiple Return Values
anti-simple SEND() will do
SEND() covers more cases
Hierarchy

simplification
Encapsulation

simplification
RY simple
Repeat Yourself
DRY
anti-simple Don't Repeat Yourself
Could be handled automatically by
Common-expression elimination
Good for maintenance, hard for users
Single syntax for writing and reading Code
anti-simple
Global variables
anti-simple
Global Functions
anti-simple
Global Types
anti-simple
Global message passing
anti-simple
Message-passing in hierarchical manner simple

Scoping variables simple

FP simple
but too restrictive
Diagrams simple

Visual Programming using pixels
anti-simple
Atom simple

Molecule
anti-simple
Cat simple

Cat -v
anti-simple
Compile-time vs. Runtime
anti-simple should be a continuum
Static Type Checking vs. Dynamic Type Checking
anti-simple should be a continuum
Typeless simple
for the user
Typeful
anti-simple for the user
Pragma
anti-simple symptom of non-simple Design
4-Banger Calculator simple

Scientific Calculator
anti-simple
Calculator App on Computer
anti-simple
VisiCalc, Excel, et al. simple

PLs (Programming Languages)
anti-simple
Back door with paddle simple

Back door with bar
anti-simple see "Design of Everyday Things"
https://www.amazon.ca/Design-Everyday-Things-Revised-Expanded/dp/0465050654
Everything is an Object
anti-simple
Everything is a Relation
anti-simple
Everything is a Type
anti-simple
Splitting Data Design from Control Flow Design simple

Creating Data Structures at Compile Time
anti-simple premature optimization
Could use processor to create data structures at runtime
One app on one cpu simple

Design using multiple paradigms

can be simpler esp. With encapsulation
Design using a single paradigm
anti-simple
OO simple
for data design
OO
anti-simple for control-flow design
State simple
with Harel StateCharts
CASE statement on type
anti-simple use OO for this
CASE statement on Control-Flow
anti-simple use Harel StateCharts for this
CASE statement for splitting data
anti-simple use if-then-else for this
CASE statement
anti-simple (should we get rid of CASE?)
LOOP
anti-simple doesn’t work well for describing distributed computing
Recursion
anti-simple doesn’t work well for describing distributed computing
Multi-tasking with Time Sharing
not simple useful only for operating systems
Multi-tasking without Time Sharing simple
closures provide the effect of “separate stacks”
Full Preemption
anti-simple only a few instances where it is needed:
Windows / MacOS / Linux / etc.
Modal Dialogs
anti-simple epicycle induced by synchronous mind-set
force-fits asynchronous concepts into synchronous paradigm
Thread Safety
anti-simple replace with one processor for each App
Priorities
anti-simple use hardware priorities with caution
Essential Complexity
anti-simple too often used as an excuse for non-simple design
Denotational Semantics
anti-simple
Peter Lee's treatment of Denotational Semantics simple
Lee applies Divide and Conquer technique to
Make D.S. work in passes
aka the opposite of everything-at-once
https://www.amazon.ca/Realistic-Compiler-Generation-Peter-Lee/dp/0262121417
UNIX pipes simple

UNIX pipes in Operating Systems Only
anti-simple Pipes should be built into every PL
FP function pipes

pipes can do more than just chaining call/return together
Textual representation of pipes
anti-simple restricts outputs to only what can be expressed as text
use diagrams & DaS - Diagrams as Syntax (not pixels)
Silver Bullet

there are many - not one - silver bullets
Solving a Problem simple

Generalizing a Problem
anti-simple
APIs
anti-simple
Plugging earphones into a phone simple

LOOP ... EXIT WHEN ... simple
more than one exit-when clause can be used
LOOP ... FOR ... and all other variants of LOOP
anti-simple
Single inheritance
anti-simple better than what we had
Multiple inheritance simple
eschew fitting everything into a single taxonomy
Eschew fitting everything into a single paradigm
Hardware IC simple

Software Library Component
anti-simple uses only one paradigm: "everything is synchronous"
Structured Programming simple

Scoping simple

Flat <anything> simple
simple for user
Flat <anything>
anti-simple when scaling is required
Declarative

sometimes simple but not always
Backtracking

sometimes simple but not always
LOAD() simple

ASDF (Make, etc.)
anti-simple Band-aid for dependency-driven design
Cache
anti-simple
Spaghetti Architecture
anti-simple
Refactoring
anti-simple symptom of spaghetti architecture
Embedding Architecture into Code
anti-simple
Code is Architecture
anti-simple
Using existing PLs for Architecture
anti-simple Computer/Software Architecture needs its own language
PLs with + (& other operators)
anti-simple PLs should have as few operations as
needed by a specific solution
S/SL simple

YACC
anti-simple
S/SL semantic language simple
beautifully simple
handles to data simple
encapsulates data
indirection simple

Drakon simple

FBP simple

CL (Common Lisp)
anti-simple wonderful assembly language
Human Interface (Raskin) simple
https://www.amazon.ca/Humane-Interface-Directions-Designing-Interactive/dp/0201379376
Window Scrolling Focus vs Typing Focus
anti-simple window focus should mean that the
window gets next keystroke and/or
next mouse-wheel event
Found in MacOS and Ubuntu Gnome
Cascading Menus
anti-simple requires precision
Configurability
anti-simple
Single Syntax for Writing and Reading
anti-simple e.g. in CL ")" is overloaded - "end if" ... "end let" etc...
Writing Code is a different activity than reading Code
Cognitive Load
anti-simple
Knowledge of data structure wired into Code
anti-simple e.g. knowing that something is a List in CL
(except at the lowest levels)
Use OO for this
Finding atomic components to a solution

Hard to do, but simplifies Design
e.g. atoms for parsing
DRY
anti-simple reserve for maintenance engineering
Programmer (concept of)
anti-simple split into separate fields such as:
(a) Architect
(b) Engineer
(c) Production Engineer
(d) Maintenance Engineer
(e) Test Engineer (create tests &
modify design for better testing)
(f) Coder
(g) Testing & Q/A
semi-colon in syntax
anti-simple
comma in syntax
anti-simple
scoping simple
same as "hierarchy"
parameters
anti-simple flat
return value
anti-simple Flat
too restrictive
von Neumann paradigm simple
but limited
von Neumann paradigm
anti-simple for concurrency
von Neumann paradigm
anti-simple for parallel
von Neumann paradigm
anti-simple for distributed
Everything is von Neumann
anti-simple
computers simple
but parallel
consciousness simple
but limited
autonomous nervous system

parallel