What do programmers do?
(note: click Ø in the menu on the lower-right to disable slideshow mode)
Title: | Better Stories, Better Languages |
---|---|
Subtitle: | What do programmers do? |
Author: | François-René Rideau, TUNES |
Meeting: | ILC'09, 2009-03-24 - revised 2011-09-22 |
URL: | http://fare.tunes.org/computing/fare-ilc09-lightning.html |
Software tools imply a story.
New stories can help invent new tools.
Explicit stories are a great meta-tool...
A: Average stories commonly told.
B: Better stories improving upon them.
You: Compare. Agree? Find a pattern?
Issue: Starved programmers don't code
Story: Owning SW, static Vendor & Customers
Solution: Proprietary SW, One True (Closed) Source
Story: Owning Labor, dynamic contributors
Solution: FLOSS, anyone can fork/merge at anytime
Tools: source tuned for open maintenance, DVCS
Issue: software is too big to handle in one lump.
Story: hierarchical design in parts; fully informed.
Solution: top-down management, layers.
Story: Partial information. Propagator network.
Solution: Packages. Version Control.
Tools: Software Distributions (Debian). DVCS.
Issue: software components are hard to design
Story: get expertly designed language, library...
Solution: experts standardize now for everyone after
Story: dynamically delegate responsibility to expert.
Solution: dynamic market in expert service.
Tools: modular system extensions, software repos.
Issue: not every PL is as fit for a problem
Story: Programming languages are for machines
Solution: match machine features, Turing tar pit
Story: Programming languages are for humans
Solution: match human cognition & social process
Tools: simpler, cleaner programming languages
Issue: repetitive programmer behavior
Story: programmer as grunt worker
Solution: Theorize repetitions as Design Patterns
Story: Programmer as abstract thinker
Solution: metaprograms (Turing!)
Tools: PL extensibility (macros, etc.).
Issue: limitations of a fixed syntax
Lisp Story: side-effect One True Lisp World.
Solution: bind symbols to macros, modify readtable
Problem: new syntax makes your language autistic
Story: exploration of many worlds, purely
Solution: scoped syntax extension
Tools: PLT modules, locally extensible grammars
Story: speech for users, writing for programmers
Solution: unrelated languages, multiple levels
Story: no difference b/w using and programming
Solution: integrated interactive interface
Tools: dynamically extended interfaces
Issue: writing a compiler is hard
Story: specialists write compiler, others use
Solution: closed implementation for each language
Story: special (meta) case of using and programming
Solution: same language can switch level of abstraction
Tools: MOP for DSLs, "A implements B" (PCLSRing)
Issue: designing a language is hard
Story: specialists define big language, others implement
Solution: static language, blind spots, slow update, bit rot
Story: specialists know and implement specialty
Solution: modular language, delegate specialties
Tools: grammatical mixins, monadic lifting
Issue: programming involves heterogeneous activities
Story: each activity has its own language
Solution: C, scripting glue, sysadmin tools
Story: the same brains do all these different things
Solution: one language w/ many contexts
Tools: universal languages
Issue: interrupt, inspect, extend, fix running programs
Story: exceptional situation, retrofit ad-hoc tools
Solution: low-level debugger, ad-hoc debug info
Story: compiler as reversible lens, VW controler
Solution: generalize PCLSRing, external meta-info
Tool: dynamic controlling (remote) meta-process
Issue: security is a hard, whole system property
Story: get it to run, think about security later
Solution: try retrofit fixes to most glaring leaks
Story: security is a deep component of SW quality
Solution: design SW with security from the start
Tools: capabilities, whole-system protocol design
Issue: bad manipulations happen, data gets lost
Story: error is exceptional, catastrophic
Solution: confirm, remove bin, undo last
Story: error is normal, casual
Solution: monotonic info, never lose data
Tools: reversible interfaces
Issue: a PL constrains the contracts you can express
Story: PL as a given. Follow it. Document the rest.
Solution: team division, informal contracts.
Story: PL as convention. Extend it.
Solution: Formalize contracts. New formalism if needed.
Tools: DSLs. Better type systems.
Issue: arbitrate resource, enforce invariant?
Story: Central dictator
Solution: Kernel, needs perfect static model
Story: Property Law
Solution: self-enforced contracts
Tool: invariant-enforcing linkers, delegated authority
Issue: who controls (accesses, frees) a resource?
Story: control possible iff low-level
Solution: manual management (C/C++) vs GC
Story: essential concurrency b/w H&M processes
Solution: mononotic + linear logic
Tool: pure values vs actor-owned regions
Issue: technical and social limits of single-machine computing
Story: putting together many different systems
Solution: invoke remote methods, ship information around
Story: many agents partake in the same system
Solution: share pure information, manage local state
Tools: content-based addressing, declarative deployment
Issue: can't have a single trust domain for everything
Story: when in a mess, virtualize ad-hoc domain
Solution: virtual process, virtual Unix, virtual PC
Story: everyone is "root" in his Virtual World
Solution: Never log as root. Create your sub-domain.
Tool: PL support for VM. Create a sub-user!
Issue: important data must persist against hw/sw failure
Story: persistence is disjoint from PL design
Solution: ad-hoc files, databases w/o good PL
Story: persistence is an essential aspect of PL
Solution: integrate persistence & virtualization
Tools: orthogonal persistence, explicit prevalence
Everything is stateful. Java.
Functional programming.
Mostly functional. OCaml, Clojure.
Purity at base-level. Haskell.
Purity at meta-level, too. Unlambda.
Actors encapsulate state. Erlang, Reactive FP.
State is meta-level modularity.
Encapsulate and recapsulate.
None of these Stories is revolutionary.
Each Story has been at least foretold in a past system.
But no system embodies all these Stories at once.
Average stories are about things.
Better stories are about people making things.
Average stories have early binding of what's Good.
Better stories have early banning of what's Bad.