2017-12-28 00:00:00 UTC
Follow Your Dream Career with Open Source. Personal Story.
This time I'll violate my principle to write only about purely technical topics on my blog. In the next a couple of paragraphs, I'll talk about open source software development from a personal perspective. Here are some of the ideas that you can find below:
- Explanation what open source software is.
- The bright sides and dark corners of contributing to open source software projects.
- Some of the great opportunities that the development of open source software can provide to us, as individuals and professionals.
- How we can grow as software developers by contributing back to the community.
- What's the impact of the open source projects on a global level?
To support my statements, for each section I'll give concrete examples from my own career.
Keep in mind that you don't need any technical background to continue reading this article. All the concepts are (should be) well explained. If anything sounds unfamiliar to you, this is my mistake and I will fix it as soon as possible. To let me know, please comment below or drop me an email.
What is open source software? There are a lot of definitions online. For instance, here's one:
Open-source software (OSS) is computer software with its source code made available with a license in which the copyright holder provides the rights to study, change, and distribute the software to anyone and for any purpose.
In this specific article, I'll discuss open source in the context of one of the least restrictive licenses out there - the MIT license.
In short (and not precisely accurate), open source software means a software module or a program which is publicly available together with its source code. You provide it to the world for free. Keep in mind that there are differences between free and open source software, you can read more about them here. In this article we'll focus on free open source software (or FOSS).
You can think of the source code of a program as the list of instructions which you've typed in your text editor in order to make the computer do something. By releasing the source code, you make the "recipe" for the development of given piece of software publicly available. In contrast, the products with closed source code provide to the end users only the product itself, without its code.
Having the source code out there, allows everyone with some technical knowledge to copy the software, to build it, to modify it, to distribute it by their own, to use it, to sell it (yes, that's possible), to understand how it works, to teach people how to use it...It allows everyone to do anything they want with your software! With your work.
Giving your work for free...
In the beginning, I mentioned that I'd want to encourage people to contribute to open source software. Well, unfortunately, open source, just like anything else in life, is not all sunshines and rainbows. In the next paragraphs, I'll discuss some of the disappointments that I've faced over the years. I think that it'll be easier to set the right mindset, expectations, and balance if you're familiar with some of the dark sides from the beginning.
Giving your work for free. I know this sounds very absurd to a lot of people. Work requires resources like time, food, water, etc. and these resources are not given to you for free. Why would you waste them for doing work which in the end won't provide equivalent or higher financial outcome? Why would you give your work for free?
And the truth is that although there are some open source projects out there which are making money, in the general case if you are a developer working only on open source, you won't make anything.
On the other hand, there are a lot of developers and corporations who are using a lot of open source software and they are making money out of that. In the end, the open source is coming for free, isn't it?
Guilt and Burnouts
I already mentioned that when you're doing open source in your spare time you're generally working for free. In fact, not only working for free but often making money for companies using your projects!
Well, that's not the worst. You're not only giving your spare time without getting paid but also everyone who's using your projects thinks that you're obligated to do so!
I've had people, using my projects, shouting at me because I haven't solved their work problem during my weekend. This can definitely be stressful. Getting often pressured by people makes you feel obligated to solve their problems. You feel guilty if you don't. You feel guilty if you don't work on your open source projects over the weekend because there are people who want more features or who have found a bug. There are interesting talks and articles on the topic.
There's no easy cure for this. My only suggestion would be this.
There's another problem which directly relates to the negativity. At some point, you feel yourself into a magical circle. You're spinning like a hamster, constantly trying to catch up and make people happy. At some point working on your toy projects is not fun anymore. You just fight with issues and every day, a little by little, your enthusiasm dies.
This is how you burnout.
Dealing with Burnouts
People often state that burnouts happen when you take more work that you can handle. I'm not certain that this statement is correct. I burn out when I face similar problems over and over again and I don't feel a sense of progress. I've experienced this with a few of my work and open source projects. In fact, on average I experience this 3 times a year. The best solution for burnouts that I have found is to start something new. Something fun, and of course this.
These were some of the negatives of working on open source projects. Did I melt even the tiniest enthusiasm you had to start something on your own? Well, do not give up yet. There are also a lot of benefits. Not only personal but also global! Bear with me for a little while!
Now, let's focus on the positive aspects of the open source software. There are hundreds, maybe thousands of engineers involved in open source projects, so obviously, there should be such!
There are millions of open source projects out there. Thousands of them are very high quality and they are on a variety of topics - starting from simple documents with collections of useful resources to components for user interface, compilers, neural networks, renderers for virtual reality, etc. All of this is out there, open source. You can dig into the source code and explore this concentrated knowledge! There's so much wisdom there, staying a few clicks away from us! I've read the source code of hundreds of projects, from components for user interface to compilers and source code optimizers. For me, this has always been one of the best ways to learn.
In fact, I learned a lot about interpreters from the implementation of the AngularJS' expression evaluator. From AngularJS I learned so many things that in the end I wrote my publication "AngularJS in Patterns" which got a lot of popularity in the community. It got translated into Chinese, Japanese, Russian and French. Later, I learned more about type systems from the TypeScript's type checker. And these are only two examples of extremely high-quality software written by Google and Microsoft, publicly available!
A lot of people learn best when they see the abstract theoretical concepts applied in practice. Well, good news! Everything you've studied in your computer science degree has already been applied in projects which source code is published on GitHub!
Practical Work Experience. Contributing Back
The code is already out there so you can read it, but that's not the only thing you can do with it! A lot of open source licenses are very open! You can not only read the code - you can download it, play with it, modify it...even release a similar product with improvements or changed functionality, or even better, contribute back!
Contributing back to the open source community is probably the best thing one can do. It's extremely convenient for beginners. This way you don't get pressure from the people using the project. You just contribute whenever you find the time...
How does the contribution work? Well, imagine you find open source project and you're really interested in the problem that it solves. You find an issue with the project, or you open its issue tracker and find already reported one. Since you're interested in the problem domain, you can go through the project's source code and find out how it works, and fix the issue. This is not necessarily easy, it strongly depends on the project and the problem it solves. For some projects, it can be a lot of work. An important thing to keep in mind here is - do not get frustrated, just keep digging until you figure it out. If you get frustrated from the artificial feeling that everything for you goes too slow...much slower that for everyone else, I'd strongly recommend you to watch the talk "The Myth of the Genius Programmer":
In case you want to get involved into a mature and technically complicated project, the reality is that you'll have to dig into its source code for days, maybe even weeks until you figure out how it works. The good news is that if you don't have that time you can contribute to the project's documentation pretty easily. Trust me, such contribution will be greatly appreciated. A lot of beginners (and not only) in the open source community started exactly with documentation when they get interested in given project. If, however, you want to get involved in something technically challenging don't be afraid to ask questions and to get your hands dirty. Do not think that everyone else contributing to the project's codebase is a genius. The difference between you and everyone else in the list of contributors is the domain knowledge, which helps to advance easier. Keep in mind that the other contributors are almost always willing to assist newcomers who want to help!
Working with the Best
This way, by contributing to already existing projects you get a lot of work experience. But why does it matter? Don't you get the same in your daily job? Well, the difference is that in open source you can choose with whom you want to work and on what projects you want to work. For instance, if you're a developer you've most likely heard about the book "Design Patterns - Elements of Reusable Object-Oriented Software" and one of its authors - Erich Gamma. Did you know that the team lead of VSCode is Erich Gamma? Yes, you have the chance to work together with a legend by contributing to VSCode! There are plenty of other similar examples out there...Anders Hejlsberg, the lead architect of C#, is working on TypeScript. One of the creators of Unix, Ken Thompson, is working on Go. And yes, Linus Torvalds is very actively involved with Linux.
You and the guy who has created Unix working on the same project! Have you ever thought that's possible? It doesn't matter where you're in the world physically, open source can give you this opportunity.
Imagine how much you can learn by getting a code review from Ken Thompson or any other of the guys from the Go team at Google! And you get this knowledge for free! You are spending your time to help the open source maintainers with their project...and they help you back! This is how powerful the open source software is!
I've had similar experiences. Because of my active contributions to the AngularJS community, I was invited to write a book about Angular (a new framework inspired by the project AngularJS). At that time Angular was still work in progress. The only source for my book was the framework's source code. This is how I started contributing to Angular. It took me a lot of days to figure out how the framework works internally, and yet, it's still evolving. On top of that, it wasn't easy to find issues to contribute back. After a lot of days wondering in the Angular's source code repository, I figured out how I can help with some of the open issues! This way, I had the chance to work with extremely smart people with very strong technical experience.
I had the opportunity to get technical reviews from Miško Hevery, the creator of AngularJS and Angular, and other engineers from the Angular team. Later, I had the privilege to get a technical review from Miško himself for my book - "Switching to Angular". You can't imagine how valuable such experience is!
Popularity and Reputation
We already made it clear that open source can be a great source of wisdom. Having the chance to work with the best software engineers in the world, Turing Award winners, etc. That's not the only direction the open source software could be helpful, though. It can also increase your recognition and reputation in your community.
As I mentioned, corporations often use open source projects because they usually come for free and save a portion of the budget. Imagine you're one of the contributors to a popular technology. You're one of the people working on it. You know the roadmap, you know every corner case in the code. You're definitely a domain expert. If the project's popularity grows, your reputation and popularity grow as well. You'll be the first candidate a company using the given open source project would want to hire!
Over the past 2-3 of years, I've been contributing to a lot of open source projects, mostly Angular related. For this time, my followers on GitHub grew from below 100 to over 3.7k! I got tens of thousands of stars on projects I created. Some of my open source projects have over 1.3 million downloads per month! Over the past 2 years, I've flown over 200,000 km to give over 45 technical talks on worldwide conferences in locations such as Las Vegas, Germany, UK, The Bahamas, Salt Lake City, Russia and many others. This is not only great professional experience but also an amazing personal adventure!
I've had a job interview where my interviewers told me - "Hey, do you know that we're using your Angular seed project in production? Also, we run codelyzer in our CI!". It was a pretty cool experience to see two of my projects being used as a foundation for their project!
I've heard Igor Minar saying many times: "It's not about the software, it's about the people.".
It really is. I've found some of my best friends around open source projects that I've either developed or contributed to. One of the best communities I've been in is the one around the Angular project. This community is always welcoming, positive, with a lot of bright people you can share ideas with.
In the conferences I've spoken in the last years, I met hundreds of people and made friends from tens of countries, including but not limited to: Germany, Russia, Bulgaria, UK, USA, Canada, China, Japan, Taiwan, Spain, Colombia, Brazil, France, Serbia, Greece, Italy, Sweden, Netherlands, Turkey, and many others.
Finding your Dream Job!
A lot of open source projects are maintained by very attractive companies. For example, Google has a bunch of open source projects in a lot of domains - from user interface to machine learning. Facebook is pretty much the same, together with Microsoft and many others.
Have you ever wanted to have a job in any of these companies? Well, contributing to their open source projects can provide you such opportunity! Of course, these companies will prefer to hire a person they have worked with, the person who has shown that has the knowledge and skills to do a job, compared to a random candidate found by the HR department on LinkedIn.
Contributing to Angular and developing tools for other engineers related to the framework I got the opportunity to join the Angular team remotely and work from Bulgaria. I cannot explain the excitement I felt when I got the offer. I had the opportunity to work with some of the most talented engineers in a project which has an enormous social impact!
Thanks to the open source contributions I've gotten other dream job offers. I'd be happy to clone myself a few times to be able to enjoy them all!
Why your contributions matters?
I cannot think of many other ways where your work can have such a global impact so quickly, other than contributing to open source software. The duration between you, pushing a fix to an open source project, to your contribution affecting millions of people can be in the range of a couple of minutes!
There are very popular projects out there. Projects with millions of downloads per day. Imagine you take a popular open source project and make it more efficient. The chances are that this project runs by millions of computers all around the world. Since the execution of the software will get more efficient the users will have more satisfying experience and even the energy consumption of their devices will drop!
This may sound a bit artificial though. We cannot realistically measure the global impact we have on our open source projects. It's just hard to imagine.
Often, however, I get personal feedback from people using my projects. Of course, I mentioned the negativity from time to time. Fortunately, the negativity is an exception. I've gotten hundreds of messages from people thanking me for making their life easier, or happier with my projects. The feeling after such message, it's unique. You feel that your work, even your existence actually matter.
Jim Carrey had an amazing speech in which he said:
How will you serve the world? What do they need that your talent can provide? That’s all you have to figure out. As someone who has done what you are about to go do, I can tell you from experience, the effect you have on others is the most valuable currency there is.
The knowledge, experience and personal satisfaction that you get when helping others while doing what you love is hard to describe. Well, it's even better when you get recognized by your peers.
There are such initiatives out there. For example, the Google Developers Expert (GDE) program is a great recognition from Google to people who are active in the communities of products developed by the company. Microsoft has an alternative program called MVP, or Microsoft Valuable Professional and Oracle has their Java Champions.
Here are few examples from my personal experience. In 2016 I had the chance to be invited to the GDE program of Google. A little bit before that, I had the honor to receive the Google's Peer Bonus for my open source contributions to valuable projects. Earlier this year, the President of the Republic of Bulgaria gave me two awards:
- Diploma "John Atanasoff" for my active contributions in the areas of software engineering and computer science, my public lectures, publications and others.
- Diploma "John Atanasoff" for a project with big social impact.
As the only laureate with two awards in the history of the "John Atanasoff" award, for me, this was a dream coming true.
The open source software development is the simple act of releasing your project together with its source code or contributing to other open source projects. It's so simple activity and at the same time so powerful for our careers and personal development. It is a fast and generous way to provide valuable global impact.
Of course, it has its downsides but as an open source contributor and maintainer for the past years, I can confidently state that my open source contributions have had the biggest positive impact on my professional career.
Doing software development we often get captured by purely technical aspects of the problem domain and we forget what's most important - the people. In the end, it's not about the software, it's about the people.
You can find more about my personal story here.