
The wrong question: “I want to learn to code, what should I do?” - itsjaredc
http://495west.com/post/9885249988/the-wrong-question-i-want-to-learn-to-code-what?73331330
======
spacemanaki
I think the assumption here is that if someone asks you, “I want to learn to
code, what should I do?” they know you already, since if they were asking the
anonymous internet hordes, they're already basically doing what this post
suggests.

If you ask someone you know for advice, you aren't going to get the same thing
you get if you ask Google, and you aren't even necessarily looking for the
same thing. I was in exactly this situation earlier in the summer, when my
brother asked me, after taking MIT's intro to programming class using Python,
"What language should I learn next?". When he asked me that, he wasn't looking
for the best possible answer from the best engineers who are posting to Stack
Overflow, he was asking his brother, who might be able to help him when he
stumbles, since I would likely recommend languages I know. I also know that
he's not a CS student, he's studying urban planning, so I could reply with
that understanding, and say that he might not need to learn another language
at all, but instead could branch out with Python to hack on stuff he didn't
get to work on in his CS and GIS classes, like web programming or games.

So no, don't just point them at Google. Tell them YOUR story about how you
learned to program, and tell them what YOU would do differently. Tell them to
learn a language that you know, so you can help them. Or a language you want
to learn, so you can learn with them. I know that teaching yourself via Google
can be extremely gratifying, and I think it works great for some people,
myself included. However it doesn't work for everyone, and sometimes it's nice
to have a personal connection like this: "I learned to program when X helped
me to do Y."

edit

as I was writing this I was itching to reach for something I'd read before,
and I remembered now that it was probably Norvig's "Teach Yourself Programming
in Ten Years". There he suggests a way to choose a language: "Use your
friends."

~~~
mscarborough
Exactly. This is the worst advice I have seen on entering coding, maybe ever:

 _The answer to every question is out there. Engineers know that better than
anyone. Even the best engineers ask Google questions all the time. The biggest
difference between you and an engineer is the mindset.

After you have the right mindset, here is how the execution will go:

You start asking Google questions, which leads you to all sorts of resources
on StackExchange and Quora and a million blogs and other websites. You find
twelve tutorials on HTML and nine on CSS, and you bounce around between them
to find the best ones_

Unless you're a pretty amazing auto-didact this is terrible advice. The author
posits his advice as learning how to learn on your own (which is good to a
certain degree), but what this advice requires is to first become an expert in
querying Google and not only sorting results but going through all the
different recommendations? How would someone without programming experience
effectively evaluate which are 'the best ones' from the spam and the outright
wrong articles?

Over the last few years < 10 people have asked me "how would i become a
programmer" or "what's the best way to learn SQL", or something similar. The
first questions I ask are 'what do you want to do' and 'why do you want to be
a programmer'.

I'd never really considered "go google some keywords, read everything on the
first page, and let me know how that works out for you"

~~~
klaut
well, but i can see the point of the author. and this is the way i learned
everything i know. perhaps is not suitable for everyone.

------
sophacles
No. It is exactly the right question.

Suppose the person hasn't already asked this question to google:

Take the opportunity to provide them some good resources. Teach them some
basics. Teach them how to use google well to find their own resources. Here's
the kicker - when people ask questions like this, maybe they aren't
autodidacts, maybe they just need some support getting over the fear of the
unknown, maybe they just want feedback from someone who actually knows
(something JFGI doesn't provide too well...)

Now suppose they have:

The course of action is surprisingly similar, but ask them what they've
already learned and what the confusion is before showing them stuff. Perhaps
the person asking has done this but doesn't know where to start -- there is a
lot of conflicting and bad advice on the web. Perhaps they don't have the
framework to filter things that are and aren't related. Maybe they don't even
know what they actually want to do -- there have been plenty of times I've
asked someone how to $X only to discover that I really wanted to do $Y that I
didn't even know about (even though Google will happily provide 100000 how to
$X guides).

