I've been a professional software developer for more than 20 years, and I still love the process of learning new things. One good way of learning, in my opinion, is to use unfamiliar technology to create things for yourself to use. Even if the first thing you build, using your new skills, might appear small or simple, the lessons learned are still real and will lead you forward.
If you want to learn HTML and CSS, start by learning enough to create your personal web site. Or learn enough about Unity to make the first version of that game you feel someone should have already built. Or dive into Python or Bash scripts, and automate your most boring tasks at work. Go on Udemy, Codecademy or Skillshare, and explore what is available to you.
I wanted to learn more about native Android development, so I made an app.
(Content warning: death of a loved one!)
It all started when my mother passed away. She had COPD, a horrible disease that gets worse in a series of infrequent exacerbations over several years. She would be stable for months and then, unexpectedly, find herself hooked up to a respirator for days before coming back home. Each relapse would make her normal state slightly worse than before.
Over time, we all started getting used to it and acclimated ourselves to every "new normal". We actually never thought that the next one would be the final one.
Until it was.
When it happened, I had a lot of regrets. I used to call once or twice a week just to give some shallow status update and to get one in return. In retrospect, I should have asked the deeper questions, been a better listener, opened up more. I definitely should have called more often.
Having been a computer geek for the majority of my life, as part of processing my loss, I started throwing code at the pain. I made my first Android app, and I named it Call Mom. The app was supposed to be the reminder I would have needed long before. The first version just gave a me notification every day, and when the notification was clicked, it started a phone call to … my dad.
To go through with this, I had to learn a lot about the Android ecosystem, like how the Activity lifecycle works, how to set alarms that would survive a device reboot, how to store persistent data, and how to properly show notifications to the user. All of that, and some more, is the focus for the next article in this series.
After using the app myself for a while, I decided to release it to the public. Before doing this, I had to add some features to the app. First of all, I couldn't ship an app with my dad's phone number hardcoded into it, so I had to learn how to allow users to pick from their device's contact list. Also, I realized that not everyone wants to call their mom every day, so I created a way for users to pick a call schedule, and update the app's alarm system to give notifications at the correct times. These changes are the focus for the third article.
Finally, I realized that an app named Call Mom is only useful for connecting with roughly half of the world's parents out there. I decided to also release an app named Call Dad. Of course, making a completely new app for this would create almost 100 % code duplication. Instead, I found a way of doing this properly, with no code duplication at all. I'll explain it all in the fourth and last article of this series.
Every time I sit down to tinker with the apps, to fix a bug or to add some new feature, I'm reminded of my mom, in a good way. And getting reminded to call every day, has definitely improved my relationship with my dad. Of course I could have all that without building apps for it, but making them has been therapeutical. I feel I'm creating something useful, with a purpose.
So start building something for yourself. It's worth it.