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 copying the work and the practices that made other developers/projects successful without understanding the principles that made those practices.

I have noticed often in the development community there is a 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.

Exploration and exploitation goes hand in hand. If all developers do is explore new technology, they won’t gain the proficiency they need to deliver quickly. And 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 at hand.

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 these user needs into account, we can design a system that meets those needs often with a paper or low-tech prototype that defines the computation that needs to take place to transform inputs into the outputs needed.

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] (http://sarahaslanifar.com/computer/science/2017/10/27/computational-thinking.html)