
What to tell noobs who want to "learn coding"? - rf1331
I get a lot of people genuinely interested in learning.  In my opinion code academy sucks cause of the false sense of accomplishment it gives.  Thoughts?  Strategies?
======
WoodenChair
Tell them to get a good book. The value of having a single source from
complete beginner to intermediate programmer written in the same voice with
full knowledge of what you have completed so far at each point should not be
undervalued just because web resources are free.

~~~
invalidOrTaken
I agree with this completely, and I'll make a specific claim:
eloquentjavascript.net is the best book to use.

\---it's an online book that lets you run code right in the book

\---it's the language of the REPL that everyone has access to (in the browser)

\---js is dynamically typed, which I think is easier for people to grok (I
learned Java first, and for months I was puzzled by this "public static void
main (String args[])" that I had to start everything with. Public? static?
main? void? JS has none of these, and while it's debatable whether that's a
good thing or a bad thing, it's an unqualified _good_ thing when first
learning to code.)

~~~
hnriot
"public static void main (String args[])" \- that would put anyone off, and
for good reason, it's total bollocks. Either "main" is special or it's not, if
it is why tell java stuff it already knows. If the jvm wants to run something
that's public and called main and has a method signature of string array then
why not dispense with all the nonsense - the answer's simple - it's java - the
most verbose boiler-plate laden language out there designed for groups of
mediocre developers. Despite needing dozens of lines to even basic stuff, it
forces people into some form of homogeneity to keep teams of "java certified"
developers in jobs.

if you want to learn to program, open Terminal, type ipython and go from
there. When lost google stackoverflow, repeat. Forget books, there are way
better, more up to date online resources.

~~~
cstejerean
What does Java's supposed verbosity have to do with the comment you replied to
about learning JavaScript?

On an unrelated note, main in python is not a whole lot better. By the time
you get through __name__ == "__main__", import sys and use sys.argv you're not
really winning much over public static void main. The nice thing about python
is that you don't have to start worryin about main since you can just run it
as a script to start, which is definitely great for beginners, but that
doesn't exactly justify the argument you were trying to make about the
verbosity of Java.

------
infinitebattery
What I have been telling my friends recently is to check out an online course.
This one course named CS50x has been amazing in teaching people about CS and
programming. So, tell them to see
[https://www.edx.org/course/harvardx/harvardx-
cs50x-introduct...](https://www.edx.org/course/harvardx/harvardx-
cs50x-introduction-computer-254....as) it starts in a few days and can be
taken throughout 2014.

~~~
bung
testing: [https://www.edx.org/course/harvardx/harvardx-
cs50x-introduct...](https://www.edx.org/course/harvardx/harvardx-
cs50x-introduction-computer-1022)

------
punkghetto
I totally agree with wturner on the learning curve, as I'm also a 'noob'. I've
taken up learning to code in the past year and it is very energy and time-
consuming! I started with sites like CodeAcademy, but I've since turned to MIT
OCW to give me a more thoughtful and full background in computing. And I want
to know about a lot more than creating pages and formatting for the web.

------
lemonberry
Tell them to build things from the get go. Give them some ideas on what to
build. Tell them it's ok to suck.

------
semerda
Tell em to Build something. Best form of learning. Practice makes perfect.
Theory will be used along the way.

------
Comkid
I always tell people to find a problem to solve and learn coding on the way,
rather than thinking of learning to code as an end goal, to more so think of
it as another tool to problem solve, which you can learn how to use on your
journey to build something to solve the initial problem.

------
joshuapants
If they are still in school, tell them to take a class. I really got started
(other than some BASIC in elementary school) with Java classes in high school.
The structure of the class, regular assignments, and the fact that I would get
a meaningful grade made me work a lot harder at it than I otherwise would
have. Not that I wouldn't have worked hard, but as with any pursuit raw
passion only gets you so far and a good instructor will help you apply
yourself in the right areas and progress that much faster.

If getting a class isn't an option, there's always something like Learn Python
the Hard Way, or if they have issues following just text, Land of Lisp is
pretty gentle and friendly, if not as immediately applicable to say, mobile
development.

------
avelis
Clean Code by Robert C. Martin. It's not a book to learn how to code but a
book that gives good habits on how to write clean code which I think is very
useful regardless of languages.

------
dccoolgai
Code or code not. There is no learn.

