Just to be up-front: I’ll be fifty next year, and I’ve been doing professional software development since 1987 — 26 years. By most measures in this industry I’m an old-timer. By personal measures too: the number of times I catch myself thinking something along the lines of “kids today” with a rueful head-shake is increasing.
Life-long learning is, I think, popularly agreed upon as a prerequisite for a successful software developer. At the rate new tech and tools appear in our industry, it is vital to one’s career to stay up-to-date. This is all good.
But over the long haul you also have to nurture a perspective on the job and the industry that you simply can’t have when you are starting out.
Tools and Languages
I just missed the days of the punched card in college; we learned Pascal and C back then. But also Fortran, Ada, assembly, and Basic (!). Language libraries and toolkits were thin when they existed at all.
Since then I’ve seen, learned, and worked in a bunch of languages (C++, C#, Python, Tcl, and probably a few others) with a bunch of third-party and built-in toolkits, on a bunch of platforms ranging from Unix to Windows to Mac to Web.
Life-long learning indeed…
But there’s far more that I’ve never used! Some of that is determined by circumstance, but the main reason is that most technology comes and goes so quickly. Our industry is so full of trends and fads that not only is it impossible to keep up-to-date on everything, it is actually pretty pointless.
You must learn to discriminate: to try and predict which tools of the trade are fundamentally new and different, rehashes of failed ideas from a decade ago, are simply popular due to hype (as my mother might’ve asked, “If Facebook jumped off a cliff would you?”) or are just plain stupid. Which applications have staying power and which will be forgotten by next year.
But it’s hard to do this without a sense of the history of the industry, whether that history was experienced or learned through study. (Yes, formal education is a good and useful thing…)
The first, most critical step is to stop and think about it; to consciously try to relate the seemingly new to what has come before. Maybe the new thing is actually new; maybe it is a subtle but important twist on something that failed ten years ago; maybe it failed before but is worth revisiting since the computing environment has evolved since its initial failure.
Learn, yes. But discriminate. Evaluate. Don’t waste your time!
Beyond the Tools
Tools are important. You have to keep up to date. But tools are only part of the story, and in many ways, not even the most difficult part.
There is understanding consequences: Every tool, design, or implementation choice you make restricts choices you can make further down the line. Choices almost never exist in a vacuum, and it takes a lot of insight to understand how a choice might play out over time.
There is communication: Engineering choices are almost always made in the context of a team working under some sort of management, and management has a different set of concerns than engineers do. Valid concerns, just different. You need to communicate effectively to be successful. Being a great engineer is not just technical!
There are coworkers: The ones you get along with easily, but also the ones who make you want to rip off your arms just to have something to smack them with. But professionalism (as well as plain old civility) requires you to find ways to work effectively with them. Being a great engineer that no one can work with is not a worthy career goal…
There are processes. Every team, every company, every person has a process they work with. Formal or informal, strict or not so much. Again, it is your responsibility to figure out how to work effectively within them. And to do it with good humor and grace.
All these things require a certain perspective to do successfully. A maturity, a willingness to adapt and learn how to work in specific environment.
Which is all just to encourage you to consciously develop your understanding along multiple dimensions, and to connect what is happening now with what has happened in the past. To keep up-to-date on the latest tech, but to avoid getting sucked into the black-hole of the latest trends and fads. To use your time wisely and to learn from history and experience, as well as from manuals and forums.