This blog is meant for anyone who is looking to enhance their programming skills and career. You could be a fresher who just started programming or an experienced professional who has not yet started to contribute to open source. So Grab the coffee. Because this going to be a long read.
The main goal of this blog is to motivate developers towards open source contribution and show them how important it can be for their skills and careers. I have shared a few points and resources to help you get started.
I started my career as a developer in 2015. Since then, I was always keen to learn new things every day and help others with my contributions.
Now, whether we start our career as a programmer, or whether we are experienced developers, we land on Stackoverflow and Github every day.
So, I started to notice people who answered questions on StackOverflow and also the people who created libraries and sample apps on GitHub and I thought, “Who are these people? Why do they do that? and How do they manage to get time for this? Don’t they have other important things to do? Will I be able to do these things? How can I contribute?”
What is Open Source?
Open source is software for which the original source code is made freely available publicly and may be redistributed and modified. Open Source is not just about disclosing source code. It is about the software community coming together to solve problems and push the industry forward.
However, when we ask a programmer to develop something for free, this would probably be their reaction ?:
Well… through this article, I hope to make developers realize that contributing to open source must not be perceived as “free work”. Rather, it must be perceived as adding VALUE to our professional self, as well as our professional community.
Why is it important?
1. Best Coding Practices
When we are developing our open source project, we want to create the best version of it by using the best coding practices. So we start to learn how other professional programmers code by digging into their open source projects. Even giant companies like Facebook and Google have open sourced many projects.
There are a lot of different people out there with various levels of experience and background. You can get feedback on your project from the other developers around the globe through the issues or from Pull Requests (PR). It really helps to improve our project as well as our programming skills.
If you have an idea to build/create something, it’s much better for that idea to see the light of day in an open source project instead of slowly dying in a dust-filled Reminder List. This is the best platform to turn our ideas into reality.
And this platform also enables us to engage with other developers who share the same ideas as we do, thereby building our team and growing our project. Linux, Git, Android… all started out as Open Source projects. And today they are all used by developers worldwide !!!
The most important reason to be part of the community is to HELP others.. and helping others helps build our own reputation in the community.
The open source reputation on our project can be measured in many different ways. The number of stars, forks, issues and PRs are key highlighters that define the reputation of the project. These attributes may vary from project to project.
Even when I personally look for a library, I check above-mentioned attributes and most importantly, how long it has been maintained. Maintaining a project is also a part of our reputation. In order to build our reputation, we need to have a lot of patience. Because reputation does not build overnight. It takes days /months /years to build. So be patient and keep working hard. In the end, it will be worth it.
4. People will be looking for you
OSP allows us to work on real-world projects and helps us build networks. And these networks and connections have become the most effective hiring help for us. After all, it’s the most visible way to measure our contributions outside of work and get discovered. Nowadays, almost every recruitment website asks for a GitHub profile, if we have any. This should be a good motivation to build our open source profile.
5. Feeling of pride
When we do something which helps others, it gives us an immense proud feeling. This feeling of pride is really important for us, as it gives us positive energy to move forward and keep helping more…
And therefore, when we notice someone’s work we like, whether big or small, we must appreciate it. We can’t measure how much our appreciation can help someone keep going. I really like this tweet by Chiu-Ki Chan
Regular reminder: If you like someone's work, be it blog post, talk, drawing or anything, tell them! The negative people are too vocal. Please balance with love ?
— Chiu-Ki Chan (@chiuki) May 17, 2018
What do we need?
We must be PASSIONATE about programming. We should never learn programming only as a “Subject at school” or “Exam to pass”. Programming should be something we really LOVE to do. Coding should be fun. We should love to code because it is usable art. We should be coding to make a difference in peoples’ lives by solving real-world problems. The more we learn it, the easier it will be for us and we will love to do it more.
2. Beyond 8 hours
We need to work beyond our “8-hour” job. A job has limitations. But passion has no limit. Programming as passion will guide us to create anything in our mind. “I have an idea”. “I want to create this”. “I want to create that”.
On the other hand, in our job, quite often our company already has a built product. And as a result, we mostly end up doing some enhancements, or testing functionalities or fixing bugs etc. Our job may have us make a lot of impact on our company’s product. But our passion has us work on our own ideas and “create” something.
No, I’m NOT encouraging working more than 8 hrs in office. Not at all. I’m just emphasising that we should try to manage our office work in those 8 hours, so that we can devote the remaining time to explore and learn new skills and try creating something useful.
I understand that friends, family, fun and personal commitments are all extremely important. But it would be great if we can at least get 1 hour in a day for our coding passion. Start with 15 mins a day and then keep incrementing to 1 hour. IMO the best time to learn anything is early in the morning. No disturbance. No distraction. Fresh mind. We can stay focused.
What stops us?
Developers have the fear of judgement. They are afraid to put their code/work in open because other developers might judge them. “What if the code is really bad? It makes me look bad and dumb…” There might be other fears for other reasons. But we can overcome those fears.
This article pretty much sums up everything?. Definitely check this out.
2. “I don’t have time”
Whenever I meet any developer, I keep encouraging them to start contributing to the community. And the most common response I get is that “I don’t have time for this”.
Well, my friends, let me tell you… everyone has time. The key thing is, what are we giving priority to. Do we give priority only to personal time? Or do we prioritise our passion for software creation as well? When we manage our time (…yes, we CAN…), there ‘s nothing stopping us from working on our passion.
To elaborate more, here is a great TED Talk on time management.?
3. My contributions won’t make a difference
Newbie programmers tend to think that if they learn something new and try to share with people, then it won’t help or won’t be that useful because all other people are smarter than them. It’s not true at all. No one knows everything. If we learn something new, we must share it. Let’s never hesitate.
How do I get started?
1. Github: Social Coding
Github is like Facebook for programmers. Everyone’s on there. We can see what other developers are working on and easily peruse their code and make suggestions or changes. It makes collaboration with other team members very easy.
Also, Github is truly open. As in… all of the code is easily inspected, as is its entire history (…after all, open source cannot be considered ‘open’ if it can’t be easily studied, right?… ?)
Recently they have announced unlimited private repositories and 3 collaborators on each project. GitHub Enterprise is free for students.
So we must start studying GitHub and more importantly, learn git. In a development career, this is the most common tool we use daily.
Resource : ?
2. Start with Documentation
It’s hard. It’s always hard the first time you do something. Developers could be very lazy in documenting something. So, if you are a newbie to this, then the best place to start with is fixing/adding documents to the project. It looks very small in the beginning, but it’s very effective. It gives us the push towards big contributions. Also, look for the contribution guideline in the project to follow the due process.
Resource : ?
3. ReadMe — The Welcome Mats of Open Source
Writing a good README is the most important part of our open source project. Many developers tend not to focus on README because it requires documentation. A GitHub repository without a clear README is like a book without a cover and summary. No matter how amazing the core content is, a potential contributor might never look at our work if it is missing the initial context.
In order to write a meaningful README, we need to know a couple of key things about the project:
- What is the goal of the project?
- How does the project work?
- What is the minimum information a developer needs in order to get started?
- How can a developer contribute?
- How can someone learn more about the project?
Resource : ?
If our project has a lot of documentation, or ReadMe is getting bigger and bigger, we can use wiki pages for more detailed documentation.
Resource : ?
4. Build Sample Apps
When we start to build or explore something new, we end up building a sample app for it where all our R&D goes. It is a good way to start open sourcing sample projects and add some documentation to them. Who knows it might help others or someone might suggest a better solution compared to ours… ?
If you are a library developer or want to modularize things in your project then read the below point.
5. Distribute Library (Android)
Since most of my experience in Android, I will be sharing android resources. Setting up and configuring your library should be very easy and smooth. Now, almost all android libraries are added by just declaring them in your
This sounds familiar, right? This is the simplest way android devs integrate libraries in their projects. I am not going to teach how to do that in this article. It requires a dedicated blog post or an explanation video. Instead, I am going to share resources here. ?
For creating better and human-centred API, I recommend watching this great talk by Py ⚔.
6. Fix Bugs / Add Features to other Projects
On daily basis, we fix bugs and add a feature in our own project which we are very familiar with. Doing the same thing on other developers’ projects is challenging. No project is 100% bug-free. There always a case where we are using a library and get some issue in it or want to have some more features in it.
So if we are able to solve the issue or able to add more features, then we should contribute to that project by generating PRs. If the PR is merged, our name is listed as a contributor to that project which helps us build our reputation in the community.
Resource : ?
Spread the word
Marketing is the most important part of any project. After developing a great project, if we just wait and sit in a room expecting people to use or contribute to the project, then my friends, it ain’t going to happen.
Even though open source is free and we don’t charge people anything for using it, we still need to promote our project before it takes off. How else would anyone learn about it? People are busy these days and with so much open-source code, the competition for contributors is pretty stiff. Since we are living in the technology era, there are a few great ways we can start spreading the word:
1. Social Media
Social Media like Twitter, Facebook, Instagram is considered a curse and a blessing both. I believe it’s a blessing if we know how to use it right. The fastest way to share our stuff is Twitter. Hashtags and tagging people to the respective technologies will boost your project visibility. We should also try Facebook, LinkedIn and Reddit.
2. Answering questions
If our project solves a very specific problem, it might be worth watching the places where people ask about them, like StackOverflow or Reddit, and help them out. These boards are excellent idea generators. Want to know what problems people have? Look at the questions they’re asking.
Meetups are important to grow our network and meet new people with different ideas and perspectives. We will be introduced to people with similar interest and goals. So this is the right place to discuss our OSP. We might find a contributor or a solution to a problem.
Take care of yourself
1. Get over with Impostor Syndrome
Impostor Syndrome is nothing but questioning our worthiness.. whether we can take up bigger projects/challenges. But we as developers need to understand this:
It’s OK to not know about every latest shiny tool or programming language that just came out as long as we have a willing mindset to pick it up as and when needed.
It’s OK to feel mediocre as long as we’re learning, growing and contributing back to the community. Donn Felker sums it up like this.
You can't learn it all. Learn what you need, when you need it. Don't let the weight of what you don't know crush you. Learn and execute, rinse-wash-repeat.
— Donn Felker ?? (@donnfelker) June 21, 2018
Resource : ?
2. Get Enough Sleep
The human brain needs around 7–8 hrs a day in order to function properly. At least mine does… ?. When the project starts to scale and used by many developers, it will see more issues and more feature requests on daily basis. Sometime it might be through emails or DM’s. This thing leads to more expectations. And we are in a hurry to deliver fast because nobody wants unhappy developers. This leads to sleepless night which starts to affect physical and mental health. We must overcome this by scheduling and prioritizing tasks in a disciplined manner. Ultimately, discipline is the key.
Who is your life partner? Your wife? Your children? Your Parents? Your friends? NO…. It’s your body. Take care of your body everything else will come along.
Resource : ?
Burnout is, unfortunately, a very real phenomenon in software development — especially when creating and maintaining open source projects with large numbers of users. I’ve experienced it myself. It’s a sign when you feel coding is not enjoyable, feel irritated and depressed. The sudden feeling of “I’d rather do anything else than this right now” — even though writing software is one of your favourite activities in the world. There are lots of developers who come forward and accept this. It can happen to anyone. Just talk to someone. There are many people who have gone through this and willing to help others as well.
Resource : ?
I hope reading this blog motivates you to contribute to open source projects and build some great ideas by keeping your mind and body healthy.
Thank you !!!
And also thanks to Mayank Srivastava and Aniket Kadam for reviewing my blog.
If you find this article helpful, please like, share. If you have any queries or suggestions, feel free to comment on the blog or hit me on Twitter, GitHub or Reddit.
To get the latest updates for my upcoming blog, you can follow me on Medium, Twitter, GitHub or Reddit.