I get questions like this all the time: How does one become a senior software developer or an architect? How does one grow from a junior just starting to write Java code to the leader of a software team that is driving a BMW and making $150K+ per year? What are the exact steps that won't waste time and will get you there faster? Let me share what I think might be helpful.
Before writing this, I Googled a bit and found a lot of interesting suggestions, like to be helpful, make friends, be language agnostic, code a lot, try to prove your bosses wrong, avoid conflicts, exercise, etc. Some of them are good, while others are very wrong, but most of them are just too far away from the main point.
I want to share what I believe will look more or less like explicit instructions of what to do tomorrow to become a $100-per-hour software architect in a few years. Well, they worked and keep working for me.
Don't Be Loyal. The company you are working for at the moment is just a training ground, nothing else. Don't invest an
extra minute of your time into it. Be selfish; think only about yourself and your personal skills, knowledge, and experience. They pay you to be dedicated and loyal? Well, that's their fault. Use them to learn new technologies, experiment with new ideas, train and educate yourself, get new certificates, meet new people, etc. They must work for you, not the other way around.
Don't Work. Make sure programming is your hobby, not your job. Everything else must be secondary, including your family, friends, and WoW. Software engineering is your family, your passion, your friend, and your life. Without that attitude, you will always be a slave to those who think like that. You must not work; you must have fun in front of the laptop. More fun than you're having anywhere else. Never do anything that is not fun. If you notice you're writing some code because you "have to" instead of because "you want to," stop immediately. Something is going wrong and you're shooting yourself in the foot; your career is in trouble.
Don't Make Friends. I'm talking about professional relationships in the office, within your projects, at the company you're working for. Remember that 99 percent of people will not become experts. They will remain who they are—regular programmers with no passion or ambition. What's really bad for you is that they will want you to stay with them. Nobody will enjoy seeing your growth, and your closest friends will become your enemies. Not explicitly, but subconsciously they will do everything they can to prevent you from getting better and leaving them. And you will have to leave them if you grow up. To avoid all that, stay professional and don't make friends at work.
Don't Be Helpful. There are more than 10 million programmers in the world. They all need help. Why do you need to help that dude sitting next to you in the office? You won't save the world by helping people around you—forget that religious nonsense. If you really want to do good for the software industry, focus on bigger things: make an open source product, write a book, or improve the documentation of the project you are working on. By helping people around you and solving their problems, you just cripple them, nothing else.
Don't Ask for Help. Expect the same attitude from programmers around you. Again, the same argument applies: There are more than 6 million accounts registered on the StackExchange platform; if you need help, ask them. Don't ask your friends or colleagues. Train yourself to get help from public sources or from your project documentation. By asking people around you, you're making your life easier in the short term only. In the long run, you will lack that important skill of knowing how to find information. You will become a hostage to those friends who help you. Also, don't learn from people around you; learn from books, StackOverflow, and open source software.
Don't Waste Time. This is probably the most important advice, which I have to give myself first of all—unfortunately, I waste a lot of time. Any growth is always about saying "No." You must be prepared to say it to your friends, your family, your habits, your wishes, your projects, colleagues, classes, methods, and lines of code. Stop the projects that are taking time and giving nothing back. Don't call back those whom you don't need. Yes, they need you, but you don't need them. This may sound harsh and selfish, but that's the only way to get where you want to be. Time is your main resource; be very greedy.
Don't Skimp on Growth. You must invest into yourself. First of all, you have to buy books. Don't steal them, even though you can. Buy them, spending your own money. You will take them way more serious. You will respect yourself for owning the library. You will feel that software engineering is forever with you; it's not temporary, it's not just a job, it's your life. Two books per month is your absolute minimum. Second, pay for certificates for the same reasons. Third, purchase software; don't steal it. Finally, don't be cheap on your laptop. It is much more important than your car or a birthday gift for your spouse. Your laptop is your instrument; it must be
good and expensive made by Apple. You must go "all in" if you want to win.
Don't Work Full-Time. As much as possible, try to stay away from full-time, 9-to-5 jobs—they pause your professional growth. Permanent or long-term employment gives you a stable income, a comfortable office environment, a predictable set of technical problems to solve, and the ability to become an expert over a small territory. At the same time, it takes away fear. That's right, fear. You are not afraid anymore, and that's why you stop growing. To grow and grow fast, you must always be challenged by new tasks, new teams, new projects, and new job interviews. You must always prove that you are worth something. Ideally, you must work on two to three projects part-time and change them every 6 to 12 months.
Don't Be Cheap. Forget the stories that teach "money is not everything, and an interesting project is much more important"—they are for losers. Money is everything. An interesting project will be properly funded. If it's not funded, the market doesn't need it. What are you doing there then? The only answer is that you're not as good as others; that's how they managed to buy you. My advice is to never pay attention to those cheap stories; demand cash, up front, as much as possible.
Don't Be Skeptical About Certifications. Many programmers think certifications are not important now because they don't really validate anything and are issued simply for money by big companies. Don't think like that. Certifications help you formalize your knowledge, put borders around it, and remove gaps. And they demonstrate to most of your potential employers that you're truly serious about software engineering.
Don't Ignore Management. Being a good programmer is not the same as being a good architect or a team leader. To move higher in that hierarchy, you must understand project management. And it's not just being nice to people and wearing a suit. It's a science, with a lot of rules, principles, methods, and best practices. You must study them and become very good at them. Just as good as you are in Java or C++. Start with PMBOK and earn your PMP certification.
Don't Underestimate English. Most of my readers are not native English speakers, just like myself. I'm addressing this paragraph to you: You must improve your speaking and writing skills; it's very important. You will never become an expensive software architect if you can't speak and write well. And it can't be Russian in English words. It must be as the English people talk in San Francisco, not in Moscow. The best advice to learn it: Watch English movies with subtitles. You must speak like Matt Damon or Al Pacino, but not like Mutko.
Don't Ignore Open Source. You must be active in the open source community. It's a must. You either have your own open source project or you actively contribute to an existing one. Either way, it's crucial. Working in a closed office environment is one thing, while writing code that is visible to the entire world is a totally different thing. Most programmers are simply afraid of that, and they make up many excuses for why they are not there. Don't be one of them. Yes, it's difficult, it's stressful, it will consume a lot of your private time, and nobody will pay you for it. Do it anyway—this is the fastest way to grow. Moreover, I would recommend you try to open as much source code as possible, even if you write it for private and commercial projects. Some companies won't be against that.
Don't Be Invisible. Make sure you have Facebook, Twitter, LinkedIn, and Instagram accounts, along with a blog. You must be present on the Internet. You're a serious software architect? I should be able to Google your name and find a lot of professional links, not just your Tinder profile. And they will Google your name; don't ever doubt that. My book "256 Bloghacks" may help you understand how to do it right.
Don't Stay Home. Attend seminars, meetups, and software conferences. At least once a month, you must go somewhere where other programmers are hanging out. You don't need to be super active and make a lot of friends—just be there and watch. Eventually you will realize that it's time to become a speaker. Remember that it doesn't really matter how much your coworkers respect you. What matters is what the market thinks about you.
Don't Forget to Relax. Nobody likes those smelly dorks who only get one haircut per year. They will hire you and respect you as a coder, but they will never take you seriously as a candidate for a role with a lot of
money responsibility. You will always look like a mentally unstable person. Instead, you must look "like business," even though you are a geek. That's why it's very important to pay attention to how you spend your free time—how you relax. Playing GTA 'til 3 a.m. is not what successful and happy software architects do. Instead, here is your short list of activities: sports, tourism, and night clubs. Be a normal person—that's the point.
Did I miss anything important?