OK, it’s time to publish this piece. I’ve been dancing around it for quite a while, telling you how to make more per hour, how to manage those stupid managers that don’t let you grow, how to boost your career and how to deal with office slavery. Now here is a simple, plain list of recommendations for you: what you should do if you want to be a more successful programmer. Not a better algorithm designer, even though that’s important. Not a funnier clown team player, even though that’s also important. But a more successful software engineer, both financially and socially.
There is no particular order here, just everything I have in mind, in one list.
Make Your Own Product. Learning how to program and actually programming are not the same thing. The best, and the only right way to learn is “by doing.” The best way of doing is to create something meaningful and important. If it’s your own product—even better. If someone pays you for that—best of all. Every time I want to learn something new I make up a realistic goal and attempt to achieve it. A few years ago I was interested in learning Python. Instead of going to online courses or reading books I tried to create a small web app for my own marketing purposes. At that time I knew Java, but I wrote that app in Python. My recommendation: never study anything in an academic way, always do something real using the tech stack you want to learn.
Change Languages. Don’t get stuck with one stack of technologies, no matter how much you love it. Of course, you don’t want to be a “jack of all trades,” since they are never paid well. You want to be focused. But “one focus” in life is not enough. I switch languages every 4-6 years. I started with Pascal, then it was C++, then Java, then PHP (yes, you heard right, I’m ZCE/ZFCE), then Java again, and now it’s Ruby.
Go Full Cycle. Writing code that “works on your laptop” is a great achievement… for a junior programmer. A senior knows that it’s only a part of the job. The smaller part. The bigger part is turning your “working” code into a market-ready product, which means merging and auto-testing, compiling and packaging for multiple platforms, staging and acceptance testing, bug reporting, metrics collecting, A/B testing, stress and load testing, deploying to production, and even reporting to investors. Modern software development life cycle is a giant mess show. Do you know how it all works? You don’t? You don’t care? You are not a senior developer.
Open Your Sources. Like I said in my talk How Bright Is Your Future? at RigaDevDays, the future of software will almost entirely be open source. The amount of code that companies keep proprietary is decreasing every year. You have to be an open source advocate if you want to be successful. If you are still afraid, or don’t have time, reconsider. Writing code for yourself and your office buddies, and writing it for a few thousand anonymous GitHub hooligans, are two very different stories. You will need time to get up to speed in this wild territory. It took me over three years. Don’t wait, start now.
Test Everything. To be honest, almost everything I’ve learned about software quality, I owe to the painful hours of writing unit tests, mocks, fixtures, stubs, integration tests, and so on. I truly believe that a professional programmer spends more time creating automated tests than writing production code. That’s why I’d recommend you focus on testing if you want to become a better engineer. Start with the great book Growing Object-Oriented Software, Guided by Tests by Steve Freeman and Nat Pryce and make yourself a rule: every line of code, that you are at all in doubt about, must be proven by a test.
Statically Analyze. Well, half of my knowledge about software quality I owe to unit testing. The other half I owe to static analyzers. I learned much more from Checkstyle and PMD than from all the Java books I’ve ever read. Every new programming language I learn I start by configuring the strictest static analyzer I can find and then listening to its complaints. I’d recommend you do the same. Listen to your tools and make sure your code is 100% compliant with their quality expectations. Don’t just use them as recommendation providers, but make yourself a rule: never commit anything that doesn’t fully pass all static analyzers.
Humiliate Yourself on Stack Overflow. Robert Sheckley said that “in order to ask a question you must already know most of the answer.” Friends, online chats, and office kitchen talks are great places to find help… for junior programmers. Those people understand you no matter how stupid your questions are and that is how they spoil you. You don’t grow while talking to them and getting their help. You degrade. Instead, you should ask questions where nobody knows you and will only answer if your question is perfectly formulated and expressed. There are many places, but Stack Overflow is the best. Make sure every question you have goes to Stack Overflow first. Then you may share the link with your buddies. But Stack Overflow comes first.
Earn Certificates. I’ve got some of them and I’m planning to get more, even though I’m not really a programmer on a payroll and I’m not going to be employed by any enterprise that cares about badges in my CV. Still, I want more certificates. Why? Because I learn a lot when I pass them. Also when I fail (I have done, twice, up to now). There are two things certificates give you: 1) they help you fill up your knowledge gaps, and 2) they boost your self-respect (when and if you pass, of course). Make yourself a rule: one new certificate every year.
Go to Job Interviews. “Changing jobs every couple of years used to look bad on a resume. It told recruiters you can’t hold down a job, can’t get along with colleagues, or that you’re simply disloyal and can’t commit. That stigma is fast becoming antiquated. Workers who stay with a company longer than two years are said to get paid 50% less,” according to Vivian Giang. The bottom line is that you must be ready to change jobs, because you will have to, and soon. If you don’t, you will lose. Regular job interviews are the best way to prepare yourself. Make it a rule: every three months you go to an interview.
Change Jobs. You will never be a truly senior developer or an architect if you stay with one company or project for a long time. You have to change jobs. Frequently. I know, it’s painful for most of us, but this is how we grow. You need new tasks, new challenges, new technologies, new customers, and new bosses in order to learn how to survive and become stronger. Ideally, you should become a freelancer and forget about full-time nine-to-five office slavery employment.
Read Books. One book per month. How does that sound? Twelve books per year. That’s an easily achievable goal. However, ask yourself, did you manage to read a dozen books over the last calendar year? I seriously doubt many of you will answer positively. Books are important because they are way more formal and “complete” than blog posts, news articles, or conference presentations. They cover entire topics, not parts of them. For example, did you read the Git book ever? Most programmers I know who use Git never even touched the book. They use Git, but barely understand what’s under the hood. This is how junior developers behave. Be professional, read the manual!
Please, remember, how many technical books you've read this year? #career
— Yegor Bugayenko (@yegor256) December 2, 2018
Follow Key People. I mean Twitter (I’m @yegor256), Facebook (here I am), Telegram (my channel), Instagram (click here to follow me), and, of course, GitHub (I’m @yegor256). What’s new that you can hear from me? Probably not so much, but you will get a feeling for what’s going on in my professional life, where I’m heading, what I read, what I write, etc. Who do I follow? All authors of all books I like, all bloggers I’ve ever enjoyed reading, all speakers I liked watching, key public figures and politicians, no matter whether I agree with them or not. I believe you should do the same, to stay informed about the trends.
Lurk. Regularly check Hacker News, /programming Reddit, and, maybe, Changelog. That’s pretty much all you need to read. A few times a week. Just read scroll what’s hot and move on. Will it make you a better programmer? Unlikely. Will it help your career and your life? Definitely. You never know what’s coming and where the next opportunity is. I still feel sorry about not paying enough attention to the announcement of Bitcoin at HN many years ago.
Attend Conferences and Meetups. Ideally, as a speaker. Otherwise, at least once a month as a listener. Will you learn something new? I don’t think so. But you will definitely motivate yourself by meeting the most active and motivated people in the industry, including speakers and other listeners. Most companies will be ready to sponsor your tickets. Two big conferences per year will be enough. The rest of the time attend your local meetups, you can find them at meetup.com.
That’s pretty much it. Hope this list helps.