
I’ve been thinking for some time about exercises a software developer might do to grow their skill set. If I want to get my body in shape, I hire a personal trainer to teach me exercises and diet plans to reach my strength/stamina/body shape goals. What would a software development personal trainer teach? What kinds of goals would a software developer have?
Let’s address the second question first. The trainer can’t know what skills to teach until the developer knows what goals to pursue. And the developer’s goals will change depending on where they are in their career.
A new developer would need to learn basic computer science, tooling, and software development skills. This would include an introduction to a basic programming language and its syntax, data structures, programming styles (procedural/imperative, structured, object-oriented, functional, declarative) and appropriate languages, basic algorithms, and problem solving techniques. There is a lot to learn for a new developer. Most of this can be learned in school or at a boot camp. Their goals would be to understand these concepts well enough to be able to find work as an entry-level developer.
Next would be someone who is new to business computing or scientific computing. The business computing professional would be more focused on user interface and data management, while the scientist would be more concerned with algorithms and optimization. But aside from the specific details of the work, there are a number of fundamental skills that are required for both business and scientific development. Anyone working on a team with other developers will have to learn things they didn’t have to know when working on solo projects in school. Source code repositories, DevOps, CI/CD pipelines, unit tests, agile concepts, pair/mob programming and clean coding. All of these are critical for working effectively on a team. And they are hard to practice alone! So their goals would be more relational – how to work effectively with others.
Once someone has a few years of experience, new skills have to be mastered. Design patterns, software architectural patterns, TDD/BDD, adding tests to existing code, the ability to read and understand unfamiliar code quickly. Add to all of this the communication skills to help the junior developers get up to speed quickly, and to work effectively on the team. These are the foundations of development that are used throughout their career. The newer developer must learn all of this while getting work done and staying current with the latest technology trends. The more experience you get, the more is expected of you! The goals of this developer would include learning the technical skills and keeping balanced to avoid burnout.
A more senior developer will need to determine the best way to advance in his or her career. These days most employers do not have a way for technical people to advance beyond a senior technical position. The only way to “move up” is to move into management. Other employers have a technical track for growth that can keep a technical person feeling productive while still growing personally and in their career. Someone at this level will be defining application architectures, coordinating technology use between groups, keeping upper management informed about important technology options to consider for future investment. Will Larson’s book, “Staff Engineer”, covers this topic in great detail. The goals at this level are dependent on their current level of influence in the company – and how to enhance and focus it.
Assuming a developer doesn’t want to move into management, or an entirely different career, this would generally describe the career path of a software developer. The goals are changing and growing. We’ll discuss exercises for these goals in a future segment.
Where are you in your career? What goals do you have? Where would you like to be one year from now?

