
"I know how to program, but I don't know what to program" - adamnemecek
http://www.devdungeon.com/content/i-know-how-program-i-dont-know-what-program
======
TeMPOraL
Yesterday I was on the European Lisp Symposium, listening to the talk about
Clasp and CANDO. Christian Schafmeister, who is a _chemist_ , basically wrote
his own Common Lisp implementation with focus on speed and C++ interop to have
a base to run a molecule design tool on - because no available software was up
to the task he's doing (designing stuff like water filters out of
molecules)[0].

What it made me realize is that... I need to find myself _something else_ to
do than programming. Something else to learn about in greater detail. There
are many, many interesting problems out there to solve, but you have to know
about them first. Programming is great as a support speciality, if you have
another one to support it. Right now the only thing I'm specialized in is
making better tools for developers. Which we're in need of, true, but even
more so are other domains.

[0] - Yesterday's talk should be up soon; in the meantime, here's his talk
from last year at Google:
[https://www.youtube.com/watch?v=0rSMt1pAlbE](https://www.youtube.com/watch?v=0rSMt1pAlbE).

~~~
vijayr
Is there a list of real world, expert vetted list of problems that can be
solved with software? Problems like the one you mentioned (not yet another
project management app). It would be awesome if someone can curate a list like
this and act as a bridge between experts from other fields and programmers who
want to work on such problems.

~~~
CJefferson
I have a range of such problems. On major issue is that learning what the
problem is, and exactly how to solve it, is a fairly major undertaking.

Also, because I'm in research, no-one is going to pay you for your work (or if
you get paid, it will be embarrassingly small)

I'm not sure how many people there are who would be willing to invest a couple
of weeks learning a new topic, to then write a program in that topic without
pay. Oh of course, and probably useful to provide some minimal support going
forwards as well.

~~~
vijayr
What kind of problems are they? What field?

I understand what you are saying about pay. But here is the counter argument
for it - say you have 3 problems to solve, that can be solved with software.
You don't have time or patience to code it yourself, but you know your peers
and friends also have the same 3 problems. If you can clearly write down the
requirements, I think there will be programmers who will be willing to work on
the problem - especially if they know there are people who want the problems
solved and there is a possibility of turning it into a side project or a
business.

Maybe you could pick a handful of the problems, post them here and see if
there is any interest?

~~~
CJefferson
I won't do it in this post, but I'll aim to write up a blog post, and see if
it gets any interest.

------
gedrap
In a recent humble bundle, I found Automate the Boring Stuff with Python [0]
which partially answers this. After going through the basics of Python, it
describes building small projects such as scanning an Excel spreadsheet and
sending email to people who are marked as 'not paid'. Projects like this give
a different perspective to programming. Programming is not only about building
grand projects. It can also automate every day stuff which you wouldn't
normally call a programming task.

>>> contribute to an open source project

It's a very very common advice and I believe a wrong one, especially to novice
developers. It's simply... Not that easy. Yes, there are tons of projects but
most of them are pretty damn large or mature enough so that easy tasks have
been a long time ago. Some projects (e.g. servo) have web sites dedicated to
new contributors where you can filter issues marked as easy but there are not
many projects to choose from. You can look for small, less popular projects...
But that's not an easy task either. Plenty of experienced developers have an
issue 'want to contribute, don't know where' and they find it tricky, it's
much harder for the novices.

