Thinking Better Tech Designs

Where I work, there are programmers of widely varying skill levels all working on a single project. Some pieces tend to get behind, and some finish much more quickly. There are a seemingly endless number of integration problems. I am daily pondering what the differences are in the way people develop, and how I can communicate good ideas in a way that will help people reach that “eureka” moment where they get it.

Generally speaking, I’ve been pretty bad at it. I’ve tried explaining inheritance with stories, shaking people by their collars, etc, nothing really seems to work. The result is that people write code the way they always have: messy, hard to understand, hard to transfer to another owner, hard to change without creating new bugs.

Today this SLAR on System::Console got me thinking. Particularly, this line:

This class is a classic example of “design in reverse.” Before we designed this class we knew what we wanted the Hello World example to look like:

Console.WriteLine ("Hello World");

Well, there it is. That might be my own “eureka moment.” Write an API for yourself as you go. For every task you have to accomplish, ask yourself this:

If I had access to an oracle that could do my task for me, how would I want to use it?

Then start building that oracle. It’ll have steps that seem hard too, but use more oracles and more black boxes.

Another important point is to avoid thinking about code as much as you can.

Now, there are (obviously) a lot of steps between being a programming neophyte and being in the top few percent of software engineers. Most people need to get a lot of bad code out of their system before they’re much good. And this is certainly an oversimplification of thinking like a good developer.

Thinking of the best questions to ask your oracles can be a subjective, soft science too–but hopefully this is a decent starting point.

Tags: , ,

Leave a Reply