Half of understanding anything is understanding the vocabulary surrounding it.
If a person doesn't know the vocabulary, they can't just google it. (Also,
those of us who spend all day programming and basically live in front of the
computer at places like HN have a surprisingly deep understanding of who to
trust and who not to trust and apply these filters without even realizing it
when scouring google results, as well as a good social network of chatrooms
and twitter etc to ask for pointers at, which a noob may well be trying to
establish when asking the question).

~~~
itsjaredc
That is the point of this post, to get them over the fear, to give them the
confidence to do it.

Having a personal tutor can accelerate the learning process dramatically. Even
if you can teach yourself, you can learn faster if someone just tells you the
answer. But, you can also just do it. And, the process will teach you the
benefits of being precise with your searches and that if you know to use the
work "toggle" rather than "switch back and forth", you'll get to the answer
faster next time (though, you'll get to it both ways and you'll learn a lot
while you're reading).

I was fortunate enough to have great engineers accelerate my learning but I
also did a lot on my own and that process gave me a deeper understanding and
taught me the right mindset to now continue improving on my own forever.

~~~
sophacles
I propose that we are running into a very studied phenomenon in teaching:
expert knowledge vs novice knowledge. The expert sees stuff as simple and
straight-forward that causes confusion in the novice -- because the novice
doesn't fully have the framework with which to understand in place yet.

To get to a point where googling and reading can be really effective (for most
people... there are some who can just naturally pick something up) it helps to
have someone work one-on-one with the confusion that may otherwise be
insurmountable. Not just accelerate learning, but in fact, enable it at all.

There is a very real problem in teaching at all levels where research will
show that using new methods and alternate course progressions help students
get it faster, but the experts in the subject matter will veto it because it
is not the way they learned or presents things in a way that seems too round-
about from the expert point of view -- ignoring the difference between those
who have the framework and those who need to get the framework.

~~~
espeed
Spot on.

------
wh-uws
Agree with most of it except its not that thats the wrong question its just
that the answer _is to try_.

Get started and build something. Stumbling and not knowing already but
figuring it out are part of the process and are valuable skills.

Also the whole buy a mac thing. It never ceases to amaze me how many people
completely fail to realize how much privilege it takes to have the money to
purchase a mac. Or the time it can take to save the money. When someone can
get started on things that are a fraction of the cost.

You can get a cheap office depot or walmart laptop and an entire year of
linode or whatever vps you like for the cost of a _used_ mac

~~~
chc
It doesn't take _that_ much privilege to save $350 within a reasonable amount
of time. It's probably unreasonable if you're in poverty, but even much of the
lower class in America has things like TVs that cost in excess of the price of
a Mac.

~~~
wh-uws
_Not attacking you asking you a serious question._

Please tell me where I can get a $350 mac. I want one, seriously. And not a
mini.

You're going to want a laptop/notebook so you can go to hackdays / meetups to
get to know like minded people and learn.

~~~
chc
I just looked on Craigslist and found a few Mac laptops for under $400. Most
were lousy in some way, but a few were legitimately just older models that
people didn't want anymore (e.g. white MacBooks). But I wouldn't recommend a
laptop if you're just this side of destitute. They're generally not as good a
value on the low end.

------
freshhawk
The only difference between the advice given and the strawman argued against
is giving the urls of search engines to find tutorials and answer questions
rather than giving specific resources.

The idea of cultivating a self starter, motivated to research mindset is good,
for people halfway through the beginner stage. The idea that a complete
beginner even knows how to "bounce around between [different search results]
to find the best ones" is silly, even starting with generally high quality
content like quora and stack overflow. It leads people to learn the easiest
things rather than walking the line between motivation through fast results
and pushing themselves to learn good techniques and challenging subjects.
There is a reason that good educators, who design curricula walking this line,
are respected.

This type of "ignore the so called 'experts' and absorb the lowest common
denominator crap soup of online programming advice" learning plan is doomed.
The best case is that it wastes the persons time and saps their motivation.
The probable case is that they end up learning a large number of bad habits,
do things like reimplement a bubble sort based on advice from the comments on
the php documentation site and forever end up as hack intermediate coders.

People asking for this kind of advice _want_ some guidelines from people
who've done this before and have perspective on good paths to learning and how
to avoid mistakes that no one needs to repeat.

I am a proponent of branching out early in your programming career to learn
different languages, toolsets and problem domains because it makes you a
better programmer. But only once you've got a base level of knowledge as to
how coding works and even then they will need advice on what other paths to
take to help the most.

~~~
itsjaredc
That process of drinking the soup and learning what to swallow and what to
spit out is an incredible learning experience. That is a skill and comes from
trial and error, reading everything, and trying things. And you are training
yourself in that process and mindset of learning on your own.

Agree though that learning best practices is difficult without some guidance
and working with others.

~~~
freshhawk
I agree, I think it's an absolutely necessary learning experience.

Just not at the beginning.

Maybe that's because I'm a CS major and have dealt with so many smart people
who's learning paths were derailed by the self taught plan advocated here.
They found a local maxima (in my experience it's often procedural php or
eclipse driven java) and won't move off of it because it seems impossible and
the benefit is intangible and by definition difficult for them to understand.
Pretty perfectly described by PG's Blub Paradox essay.

There's a reason the "standing on the shoulders of giants" metaphor is so
prevalent in the programming world.

------
cbs
I don't get it. Is your point _Don't ask a person, ask google_?

This article promotes introversion more than its own point of "don't ask, do",
asking Mr. Computer isn't much different than asking a person. If I ask
someone how to get started doing X; I'm not fucking asking permission. I'm
looking for some resources, a knowledgeable person is a much better at
steering a beginner than a search engine.

For some reason, you're equating drive with choice of resource. You're
answering "RTFM" when the question is "Wheres the manual?" I get that your
point centers on leaning on others vs figuring it out on your own, but you
thoroughly overshot.

------
Goladus
The problem with using google to answer an open-ended question like this is
that it's very hard to sort the results. And it's not just the first question,
that question will lead to more questions and you will waste an enormous
amount of time asking lots of wrong questions and getting lots of bad answers.

Bad answers can be ad-ridden, no-content crap, bikeshedding pundits, obsolete
documentation, overkill solutions, corporate labyrinth websites selling
overkill solutions, incomplete fragmented mailing list archives, or material
way too dense and advanced to be consumed without guidance. But they lead to
frustration and often to more bad questions.

Sometimes the answers aren't bad, they're just decidedly suboptimal. If your
friend wanted to make a website, and you left it up to them to go google the
answer, there's a good chance they'll end up using GoDaddy.

Chances are if you see this question, it means someone thinks you, either
individually or as part of some community, will give them better answers than
a machine will.

------
Terry_B
Something I've found in getting people started in this direction is that they
don't know what words to use when googling for their problem.

You can give them a huge leg up by giving them a programming vocabulary to
help them on their way.

There's that famous saying about once you have a name for something the
problem is pretty much solved...

You can also help them heaps by telling them what's important and what is not
important. Most books on programming languages etc start with a whole bunch of
stuff they should probably put into the basket of "computer trivia I don't
need to know yet"...

------
wccrawford
If someone asks that question, they're in 1 of 2 categories:

1) Dreamers. They have something that nobody will do for them, so they're
going to see how easy it is to do for themselves. They won't make it.