[0] [https://automatetheboringstuff.com/](https://automatetheboringstuff.com/)

~~~
stephengillie
If you convert to CSV, emailing the non-payers is a one-liner in Powershell.
Even converting the XLSX to CSV is pretty easy with the Excel .NET libraries,
and well-documented in blog posts and StackOverflow.

Sometimes, the bigger challenge with automation is getting users to see a
service, function, or utility as the underlying algorithms and calls, and not
as this immutable black box interface. Once viewed this way, it's easier to
separate automation into more easily defined goals.

\---

Foreach ($nonpayer in (Import-CSV ("C:\billing\" \+ (get-date -F MM) + ".CSV")
| where {$_.pmt -eq 0})) { Send-MailMessage -from Billing@example.com -to
$nonpayer.email -SMTPserver relay.example.com -title " Payment Overdue" -body
"Hello $($nonpayer.first-name), your payment for $(get-date -f MMMM) was not
received. Please send payment today."};

(I wrote this on the bus on my phone)

~~~
kazinator
You probably don't want to be hard-coding the address of your SMTP forwarding
host in a script. If you have to change to a different one, you will have to
hunt down this sort of usage and fix it.

~~~
stephengillie
Yes, but if it weren't hard-coded, it wouldn't count as being a one-liner. ;)

Besides, it's rare for DNS names to change; the point of DNS is the underlying
server addresses can change without changing the name. And a service like SMTP
relay should be less likely to change than other types of host.

But still, good point. This could easily be a Param if the function would be
used in many environments.

~~~
kazinator
Oh the DNS name will change if you use your ISP-provided SMTP server and you
change your ISP from Acme Internet Services to A-1 Networks. :)

~~~
stephengillie
Ah, that's exactly the kind of situation where you'd want a param with a
default. As an example:

PS C:\> New-Parameter SMTPSvr -TopHeader -BottomHeader -ParameterType string
-DefaultValue "mail.example.com"

    
    
            Param(
    
                    [string]$SMTPSvr = "mail.example.com"
    
            ) #end Param

------
cossatot
For people interested in science (finance would also work) there is an
infinite number of things to be done to be useful (or simply interesting) at
various levels.

Doing calculations by writing functions, reading files, etc. is a great way to
progress. One can take some equations from an intro physics/chem/bio book and
get started. Or doing some budgeting/personal finance/investing simulations
using personal banking CSVs or online stock data.

It's a good alternative to game programming in that it may be more obviously
pragmatic and appeals to people (like myself) who are thoroughly uninterested
in games. I imagine it's a very different style of programming as well; less
interactive and more geared towards producing results rather than an
experience.

For more experienced programmers looking for interesting and useful side
projects (maybe to show off skills for a job search), I think there is a lot
of opportunity to work with scientists to help them with their research. It's
actually pretty easy to reach out to scientists by going to public talks and
seeing what they do, then chatting them up and seeing how to make yourself
useful. The hard part is of course sticking with it...

~~~
Elderofozone
I did just that in my early career as a hydrogeologist. I wanted to impress my
soon to be masters supervisor, so I programmed a simple analytical model that
is used in my field. In doing so, I learnt about how cautious groundwater
modellers have to be in interpretation and fundamental problems in the
mathematics. My supervisor still brings it up everything I see him at
conferences.

~~~
cossatot
Nice! I learned Matlab to do nonlinear optimization of GPS data to solve for
fault locking depths and slip rates, and then a year or two later learned
Python to do run FEMs of thermochronology data (also to get fault slip rates)
on Amazon's servers in parallel. (Matlab was not really up to that task.) None
of that was to impress my advisor exactly, but it worked...

------
mkozlows
I mean... "get a paying gig"? Lots of people don't know how to program, but
really do need something programmed, so this is a pretty straightforward
peanut butter/chocolate scenario, plus you get money.

~~~
gedrap
I get what you mean but I believe the post describes a different issue and
talks about side projects which are very different from paid gigs.

In paid gigs, you have hard or soft deadlines, commitments, etc. But sometimes
you just want to code with no pressure, no deadlines, no managers, under total
freedom and the money is not the first (and often not the second) priority.

That's why paid gigs often is not the answer.

~~~
karmicthreat
I disagree here. Maybe if someone has had very little exposure to programming.
I've found with an admittedly limited and completely anecdotal survey of
developers around me that stress helps. The deadlines and people actually
depending on you is a crucible that helps you get better much faster. You have
to develop all the soft and hard skills that go with just pounding keys. Like
project management and time estimation. Dealing with other people and
evaluating problems.

You might get there with total freedom, but stress might get you there faster.

~~~
TeMPOraL
Let me counter your anecdote with my anecdote - I work _much_ worse under
pressure. Deadlines and commitments stress me out.

I suppose different people have different needs. I started with programming as
a childhood hobby, and one thing I retained from that period of my life is the
strong need for autonomy in the kind of projects I do, and in the way I do
them. Which is, sadly, quite incompatibile with the way a typical employer
wants you to work.

------
edw519
_It usually comes in a phrase similar to "I know how to program, but I don't
know what to program."_

"How" is about yourself. "What" is about others. Both are important, but "How"
ususally comes first. The best way to transition from "How" to "What" is to
trust that you have enough "How" (you probably do) and talk to enough others
to understand their "What". That oughta give you plenty to do.

 _In the software community the rule is "don't reinvent the wheel." It's
almost frowned upon if you rewrite a library when a mature and stable option
exists. While it is a good rule in general, novices should not be afraid to
reinvent the wheel. When it is done for learning or practice, it's totally OK
to make a wheel!_

Yes! The best thing I've ever done to get better ("graduating" to the next
level) was to rewrite something else. Sometimes because I thought it sucked,
sometimes because it was so cool that I wanted to grok how it worked from the
inside out, but never because it needed rewriting. I have never learned
anything reading someone else's code. I have always learned tons rewriting it.

 _Don 't get the notion that you need to have the best idea ever before you
