Ask HN: Where do you all get your ideas?
When I read HN and see what suggestions people have to improve my programming skills, I see people say that I should code more and do more projects.
Ok, awesome. But I keep having the same issue. I rarely start anything because I can't come up with any 'perfect' ideas. I see people around here saying "I've written 8 popular apps on the app store" or "I've wrote x website" or etc.
And you're probably going to respond with: build it anyway to learn. And that's great, but there's an issue there, too. I guess I just see programming as a tool rather than the goal, so if there isn't a captivating end goal or problem in my head that I believe in or find interesting, I can't motivate myself to work on a random project.
So I've done internships and jobs for several years to get experience, but it just doesn't seem the same as being able to do something on my own. I'm totally motivated and work well in a corporate or research work environment because I want to learn as much as possible, but that motivation seems to fade at home without a good idea on a personal project.
So, HN, where do you find ideas that are captivating enough to work on to the point where you are motivated to build it? Or should I just 'suck it up' and work on something I'm not passionate about to learn something in the process?
13 comments
[ 3.4 ms ] story [ 52.7 ms ] threadEventually, you'll get something to say that's important -- not just to you, but to other people. Something professionally important will often save people money or make them money. Convince them that you're correct about it being important, and you can sell the software. Making money on something can keep you invested more than emotions like "passion", which change over time.
To teach people to code in this way, I started https://enlight.ml that hosts a bunch of "random" projects. As I type this, I'm also working on my next project (https://shamdasani.org/playground) which is my version of codepen/jsfiddle.
I am by no means a professional programmer, but I am gradually learning through building. Hopefully, you'll learn to do the same.
Another thing that helps is hanging out at the local hackerspace and just listening to other people talk about their projects, and batting ideas around with them.
I also make it a point to read a modest amount of non-techie stuff... I read books on history, physics, business strategy, marketing, economics, politics, etc., as well as plenty of fiction. For me, I think it's the synthesis of lots of disparate ideas, absorbed over a period of time, that fuels whatever creativity I have.
One last point... when you do have an idea, make sure to write it down, before you forget it. It may be that you have more good ideas than you realize, but just aren't capturing them. I've scribbled stuff down on a notepad before, and then gone back to it a year later and thought "shit, that's good stuff, and I had totally forgotten about it".
This is really good advice. I was going to make a comment that creativity and ideas are essentially a subconscious process like a dream. Your mind is making connections all the time and if you pay attention sometimes you can snatch them before they sink back down out of awareness. I make a point to write down my dreams every morning because it is important keep the channel open as a habit. Notice how elusive capturing dreams are; you might wake up to a vivid dream but if you don't write the content down right away by the time you are drinking your coffee all you have is the memory of a vivid dream but no recollection of the details. I think creative ideas are similar.
Try copying something.
That's right, try and copy some other program. For instance, if your domain is app development, try writing a twitter clone, or a snapchat, or a flappy bird.
If your goal is education, not money, than sometimes building something someone else has built can be a great task.
I am in the same boat as you: I end up not feeling motivated to program without a good goal.
Thing is, coding more won't necessarily make you a better programmer. Especially if that side project is just doing the same thing you usually do.
To become better at anything you need deliberate practice. That means:
1. At the edge of your competency.
2. Focusing on a particular skill.
3. Getting quick feedback on how you're doing.
Getting detailed code reviews from an experienced colleague will improve your coding much faster than a side project.
So one thing you can do is just not bother coding in your spare time. It's possible to be a good programmer and not do any coding in your spare time. I would argue it can often make you a better programmer (https://codewithoutrules.com/2016/11/10/work-life-balance-so...).
If you do still want to do something in your spare time, some alternatives to building your own project:
1. Get a bunch of good books and read them.
2. Find an open source project you're interested in, e.g. one you use at work, and try to submit patches. Ideally one that does code reviews.
3. Read lots of open source software and figure out how it works. This will improve a particular skill (understanding new code bases) but also show you lots of best (and worst and mediocre) practices. Think about what you see and try to decide which it is.
4. Learn core liberal art skills (close reading, writing, research, building abstractions) if that wasn't part of your education. I got an undergrad in humanities at Harvard's evening school, basically for fun, and it made me a better programmer.
If you do end up building a side project, some advice: make sure it either has a very specific goal, or has a very limited scope (https://codewithoutrules.com/2016/09/09/side-projects/).
You have probably heard the expression "the perfect is the enemy of the good" which might be the trap you are in. The meaning of that expression is that sometimes we are waiting or hoping for the perfect job, that dream girl or the ideal house that meet all our expectations and needs while life passes us by as perfectly suitable jobs, girls or houses drift passed without action to actually achieve them. This is a mistake.
Pure speculation here, but also I suspect that you have lost the connection between your actions and your ownership of (and pride in) some project or idea or whatever. This issue is wider than programming projects because it applies to anything that you might do. What I think you need to do is pick a project or something that will make your life better and that you might enjoy just doing for the sake of doing. Not to please anyone but yourself, not to make money but to make you happy. It doesn't necessarily have to be programming but a decent sized project that will push you out of your comfort zone and challenge you in some way.
By way of example, a couple of years ago a client's husband died and she offered me his garage full of tools. I had not wrenched in decades but I couldn't say no so I took her up on her offer. Now I had a garage full of tools and nothing to do so I decided to buy and fix up a motorcycle. I went through a project bike from stem to stern and really challenged myself to not only do the project but to do it right and actually complete it. It took a year and it was a real slog but I finished it and it is now one of my proudest achievements. Every time I press that starter button I feel a real sense of pride and true ownership.
This is what you need right now, something, anything to take on and tackle for and by yourself and not for the fame or fortune. It could be anything but I recommend something not programming relates; something tangible or physical such as a new skill or activity like piano or hiking or biking or skiing, etc. whatever you want. Just sink your teeth into and feel what it is like to really own a project. I think this might revive your sense of ownership and pride in whatever you do, even programming.
Other times I start building then get bored and convince myself it won't work out anyways.
So I was considering this today and this is what I came up with:
I think it'd be fun and helpful to have another developer to work with, someone to keep you interested in the project and discuss the work with who will actually care.
I'm passionate about compilers and dev tools so that leads me down paths to other languages/frameworks to get my job done in the most efficient way. I like the more niche/obscure topics such as manipulating IL for .NET as well as injecting byte code into already made assemblies. Because of that I'm taking an indepth look at the CLR and CIL so that I can better understand how that whole system works. Now, this probably won't land me a job but it does help me stay motivated. With this knowledge I'm planning on making a decompiler/code injector/debugger for .NET dll/applications that are already compiled and shipped. I also have an idea for a programming language that I'm in the process of designing. I'm thinking of what languages to use for that because, while I'm most comfortable in C#, there are better languages to use to create compilers (I'm currently thinking of Nemerle or F#) that target the .NET framework (which again would increase my CIL knowledge)
At the end of the day think of what your passion is that could be solved with code and go do it. Pick a language you haven't used before or some framework that is new to you. It will make the project go slower but you would end up having learned a new technology.