2) Doers. They don't have a single project. They have multiple projects. The
projects are swimming in their head and they need to get them out. They just
need a nudge in the right direction, but more help is almost always better.

Notice that neither of them are asking the wrong question. It's just a matter
of follow-through. Given even a tiny bit of direction, the doers will make it
there... But you can't start walking until you have some idea where the
destination is. That's all they want.

------
yason
I always answer this question by asking back what it is that they want to
make, and also if they're willing to dig for most of the answers themselves
because programming is, essentially, solving for an unknown alone.

The aptitude of a programmer is also the same that allows him to self-learn
much of the art of programming by himself.

If they have an answer to the first question, I can work backwards with them
to narrow it down to tools and languages that possibly make sense. Going with
Python is a generic and common choice because there aren't many things you
can't do in Python.

If they don't have an answer, it might not be a case lost. Some people truly
need _just about anything_ to work on, in order to impose a reason to start
tinkering with programming. However, usually it's about overcoming fear for
programming but in that case they probably won't make it, either.

For the rest 99% of people I just mumble something and point vaguely to
teaching yourself to program in ten years.

------
ISeemToBeAVerb
While I get the gist of this post, it seems to exit the gate by contradicting
itself. Asking Google is no different than asking "someone". After all, Google
results are just a bunch of "someones" competing for your attention.

