Ask HN: How do I find meaningful things to work on if programming is a hobby?
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?
36 comments
[ 6.9 ms ] story [ 85.5 ms ] thread1. 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.
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.
* 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.
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."
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!
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!
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).
[0]: https://www.postgresql.org/docs/current/static/functions-jso...
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.
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!
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.
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?
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
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.
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.
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.
https://github.com/diowa/icare
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.