Tuesday, March 31, 2009

15 Helpful Tips from Scott Bellware's Behavior Driven Class

On March 24th, last Tuesday, I attended Scott Bellware's helpful seminar on "Test-Driven Development and Behavior-Driven Development". A few of my take-aways:

  1. One bug takes a unit of time to fix, but with multiple bugs the time goes up exponentially since the bugs can interact. Moral: Code in steps and only introduce one bug at a time.
  2. Ask if the test you are about to write is a valuable test.
  3. Code-DB impendence mismatch example: If orders have links to customer in the db, in code the customer has links to the orders.
  4. Using "static" methods between layers is bad, it's like welding the objects together.
  5. Inheritance is strong coupling, to be used as a last resort.
  6. Scott and his team removed an entire layer of testing when they realized it provided less value than it took to maintain.
  7. Databases are places for dead objects, not logic.
  8. Someone at the meeting said Microsoft doesn't really do domain applications like we do, so they cannot really offer much advice on how to code.
  9. "Reuse" is not a good goal.
  10. You can overwrite tests, simple things are tested in more complicated tests.
  11. Don't use prepopulated databases with test data. Start with an empty database, and end with an empty database.
  12. When Scott asked the participants "Who does unit testing?" 80% of the 25 people raised their hands. "Who uses MSTest?", one hand.
  13. Regression tests are a side effect of Test Driven Development, not the primary goal.
  14. Doing traditional OO analysis (nouns, verbs,...) creates more objects than needed.
  15. Don't directly expose an object's collections; use helper functions on the object. (Use Customer.Add(obj) instead of do Customer.list.add(obj))

Monday, March 09, 2009

Sunlight turns carbon dioxide to methane

sunlight
Craig A. Grimes and friends at Penn State have produced 20 times the previous amounts of methane from sunlight and water with the aid of a catalyst of titanium dioxide nanotubes. This is important for many reasons:
1. The solar energy is storable as methane. The methane can be compressed into tanks and burned late at night when the sun does not shine.
2. Methane can be processed to produce liquid fuels for our cars so we don't need to import as much foreign oil.
3. To create energy this way just requires panels of the catalyst and water facing the sun. Unlike with many biomass energy crops which need arable land, water, warm temperatures, plowing, fertilizing, pesticides, and post-processing, this method is simple and direct.
4. The resulting fuel is carbon neutral.

The story is illustrative of how early on this science is. To get maximum yields they are trying different combinations of catalysts like copper and platinum. I look forward to the day when researchers don't have to randomly try different materials to achieve maximum efficiency, but that we will have a sufficiently advanced knowledge of materials we can calculate the exact proportions of elements to create methane from sunlight.

Our governments should be dumping money from helicopters on projects like this.