I have a theory that the best software developers are also really good at some discipline that involves putting things together that is tangible. By ‘tangible’, I mean that software engineering generally involves resources that you can’t actually hold, like time or code or computation. It’s much harder to understand consequences when all your problems are abstract.
So take, for example, cooking. If you wanted to prepare the following meal for your family:
- Pasta with home-made tomato sauce
- Chicken, marinated for over 30 minutes
- A simple salad
and the goal was to have dinner ready at 7, with each of the 3 parts done at the same time, so that the hot dishes were hot and the kids got to bed on time, you need a pretty complex project plan. It doesn’t have a lot of elements, but it does have a lot of parallelism and mode switches, plus some dependencies. Continue reading “You Should be Good at One Non-Engineering Discipline”