But before we dive into the nitty-gritty, we have to remember that none of us were born with natural talent and just knew how to program perfectly the first time we used a computer. Some of us learn new programming concepts faster, some take it slower. But none of us can progress as professionals without putting deliberate effort into it. So take your time, find what works for you and experiment with the following ways to improve as a developer.
📚 Consume curated content
👁️ Find the learning style that fits you
It's great to continuously learn, go to conferences, do tutorials and self-improve in whatever ways you can. But if you notice that one way of learning does not work for you, try others. The three primary modes of learning for developers are through blog posts, books and video courses. Experiment with each one of them, see which one works best for you and use it as much as possible.
Personally, I use all three learning resources. This is because each one of them focuses on different levels of depth in regards to specific topics. Blog posts tend to focus deeply on a very narrow topic in a trendy niche, or give a shallow overview of a wider topic. Courses tend to cover medium-sized topics in a somewhat comprehensive manner. Just like blog posts, most courses also tend to cover what's hot. And books often tend to focus on fundamental aspects of programming meaning that the things you learn in them tend to be more foundational in nature than the ones learnt from video courses and blog posts. Thus, I believe it's important to combine all of the resources to become a well-rounded programmer.
Some of the best places to learn from blog posts are:
And in regards to books, I just tend to look at Amazon reviews or recommendations from others and buy them whenever available.
🔬 Experiment recklessly
Sometimes it's a good idea to not only take the time to learn about shiny new libraries or frameworks but also explore existing ones deeper. My recommendation would be to experiment more with frameworks and libraries that you already use and push them to their limits. Try doing the same thing in a different way, create a performance benchmark, try doing some silly things, play around. This will force you to get to know your tools better and consequently become a better programmer. The key here is to not be afraid, the code will not bite you back.
🚀 Seek mentorship
While it's great to self-learn and find your own path, having a good mentor can expedite your progress ten-fold. Receiving mentorship just means that you will be getting valuable advice from someone more experienced than you instead of seeking advice online from random strangers which may or may not have your best interests in mind. All of the greatest achievers had mentors in one way or another. Why not have one as a programmer?
Finding a mentor may seem daunting but it doesn't have to be complicated. First, just try to improve on your own. Eventually, you will get better and meet like-minded individuals in conferences, meetups, online forums, etc. Some of them will be further along than you as programmers. All you have to do now is try to get to know them better, establish a relationship, see if you can help them in any way and only once in a while ask for advice on a specific topic where you want to improve. Finding a mentor is not easy but it's not complicated either.
While I haven't tried it yet, it's also certainly possible to try out paid solutions out there such as codementor. If you give it a try, let me know how it went 😊
☝️And remember that you certainly can grow as a programmer without a mentor, it's just easier with one.
🌎 Learn other languages
Sometimes learning is not just about getting to know the next "new thing". It's also about thinking in different ways outside of your normal thought patterns.
"The Pragmatic Programmer", legendary book about software development craft confirms the same:
Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut.
💬 Expose yourself to others
Whilst having a mentor is great for getting answers to questions that are specifically relevant to you, it's also important to expose yourself to others and get to know what and how they think, what problems they face and how they go about them. Just like learning new languages, meeting other developers will broaden your thinking and may further your career in unexpected ways. Some of the best places to meet other developers can be found below:
- Slack/IRC/Gitter groups
- Online communities such as dev.to, sitepoint
- Stack Overflow
- Water-cooler chats
- Co-working spaces
🏗️ Build stuff
It's widely agreed that some of the best learning in programming comes when you build stuff. While it's fine and dandy to consume tutorials, you will never know how well you understand the material until you apply it in your own work. So, the best strategy to use whilst learning is to have an end goal in mind. Then go learn from the best tutorials, books or courses you can find and try to apply it in your job or side-project as soon as possible. Building your own stuff forces you to deal with real problems rather than hypothetical ones which is what programming is all about.
Teaching is one of my favorite things to do as a programmer. It's a win-win situation for everyone involved. The students get to learn from someone more knowledgeable than them who practices what he/she teaches in real life situations. And the teacher gets to solidify his/her knowledge through teaching. As an added bonus, by teaching one also gets a chance to look at the concepts being taught from the fresh perspective of a student. This can be powerful by potentially providing an opportunity to re-think of things you already know in new ways. Some of the ways one can start teaching now:
- Give talks
- Answer on StackOverflow
- Help people on Gitter/Slack
By the way, a lot of people shy away from teaching as they think they are not yet good enough to teach. However, it's most likely that there are people who are even less knowledgeable than you and would benefit from your knowledge and perspective about a given topic. It's like a hierarchy of knowledge. There is almost always one step below that you can teach to. So, don't be afraid to teach and just do it 🤜
👐 Contribute to open-source
🤔 Ask why
Sometimes you don’t need to just keep on keeping up. It’s also worthwhile to stop once in a while and ask yourself “why” on the things you already know i.e. why did I choose to use Redux Thunk? What problem does it solve for me? Why not use something else? This will force you to be conscious of your decisions and not just randomly follow recommendations that you read online.