How Open Source saved me from my Udemy course addiction
9 min read
I often hear people claim that they can hear one or two opinions a person has and from that they pretty much have them all figured out. I don’t know how reliable that ability really is, I would like to think that expressing some of my opinions doesn’t suddenly expose me as an open book to everyone around me. One thing that is for sure though is that, if you were to take a peek at my Udemy course history (and completion rate) you would know exactly who I am, or at least who I was. You would be contemplating a graveyard of mostly unfinished (if even started in the first place) courses that are just sitting there gathering dust.
It took me so long to find a method of acquiring new technical skills (since it was only when I was 27 years of age that I got my first tech job) that actually worked for me. Until I did, I was stuck in my seemingly never-ending cycle of getting excited about a new challenge, buying a course, jumping in, getting bored or distracted from the fundamentals first approach, and getting excited by something else.
A eureka moment came to me while reading Black box thinking by Matthew Syed, a book in which he explores the concept of marginal gains among other things in the pursuit of reaching "success". It was then that I realized that I’m going about learning to code the wrong way. I have to accept that I don’t have the stamina, discipline, or patience to learn all of the fundamental primitives of a language first before getting my “hands dirty” on the most simple and boring projects imaginable. I refuse to write another shop cash register program for as long as I live!
I guess the less conforming and more impulsive side of my personality had a thirst for action and wanted to jump to the big leagues prematurely, but how could I learn to get better incrementally, bit by bit while still working on exciting projects from the “get-go”? That’s where open-source comes in.
Learning to code is easier when working on real stuff with real people
Marginal gains are the name of the game
Discover new open-source projects on ProductHunt and Github
Join builder communities
Find out what people are working on
Pipe up, be daring
Try first, try again, then ask.
Set deadlines for yourself
Share what you learn in public
Do it again
Who is this for 🤷
I would like to plant a flag in the ground right here to point out that your humble correspondent is far from that most experienced open-source contributor, nor have I been around the block that many times. I don’t imply to be speaking from a place of authority nor do I consider myself an expert on this particular subject. In a sense, I’m directing this article to the version of me before buying all those courses. At the least, I would have saved a non-trivial amount of money.
But this is not only for me, if you are a person who has struggled to find a technical learning method that has worked for you or if you would consider yourself a Udemy course hopper too, then keep on reading. I can’t say that you will hit your learning objectives, nor will you become a dev rock star but at least you might think twice before considering the next juicy course discount that lands in your inbox.
Definition of Open source ℹ️
Without going into a deep explanation of the different governing and organizational bodies that make up the open source world, and glossing over the different “levels” of open source certifications and licenses. In this article, I’ll be referring to Open Source as projects and communities that revolve around improving and evolving a shared centralized body of open code and helping each other in the process.
Learning by doing 🏃♂️
There is no comparison to how much more enjoyable and engaging learning something is when it is actually relevant, useful, and might even be used by others. That is what can be accomplished by working on Open Source projects. But how can you find a project that matches your interests, background, and level of expertise? Below I’ll delineate the rough approach I would take to scout, evaluate and get to work on potential projects.
Don’t be a stranger to ProductHunt 🌐
A great way to find cool projects is by scrolling the top projects on Product Hunt, not all products and companies that are featured are open source of course but many are. If you have no idea what a “cool” product even means to you or if you are open to expanding your idea of what a cool project might be then start filtering by area instead (Cloud, Gaming, FinOps, FinTech) and see what pops ups. Also check out the Building in progress section, to get in early on a project.
Scroll GitHub 🧑💻
Lay off social media and scroll GitHub more, head over to the explore tab, and check out the trending repositories of the day.
See you one like? Head over to their open issues, and check if they have any documentation for potential contributors. If they are a semi-mature project they will have some documented contributor guidelines. You probably don’t need to read them just yet but have them at hand, they will be important if you decide to contribute to the project.
Another thing to keep your eye on when scoping out potential projects is if they have issue labeling, if they have labels like “great first issue” or “great for beginners”, that’s a good sign.
Join the community 🫂
Most projects have some sort of public or private community that congregates somewhere, more than likely Discord or Slack, find it and join it. Look for the contributor sections, most open-source servers might have an area reserved for feature requests or roadmap ideas. Start lurking and find out what people are working on. When in doubt reach out to the server moderators or maintainers to get talking.
Be daring 🙋♀️
If you are there to learn people are going to help you, let them know your intentions, and ask for guidance and tips on where to start. If you see someone who is particularly active, let them know that you are keen to help out and make some contributions and ask them if it’s ok to lean on them a bit if you need some assistance. Don’t be afraid of imposing or getting in the way. By reaching out you are showing interest and showing a willingness to put your own time and effort into something that will benefit others, and that has value!
Pick an issue that’s slightly out of your league 😨
An uncomfortable truth is that opening a PR to correct a typo, valuable as it may be, isn’t pushing you in any meaningful way. Try to choose an issue that initially scares you a little. Maybe ask to have someone explain or give an overview of what would might an adequate solution look like. It’s good to be afraid because if you push yourself to understand the context, break the issue into smaller logical blocks and validate your approach with other community members if need be, you are on the road to meaningful skill acquisition.
Try first, then try again, then ask for help 👷
Once you are happy with the project you have found and you have located your very first issue, you are ready to get started. This is where the fun begins, and by fun, I mean that really intense, initially confusing, and hard learning process. That’s why it is so crucial for you to try to understand the task fully. Try to understand the context in which it exists. By this I don’t mean the whole project's architecture, but what are you trying to accomplish, what external components are you connecting to? You have so many resources at your disposal to help you accomplish this. Read the project's documentation, open up a ChatGPT window on half of your screen, and ask for explanations of any parts of the code you don’t understand.
Learn how to test what you are doing locally. Try, try, and try some more, and when you are really stuck and your head hurts from banging it off the wall in frustration, then ask somebody else for help. Realize that if your real intention is to learn by doing, the real learning happens which is this “intensive” self-lead discovery of the solution.
Read the project’s contribution guidelines 📄
After you have some code that you are happy enough to bundle into a PR, make sure to read the contribution guidelines to make sure you are following the standard project naming conventions and following any formatting or code standards the community has agreed upon.
Set yourself a deadline and focus on marginal gains 📅
We have all done it, relax until the night before the exam that we somehow miraculously pass. If you don’t have a deadline the chances are lower that you’ll complete whatever you are trying to get done, it’s as simple as that.
Always remember that the name of the game is marginal gains, focus on getting better at one thing, and challenge yourself to understand one new topic or to resolve one issue a month. It really is up to you. Don’t set goals that are difficult to measure like “I’m going to learn Go this year.” And set more quantifiable goals along the lines of “I’m going the find and resolve 5 issues this month that involve the AWS-Go-SDK”. I promise you will learn more with the second approach.
Learn in public 🗣️
If you picked a new skill up, if you had a breakthrough, write it up! Tweet it! Let others know, it’s also a great way to be accountable if others know what you are up to. The worst thing that can happen is that some people will be indifferent, so who cares? For every uninterested person, be sure that there are going to be others rooting for you and giving you words of encouragement. Hey, you might even inspire somebody.
Do it again. ⏰
No need for a full paragraph here, because we all know that consistency is key to any habit-building activity. Just do what you got to do to stay consistent!
Lastly some personal project recommendations
Komiser (I’m a maintainer on this project, so good choice if you want us to work together!)
Did you find this article valuable?
Support Jake Page by becoming a sponsor. Any amount is appreciated!