Composition is preferred over inheritance because having a reference to another object rather than inheriting from the other object increases the amount of the flexibility in the system, which is inherently desirable for systems which will need to be modified.
An important part of pair programming is having a mental map of each other's sentence structure and idiomatic phrases. This is not a cross-cultural problem so much as it is a problem experienced by people who do not yet share a common set of descriptors for the problems that work brings to them.
Estimating project stories is an exercise which relies on relative measurements rather than absolutes, because absolutes (i.e. time taken per "point") will be discovered in the process of the first iteration. Also, points per unit of time are roughly equivalent across different groups of developers if and only if a "point" is understood to be like a unit of currency. In other words, I can buy a pair of sandals for Rs300 or for USD $6 but they still cost the same amount. In my opinion, this also has parallels in "absolute time" as it is measured across systems undergoing relativistic affects.
The good citizen principle by Dan North discusses reasons why checking inputs that are passed internally within a program rather than in from user input is usually unnecessary.
Mockito makes provisions for a test which is expected to throw an exception. @Test(expected=IndexOutOfBoundsException.class) delights me with its implications for testing sad paths.
DBDeploy and types of test doubles came up today. Also, Junit is more complex than I knew about, and a little reading goes a long ways.
Future TWUers:
- There is a small object somewhat like an air freshener that plugs into a wall socket and glows orange. If you are having a problem with bug bites, stop by the H-block corner store (or N-block may have them also), buy one, and put it in your bedroom. I believe it costs ~300Rs and the price is absolutely worth the reward.
- In India, "sick" means "nasty" and "ill" means "sick" i.e. if you call someone sick, you're calling them disgusting. In general, everyone here is very understanding about nomenclature misunderstandings, and they're usually entertaining rather than offensive. "elevator" vs "lift" in the USA vs the UK appears to be the difference between a part of an airplane, and what one does to freeweight exercise equipment.
The internet tells me that somewhere in the world there are companies which have all of their code in a database, which they access with a thin interpretive layer. This is apparently an enormously bad idea because of its effects on testing, maintainability, and speed. I don't know how anyone thought that such a thing would be a good idea in the first place... and I'm curious. The way to refactor this codebase is to slowly add test coverage, and then refactor (in small chunks, starting with the most-used and -modified parts of the codebase) but first they have to start by making and watching a giant logfile to understand the current/expected/default behavior.
This was the first week of Pecha Kucha presentations, and some of the topics included constructive failure, clubs, the concept of "chaordic", science fiction, and saving the tigers.