We are super excited to introduce you to our 🎉New Core-Dev: Dickson Neoh @dicksonneoh7— Farid (@ai_fast_track) March 17, 2022
Dickson is actively contributing to IceVision. He ardently helps IceVision users in our Discord Community.
We are very happy to have him on our team! pic.twitter.com/SO1qLHkarm
Reflecting on how far I’ve come, I am astonished and humbled. Just 3 months ago, I learned how to open my first Pull Request on GitHub.
Despite having coded for over 10 years, I never bothered to learn about something so commonly used in the software world - Git, a version control system. I took the plunge, and the first step was painful. But every subsequent step got better and better.
I never looked back since.
Even though it’s not late, I wish I had started earlier. If you are new and want to contribute to open-source, start now. Here are some of the lessons I learned along the way that changed the way I learn, and code.
I’ve spent years coding and dabbling in many projects since I was a student. With so much time spent on coding, one would be expected to have a good grasp of it. But in reality, I didn’t know how good or bad my codes were. Or whether the codes are of best practices or optimal in any way given that a significant portion of the codes was taken off snippets from various sources like Stackoverflow, blog posts, and even GitHub.
Most of the time, when the code works, I leave it as it is, and when it doesn’t, I try to troubleshoot to the best of my ability. I can recall on numerous occasions when my codes didn’t work out, and I didn’t know why. And sometimes the codes worked, and I still have no idea why 🤦♂️.
Because the codes were not publicly shared, there was very limited feedback or insights that anyone can offer to improve them even when I asked for help. As a result, bugs in the codes remained as bugs, and they never got fixed. This severely limited what I could have learned and gained had I gotten better feedback by sharing my codes publicly. This is the major difference between learning in private and in public.
🔥 Contributing to Open Source is Super Power 💪— Farid (@ai_fast_track) March 18, 2022
Here is what our new Core-Contributor @dicksonneoh7 has to say about that:
"Contributing to IceVision has been a single turning point that supercharged my learning. I have learned more in this 3 months than ever before! " pic.twitter.com/lynwKDr6Ih
Learning in public is many times more powerful compared to learning in private. Nowadays, it’s so easy to start learning in public by contributing to open-source software. All you have to do is pick the one you are most interested in and start engaging the community around the project.
For me, the project that got me interested was IceVision. To those unfamiliar, IceVision is a computer vision library built on top of Fastai to make applying deep learning to images very easy for new users. Without much coding experience, you can get started and train your own object detection model in a few lines of code within minutes. Checkout their tutorial here.
At first, all I did was try to use the library for my own side projects. Gradually, I realized there are limitations to the existing features of the library. I started asking for help from the community on how can I overcome the limitations by proposing a new feature. This was how I discovered that there are ways I can contribute to the library by adding the features I needed.
With IceVision, I have always wanted to use Transformer model for object detection tasks. However, that was not included in the library at that point. I then started to research and ask for help on how to include that model in the library. That was the beginning of how I started contributing to the library. I ended up adding more than 10 models to the library in 14 pull requests. A dozen commits and thousands of lines of codes later, I became an active contributor to the library. The rest is history.
Little that I know, I was ranked #26 on Top GitHub Users By Country out of 1000+ contributors from Malaysia. The ranking is based on the number of public contributions on GitHub. All these happened within a short span of 3 months!
Getting a mentor is no doubt one of the best investments for rapid progress in any area of personal growth. Ask any successful figures for advice, and getting mentors will surely top the list. In my journey of contributing to open-source, one of the most rewarding experiences is the opportunity to learn from the maintainers of the library as they help and guide me to contribute to the library. More often than not, these maintainers (especially for reputable libraries) are highly experienced coders.
On one occasion, I got the opportunity to get on a video call with Farid to discuss how to fix an issue with the newly added features of IceVision. Even though our interactions were purely online, I got a glimpse into his thought process as he explained how things are done in IceVision. Needless to say, I learned a lot, not only on the technical aspect but also on the elusive non-technical side such as the mindset of a developer. Farid was also kind enough to offer me practical advice on how to stand out as a developer and encouraged me to blog about what I learned. This blog exists thanks to his advice and encouragement.
As I familiarize myself more with the library, I also have had many opportunities to help others who are struggling with the same problems I had. In the process of helping others solve their problems, I often find myself learning new things and exploring areas I never bother to look into. As I help others, I gained and learned a lot myself which allowed me to contribute more to the library. This became an empowering cycle to continue contributing to the library. One day, I hope to be a mentor of some sort to others and help inspire people in the ways I was inspired.
Encouragement from Farid led me to start blogging. In the process, I explored and learned how to use several blogging platforms including Wordpress, Ghost, and Hugo.
I finally settled with Hugo as it gives the best flexibility for my use. In the process, I also learned about self-hosting a webpage on GitHub pages and Digital Ocean, purchasing a domain, and GitHub workflows.
In building this website, I found myself contributing to the Hugo theme that I used for this site. I learned how Hugo themes work and a little about Go language used in the theme. By this time, I became very comfortable with Pull Requests even though it was only weeks after I stumbled upon Hugo.
The learning curve was steep, but it’s well worth it.
Additionally, in the process of blogging, I also realized that writing about something really helped me solidify and clarify my understanding of the things I write about. More often than not, I find myself in the illusion of understanding something when I really don’t. Strangely, this is only evident when I start writing about it.
I guess this is because writing is an act of synthesizing from a knowledge pool which can only be accomplished when one has a good understanding of the concept. This is why one of the greatest physicists of all time Richard Feynman once said “If you want to master something, teach it”.
Learning by writing is also a form of active learning as opposed to passively absorbing content. This has significantly improved my understanding of many concepts I thought I already knew.
Apart from that, I also shared my blog posts on Twitter and LinkedIn which resulted in the online presence and visibility of my blog. Once again the IceVision community is very kind to share my posts and provided me some valuable feedback.
Starting a website and learning its intricacies are something that I would never venture into had I not contributed to open-source. I never expected this, and I find this a huge bonus learning just because I started contributing to IceVision.
Through my experience in contributing to open-source, I learned that there are lots of kind people out there who are more than willing to help. You will just have to find them.
In the IceVision community, there are many such people, and I am indebted to them for helping me in becoming a better coder and a better person. I got to know people from around the globe from various backgrounds and cultures. This also helped me build my self-esteem as I interact with them. I also learned to appreciate that we all are gifted in different ways and everyone has unique combinations of talents and skills - just like members of the Avengers.
In a short period of time, I made a few friends and expanded my social circle. Through them, I also managed to score a few job application interviews, as I was looking for new employment opportunities.
P/S: I am still looking for an employment opportunity, I would be forever grateful if you can connect me to anyone who’s hiring for computer vision or machine learning positions.
It’s a wrap! Contributing to open-source has undoubtedly changed my perspective quite a bit in merely 3 months.
I have learned valuable lessons in becoming a better coder, a writer, and a better person. I wish to also thank the folks at IceVision for making such an awesome deep learning computer vision library available.
If you have any questions, comments, or feedback, I would be grateful if you can leave them on the following Twitter post or drop me a message.
I wrote a blog post on how I went from "Not knowing how to open a pull request" to "becoming core developer of IceVision" in less than 3 months. This documents my learnings along the way. Special shoutout to @ai_fast_track and @Fra_Pochetti in the post.https://t.co/uoTVd8toDc— Dickson Neoh 🚀 (@dicksonneoh7) April 5, 2022