As a person who has just recently undertaken the skill of programming, I
(personally) feel that Google isn't much help in the beginning. As someone
mentioned below, you can't ask what you don't know. Nor can you trust every
bit of advice dished out in Google search results. If you rely on Google,
you'll likely get 100 competing views on everything under the sun, which often
leads to analysis paralysis or just sheer overwhelm.

As much as some people might tire of hearing "I want to learn to code, what
should I do?", it's a question that I'd hope people aren't ashamed to ask,
because It's an honest question. Pointing them to Google and advising them to
figure it out just doesn't help them in any concrete way. I'm new to
programming, but I'll never get sick of helping people learn the things that I
already know- in fact I LOVE doing just that.

As a beginner, it's comforting to know that a real person is helping you along
and not just an anonymous page picked out of the SERPs.

------
krmmalik
I found this advice to be useful and inspiring. It reminds me of when i first
started out in my present business. We originally started as an IT support
company. My IT skills were just average while my business partner was very
highly skilled in IT.

Often, we would have issues with client servers, and i would spend hours
trying to find the root cause of the problem, with not too much luck. When i
would pass the job onto him, he'd figure out the cause of the problem in a
much shorter amount of time, and therefore come to conclusion for a possible
solution very quickly and with some conviction.

I always thought he was a complete genius, and wish that i was as clever and
intelligent as him, and felt a little cheated by the universe that i hadnt
been blessed with such great IT skills, especially since i had great passion
for IT.

Its only after much frustration, that i learned that the only thing that
differed between he and i was his approach. Whereas i would check the virus
state, and processor usage and look for anything suspect on the desktop, he
would check the event logs and then look up the error codes at the microsoft
knowledgebase.

One i started taking the same approach as he, i found myself fixing problems
even faster than him and coming up with even better solutions to the problem
(all the while experiencing much lesser stress).

When i decided to learn programming , i observed the same thing. His approach
to attacking programming problems was different to mine, and now i am learning
to assess the problems in the same way as him.

I've also seen this in my cousin. He starts a project, and takes one step at a
time, and breaks the larger problem done, all the while telling himself that
there is an answer for each component problem he faces.

I am trying to foster the same mindset now, and this blog post is an
inspiration for that. Bottom line is, the approach is more important than
existing skill set.

------
aziza
I love this post and really identify with it, especially, "That mindset
separates people who do from people who don’t." I've always been a person to
do, but find it's more common to come across people who allow fear to prevent
them from doing. They see the obstacles, the worst case scenarios, never the
potential, the opportunities or if they see them, they seem too difficult to
reach. I agree that it's mindset that distinguishes the leaders from the
followers. Keep on leadin'!

------
frankiewarren
As someone who has always wanted to learn to code, but never set the time
aside to teach myself I resonated with this kick in the pants. At some point
you have to stop making excuses and do it. I might not agree that google will
teach everyone, but there are enough resources out there (friends, family,
iTunes U, tutorials etc) that the real deciding factor is whether you dive in
or spend your time asking everyone in the pool if the water is cold.

------
randomdata
I learned to program when a misconfigured web server spit out the source code
to the web application I was trying to use. At first it all looked like
gobbledygook (it was written in Perl), but I was ultimately intrigued. The
more I observed it, the more it started to make sense. I started by making
modifications and testing their results and eventually had enough knowledge to
build my own, albeit simple, application. It all snowballed from there.

What I took away from the experience is to jump right in to the most advanced
stage possible and work your way back to understanding. Baby steps only serve
to hide the big picture and ultimately hinder your ability to understand. This
is something I have applied to all of my learning since that day and I feel it
has served me well. I always struggled in a formal education setting and I
found out why: They teach backwards.

