Reading List

The Art of Doing Science and EngineeringRichard HammingDec 20204.5
Ready Player TwoErnest ClineDec 20204.0
CirceMadeline MillerFeb 20214.0
Axiom’s EndLindsey EllisFeb 20214.8
Why We SleepMatthew Walker, PhD--

Problem-solving Process

  1. Spend some time with the problem
  2. “What would make this easy?”
  3. Make it like something familiar
  4. Make it concrete
  5. Test
  6. Look for shortcuts and refine
    1. What worked? Why? Can it be combined with something else or consolidated?
    2. What didn’t work? Why? Do I need that? Can we bypass the problem entirely?
    3. What should be changed to improve? Is that feasible?
    4. Repeat with a smaller version of the big cycle.

Example: Coding Problems

  1. Understand Requirements (Understand the problem)
  2. Specify Input/Output (understand the problem)
  3. Question assumptions (understand and what would make this easy)
  4. Think and explore solutions (applying what woudl make this easy and is this like something I’ve seen before)
  5. Describe an implementation (make it concrete)
  6. Walk through the implementation with sample input (test)
  7. Implement in code (make it concrete, test and refine)

Steps 3-6 get cycled, occasionally revisiting 1 and 2.

Example: Engineering Problem

My process for designing a widget to solve a problem with my 3D printer is

  1. Specify the requirements. That is, what do I need this widget to do (Understand the problem)
  2. Scope the problem. What don’t I need it do? (Understand)
  3. See what’s been done before (Understand and what woudl make this easy, is this like something familiar)
  4. Sketch a solution (Understand the problem and what would make this easy, make it concrete)
  5. Design a print (make it concrete)
  6. Print and apply (make it concrete, test and refine)
  7. Repeat 3-5 (test and refine, unless things are really not working, then go back to 1)