write a program either._

I never write anything in order to get ideas. I write stuff in order to fill
my tool box with enough skills and wisdom so that when I do get an idea, I'll
be able to run with it.

 _How many of you have been in the situation where you think "I don't know
what to program?" How did you handle it? What advice would you give to others
in that situation?_

Just write something, anything. You probably won't know where this will take
you, but rest assured, it will take you somewhere you never would have found
by not writing it.

Great post! Thank you, OP.

~~~
kazinator
The "what" is also about yourself. To be a complete programmer, as a creative
artisan, you have to generate requirements and specifications, not only code.
Ken Thompson didn't wait for PRD from product management before starting Unix.

Being able to generate the "what" is necessary even if you're working on other
people's requirements. This is because other people's requirements are usually
not so detailed that code will pop out. There are plenty of gaps where your
creativity is required to go from the high level spec to the detailed spec.
That's the design aspect of development.

The requirements leave out the "how": but hiding in every "how" is plenty of
"what"! "This requirement doesn't say how such and such is to be achieved:
_what_ do we choose to satisfy that?"

Someone who has no idea or interest in programming something if left without
external requirements is probably not a great designer; he or she is lacking
at least some aspect of the "maker" instinct. The maker is defined by making;
you would have to wrestle the craft out of a true maker's hands.

If you get a completely detailed spec handed to you, then you're just a
"coding technician". Someone will make a programming language which directly
executes such a spec, and you're obsolete.

------
zeemonkee3
The worst "writer's block" is when I'm actively trying to think of ideas of
what to program. I get the most interesting ideas for side projects when I'm
doing anything but programming.

For example, watching the Eurovision semi-finals last night I thought, "the
lyrics are so cheesy and awful, I bet they could be written by a computer
program", so I spent an hour or two writing a very simple Markov chain
generator using input from all this years' English language entries to
generate fake Eurovision songs.

The other weekend I wanted to play with React and HTML5 canvas, so I wrote a
starmap/world generator for an old desktop SF RPG I used to play. I was
listening to a podcast about that game so it got me thinking.

These are trivial ideas, certainly not earth-shaking or money-making, but
they're good practice and fun to work on and if nothing else I can just add
them to my Github portfolio.

~~~
rpgmaker
Lately, I've been getting better at catching my "someone should build X"
ideas. I used to quickly (and unconsciously) discard them instead of thinking
that I could build them myself. Sometimes the ideas aren't even related to
software but I'm still keeping them. Who knows, should I ever get tired of
programming I may _actually_ build up on them.

