You have a choice in designing your software development career
You can be a technologist that can exploit one technology to solve problems that technology was built to solve. Alternatively, you can be a computational thinker that can address a much broader set of problems, choosing or building the technology you need.
What makes a developer’s skills obsolete?
In my experience, especially early on in our development careers, we jump on choosing a technology that others around us are comfortable with or believe is “the best” before we deeply understand the problems we are setting out to solve. We are copying the work and the practices that made other developers/projects successful without understanding the principles that made those practices.
I have often noticed in the development community there is some confusion about the difference between software technology, engineering, and science. GraphQL, D3, React, Ruby…these are technical tools. Before we choose a tool, we need to define the problem at hand, apply the scientific method to identify a computational approach to solve that problem, and then think of what tools we need to get there.
Striking a balance
Exploration and exploitation go hand in hand. If all developers do is explore new technology, they won’t gain the proficiency they will need to deliver quickly. Meanwhile, if all they do is stick to what they have learned first and don’t explore enough new ideas, they limit themselves to the knowledge captured in one ecosystem. They forget how to learn quickly, and risk losing the ability to adapt when, inevitably, their tool of choice is no longer appropriate for the problem they are solving.
Having a solution design perspective, with UI/UX involved early on to deeply understand what the customer needs, plays a crucial role in building a system that most closely matches the problem they have at hand. Taking the user needs into account, we can design a system, often with a paper or low-tech prototype, that defines the computation that needs to take place to transform inputs into the required outputs.
I spoke about the importance of computational thinking in October at SCNA 2017. In my opinion, building intuition for flows of information and computation is more important than mastering any one particular language or tool, then attempting to use it as “the best” technology to solve all problems. Once an engineer understands computer science and can generate efficient algorithms, then languages and libraries become options to translate that algorithm into instructions that a machine can execute. I encourage you to make time to explore these ideas…you can read more here.