A friend recently had to replace some electrical outlets in her house because they stopped functioning. There was so much corrosion built up between the aluminum wiring and the outlet contacts that the outlets quit working (which is much better than the alternative - catching on fire).
Did you say aluminum wiring?
During the classic rock era of the 1960s and 70s, aluminum wiring became a popular replacement for copper wiring in the USA. Due to a copper shortage, aluminum was cheaper than copper and allowed electrical contractors to lower construction costs. I was quite shocked to hear about aluminum wiring in her home, I’ve only seen copper myself, but according to the CPSC there were ~2 million homes with aluminum wiring by 1974.
Over the years, a number of problems with aluminum began to surface. Aluminum wiring is more brittle than copper, and much more likely to oxidize, corrode, and overheat. Aluminum wiring just isn’t as safe as copper wiring* and is now banned in the electrical codes of many jurisdictions. Aluminum wiring lives on in many houses, however, because it’s expensive to swap out a piece of embedded infrastructure like wiring.
Engineering is always about tradeoffs. But many times we start using a technology, tool, or methodology because it appears to save us time or money. It’s only later that we can see the problems clearly.
My question for you is:
What do you think is the “aluminum wiring” inside today’s software? What have we adopted recently that we’ll look back on in 3 years and say “ouch”.
Here are a few candidates to start the conversation (based on an informal poll of random developers I accosted):
* If you are replacing outlets with aluminum wiring coming in, please, please, please be sure to use an outlet made for aluminum. They are more expensive, and the young clerk at the store will try to sell you an outlet for copper wire, which can be a fire hazard.
Comments
codebetter.com/...
BUT Mock objects have actually already had an aluminum wiring moment, which was the usage of Strict Mocks. It seems like a lot of people (myself included) got started with Strict Mocks and the one lesson that came of that is that while they have a usage; it's a very limited usage. Using them everywhere leads to brittle tests everywhere. There are quite a few projects out there with strict mocks running throughout their tests. Sitting there quietly waiting for the day someone changes a single line of code and they can blow up.
Coding in Xaml, strict mocks, and WF can be happily tossed onto the trash heap as far as I'm concerned.
It's just plain wrong. I've been in computing for years and spent a fair deal of my time getting systems to communicate together, and never needed to have human readable messages. It's a computer, let it talk in binary. Duh.
By all means define the conversation schema in some format that can be understood by humans and machines, but don't bother sending this more than once, and don't bother polluting the data with it. Once a communication link has been setup between machine A and machine B, there's absolutely no point in transferring anything other than raw binary data - it's smaller on the wire and hence quicker. As long as both ends understand the format then you're sorted.
One day someone will agree just how crass using XML is.