What to do to turn myself into a master?
Chris asks: "I would say I'm at the Journeyman level, working on getting to master, but I have no masters around me. Any advice on what to do to turn myself into a master?"
There are four important things you've got to gain an understanding in:
- people
- businesses
- yourself
- technology
Understanding people is the most important part. Learn to see how and what people see, when listening to them talk. Understand group dynamics. Pride, shame, guilt, fear, honor, fairness, and the bond of honesty. Understand how people see themselves and others. Not so as to deal with people dishonestly, but to be able to represent yourself to them in the light of shared understanding.
Understanding businesses is your second most effective leverage for results. Understand your customer, and their customer. Understand your customer's arrangement with their customers. How their organization is structured, and how their deals are structured. Learning "why" things are that way might not make you sleep better at night, but it might further your understanding of people. Understand the conceptual framework of business deals, and their terminology. Understand how and why business cases are developed. Learn how to explain people how you'll make them not only more money, but better money.
Understanding yourself frees you from some limitations you might otherwise have laboured under, and might help achieve contentment, even happiness, if one is so inclined. You can play a better game if you have the balls to see what cards you've been dealt. This is the best investment you can make, but there is no magic.
Finally, understanding technology. An excellent understanding of technology lets you amplify your other skills, but can be easily negated by slacking in other areas.
Understand how microprosessors work, and how they came to be. Learn what the next year's processors will be like, and why the businesses developing them went that way. Understand how the CPU talks to the memory, and the timescales involved.
Understand the broad concepts of assembler programming, if not the entirety of the actual practise. Understand how the SoC concepts differ from servers and desktops.
Understand how rotational disks and SSDs work, and why, as well as file systems, and how people see them.
Look at HP's and Dell's price lists for enterprise hardware, and learn what those things are and what do they do. Look at the prices, and compare the prices of acquisition to the costs of operating hardware.
Learn what a good system administrator makes, and why.
Understand what operating systems do, how they usually behave, what happens in anomalous situations, and what sysadmins do to avoid such situations.
Learn how operating systems interact with the applications running on top of them, and how to make sure your application behaves well towards the operating system.
Learn the most important thing about programming: how to communicate effectively with your colleagues and maintainers through code.
Learn the second most important thing about programming: how to design efficient architectures which communicate their intent well.
It's also good to learn how to write efficient code, although an efficient architecture should ensure that a moderate understanding of these principles is enough to keep each part relatively efficient.
Learn how small a part of programming the actual programming language is, and how the entire ecosystem of integrations affects the end result of programming much more.
Learn your tools. Learn when it's good business to pay for tools, and when not.
Learn the basic history of interactions every major player in the software development landscape have left behind - you really shouldn't trust companies which screw their customers and partners time and again. You're not exempt, and it's better to learn that before than after.
Keep abreast of the latest in libraries. Pick good ones, and teach your people to use them well.
I'm sure I've missed plenty of stuff, but this should get you started. It's Sunday, so it's a perfect time to pick one thing, and get a-chopping.