This is a guest post from Ben Greenberg. Enjoy.
Dear New Developer,
Welcome to the wonderful and exciting world of software development! You may have chosen this field for any combination of innumerable reasons. No matter the reasons that brought you into this space, I am so delighted you are here. You are embarking on an adventure that can take you to so many different destinations.
As you continue your initial learning, it is not uncommon to feel overwhelmed by the sheer number of programming languages and frameworks. This is a field that is constantly in flux, always working to improve performance and overall developer satisfaction. The result of that continuous movement is a smorgasbord of language choices. Where do you even begin?
Furthermore, because this industry is so vast in potential career routes, many people gravitate towards a specialization. You may have heard terms like “Backend Developer”, “Frontend Developer, and “Fullstack Developer” among others. The combination of an endless choice of languages and a perceived need to specialize can cause many new developers to stop in their tracks and stare into the void unsure of what to do next.
I speak of this issue because I felt it firsthand when I was first beginning my career in software. I acutely felt that disempowering feeling of not knowing what to learn, where to spend my time, and which area to specialize in.
I am here now to tell you that these questions are not as pressing right now as they may feel.
Each programming language presents different ways of accomplishing similar tasks. As a developer you will be presented with a challenge you need to solve with code. For example, you may have to create a script that will iterate through an Excel spreadsheet and insert the data into a database. This problem can be solved in any number of languages. However, each one will offer different nuanced ways of accomplishing it. What is true across the languages is learning input and output, iteration over datasets, and working with databases.
The above is just one example of many. For almost any problem you are asked to solve with code, there will be two areas of knowledge you will apply:
- The fundamental concepts that power solving the problem
- The patterns, syntax and methodologies to accomplish it in a specific language
What I suggest to you is at this crucial point early in your career, focus on the first area of knowledge now. Dive into the concepts and how they work. In order to be a successful developer, you definitely don’t need to be a world class expert in these concepts, but it is a good idea to have a comfortable familiarity with them. I am referring to things like data structures, recursion, iteration, objects, functions, variables, and different data types (i.e. integers, floats, strings, etc.).
There will be plenty of time to gain expertise in a single programming language. Your ability to do so will be tremendously enhanced by your knowledge of these foundational areas. Throughout your career you will be asked to contribute code to many different language codebases, and will most likely need to gain a working knowledge of languages in a quick amount of time. By becoming familiar with the core concepts of software development, you will make that a much easier process for yourself.
This is a journey without an end, there is always more to learn, so remember to take deep breaths and enjoy each step along the way.
Ben is a second career developer who previously spent a decade in the fields of adult education, community organizing, and non-profit management. He works as a lead developer relations engineer at New Relic by day, and is building hirethePIVOT, a reverse job board for second career developers at night. He writes regularly on the intersection of community development and tech. Originally from Southern California and a long-time resident of New York City, Ben now resides near Tel Aviv.