Learning Vs Growing
Learning a new skill is one thing. Growing in your career is different.
Imagine an artist, we’ll call him Bob, who wakes up each morning and needs to create a masterpiece. But in this bizarre universe Bob is given a completely different medium to work in each day. First Bob needs to complete a painting learning all there is to know about brushes, canvas, and paint. A day later he needs to do a sketch with various sizes of pencils. Next he’s forming pottery, then glass blowing, then sculpting with marble.
Surely one person can spend their entire lives mastering just one of these mediums, so what is Bob going to do to become a master artist when everything is constantly shifting from under him?
The answer is to always look deeper to find the common pieces and find true growth in the career. Bob must look to understand the core fundamentals: light, shadow, geometry, symmetry, color theory, as well as the typical relative nuances of each medium to know how the fundamentals apply.
Additionally, Bob will want to standardize his approach. He always starts with a simple shape to get his bearings around the new medium. He tests the boundaries and capabilities of his tooling and materials. Then he adapts, building what makes most sense while applying his keep knowledge of form (shape, color, light) to the new context.
Software Engineer Growth
Core
- Type Theory
- Language Patterns
- Design Patterns
- TDD
- Word processing
- Source Control
- Abstraction
- Scale
Sticky
- Specific source control (github)
- CI/CD
Skills
- Specific languages
- Specific systems
- Specific IDE
- Specific Libraries or tooling
Ephemeral
- Libraries in a specific language
Method
In addition to focusing on core concepts, the master will have a method for continuous learning and an approach to new context. Maybe it’s todo app or a simple clock example for learning new web technologies.
Wrap it up
When we say someone is a “junior” engineer, we don’t mean that they have less knowledge about a tool or language, or that they are less capable of learning. What we mean is that they haven’t yet developed the habits (behaviors) for approaching new things and/or they haven’t developed mastery in the core common elements of software engineering.
Therefore, to “level-up” or “upskill” is not a matter of teaching, for example, typescript. Rather it’s a matter of understanging how typescript compares to all other categories of type systems. This is where the misunderstanding of “senior” engineer often comes into play. Because someone can make a website with one specific set of tools, doesn’t mean they will be able to do so with changing requirements, tooling, systems, at scale, etc. Mastery at a deep level takes decades, not years, of consistent practice, learning, and habit building.