~~~
jchung
I was trying to figure out how to explain the attitude shift that got me over
the "want to learn" hump into actually learning, but I think you just nailed
it. Once I started coding, I learned to code. Perhaps the advice is "pick a
project (of your own design or someone else's, it doesn't matter) and start
working on it."

------
wturner
Ask them why they want to learn it and insist they find something they are
passionate about building as an end result. As far as really learning, tell
them it will take 3-5 years of studying every day, building projects and
adopting the process as a lifestyle. Most of the marketing shit around
learning programming is fluff. BTW This is coming from one of the people you
are speaking of who was (and still kind of is) a 'noob'. I just happen to have
a technical background outside of code to help ramp me up. Other than that
tell them to try it out and see if they like it. The learning curve will
inevitably make you cry. But after you reach a certain point you can begin
getting really creative which is very very empowering! This takes muscle
memory and imbuing yourself in the culture, concepts and tools.

------
danso
They have to commit. They have to apply themselves _every day_. It's not just
that programming is a complex topic, but because so much at being good at it
is being mechanically efficient at it. I've worked with learning coders who
had a bare familiarity with their operating system, nevermind the command
prompt.

Not being able to use Ctrl/Cmd-F to quickly locate code snippets in your text
editor. Not using keyboard shortcuts...the seconds it takes to move from task
to task quickly build up, and so does the frustration and urge to quit.

Everyone wants coding to be about amazing creations and The Future...but a lot
of proper coding is just hard work and good habits. When that routine is in
place, learning AND producing code is significantly easier.

------
wudf
First, don't refer to them as noobs unless you are trying to degrade them.
Second, I recommend Introduction to Systematic Program Design on Coursera. It
matches the same intro course for which CompSci students pay Universities
thousands of dollars across North America.

------
dpweb
I wouldn't neglect the theory. Bad habits picked up can take years to break.

Find the best book ever written for your language of choice, its Crockford's
book for js I imagine - don't know about other languages.

I would NOT learn to write code from random web resources. A good portion of
the code on sites is horrible. There's alot of horrific PHP code floating
around out there.

Except, find someone on Github who is blowing your mind with their stuff and
read through their gists and projects. Succinct and easy to understand code is
best. I did this for two hours last night and got more out of it than a month
reading weak stuff and the more mediocre books..

~~~
harvestmoon
I learned to do some MySQL from a random website. Code wasn't great. I didn't
learn in detail, either. And it used mysql_query(). Ideally, a book from the
last year or so would have been better!

------
Peretus
I tell them to apply to a developer bootcamp. Schools like this are popping up
everywhere because there really are people who are willing (and eager) to hire
the students once they graduate. I'm currently attending (and about to
graduate from) a developer bootcamp in Austin TX, and I can absolutely
recommend this route. Yes, it's impossible to learn everything in such a short
amount of time, and attending a bootcamp may not be for everyone, but if one
is serious about learning to code, it's a pretty efficient way to learn a new
skill.

~~~
wturner
Many of those bootcamps cost an arm and a leg and are selective in that they
target well-off kids that get good grades and basically fit in. They do this
intentionally so they can sell their prospects to potential employees and keep
their numbers and reputation up which is just common sense on their part. I
think the better route for someone that is a little rough around the edges is
to do it on their own for a few years and then try to apply to a bootcamp. I
did it on my own and then did a 3 month program called thinkful.com. Thinkful
served as a refinement mechanism that introduced me to better practices and a
bunch of nuances I didn't know about etc.

~~~
Peretus
It's true that they cost a great deal. I've had pretty long conversations with
the founders about the fact that there is very little likelyhood that someone
without significant means could and come up with the tuition. That being said,
I was making $35K at my job before I left, and that was the best job I had
ever had because I wasn't working outside or serving food. I was accepted on a
Thursday, and I quit my job with DeVry University (I was a teacher's
assistant) the next day. I financed the tuition on a credit card and
essentially moved all my chips to the middle of the table. Yes, it's risky,
but if my risk tolerance goes down over time, the riskiest time of my life
should be now.

Now that I've attended this school, I can pick up books about code and not
feel completely overwhelmed. For this reason, I believe that if it's an
option, a bootcamp is the way to go.

I also believe that the only requirement for 'fitting in' to one of these
schools is to be easy to get along with, and be able to take the stress
without becoming a jerk. This is more difficult than it would seem, as the
course is pretty intense.

~~~
wturner
To each their own. I just have a contrarian nature and always feel obligated
to express it.

