Fuck mediocrity
Here's the sad truth: computer science can be just as short-sighted, clique-y, and faddish as any other field of endeavor. University curricula are subverted and turned into vocational training for the highest bidder. The IT departments upon which businesses depend are castrated by clueless managers and staffed with incompetents. Hobbyist communities lack vision and are incestuous or cannibalistic. The state of the art has spent 30 years catching up to the end of the minicomputer era. Users once regarded computers as unknowable, powerful, infallible brains; today they are unknowable, impotent, irritating, universal scapegoats.
This is intolerable.
- Solve big, difficult, or unpopular problems
- A goldrush mentality often comes with a new toolkit, language, or class of application gaining popularity. What utility is there in tens of thousands of man-hours thrown at one ecosystem so it can claim parity with another? Many hard problems still have no solution, suboptimal solutions, or inelegant solutions; take one on and make the world better.
- Make things as thoughtful and correct as possible
- Simplicity and elegance are wonderful. Subordinate UI controls to information display. Make controls consistent and memorable; make operations streamlined. When coding begins, testing begins. Test for correctness; test for completeness; test for correct and incorrect inputs and outputs; test for coverage. Know that the code works as advertised. Incorrect output is a fatal error. Fatal errors are not tolerated.
- Refuse to aim for the lowest common denominator
- "Intuitive" doesn't exist. There is only "ubiquitous", and ubiquity is not goodness, correctness, or ease-of-use. Forcing the user to spend 5 minutes learning something that will improve their lives is not a crime. Do what is right, but make sure it's right.
- Silver bullets are bullshit
- Solutions which make 90% of the problem relatively easy make the other 10% fiendishly hard. Stay current, but be skeptical. Even in a field as young as CS, history has much to teach. Know the tools at your disposal. Use the right tool for the job. Toolsmith when needed.
- Remember the job; assume a 100 year lifecycle
- Information is the alpha and omega, the means and end, of computing. Ponder it carefully before coding: aquisition, internal representation, flow, presentation. Comprehend the data and all else will follow. Implementations are written in sand but protocols and formats are forever. Teach the machine to do the hard, boring, shitty parts of job; a modicum of programmer pain saves infinite user pain. Software isn't finished until the last user dies.
- Eat your own dogfood, every day
- No exceptions. Design must give way to bootstrapping as soon as is feasible. Release early, release often. Working code wins, and being a customer is the best way to make code work.
29 April, 2008