Learn by contributing to Open Source
Tags: android, kotlin, opensource
Published: 2019-06-17 21:43:02

---
title: Learn by contributing to Open Source
published: true
description: Learn Programming by Contributing to Open Source
tags: android, kotlin, open-source
cover_image: https://thepracticaldev.s3.amazonaws.com/i/0rq7ajp1xb2p4vedlvbd.png
series: Learn by contributing to Open Source
---

In the recent Google I/O, Google announced **Kotlin** to be the first choice language for writing Android apps. Since few years before Google announced that, **Kotlin** is preferred language and added kotlin support to the android studio, this news doesn't come as a surprise for me.

When the announcement came a year ago, I registered for many courses, finished a couple of them. I felt good about completing the exercises & sample projects. However, It lasted only for a while. With my personal (got married to a wonderful girl) & work commitments doubled(they let go of a few folks at my work), I took a break from learning kotlin.

When I started again, I struggled a lot and confused as to where to start again, as I was in the middle of several kotlin courses. Although the courses I registered to learn kotlin were pretty good, I realized that I'm more of a reading person. I don't mind reading documentation or several blogs to understand a concept and try out on my own. Watching a video course and following along a tutorial felt too slow for me.

I worked on small projects as I was learning. Although the personal projects were helpful to understand the fundamentals, it had few challenges.

  1. **Focus on scope:** It was up to me to decide the scope of the project. Sometimes I tend to expand on my idea on personal projects, and I spent more time on things that weren't relevant to kotlin.
  2. **Focus on Technology Stack:** Again, it's up to me to decide the architecture and design of the app, the libraries to use. While identifying answers to these technical questions, I lost track of my goal(which is learning Kotlin). For ex., I lost loads of time when I started with the goal of looking for blogs related with data classes and somehow followed blogs on sample apps that are built using the MVVM + RxKotlin + Dagger2. Although it is good to learn about this setup, it wasn't contributing directly to my original goal.

That's when I decided to start learning Kotlin again from scratch, but this time with a better clear plan.

So the mistakes that I did earlier in learning Kotlin were,

1. Trying to learn Kotlin from too many sources
2. Didn't start with what's working out well for myself (Reading vs. Video courses)
3. Didn't have a plan with a defined schedule
4. Didn't have a defined scope on personal projects

I learned from my experience and created a plan.

**Goal:** To Learn & develop an App in Kotlin and publish to the store by Sep 2019

The plan to do that,

1. Buy a book for learning Kotlin: [Kotlin Programming: The Big Nerd Ranch Guide](https://www.amazon.com/Kotlin-Programming-Nerd-Ranch-Guide/dp/0135161630)
2. Work on Personal project with limited scope: An Android App
   1. Outlined the basic idea of the app
   2. Identified the functionality scope of the app
   3. Identified the technology scope of the app
   4. Designed simple UI/UX flow using sketch app

## Learn by Contributing to open source

I have participated in Hactoberfest last year and contributed to [Slim-Launcher](https://github.com/sduduzog/slim-launcher) app by [Beautus S Gumede](https://dev.to/sduduzog). I [completed my Hactoberfest challenge](https://dev.to/subbramanil/hactoberfest-challenge-completed-e49) and got my T-Shirt as well. It felt good to give back to the community.

When looking back,

1. I learned a lot while working on the project. The app uses Kotlin, and It was a good exercise for me to flex my skills.
2. The app was published to store and had a defined technical scope to it. It helped me to focus on one thing and work within the boundary.
3. I thoroughly enjoyed interacting with the project developer Beautus S Gumede and working on the project. While we both were strangers, connected through his blog on dev.to, I enjoyed working on his project and liked the candidness and the appreciative character of Beautus S Gumede.

This exercise made me realize that I could learn a lot more by working on projects with definitive design and functionality. I could look into the code, fix a bug, or add a feature and learn from the project.

This had led me to add one more step to my learning plan,

1. Buy a book for learning Kotlin
2. Work on Personal project: Android App
3. **Contribute to open source projects**

So far, I have contributed to,

- [Slim-Launcher](https://github.com/sduduzog/slim-launcher)
- Fork of [Android-Lock9View](https://github.com/TakWolf/Android-Lock9View)
- [Dev-Android](https://github.com/subbramanil/DEV-Android)

Currently, I'm working on an enhancement request in the projects,

- [Simple ToDo](https://github.com/subbramanil/SimpleToDo)
- [Simple-Android](https://github.com/subbramanil/simple-android)

I typically make notes of my learnings as I work on a project, and I plan to write a series of blogs once the PRs are submitted and merged.

**Note:** I found out about the repositories through Github "Discover Repositories" feature. However, now that we have a listing in 'Dev.to,' I'm going to create a listing for volunteering to work on open source Android/kotlin based projects where I can contribute and learn as well. (Although, I'm going to delay that until I finish my current commitments)