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.
