About the Series
Open Source have had a huge impact on my life. On many levels. That’s why I’d like to share some of my experiences and hope that someone going through similar path will find these valuable. This is a premiere post from the first series on this blog: Open Source Driven Career.
The original idea for this topic appeared after I have received positive feedback on my talk “You Should Be An Open Source Developer” at the BrnoPHP conference in Czech Republic. It felt great to see a room full of developers inspired to do more Open Source - I wish to continue doing that through this blog! The series will cover the benefits, drawbacks and the “backstage” of building your career on top of the OSS.
One of the biggest benefits of participating in an Open Source ecosystem is definitely access to huge amount of high quality information. It very much depends on your preferred way of absorbing knowledge, but people who are mostly self-taught will enjoy this open and rich environment.
Practice and Real World Examples
By participating in Open Source you get access to huge amount of practical, real world examples. Remember your troubled internship manager trying to find an appropriate task for you? This is not a problem on GitHub, which is a web-based Git repository hosting service for private and Open Source projects. It offers distributed revision control and source code management. Many projects and repositories have „Easy Pick” issues, which are a perfect starting point for contributing.
What is more, everyone is sharing their code, so you can browse and learn from countless examples, touching various aspects of development. You are interested in game development? Great, there are entire game engines with publicly available codebase, just have a look at Unreal Engine 4 repository.
What is more, you have a full spectrum of levels. You are not limited to your current project at work or university, you can start with libraries that are much simpler.
If you like more practical exercises, then Open Source is for you. Communities are organizing online hackdays, offline hackatons and conference sprints where you can get your hands dirty with code immediately. Instead of listening to long and outdated lectures, you can go straight to the repository, check issues and just start coding!
OS Community often prepares entire repos with examples of design patterns and projects categorized by their area of interests. Have a look:
Coding Standards and Best Practices
I work with many teams in small and large organizations, but I rarely see well defined coding standards and generally the recommended way of doing things. I know this evolves all the time and that’s great, but standards are necessary for developer’s productivity. The most effective practices emerge from Open Source, where there are hundreds of ideas competing with each other.
When the problem becomes big enough for entire community (like autoloading), they come up with consensual solutions to these issues. In PHP, we have FIG, that defines community standards. It does not work perfectly and I never applied for the membership, but it is an effective, community-based mechanism for building these practices.
You should already know that standards improve productivity and make collaborative development much easier. Also, in your IT team there may be 10 great developers, but an entire community of smart heads sounds better, right?
Remember, producing code is only a small part of your job as a developer. There is plenty of skills that will help you deliver more value - you are crafting software to solve people’s problems and optimize their work, not for the sake of writing the code itself. One of these important skills is teamwork and although you could have done a few group projects at the university, we all know how they look like.
Open Source gives you an unique opportunity to be part of teams spread across the globe, in different countries, timezones and cultures. This is an excellent chance for young developers. Before creating Lakion, I have never worked in an office, my first job was freelancing and then entirely remote. Open Source allowed me to learn how to collaborate effectively with other developers in distributed environment. And you know what? Showing up at office is easy, but when you work with a global community, you have to be a bit more creative to be effective - that can teach you a lot.
Your company has one culture and most likely a single toolset. There is a chance they are still using SVN, like if they had their door closed for any innovation during the past decade. And you already know where a lot of the innovation takes place.
Working with Open Source allows you to pick the projects that use tools interesting for you. Want to try Ansible for deployment instead of crappy bash script that your company is using? Go ahead and try the project that uses Ansible. I am sure there is some free hosting that you can use to play with deploying the app with Ansible. There is also high probability that you find some small bugs or improvements to their scripts. By the way, if you like it, take 15 minutes to do a short intro to Ansible in your company. This is how the knowledge spreads!
Access to Experts
You know that smart IT companies invest a lot of money in order to spend a few days with an expert in a particular technology. I am training and consulting teams myself and I know plenty of people who exclusively provide this kind of services. Believe me, this can be really expensive, but you know what? You can get it for free. Businesses are spending hundreds of $ per hour to get audit, training and code review from top-notch developers in the industry.
You can get the same people review your code and give you advice. How? Just submit a PR to the repository they maintain. The best folks in the PHP world I know have multiple repositories or help with large community projects. This can be an extremely valuable experience, no matter if you are a junior or senior dev.
They also have plenty of ideas and feature requests from the community, but never enough time to turn these into code. So go ahead and volunteer to implement them by yourself! I am sure they will find an hour or two to explain you the idea and show the basics of how it should be done. Then you can do the hard work, while learning and get the thing reviewed by the entire project community. They will comment about your architecture, check your style and suggest better solutions. Priceless!
Learning by Sharing Knowledge
One of the best talks I ever heard was “Talmudic Maxims to Maximize Your Growth as a Developer” by Yitzchok Willroth at the PHPDay in Verona last year. It focused on the benefits for the „mentor” that helps and teaches less experienced developers. It was inspiring and I can safely say that I have learned the most while training others. I shared my Symfony, BDD, Sylius experience with many developers and every time I have walked away with new ideas - you can see how others are using your code, how they understand what you explain and provide you with input about possible improvements.
What is great about Open Source is that you can become a mentor from day 1. Yes, you can start reviewing code right after you jump to GitHub. Most projects have contributing guides, which define standards and practices. Read them and check the open PRs. I am sure you will be able to find some spots to comment on. Read the code… Don’t be sad that you don’t see many places with mistakes. Continue reading others’ code and you will see more and more.
Sign up for mentoring programs. In PHP we have php-mentoring.org. Interestingly, you can see experts being mentored as well. That’s because everyone has some specialization, so knowledge sharing can be very effective at every level.
I will greatly appreciate feedback about this post and the idea for the series in general. Let me know what do you think in the comments! You can also follow me on social networks to be up-to-date with my work and new posts. I will be sharing some of my daily work with Sylius.