Some Computer Science Principles to Live By
- Cache everything.
- Make the common case fast (and the rare case correct).
- Use randomness to probabilistically avoid the worst case.
- If neither approach works really well, try a hybrid approach with a way to
decide when to use each technique.
- Add a level of indirection.
- If you can't solve a hard problem, first transform it to an easy problem, then solve the
easy problem, then transform the solution back to the hard domain.
- Before you start, do the math, know the best case, and remember Amdahl's Law.
Things They Don't Teach You In Grad School (But I Learned Them Anyway)
Under construction...watch this space.
Principles of System Architecture
From an IEEE Spectrum article (Oct 92?) about systems architecture. For your reading
pleasure i have reproduced below a list of heuristics for building a system. This list
appears in the article and is reprinted from Systems Architecting: Creating and Building
Complex Systems, by Eberhardt Rechtin, Prentice Hall 1991.
The conceptual phase
- The choice between architectures may well depend on which set of drawbacks the client can
handle best.
- Extreme requirements should remain under challenge throughout system design,
implementation and operation.
- Don't assume that the original statement of the problem is necessarily the best or even
the right one.
- No complex system can be optimum to all parties concerned, nor all functions optimized.
- A model is not reality. (!)
- Complex systems will develop and evolve within an overall architecture much more rapdily
if there are stable intermediate forms than if there are not.
- Build in and maintain options as long as possible.
- Don't make an architecture too smart for its own good.
The build and test phases
- The product and process must match.
- An element good enough in a small system is unlikely to be good enough in a more complex
one.
- Within the same class of products and processes, the failure rate of a product is
linearly proportional to its cost.
- High quality, reliable systems are produced by high quality architecting, engineering,
design and manufacture, not by inspection, test and rework.
- Regardless of what has gone before, the acceptance criteria determine what is actually
built.
- To be tested, a system must be designed to be tested.
- Qualification and acceptance tests must be both definitive and passable.
- The cost to find and fix a failed part or software bug increases by an order of
magnitude as that part is successively incorporated into higher levels in the system.
The operations phase
- Before the flight, it's opinion. After the flight, it's obvious.
- The first quick-look failure analyses are often wrong.
- For every competitive system, there is a countersystem.
- Success is defined by the beholder, not the architect.
- There's nothing like being the first success.
fox@cs.stanford.edu