
Ask HN: How do I find meaningful things to work on if programming is a hobby? - commonanatomy
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.<p>Currently, I&#x27;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).<p>The problem with &quot;just programming as a hobby&quot; is that I lack a good goal (I&#x27;m not the kind of person who can&#x27;t just program for the sake of programming - I want to actually make something).<p>So, how do I find meaningful things to work on if programming is a hobby?
======
vorpalhex
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."

------
MarkCole
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.

~~~
newbear
Mind sharing the excel?

~~~
MarkCole
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.

------
seanmarcia
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](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](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](https://rubyforgood.herokuapp.com)

------
cimmanom
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.

------
tabtab
Implement a Dynamic Relational database:
[https://stackoverflow.com/questions/66385/dynamic-
database-s...](https://stackoverflow.com/questions/66385/dynamic-database-
schema#46202802) 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.

~~~
oneweekwonder
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...](https://www.postgresql.org/docs/current/static/functions-json.html)

~~~
tabtab
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.

~~~
oneweekwonder
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.

~~~
tabtab
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!

------
80386
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.

------
notheguyouthink
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.

------
watwut
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.

~~~
MrFuzzy
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.

------
chasedehan
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!

~~~
newbear
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.

~~~
chasedehan
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).

------
Shoothe
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/](https://japaric.github.io/discovery/)

------
besasam
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.

------
jtsiskin
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

~~~
willhoyle
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?

------
slipwalker
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.

~~~
commonanatomy
Also a good idea, thanks!

------
bitwize
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?

------
cesidio
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](https://github.com/diowa/icare)

------
is_true
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.

------
konraditurbe
Look for services, apps or programs you use that are open source and make
contributions.

------
GrumpyNl
Just look around you and see if there is any task you would like to automate.

------
nbsd4life
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.

------
akditer
* 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.

------
random_infidel
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)

