To summary, you can call yourself a Senior when:
- You can handle the entire software development life cycle, end to end
- You lead others, or others look to you for guidance.
- You can self manage your projects
Software development is a curious creature unlike other fields. Sometimes, a fresh punk out of college can run circles around veterans who have 20+ years of “experience”. Programming is a bizarre world where code is king.
Some achieve the above in 2 years or less, others take 10 years. 1
Software engineering is hard. The industry is always changing and you need to keep up with it. You need to put constant effort and time. There is always more to learn than you can possibly absorb. Many engineers who finish a several month boot camp don’t realize how much more they need to learn on top of it. No worries, there is a clear path to becoming a senior software engineer in almost any area of software development. 2
Step 0: choose your path and stick to it!
do one thing and do it well Doug McIlroy : Unix Philosophy
I can’t emphasize this enough! It is really important to choose a specialty and a technical stack that you will be working with. Sticking to it and not getting distracted is what will make you a specialist. It’s an important choice to make. Here is how to do it:
- Choose your specialty. It’s what you want to do. For example: Web development or Mobile development or DevOps etc.
- Stick to it and master it.
I’m not saying that you shouldn’t get familiar with anything else outside of your main specialty. A well rounded T-Shaped Software Engineer knows about other aspects of programming too. Although he/she knows their main specialty extremely well. Now that you’ve chosen your specialty, you have a lot of things to learn. Take your time. It will take you several years to read all these books and practice necessary skills. Get through this challenge one skill at the time. I’ll be using the following technical stacks going forward: Ruby on Rails for web development, iOS for mobile development. It is just because I have experience working with it. I can speak to it personally. At the end of the says it’s just a matter of taste. If you choose some other stack, you’ll need to find different books.
Step 1. Lay the foundations
Read The Pragmatic Programmer book. It’s a good starting point on the path to software mastery. The book summarizes best high level practices. It’s language / technology agnostic. It doesn’t matter which tech stack you choose, the main principles stay the same.
Step 2. Master your programming language
- For a Ruby Developer – Programming
- Ruby For an iOS Developer – The Swift Programming Language
Step 3. Learn your framework
Choose one, learn it:
- For a Rails Developer – Rails Tutorial by Michael Hartl
- For an iOS Developer – iOS programming: The Big Nerd Ranch Guide
Step 4. Become a master of your text editor / IDE
Again. Choose one, master it and stick to it. If you chose VIM, stay with VIM and become a master of it.
Step 5. Use your Version Control System like a pro
I recommend using Git. Here is the resource that I like: Pro git – free online ebook with a complete breakdown on every aspect of git
Step 6. Commit to doing Test Driven Development
Choose a book specific to your tech stack, learn it. Get into a habit of doing it every day. Quality code comes with writing tests.
- For a Ruby on Rails Developer – Rails Test Prescriptions
- For an iOS Developer – Test Driven iOS Development
Step 7. Refactor as a habit
The codebase grows in complexity as you add more functionality. In order to keep your codebase manageable you need to refactor. If you don’t refactor as you go, you’ll soon come to a sad place where even a small change is hard, bugs are inevitable and nobody wants to deal with your messy codebase. Just make your life easier. Don’t delay your refactor. Get into a habit of refactoring. Here is a good book on how to do it: Refactoring: Improving the Design of Existing Code by Martin Fowler
Step 8. Learn software architecture
Depending on the stack you choose, find a good book on architecture. Here is one that I recommend by Martin Fowler. It’s called Patterns of Enterprise Application Architecture
Step 9. Unleash the power of the command line
The command line can feel intimidating at first. Although, as soon as you learn how to use it, you’ll become a lot more efficient in performing basic tasks. That alone makes you a better developer since you are able to achieve more in less time. Then you can take it to the next level. Use shell to automate common tasks and build your dotfiles. If you’re working on a Mac or any Linux distribution, learn shell. Here is a good book on it by Mark Bates: Conquering the Command Line
Step 10. Code code code!
Every single day. Like in any sport, you need to practice what you learned in order for knowledge to stick.
Yes, becoming Senior Software Engineer is hard. It takes a lot of time and commitment. Different people learn at different speed, but on average, it takes about 10 years to become a solid senior dev. It’s a big investment in time for a big return. Software Engineers have the bright future. They are in high demand on the job market. Their salary grows proportionally with their experience. It’s a rapidly growing and a relatively new field. Every day of a software engineer is a challenge. A challenge of changing people’s lives. Go ahead and take on this challenge by becoming a Senior Software Engineer one skill at the time.
And to me, title is just title. It can be your past experience. It can be your new goal. But you need to prove that you’re worth it.