------
jmschwarting
Read this: [http://usermethod.com/](http://usermethod.com/)

Basically, if there's a product you've been looking for and can't find, make
that. If that doesn't exist in your life at this moment... maybe hang tight
until it does.

~~~
aavotins
What if I know how to code and most of the tools that I can't find can easily
be implemented in crude yet effective scripts? Usually I weigh out the cons
and the pros and end up creating a simple script/task that I, as a programmer,
can efficiently use, yet it's far away from being published. Am I the only one
who makes something useful for self only to understand that it requires
substantial effort, time and devotion to turn into an open source product?

~~~
teach
Are you the only one? No way.

The vast, vast majority of the code I write is only used by me. It's not on
github, it's not "published"; it's just to scratch an itch.

------
404error
I suffer from this. Recently someone told me,

"Don't think of "problems" in the extreme sense. A problem to solve could be
as simple as increasing efficiency of something by 1%."

~~~
dghughes
That reminds me of Star Trek TNG Geordi boosted the engine efficiency 1% or
so.

Data asked why he is working on the engines Geordi says the engineer on
another starship had his engines at something like 95%.

Then Geordi asks the computer for an update on the Enterprise's warp engine
and the computer replies the engine efficiency increased a bit due to his
changes.

[http://memory-alpha.wikia.com/wiki/Force_of_Nature_(episode)](http://memory-
alpha.wikia.com/wiki/Force_of_Nature_\(episode\))

------
solipsism
Honestly, I think the problem often isn't "I don't know what to program" but
instead "None of my ideas are things I actually can, or want to, program".

I have lots of big ideas. Big applications, distributed systems, etc. My
experience tells me they would take months or years of dedicated work, even
working with others. I already have a job.

I have lots of small ideas. I don't want to spend time on most of them because
they're not particularly interesting to me. I don't want to write a TODO
application that's perfectly suited to me, even though I want such a thing. I
don't want to futz around with the UI and write all the mundane utility
functions. There's no interest there for me.

So there's just nothing I'm particularly passionate about enough to motivate
me to spend my time on it. And that's no big deal, at work the I have the
luxury of other people thinking up the big problems and providing me with
countless amazingly intelligent peers with whom to create things. And at home
I have other hobbies.

Edit: So, I guess to crystallize some advice from that, at least for people
who are similar to me: try to get a job that satisfies your "I want to code
amazing things" itch, and then enjoy everything else the world has to offer
outside of work.

~~~
overcast
That attitude is fine if you're content making someone else's ideas. If you've
got lots of big idea, do something about it. Who cares if it takes you months
or years of dedicated work? If that's your hobby, then what is the issue? How
much time is spent watching television? Cut that in half, and build your big
idea.

~~~
emodendroket
I have other things I'd like to do nobody is going to pay me for.

~~~
overcast
Then what was the point of your original post? If you're happy with what
you're doing(or not doing), then good! Otherwise it sounds like you do wish
you were working on these ideas, and are looking for some reassurance of it.

~~~
emodendroket
You should probably ask the guy who wrote it, and not me.

------
sixQuarks
I'm opposite. I have so many ideas but don't know how to program. Just pay
attention to anything that frustrates you in daily life, especially if you're
researching something to buy. Is there confusion? lack of info? etc? Is there
a way you can scrape content together to present information better for this
audience? It's all about creating value, and I find reducing frustration or
thinking on the part of a user is usually an easy way to start.

~~~
jak1192
Hey how about you spit ball some of those ideas over here? I bet there's
plenty of hungry programmers in here eager to make them come to life

~~~
bloaf
I have ideas for crazy things. Here are some:

Make a Wikipedia for code. Not a wikipedia _about_ code, but a Wikipedia where
the pages _are_ the code. No references to outside tools/libraries, all the
functions are either in the base language or references to other wikipedia-of-
code pages. The pages are presented in a literate programming style.

Bring back the Inferno OS, but replace the original VM (Dis) with the
Microsoft CLR.

Make a P2P publishing system for scientific publications. Let the contributing
scientists have individual accounts, and manage reputations with a blockchain
reputation system. Let people also donate their CPU cycles to scientific
computations through this system. Require publications to store their data in
a database format that your system's client can query and process with some
programming language. Require all data tables, and results that appear in the
publication's text be expressed as functions performed on data queried from
the database (or potentially databases from other publications.)

------
return0
"... and sometimes i know _what_ to program but it's such grunt work that i
can't get myself to do it".

~~~
strictnein
I hear ya. That's been my week.

I understand all dev jobs will have some grunt work, but once you've been
doing it for 10+ years, it gets harder to work on mostly grunt work. My brain
needs something more challenging.

~~~
ta0967
give me a junior to flesh out my sketches, it'll be done in two weeks. ask me
to go it all alone, see you in four months.

------
gexla
Programming isn't music. It's a tool to solve a problem. Not knowing what to
build is a solution looking for problem. Generate ideas by getting out into
the real world and finding out the pain points in life. Build tools to fix
those problems. Preferably, pick a problem which people are willing to pay
money to solve.

Still not thinking of anything? Go outside and play until you find something.

Edit: I didn't read the entire article. I couldn't get beyond the music
comparisons. Rockstars in music get a lot more money and fun than rockstars in
programming do.

~~~
chriswarbo
Music isn't art. It's a tool to solve a problem. Not knowing what to compose
is a solution looking for a problem. Generate ideas by getting out into the
real world and finding out the pain points in life. Compose scores to
accentuate those problems. Preferably, pick a problem which people are willing
to pay money to have portrayed musically.

Still not thinking of anything? Go outside and play until you find something.

------
solipsism
Hm.. I think the author is confusing "I don't have any good ideas" with "I
don't know how to begin writing/structuring an application." He/she compares
"I don't know what to program" with "I don't know how to write a song". But "I
don't know how to write a song" is not the same as "I don't know what to write
a song about". Lots of people have one problem but not the other.

------
niroze
My problem now is just available time. I have plenty of things I want to get
done, it is just a time sink problem.

------
toddan
I know how to program, but most of the stuff i want to program are too
complex/advanced for me to create.

------
jrcii
I have a list of project ideas 500 miles long and growing every day. I somehow
feel obligated to build all of it and it gives me anxiety.

~~~
ff_
Mind to share it? I find generating good project ideas for me is quite
difficult instead :)

