JOURNEY TO BECOME AN AMAZING SOFTWARE DEVELOPER
How to become the best developer in the world? Well… I don’t know, because I am not the best web developer in the world I don’t even know if I will ever be. But I tried many things during ~5 years of my software developer career and I can help by listing the stuff that worked well for me.
Know that it is a journey
Becoming a kick-ass developer doesn’t happen overnight. You have to acknowledge that you are going on a long journey. You need to make a list to look at, and see your progression. It is just like Treehouse, how it shows your progress and you can not only feel you became better developer, but visually see how far you’ve come.
##Planning You can spend the whole day on it. Plan the whole year ahead. Make a list of what technologies to learn (MUST LEARN) and you’d like to learn (SHOULD LEARN) Finish it in that day. Do not work on anything else.
###Technology Planning Keep in mind: Make development oriented goals: create an application with 100k users doesn’t work. Instead, make a point like “Testing - Learn it fully and make it ingrained in my workflow, learn about TDD and BDD.” Be specific (Make list of technologies to master: Vue JS, ES 2015 etc) Categorize the list, such as backend, frontend, testing, tools, extras.
Once that is done, put it on your wall beside your desk, and cross it out with light highlighter once you’ve reached some basic/intermediate level and added to your daily workflow. Cross it out fully with dark pen once you feel you’ve mastered it and made it a habit.
During that year, if something comes up, With a pen, add to the list (Maybe you learned OAuth 2.0 during your project. Add to the list.)
At the end of the year, you should see most of the list with light highlighter, and 0~3 with crossed out with dark pen.
In the list, you need to prioritize the technologies, because there are so many.
*HIGHEST PRIORITY: * you will use immediately in your project and will make a difference. This is usually a tool or a framework, not a whole new programming language. For example, learning how to use Laravel immediately made me more productive, because I was able to do a lot more than just using pure PHP in shorter amount of time. Same thing for learning Git and one click deploy systems. It may be new feature or something that you’ve been doing wrong for longest time. If anything, pick an online course on this, (Treehouse?) and learn the basics in the first month.
*HIGH PRIORITY: * something that will add great value to the project (make the code cleaner, easier to manage, make the workflow better). My example was: Refactoring techniques
*MEDIUM PRIOITY: * Some fundamentals that you might want to brush upon, that will make you a better developer. Maybe you are weak in algorithms. Make plan to practice algorithms everyday or how to use command line interfaces, or maybe you might want to pick up regex.
*LOW PRIORITY: * Fundamental principles that a lot of the tech companies adopted, but maybe you don’t need it at the moment, but might need later (Agile, marketing, freelancing, design). Learn these in a long term.
Idea List
I constantly have ideas while doing developments. I think it is good idea to have an empty sheet of paper on your wall that you fill in whenever you have an idea for next year. This year’s ideas are listed out in the planning already. These ideas shouldn’t be implemented this year. Next year, look at this list and if you still see a good idea, make it one of your open source side project.
Read documentation
Grab a day (Saturday or Sunday, when you are not working), read through the whole documentation of technology you want to learn, but don’t feel pressured. You are doing great if you can understand the documentation of your tools. Skim through the whole documentation and just understand that you won’t be using the whole list of functionalities listed there, but just having knowledge of all things that a framework or tool is capable of makes you better. I did it for Laravel and Vue JS, and that I don’t regret at all.
Do this once a month at least, if you are motivated, do it once a week.
You will not only gain better understanding of that specific framework, will make you better at writing documentations of your own work, and also make you better developer.
Have a project that you are working on continuously, not a one off project Once you work on a project for a year, you will start to see in your own code how much you improved. Be it your personal project or even better, your work/freelance project. You won’t believe the code you wrote in a year and feel super embarrassed by it. I know how that feels. Just keep improving it, and always leave it better than how you found it. In order to do that, you have to LOVE your projects. I don’t recommand doing dreadful or uninteresting projects if you are gonna work on it forever. You just won’t care as much.
Try an Online Course
I know, you are too good for those online courses right? I thought so too, until I actually signed up for Laracasts and Treehouse. Don’t try to look around for free courses… the time you spend put in doing that, and figuring out everything on your own is worth more than $30 every month.
There are stuff to pick up for experienced developers as well, and I’ve found a lot of courses to be a good review.
Saturday(or Sunday) is important
Monday to Friday’s work is enough for you right? Well… not if you are on a journey to learn and become a better software developer. I think spending an extra day from the weekdays to learn new things and tools, catching up is crucial for next Monday - Friday’s success. Take a day off instead of two days off. You need to do a bit of extra, and it shouldn’t feel so much extra. It should be relaxed, day off watching tutorials and reading about new technologies, and it should feel like watching Netflix for the whole day. At least I do!
Focus on work on Monday to Friday. Do the learning on Saturday or in the evening. It will help you become better at programming.
Learn some more shortcut keys on your favourite text editor, and customize it to your needs. I use sublime, and I keep creating new snippets, try new plugins. You are spending so much time on your text editor, you should try to be better at using it.
Do’s and Don’ts
Do (I’ve done these and it worked great for me)
- Try to do the best job as possible at all times.
- Have design first mindset. Take a moment to think before writing code. Draw it out on a piece of paper, or type out pseudocode in the comment, TDD is one example.
- Make checklist of stuff to finish everyday. Cross out what you’ve done. Always have a notebook handy.
- Be humble. When I felt like a know-it all, I learned the least. When I realized what I know and do not know, I was able to learn exactly what I don’t know.
- Be open minded about technology. Don’t stress trying to be a “Real Engineer” by only wanting to do some complex technology work. In my opinion, CSS, Javascript is just as important.
Don’t (I tried these, it doesn’t work)
- switch around domains too much. If it’s web, focus on web projects. App? Focus on becoming an app developer. Don’t try to be everything.
- try to learn something because it sounds fancy or sounds genius. (I tried learning AI and neural networks before and it didn’t work.)
- grab a fancy big software book to read, unless you know exactly what you are looking for (something like J2EE expert design pattern blah blah blah)… won’t work unless you are at that level, and it is boring
- try to do too much. Pace yourself.
- Be afraid to spend a bit of money for learning, tools and whatever helps your job. Saving $50 every month isn’t going to make you a better developer.