- The only way to go fast is to go well.
- Keep functions as short, single function as possible
- Function is small enough when it can't get any smaller
- Keep argument collection small
- Avoid booleans arguments, create two functions
- Strive for simplicity = understandability
- Create a class when you create a bunch of variables in a function
- Craftsmanship is not the next big thing, it is the thing
- Test Driven Development is accepted, move on
- Like handwashing for surgeons. People fought it. It won.
- Continuous Integration
- Pair programming
- Do it 50 - 60% of the time, spontaneously
- Cross training built in
- QA groups exist only because developers produce garbage
- QA should be writing acceptance tests up front, not after
- Craftsmanship is not a management decision, it's your decision.
- Don't ask, do work professionally.
- Risk: Open source could disappear
- Many projects would survive the sponsoring companying closing shop with community support
- Risk: Open is a security risk
- Distribution model puts more eyes on it, shakes out bugs
- There are gatekeepers that control contributions
- Rails positioned it self by embracing the RESTful nature of the web.
- Areas of concern: the client
- disconnected content, partially disconnected content
- Avoid incremental rendering, stale data is better than no data
- RESTful, Semantic HTML
- Twitter throws things out to see what sticks
- For person search, they launched one version in three weeks then moved onto iterative improvements
- Settled on Scala partly because it's cooler than Java
- Functions should affect no external change
- Values are snapshots in time
- Clojure handles value immutability without much effort
- Balance between humility and pride
- Awareness of one's own ignorance
- Questioning "conventional wisdom"
- The Invisible College
- Master of tools, being an optimizer not a customizer
- Discerning technology trends
- Motivation
- Knowing when it's time to change jobs
- Having a non-IT plan B
- http://ridingthecrest.com
- Ops innovation is held back by change management.
- Operations as code - scriptability of configuration, deployment, etc
- Keep it as simple as possible to be able to deploy anywhere.
- TDD is about gradual design and pacing (small, steady steps progress).
- Testing helps your refine what your software should do.
- Changes to code requires changes to tests.
- Mocks force you to consider how your objects will interact.
- Key point to agile: remove friction from workflow. Fix problems. Work life gets easier.
- Connected vs disconnected
- Data knows about its origin, connection
- Examples: GetGlue, Twine
- SQL Data -> RDF
- Sparql querying language
- NOSQL = Not Only SQL
- RDBMS
- Consistency: all nodes will report the same data at any given time
- Difficult to scale: scale up, not up
- CAP - Consistently, availability, partition tolerance (pick 2, ditch 1)
- RDBMS = CA
- NOSQL = AP
- Cassandra
- = Dynamo + BigTable
- Column oriented
- Auto scaling
- Read repair
- Location awareness
- Gossip
- Nodes randomly connect to cluster to get state update
- Anti-entropy
- Uses layered checksums to detect disk corruption
- Fast reads
- Mysql 100ms, Cassandra 10ms
- Super fast writes
- Cons
- No JOINs
- No automatic indices
- Thrift
- Applications: logging, batch job output, social network data
- Liskov Substitution Principle
- Knuth premature optimization dictum
- Law of Demeter