A few weeks ago at work we were looking at the Visual Studio ALM Rangers Branching and Merging Guide and one wise colleague said that this is only a cookbook, you still have to select which recipe you want to prepare.
More recently, someone asked me on LinkedIn, “What’s the most important thing you’ve learned in your line of work? Something that college didn’t teach you.”
Well, just like in cooking, there is not in my opinion one single recipe that is more important that everything else. There are like in cooking a number of techniques that a good developer (a good cook) should know. School should be teaching new engineers some of these techniques. My experience from college is that school teach you far too few of them.
One important lesson from my experience is to expand your knowledge and familiarity with the techniques beyond what school teaches you. An excellent resource for that is the Art of Computer Programming by Donald Knuth. This series of books is huge, and myself I have not read it all. But Mr Knuth went after that which will survive the test of time, that which was true is 1968 when he first published it, and which is still very much applicable today, over 40 years later. Some do read some of it.
Just like cooking, you are most of the time not alone in the kitchen. Yes, at home you likely will do things all on your own. In a professional setting, most of the time you don’t. Then the best techniques are not sufficient. You also need to know how to interact with your colleagues and execute in a cohesive, efficient manner as a team. Many engineers sadly underestimate this point, and believe that progress in their career is primarily a function of their technical aptitude. Yes, you do need techniques and intellectual horse power, but no, you mostly cannot succeed with just those. While I do not have a great resource to refer here, I advise someone starting in this line of work not to underestimate the importance of soft skills and team work, while he needs to be ready for colleagues who likely will not give proper attention to it. People, more than computers, is the greatest challenge I have seen in software engineering.
A reference on that, from the cooking world, is the Brigade the cuisine. I would certainly not recommend using such organization for software development, but the very existence and importance of this concept in cooking show the importance of people beyond pure technique.
Another question I was asked on LinkedIn is, what does my daily routine entails, so that it may be use for practice of what goes in the work environment. I would caution people starting in the industry in trying to emulate role models that are much further in their career. Imagine you were learning to cook and try first an elaborate recipe from a renown chef. Most likely, you will fail in your attempt, the result will taste awful and you will be frustrated and disappointed. Likely you won’t learn much from the experience. (Yes, renown chefs also share sometimes surprisingly simple recipes and you can succeed at that – not the point here, and likely not what the chef does daily). Instead you do need to learn from basic, simple recipes. Learn to boil an egg, cook rice, pasta. Trivial? Don’t underestimate how many layers there is in egg cooking techniques, how much of a difference properly drained, not overcooked, a nicely seasoned pasta can make. Think of sushi apprentice chef who spend 2 years learning to cook sushi rice properly (http://www.trevorcorson.com/sushi-facts.html)
(Sorry this article lacks a proper ending, folks are waiting for me at work.)