How to Enhance Your Skills Through Open-Source Experience
Seize the opportunity to develop and demonstrate your skills in a public setting.
Hello there!
Welcome to Algorithmically Speaking, where we discuss topics on the intersection of computer science, software engineering, and life.
Collaborating with open source is a great way to gain experience in a real-life scenario. It is a win-win. You learn either way, you gain new skills, and you can contribute to other people's projects and be acknowledged for it.
In today’s topic, I will tell you about an initiative I started to spread knowledge about data structures and algorithms using Python while also honing my skills for professional software development.
Let's go!
Some Context 📝
I come from a background where Data Structures and Algorithms are a must. Mastering these topics was (and still is) a great competitive advantage.
I mastered data structures and algorithms mostly because I participated in numerous programming contests. These contests usually have several problems that require deep algorithmic thinking and the use of special data structures to create fast enough solutions.
However, data structures and algorithms are topics present in every software developer's everyday job. The difference between a slow and a fast website in production can be that balanced tree you didn't use to store your data or that you are performing a linear search when you can do a binary search instead.
Believe me. I have faced hours of profiling some of my projects because I didn't make the appropriate decisions at the right time.
Because I understand the importance of appropriately using data structures and algorithms, I decided to create a project that would allow me to teach people while also learning a lot from the process.
Open Source Project 🌻
I started this project a while ago. Its purpose was to create a compilation of data structures and algorithms implemented in Python.
Why Python? You might ask.
The reason is simple. For the past two and a half years, I have been coding practically every day in Python. I have done back-end development, geospatial data science projects, and DevOps. But guess what? I still feel like my knowledge of Python is not even near that of the greatest Pythonistas.
I chose Python because I hoped to learn a lot from reviewing the code of the people collaborating on this project.
Surprisingly, I have learned about the details of the Python language itself. I have also gained a lot of experience using libraries that help you format your code, keep track of package versions without having to deal with dependency hell, and some other examples that I will cover in the next section.
So, yes. It has been an amazing learning experience for me, and I have benefited a lot from the contributors. I know firsthand that they have also benefited a lot from collaborating.
Why Bother Collaborating? 🙄
You might be asking yourself why you should care about collaborating on this project. I have some really good answers, not only from me but also from the current collaborators.
Real-life Experience ⚒
As you hear it. I know this data structure and algorithm idea might sound more like an educational project that you can build at school, and I hope I will get to teach using the examples we are implementing in a classroom someday.
But, what I haven't told you yet is that we are trying our best to have a sound review system that enforces some of the good coding practices in the Python language. This will allow you to get familiar with the software development process that is usually applied by most tech companies that develop software using Python.
That includes:
Proper Object-Oriented Programming Code 🤖
Implementing data structures and algorithms is the perfect educational setting to learn about inheritance, polymorphism, abstraction, encapsulation, etc. Every software development company creates code that relies on the best practices of object-oriented programming, so you might want to polish those skills.
Unit Testing 🧪
We ensure that the functionalities we add to the project have proper tests that guarantee a minimum of correctness. Creating tests is a useful skill that you should master if you want to excel in software development. We provide you with the basic workflow to do it in Python and guide you if you get stuck.
Automated Workflows 🚀
We are using some of the features that the GitHub workflows allow to automate some processes when certain events happen on the project. For example, we run all tests when we push a change for the development branch. We take this as a first step to the CI/CD processes you must deal with in real-life enterprises.
Writing Proper Documentation ✍
Documentation is as important as the code itself. For that reason, we aim to create valuable documentation for users and developers as well. Contributing to our documentation will allow you to familiarize yourself with another typical process used when developing actual software.
Collaboration 🤝
Collaborative skills are among the most essential skills you can develop in the software development industry. You will most likely be working as part of a team, where the decisions are made by consensus. Because of that, getting used to explaining your points of view and understanding other people's reasoning is beneficial for you in every way.
That said, you can check our contributors here. You will see that we all come from different backgrounds, have different ages, and live in various countries, but that does not prevent us from gathering in a common project and making contributions aiming for a common goal. This is the magic of Open Source!
If you decide to participate in this project, you will interact with computer scientists, competitive programmers, data scientists, junior developers, senior developers, etc. Learning from people with a wide range of experiences is only good.
Some Numbers 📊
As of this article's writing, 11 developers have contributed to the project. Thirteen people have forked the project, so we expect more contributions soon.
There are already 46 stars ⭐ from people all around the world, including Spain, Cuba, Sweden, Bulgaria, Uzbekistan, and the United States.
We have opened 32 issues, and 24 of them have been solved already. Eight more are waiting to be solved by the brave ones. Related to this, 24 pull requests have been opened, and 17 have been closed already, leaving 7 in the "Work in Progress" state.
Lastly, since we care about the quality of the code we produce, we have started six discussions regarding the implementation details of the features we are adding to the project.
Last Words 👋
If you haven't contributed to an open-source project yet, take this chance to showcase your skills and be acknowledged for that. Don't miss the opportunity to collaborate with great developers from across the world and get familiar with some of the most common software development processes.
We are eagerly waiting for your contributions.
Also, if you want to look at a similar project but get hands-on with the Rust programming language, I recommend you check out this project by Alexander González Fertel. There is a lot of that project in ours.
See you soon!
Not done reading yet? Please take a look at these:
And that’s it for today! If you are finding this newsletter valuable, consider doing any of these:
1) ✉️ Subscribe to the newsletter — if you aren’t already, consider becoming a free or paid subscriber.
2) 💛 Get early access to my book— thanks to all of you who have contributed to support my writing. The book I'm writing covers this and similar topics in more depth.
3) 🍻 Read with your friends — this newsletter grows because readers share. I don’t use social media too much to advertise my writing. I’m counting on you!
Have a great day! ☀️
Alberto