------
ld00d
I found it helpful to take programming courses at the community college. There
you have someone who will actually evaluate what you've made and give you
helpful suggestions for improvement. You won't have any trouble finding stuff
to do because it will be assigned to you.

------
hghar
This is pretty much as a child learns, you don't put children to do complex
things at once, if they wanna learn to write they have to make circles/lines
to learn to write letters then words then sentences, they got to repeat what
everybody has done already.

------
erik14th
I guess the hard part is to find something complex enough that you'll get
motivated and simple enough that you can get done on your own in the free time
you have. And software is pretty good at teaching you how complex simple
things can be.

~~~
gedrap
Challenging is probably better choice for a word then complexity. Anyway,
there are a few different kinds of complexity.

One comes from simply the problem at hand being large / complex and that's
something that might be really hard to come up with.

However, it can also be challenging because of unfamiliar tech stack. Be it a
new language, new framework, etc. Going too far in this direction can lead to
projects being too hard to complete so you want to balance it with familiar
technologies as well. For example, if you are familiar with Python and
Javascript, picking Elexir and CoffeeScript might be too much. However, Python
and CoffeeScript would make a good combination. You get the idea.

------
sebastianconcpt
I have ideas and know how to program but lately I'm not feeling the passion
that I used to have. I think I won't start anything unless I'm part of a hard
working team that cares enough too =/

------
kazinator
> _Doing programming challenges is good mental practice, but they do little to
> help someone learn how to create a new program._

What does that have to do with the topic of _knowing how_ to program, but not
having a _what_? That is shifing the topic to "I don't know how to program
very well; how can I get more practice".

How about developing an expert assistant program which helps writers stay
focused on a topic?

People who actually know how to develop can have this problem.

------
randomgyatwork
Good idea, bad colour contrast.

------
amelius
Isn't there a website with good business ideas? See if you can find some
programming challenges there.

------
xapata
Perhaps the knowledge of how to elicit tasks from customers is part of knowing
how to program.

------
known
[https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_c...](https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_computer_science)

