Hacker News new | ask | show | jobs
Ask HN: How do I find meaningful things to work on if programming is a hobby?
61 points by commonanatomy 3012 days ago
I studied a business degree but taught myself Ruby at some point. I loved it so much that at some point I joined a company and became a full-time Rails developer, but because of my background, I moved into a product owner (customer-facing) role after a year.

Currently, I'm working as a scrum master at a different company in a different country. While I enjoy this, I get this crazy and fleeting desire about once a month to just jump back into full-time development. When I then seriously consider this, my partner tells me to just do it as a hobby (which is sound advice for a variety of reasons).

The problem with "just programming as a hobby" is that I lack a good goal (I'm not the kind of person who can't just program for the sake of programming - I want to actually make something).

So, how do I find meaningful things to work on if programming is a hobby?

21 comments

1. Find a real life non-work thing you care about. For instance, Dungeons & Dragons. Or alternatively, PTSD. It can be silly or serious, just has to be something you care about.

2. Find a way to apply programming to help. Make an open database of data from the game, or volunteer to make websites to connect those struggling with PTSD with support animals.

3. Start small and work up, but always build to finish. One of my greatest projects by stars is a tiny JSON file of the open spells from a game. Avoid being mired down in building "the perfect solution", because any solution is an improvement over no solution. "Perfect is the enemy of good."

I have a couple of suggestions:

1. Find parts of your life you want to automate and do less of. An example, I used to budget my money using an excel spreadsheet. I would copy my income and expenses direct from my bank account at the end of each month and categorize it per hand. Now I have a tool that can just download the CSV files from my bank, my PDF bills, and automatically pour all that into a database. I then have a relatively simple webpage where I can view this all, or throw an SQL query at that database.

Find things in your life that you do regularly, and find ways to simplify it through code.

2. Have you considered finding a non-profit and offering your skills there? Non-profits will usually have a website they need developed, or tasks that could be made a hell of a lot simpler through a for loop or two.

Similar to your first point, I like to find parts of my life that I'm CURIOUS about, and automate them or make a model/simulation of them. This technique has the added bonus of deepening your understanding of that aspect of your life.

For example, I've been a hobbyist songwriter / composer for a good part of my life. Recently I've taken up creating a procedural musical composition generator, and boy have I learned more about music theory in the past few months than I have in the past few years. Additionally, I've gained significant insight into my own musical tendencies. Not to mention, a programming product that I'm both proud of and interested in using/improving.

Mind sharing the excel?
Ahhh sorry I didn't see this. I don't have a blank copy of it that I can find. Only one with a lot of private info in it. It was based on one I found by googling "excel budget templates", "excel financial planning templates" etc if that helps any.
Thanks for the rely. I really like #2, thanks for the idea!
If you mean meaningful as in you want to do good meaningful work, I'd suggest taking a look at Ruby for Good. Offhand I know of a couple projects that could use some assistance:

1) Diaperbase - This is an inventory management program for diaper banks. The software is currently being beta tested by 6 diaper banks before opening to all diaper banks. (https://github.com/rubyforgood/diaper)

2) Playtime Project Wishlist - This is an app for the Homeless Children's Playtime Project to facilitate the donation of toys for homeless kids. (https://github.com/rubyforgood/playtime)

Or just jump in our slack and offer to help, we have a lot of meaningful projects to work on! Grab an invite to our slack here: https://rubyforgood.herokuapp.com

As a hobbyist, you have a freedom to work on meaningful problems that most companies and engineers don't.

I suggest you look for problems that it's valuable to the world to solve even though they may not be profitable. Solve problems for homeless people or people in third-world countries who can't afford to pay for software or services.

Create tools for NGOs to use. Write open source libraries for other people to build software on top of so we don't have to use the Googles and Facebooks of the world.

Or solve a problem that's too small to be profitable. Create a community tool or a babysitting bulletin board for your homeowner's association or co-op board. Write a transit app for a small town.

Implement a Dynamic Relational database: https://stackoverflow.com/questions/66385/dynamic-database-s... We have plenty of dynamic languages, but no viable dynamic relational databases. There are dynamic databases, but they are either not relational, or use a query language nobody is familiar with. Dynamic Relational can use SQL with only minor modifications from "static" SQL. It only adjusts RDBMS conventions just enough to get dynamism, but keeps enough the same to reduce the learning curve.
Have you looked at pgsql JSONB datatype and functions[0]? A lot of the "dynamic database" ideas can be implemented using the datatype, and then you have "dynamic sql" available on a already robust rdbms.

