Here are my notes from Zach Tellman's talk at EuroClojure 2013.
- In Time Machine by H.G. Wells, there are two races: Eloi and morlocks. At night the morlocks come up and eat the eloi. This is a parable about knowledge and innocence. The Eloi live in a false simplicity – in a leaky abstraction.
- We create abstractions that try to provide a simple face, but we don't really understand the foundations. We don't understand how computers work. Tension between creation and understanding. There's always something underneath that can bite us.
- We build systems that model and interact with the real world. Because of this, they are too complex for us to understand all at once.
- We break things into pieces until they're bite-size. We then impose hierarchy on the pieces. But, there are assumptions we have to make: That each subtree can be considered in isolation. That we only care about parent-child relationships and siblings as sets. Think game trees (e.g. tic-tac-toe): We can search possible game boards in the subtrees. But the systems that we really build aren't quite the same. There are subtle and tenuous connections. Imposing a hierarchy adds invariants that aren't really true. This is the opposite of a game tree, in which everything stems from the root (= the core truth). In our systems, hierarchies aren't real or they are simplistic. There is information loss. Truth resides really in the leaves.
- Comparison to scientific forestry (1850s, prussian empire): Forests are inefficient for creating lumber – heterogenous, hard to estimate, and no one part is representative of the rest. Trees are also not uniformly useful. They solved the problem by creating a regular geometric structure using a single species. For the first harvest, worked well. After that, problems started to crop up: Health of the soil suffered, became impoverished. Stunted trees. Parasites.
- If a forest is just a means of producing lumber, this makes sense. Otherwise an absurd attempt, just to reduce cognitive dissonance.
- I.e. forest as a system. The Clojure community as a system.
- Gerald Weinberg: Introduction To Systems Thinking.
- Two axes: Complexity - the number of moving parts, and randomness - how independent the parts are.
- If the system is sufficiently simple and nonrandom, formal analysis works.
- If the system is sufficiently indepedent, statistical analysis works.
- Everything in between requires systems thinking. You can't understand these systems completely. Requires heuristic thinking.
- "Heuristic devices don't tell you when to stop". When all you have is a hammer...
- Abstractions have boundaries and limits. They represent a narrow view of the world.
- In the READMEs of new libraries and services we make, we could talk about capability and incapability, but we often don't. Reasons: hard to map out boundaries of the creation without failed experiments. Then when we finally have mapped it out, we know the problem space so intimately its hard to explain it to others.
- The "scattershot silver bullet": Tried for one thing, by induction works for everything. Half of Hacker News discussions are like this. The other kind of discussion: Tried it, didn't work.
- There's a boundary here. But if you have a lot invested, you can program yourself around it and tell others they're wrong.
- Critical Theory: mid 1900s philosophy. Marx and Freud pioneered, for analyzing text. Describing structure of human thought. Had gaping holes, naturally. Holes pointed out by Deleuze, Guattari, in what was thought of as the beginning of postmodern theory.
- Interaction between state mind and nomadic mind:
- The state mind tries to understand the entire world. It builds hierarchy, but is not sufficient. Has to force simplification into the world, to control it.
- The nomadic mind just tries to understand the world as it is, but only a little bit at a time. Deleuze's "body without organs".
- A rhizome: Technical term for a series of interconnected roots. Describes fundamental interconnectedness of things. The nuanced, varied, relationships in the world. A graph. The state mind tries to turn it to a tree.
- Jorge Luis Borges - wrote stories about infinities, taking ideas past breaking points. Infinite Libraries. Master of reductio ad absurdum.
- Modern Urban Design: 1920s, Hausmann redesign of Paris for orderly structures.
- This aesthetic extended to whole cities (garden city, spokes and hubs). Centralized control. Centralize, rationalize. Huge housing units with bulk efficiency
- 1960s Brazil and Brasilia, built wings with superblocks with 1000s of people. Even within the superblocks, had to travel by car because of huge open spaces. The street not a center of life as traditionally, instead became a means for people to drive places.
- Christopher Alexander: A Pattern language, Timeless Way of Building. Repeated quality: The quality without a name. Alive, whole, comfortable, free, exact, egoless, eternal.
- Patterns are contextual, never twice the same, but influenced by the place in which it occurs.
- Alexander influenced GoF, of course.
- GoF missed the point: Alexander was descriptive, local, contextual. GoF said these are ways we can compose software, prescriptive.
- Dick Gabriel: Patterns of Software. "What is the quality". Doesn't give answers. Discusses properties like locality (observe just part of the system), habitability (degree to which can change a system comfortably). These properties are much more useful, and provide a more useful conversation than what the GoF does.
- Greeks had two sorts of knowledge: Techne (e.g. pythagorean theorem) and metis (cunning, wisdom, e.g. Odysseys' fooling the cyclops. Local, contextual, nomadic).
- Engineers are taught techne, bringing order to the world.
- If we rise a little bit above that to the system level, techne is characterised by local considerations, tradeoffs.
- Goal: In addition of digging through the CS annals of the past 60 years, acknowledge that what we do is fundamentally fuzzy. Our attempt is to make sense of the world, not to impose order on it. People have always done that.
- This is so we can become better engineers, but not just via new math and approaches (e.g. core.logic). We won't see
core.semiotics, but that doesn't mean these things don't have value.
- This is hopefully the beginning of a conversation. As a community, we can create a vocabulary of ideas even though they're hard to reason about.
- Because Clojure is a very mutable language. We can write it in whatever form we want. When we encounter boundaries ("this is hard to do in clojure"), we can work around it. We may sometimes come up with questionable stuff, but the medium is amazing for exploring boundaries of ideas.
Know Your AngularJS Inside Out
Build Your Own AngularJS helps you understand everything there is to understand about AngularJS (1.x). By creating your very own implementation of AngularJS piece by piece, you gain deep insight into what makes this framework tick. Say goodbye to fixing problems by trial and error and hello to reasoning your way through them