When you are learning to cook you don't mix flour and water together and look
at the scientific properties that cause them to interact the way they do. No,
you find a delicious recipe and prepare the entire dish. Each time you
subsequently make it you add a twist to see how it affects the overall taste.
Eventually you start to increase your understanding how the pieces fit
together and can begin to come up with new combinations of your own. You will
probably want to know why flour and water behave the way they do, but that
comes later.

In my opinion, the way to learn how to program is to start with a recipe (i.e.
source code). The rise of open source makes that easy. Make some small changes
of your own. Break it down to understand why the original author did what he
did. Once you are armed with the basics, you can start to apply that knowledge
to meaningful Google searches.

------
snoozer
> If you want to learn to code and build stuff and you’re starting by asking
> someone else what you should do, you’re already thinking about it the wrong
> way.

If someone asks for help and this is the first thing you say, you're already
thinking about it the wrong way.

What is their background? Their aptitude? Why do they want to learn? How do
they learn best? Are their expectations reasonable? In short, what would be
the smartest way to help this individual? One suboptimal way is to post
essentially a multi-paragraph lmgtfy and assume that everybody will hound down
the knowledge they need with the same geeky obsessiveness you would.

Edit: I meant to mention that remark about getting a Mac. "Embarrassed" to
have considered anything else? I'm a big Mac fan (Cocoa developer) but that is
ridiculous enough that I'm tempted to see the whole post as a joke.

------
jeffreymcmanus
If you want to learn something deeply and you're starting at Google, you've
already mostly lost, at least for the software engineering discipline.

I wrote about this last month, in fact:

<http://blog.codelesson.com/why-learn-by-google-is-a-mistake/>

------
DasIch
While this advice makes sense in most cases it is just as important to learn
where, how, whom and when to ask.

Also as a beginner it is often very difficult to separate good from bad
advice, so it can make a lot of sense to ask even simple questions in e.g. an
IRC channel even if you could find an answer with Google.

------
lwhi
The number one skill necessary to become a good coder/hacker/developer/maker
is the ability to learn independently.

If you can't teach yourself and 'self start' - you're not going to be able to
get very far.

------
IAnsari
You can learn to code on your own, but it will probably take you a lot longer
then going and hiring a tutor or even just taking a class. This "Teach
yourself whatever the hell you want on Google" advice is about the worst
advice I have ever read. I guess I could tell my cousin that he can teach
himself how to be a doctor by watching Youtube videos and playing Operation,
But I wouldn't let him be my doctor.

------
c4m
Actually, I think that is the perfect question to ask. Knowing what you want
to learn about is a huge step in the right direction.

The author presumes that everyone interested in coding should have a high
level of confidence already. I disagree, and feel that if someone wants to
learn about a subject, asking questions about that subject is exactly what
they should be doing.

------
espeed
Asking questions is good. Showing initiative is good. Getting perceptive is
good. These are the qualities you want to see in people. Embrace them.
Encourage it.

There are so many different paths you could take when you set out on this
quest that without a little guidance, you could waste a lot of time. Save
learning to be an independent hacker for lesson two.

------
sakopov
Google for answers, patch stuff together from tutorials and apply for
"engineering" jobs? Are you fucking kidding me. Do the world a favor and stop
calling yourself an engineer. And do yourself a favor and "google" what
engineering is and why reading blogs and tutorials doesn't make you one.

------
rimantas
Am I alone thinking that person asking _this_ question may be not exactly the
coder material?

I've learnt to program long before Google existed and I never had this
question. I was just learning, whenever I had a chance: reading articles,
buying books.

------
codexon
People rightfully ask this question because it is not so obvious for almost
every other field of study.

Programming is one of the few subjects where it is possible to learn so much
of it simply by searching online and practicing by yourself.

------
Kavan
Nice post :)

Anyone used <http://twitter.github.com/bootstrap/>? Seems like a good starting
point for someone wanting to get going without creating your own CSS classes.

Nice, clean design and code. Think it will be perfect for mockups and user
flow design. Going to give it bash, will report back if anyone is interested.

------
bkudria
Tons of helpful links here.

~~~
anthonyb
I think you completely missed the entire point of the article.

~~~
bkudria
Let's agree to disagree.