------
Groxx
Get them to make something on [http://neocities.org](http://neocities.org)
because it's not hard, it has visual results they can show to anyone, and once
they're comfortable with the basics of the site have them read a javascript
book.

Moving quickly and freely (in any direction) at the beginning helps keep
interest levels up, where an 800 page book on Java might squash their energy.
Plus, if you only have the basic-basics of web stuff you start to chafe pretty
quickly, and that's great motivation.

------
banachtarski
It depends on what they mean. If it's a physics grad student who wants to
learn coding, I assume they need to do high performance work and point them
straight to C so they can learn the fundamentals first on memory management,
the stack, and so on.

Usually, I ask them what they want to do with code and go from there.
Sometimes, I realize that all they really want to learn is HTML and CSS. Other
times, I really do feel like the "hardcore" approach would be more fulfilling,
albeit slower.

------
a3n
There are many things you could tell someone to get them started in
programming. Here's one:

[http://docs.python.org/2/tutorial/](http://docs.python.org/2/tutorial/)

Offer to answer questions when they have them.

If they get through that, talk about what kind of programming they'd like to
do, and point them toward their first resource. Offer to help. If they
actually still want to code, they'll go from there.

------
cardeo
Personally, I learn better by doing. There are some great free courses
available over at [https://tutsplus.com](https://tutsplus.com) that are quite
good. I also found the [http://onemonthrails.com](http://onemonthrails.com)
pretty good for beginners. However, that one is a paid course, but it's pretty
cheap

------
erichurkman
A few good books. I like Python as a first language, but to each their own.

[https://github.com/karan/Projects](https://github.com/karan/Projects) has a
good set of first projects, ranging from straight algorithm practice to actual
app and full project work. My younger brother is following something very
similar, and it's working quite well so far.

------
runawaybottle
I think this sums it up succinctly:
[http://norvig.com/21-days.html](http://norvig.com/21-days.html)

------
timdawborn
There are a bunch of better online resources than Codecademy. Grok Learning
([https://groklearning.com](https://groklearning.com)) has a good introduction
to programming course using Python.

------
Apreche
If you want to make a chart, by all means use Excel.

But what if you want to make a chart maker?

------
lowglow
I would say read this: [http://www.techendo.co/posts/how-to-learn-to-program-
in-10-e...](http://www.techendo.co/posts/how-to-learn-to-program-in-10-easy-
steps)

~~~
greenyoda
I'm very skeptical of any "learn to program" list that begins with "Buy a
MacBook Air". You can learn to program just as well on that cheap PC laptop
you already own, and a MacBook Air is a very expensive investment for someone
who may or may not become a professional programmer.

Also, learning git isn't something that a novice programmer should need to
struggle with. It's hard enough figuring out the concepts of programming
without having to add on all sorts of other stuff. You don't need git to write
a 100-line program.

Finally, the whole list is very skewed toward web development, which not
everyone is interested in. People who work in science or business might be
more interested in learning how to write programs that manipulate data (e.g.,
using Python to automate what they would otherwise do with Excel). Others
might want to learn how to write games for PCs or iPads. Web apps written in
Rails might appeal to the startup crowd, but they're hardly fundamental steps
toward learning programming.

~~~
Larx-3
I think it was supposed to be a joke...but it didn't work because it wasn't
funny.

~~~
lowglow
It was part joke, part reality. :)

------
ams6110
It used to be so easy:

a) Buy a C-64, TI-99/4A, TRS-80, etc.

b) Turn it on

c) start programming.

~~~
Groxx
Now it's:

a) Buy a Raspberry Pi ($25 vs $hundreds (converted to today) when those were
released)

b) Turn it on

c) Start programming (since it starts up into a programming environment of
some kind, IIRC)

If anything it's _easier_ now, and much much much more available to people who
don't have $1400 to drop on the new C64 hotness:
[http://en.wikipedia.org/wiki/Commodore_64](http://en.wikipedia.org/wiki/Commodore_64)

------
umren
i always recommend books on specific field they want to learn, if they do it
then they really want it, if not.. well..

------
greggawatt
Ask them what they want to build. Learning code for the sake of it will always
be disappointing. You learn better coding towards a project then just
aimlessly learning concepts.

------
primitivesuave
A Jedi’s strength flows from the Code. But beware of the dark side. Messy
coding, poor indentation, bad structure; the dark side of the Code are they.
Easily they flow, quick to join you in a fight. If once you start down the
dark path, forever will it dominate your destiny, consume you it will, as it
did Obi-Wan’s apprentice.