[0]: https://www.postgresql.org/docs/current/static/functions-jso...

For one, it requires learning "new ways" to query, and arguably awkward ways. The goal of Dynamic Relational is to only change the features/conventions of existing RDBMS that affect dynamic-ness in order to reduce the learning curve for those already familiar with RDBMS.
Wait, what is your end goal with a dynamic relational database?

Changing features/conventions will always create a new learning give.

What is dynamic-ness in RDBMS? It feels like you describing a problem that does not exist.

The fact that non-relational or quasi-relational dynamic solutions already exist show there's a need for dynamism. And, I agree that SOME changes are necessary to get the target feature(s), such as dynamism, but it's logical to change as little as possible when inserting the features to reduce the learning curve.

Now, one may argue that add-ons to existing RDBMS give dynamic abilities, but as I suggested before, they are awkward and verbose. If dynamism is a primary feature one wants in an RDBMS, then the verbose approach is not desired.

I welcome other suggestions to achieve similar goals, but as of now, the D.R. suggestion seems the best balance. The goals are: dynamism as a primary feature, and a small learning curve for those already familiar with RDBMS. Go!

What I do is take every opportunity to work on small (ideally small enough that I can finish it at work) projects that make my day job (warehouse QA) a little easier.

For example: today was a slow day, so I figured I'd do audits in my down time. Normally I respond to detected errors as they arise, but when volume is low, there aren't enough detected errors to take up all my time. Audits, on the other hand, involve checking specific areas for errors.

I didn't want to do audits blindly, so I wrote a little JS script that let me take a week's worth of error logs and find the areas with the most errors.

I figured the company already had a tool to do this and I just didn't have access to it. After I was finished, I asked the QA manager and he said he didn't have a way to get that information either, so I sent it off to him and made his day job a little easier too.

Another example: we were using a third-party barcode generator to circumvent some issues with barcodes that weren't working right, but it generated the barcode server-side, so we had to wait for the POST request to submit and the page with the server-rendered bar code to load, which sometimes took a while. I figured that wasn't great for the people who had hourly quotas to meet (who have to find someone with a laptop whenever they encounter a barcode that isn't working right), so I wrote one in JS that does it all in the frontend and builds the barcode as you type.

I solve problems in my life, ideally within the effort scope I want. Ie, if it takes a year+ of side-work development just to get the alpha or MVP out the door, you're likely to burn out on the side project.

To me, for hobby projects they need to be usable QUICK. Once you have it usable, you'll spot a dozen things that you can do to make your UX better. After that, just rinse and repeat.

That is hard question, because we don't know what you like about programming. Do you like algorithms? Do you like creating small tools? Do you like large projects? With people or alone? Are you artistic and thus would be able to create own tiny game? Are you motivated by competition (in that case look for challenges)?

Try to think about answers to these questions. Also, I would advice you to pick something as small as possible at first. Optimally, something you are able to finish within a day. That will allow you to learn how fast/slow projects proceed before you get demotivated about doing something large.

Now, while you don't know, one thing I would recommend would be to look at some online courses whether udemy or coursera or udacity or anything else. Browse through catalog, pick up one and challenge yourself to do course and do exercises. This will not give you "meaningful hobby things", but it will make you keep learning so when meaningful thing comes around, you will already know a lot. And maybe you will find inspiration there.

If you like creative stuff and algorithmns you could try to use a creative coding framework like cinder, processing or open frameworks. I like implementing some easy algorithmns like bird flocking simulations, circle packing etc. There are many good examples on youtube (e.g.: The Coding Train) Those are fast and easy projects with the benefit of reaching a goal quick (after you learned the framework), getting to know algorithmns, getting to know languages and having visual feedback.
A suggestion above about finding a project to automate some part of your life is really good. I'm generally in the same boat as you, I can't code just for coding sake, but I do really enjoy it and can work feverishly if I have a goal in mind.

For example, I care about my meal prep quite a bit and wanted a way to generate a meal plan based on the recipes and foods I had available. While there are a bunch of apps out there that do that for you, I wanted to save the ~$20 and built my own. While the ROI was definitely not there, it was fun to build and I still use it today.

Another example I did was that I formerly was a professor and got asked numerous times for additional practice problems. So I built a web app that would generate questions with random numbers (these were mostly math based questions) so they had an "unlimited" number of practice problems. This turned into a massive project and was incredibly fulfilling.

The number of problems are practically limitless - good luck!

So where’s the meal plan app? ... I had similar idea and started with a spreadsheet, I havnt finished yet but thought the problem was interesting and would like to see how you solved it. My idea was to have a list of recipes that you pick for a meal plan and the app would output the grocery list.
Mine was really simple, I basically created a SQLite DB with all the recipes I like and where to look them up from. Then I had an interface that would randomly pull the recipes out of the table and assign them. It was basically like (select 1 meat, 1 side, 1 starch, unless it was a one-dish-meal like lasagne).

I ran into a bunch of problems with generating pretty much the same meal multiple times per week. So, I then inserted a "likeness" score for how much I actually liked that item (ex/ brussels sprouts were a 2, sweet potato fries a 9), and then used that as a seed for the probability of showing up.

It was super personalized and I recently found Big Oven which is actually much better than what I had done (it also generates grocery lists and can incorporate random food blogs). The one problem with that app turned into another side project. They limit how many recipes you can OCR into their app. So, my workaround was to create my own "food blog" by uploading a bunch of static sites on my personal website and then linking them. (because food blogs are free to link).

This is a hard problem... I also wanted to do something similar for years, but EatThisMuch beat me to it and did a fairly good job.

It's challenging because you can't optimize using continuous variables, since you aren't going to eat 0.001283834 of a pizza for example, or 4.910 cans of tuna because your below your protein target. You have to deal with whole numbers, and moreover the results need to make sense and not taste like garbage.

I remember reading something from the creator of EatThisMuch that stated in the early days he would actually get silly things like that... here: eat this 28 cups of cottage cheese and you've hit your targets!

Kudos for the question generator, one of my profs did that too and it was such a lifesaver.
Select a subject that will challenge you on multiple levels simultaneously, for example if you don't know Rust and microcontrollers go through this: https://japaric.github.io/discovery/
Right now I'm working on a suite of tools for calendar/schedule/to-dos, money expense tracker, etc. All for myself because the available tools are either too bloated, or don't have the features I need, or cost too much.

So look at all the tools and apps you use and think of the moments you thought "It sure would be cool if it could do this instead of this or if this looked different" and build your own. I feel like this method is especially good for someone just starting out because you can take inspiration from other software and don't have to build everything from the ground up.

Or maybe browse GitHub and see if there are some open source projects you could contribute to. :) If you see something you like, look if there are open issues and try to fix them.

