
Ask HN: Where do you all get your ideas? - kory
Hi all,<p>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.<p>Ok, awesome. But I keep having the same issue. I rarely start anything because I can&#x27;t come up with any &#x27;perfect&#x27; ideas. I see people around here saying &quot;I&#x27;ve written 8 popular apps on the app store&quot; or &quot;I&#x27;ve wrote x website&quot; or etc.<p>And you&#x27;re probably going to respond with: build it anyway to learn. And that&#x27;s great, but there&#x27;s an issue there, too. I guess I just see programming as a tool rather than the goal, so if there isn&#x27;t a captivating end goal or problem in my head that I believe in or find interesting, I can&#x27;t motivate myself to work on a random project.<p>So I&#x27;ve done internships and jobs for several years to get experience, but it just doesn&#x27;t seem the same as being able to do something on my own. I&#x27;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.<p>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 &#x27;suck it up&#x27; and work on something I&#x27;m not passionate about to learn something in the process?
======
mindcrime
For me, the main thing is to read a lot. I mean, just surfing HN and Reddit
help a lot. But a lot of my "ideas" aren't necessarily "cut from whole cloth"
so to speak, but they're more along the lines of "I could build a better
version of X" or "Oh, hey, here's this new thing Z... what if I combined Z
with Y, and added a sprinkle of Q"? Ya know, that sort of thing.

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

~~~
dmfdmf
< _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._>

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.

------
rubicon33
Here's something that might work for you -

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.

------
itamarst
"Programming as a tool rather than a goal" is _really_ good way to think about
programming. Programming for the sake of programming can be a hobby; if you
want to be a professional programmer, if you want to produce _value_ , it's
all about goals.

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...](https://codewithoutrules.com/2016/11/10/work-life-balance-software-
engineer/)).

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/](https://codewithoutrules.com/2016/09/09/side-projects/)).

------
hawkice
My process has been to read a lot, pay attention to when things aren't as good
as they should be, or something important is missing. Have something to say
about the world (for instance, "people don't seem to understand kanban" or
"mnemonic systems aren't useful if you need an online dictionary to use them")
and build software that reflects that -- like a kanban system that does actual
queue limiting ([https://gen517.com/queue-limiting-the-whole-point-of-
kanban/](https://gen517.com/queue-limiting-the-whole-point-of-kanban/)) or a
tool to help people _learn_ the mnemonic major system instead of just having a
computer use it ([https://gen517.com/mnemonic-
major/](https://gen517.com/mnemonic-major/)).

Eventually, 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.

------
jetti
The first thing for me was coming up with a solution to a problem that I had
at my last job and seems to be a problem for others: Windows Installer
creation software. There doesn't seem to be a good option that doesn't break
the bank and is easy to use (Wix and NSIS are free but there is a learning
curve). I normally code in C# and that is what I'm using for my main project
(the installer creator) and I fell into the old tech of WinForms since that
was what I'm used to. I decided to learn XAML and WPF and that has made things
so much easier. It was just pushing myself to try and improve the UI
experience of my application that allowed me to improve.

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.

------
samayshamdasani
I used to have the exact same mentality. However, I had to make myself
interested in building random projects because of the feeling I had at the end
of completing one. When I complete a project, I feel so good that I actually
made something. Try to build a project that you would be interested in and
start small, then improve it.

To teach people to code in this way, I started
[https://enlight.ml](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](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.

------
psyc
I only work on things I'm fascinated by and passionate about. For me that has
always been games, simulations, and graphics. If you're drawn to computing in
the first place, there must be something that computing enables that you find
interesting.

------
dmfdmf
< _I rarely start anything because I can 't come up with any 'perfect'
ideas._>

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.

------
g00gler
I find myself in a similar boat quite often. I come up with lots of different
ideas but they're not very good or have already been done.

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.

------
a_lifters_life
In industry