I don’t know how “meaningful” it is, but one thing I did that I had a lot of fun programming was making a cheap home automation system. I used $6 RF outlets, a $2 RF transmitter, and connected it to my raspberry pi, and now I can turn on and off all my lights using Siri
I've always wanted to do this but didn't know it could be so cheap! Where did you find that stuff? Is it pretty reliable/robust?
my suggestion would be to create a "hands-on" course ( for Udemy, PS, Coursera, etc... ) teaching/showing what you already know. It's of lesser importance whether or not your course get approved/carried by the company in question. Let's say: "scrum-managed ROR for beginners", "database performance tuning on ROR applications", "ROR microservices backend for mobile apps", whatever. Draw your course as a mind-map, go on filling the gaps and you will start to find areas that you want to know more. If it works out, you've got a stream of passive income, if not, you have scratched your itch and sharpened your skills... Repeat until you get bored.
Also a good idea, thanks!
Write a demo. As in the demoscene thing.

More to the point, try programming just for the fun and art of it -- like that 80-year-old lady who paints with her Amiga. You can start off with a framework like Processing if you do not wish to get into making raw OpenGL calls and the like. If it comes from your own vision and imagination, it's meaningful to you.

I dunno. Did you specifically want to do Web programming?

Now that you master Ruby, you could have a look at Ruby/Rails open-source projects like this one me and another programmer created:

https://github.com/diowa/icare

I don't know how your work environment is, but maybe you can organize something like a monthly Hackathon with your team to work freely on projects (related or not to the company based on how management takes it) during work hours.
Look for services, apps or programs you use that are open source and make contributions.
Just look around you and see if there is any task you would like to automate.
read the source code for the programs you use. compile them yourself. try to fix your own minor annoyances, and poke around. take a look at their bugs database.
* automate things in your daily life :- I spend sometime in office downloading many kinds of log file and analyzing it. So, I just built a small qt GUI that behaves like a MC clone in windows. It's not very nice looking, but improves day by day.

* hobby to useful apps :- like visitinh hackenews frequently, so make a GUI client for hn.

No matter what you do, if the requirement is not clear, you won't be able to finish it. If no one uses it, it will be useless and disapper into the crowd.

I fly frequently and i do like being subsidised by other passengers (pay less), I've written my own robot that monitors flight prices and alerts when prices go down (that way i can workout the trend)