

Ask HN: Zero programming experience and badly want to learn. Where to start?  - wanderboy

I have zero programming experience, since I work mostly on the nontechnical side of start-ups. Ruby and other languages are extremely interesting to me and I am definitely interested in learning how to use them, but I want to have a basic idea of the time involved. Was it weeks/months/years until you felt comfortable writing an entire Web app with basic functionality?<p>The problem I have is that I have at least one idea that I'm really interested in fleshing out, and I'm wondering whether I'm going to have to sit on it for a year if I want to code the web app myself. Like I said, I'm usually on the non-technical end of start-ups.
======
ezl
_Was it weeks/months/years until you felt comfortable writing an entire Web
app with basic functionality?_

Comfortable? I don't know. Capable? a few months. Starting to flesh out your
ideas? Within 1 month of starting an EARNEST effort to learn what it takes to
write web apps.

I was in your shoes about 15 months ago (roughly).

I had ideas and wanted to be at least "sort of" able to flesh them out on my
own. I had more than zero exposure to programming, but by most standards not
much more. I had recorded and hacked up some VBA macros for work, had no idea
what objects in object oriented programming were, and in college I had used
Mathematica. I had just started using python and the longest script I had
written was less than 100 lines.

I had ideas and I wanted to be able to execute (even poorly).

The general "I can't hack but I want to" theme comes up quote frequently on
HN. There are a ton of resources for this. This link by by iamelgringo is the
one I first read and it was immensely helpful, partially because it gave me
time targets to try to beat. I more or less tried to follow this path.

[http://iamelgringo.blogspot.com/2008/05/teach-yourself-
you-t...](http://iamelgringo.blogspot.com/2008/05/teach-yourself-you-to-hack-
in-6-9.html)

After you get started though it'll become clear to you what you need to learn
and the process will take on a mind of its own.

Other resources from HN:

<http://news.ycombinator.com/item?id=190518>

<http://news.ycombinator.com/item?id=149482>

<http://news.ycombinator.com/item?id=127952>

<http://news.ycombinator.com/item?id=123903>

<http://news.ycombinator.com/item?id=90782>

If you're really at absolute ZERO on programming, I've been recommending Zed
Shaw's python book:

<http://learnpythonthehardway.org/>

By lesson 20, you should be concurrently working on iamelgringo's lesson plan.

I am really happy on the python/django side, still awful at CSS, can barely
deploy a server right, and use the reference manual all the time for jQuery.
What you'll realize is that being comfortable has less to do with being able
to sit at a blank terminal and typing than knowing how to traverse the
documentation for each project.

People WANT to help you learn. As long as you make some effort to try
yourself, hang out in the python, django, jquery rooms and ask questions
whenever you need. I still do all the time. Spend 5 earnest minutes each
question looking for the answer. If you keep asking questions that are
answered by the first google hit, nobody will want to help. But if you're
making an effort to self-learn, people will be very sympathetic.

Typing "terminal" above also just reminded be that learning to use linux and
vim was an entirely separate battle. The process is the same. You'll keep
hitting tasks you don't know how to accomplish. Google it and ask someone. I
still suck with both, and I'm still learning.

Its a tough battle, I definitely recommend you reach out to people in your
city, find startups and say "hey I suck, want a free intern?" (I did this).
Try to sit in the same room as them once a week and hack. Having an immediate
resources available to answer questions verbally is huge.

You don't have to "know" how to do all that stuff to be able to write apps
quickly, you need to know where to find all the information.

I'm probably slow by most people's standards here, but less than a year after
I started I felt comfortable with deploying a small weekend project. For the
first 3 months, I was hacking 60+ hours a week, not because I felt like I
should, but because once you start learning, you realize how much you still
need to learn and you get obsessed. There's a sick satisfaction to banging on
your terminal and watching your vision come to life, little by little. Every
month you'll look back at your code and want to vomit. This is a good sign (I
think?). Don't worry about memorizing anything, just worry about doing it more
and more. The things that you look up a lot will stick and your production
efficiency will improve.

Last week I spent 60 hours to produce a crappy MVP of a project I"m working
on, roughly 2300 lines of code. I was on IRC the whole time asking questions.

~~~
spiffworks
I want to say thank you for the list before I ask my stupid questions. How and
where did you learn about object-orientation, etc? I find myself in a very
sticky situation where I've been programming micro-controllers in C and
assembly for years and using Matlab for high-level simulations with a giant
chasm in my knowledge in between. Every resource that I have read so far seems
to assume a student who has formally studied CS. Is there an accessible guide
to object-orientation?

~~~
turbofail
If what you're comfortable with is lower level stuff, one possibility is to
look at an implementation of an object system in C. In particular, I found
reading the Python source code to be helpful when learning about object
orientation.

------
techiferous
If you've never programmed before, the effort would be comparable to becoming
fluent in another language or becoming proficient with a musical instrument.

When learning programming for the first time, you'll be able to do some basic
things pretty quickly, similarly to how you can learn basic phrases/words in
another language or learn how to do scales/simple songs with a new instrument.
But to get to the point to be able to code any idea you have into reality it
takes much more time. As in years, not months.

------
greglockwood
I was in the same position as you a few months ago. I had an idea for YComb!,
and I didn't know any technical guys well enough to be a technical co-founder,
so I decided I was going to be the technical co-founder.

I would recommend picking up SAMS Teach Yourself HTML and CSS in 24 Hours:
[http://www.amazon.com/Sams-Teach-Yourself-Hours-
Coverage/dp/...](http://www.amazon.com/Sams-Teach-Yourself-Hours-
Coverage/dp/0672330970/ref=sr_1_1?ie=UTF8&qid=1287249172&sr=8-1) and
O'Reilly's Learning PHP, MySQL, and Javascript:
[http://www.amazon.com/Learning-MySQL-JavaScript-Step---
Step/...](http://www.amazon.com/Learning-MySQL-JavaScript-Step---
Step/dp/0596157134/ref=sr_1_2?ie=UTF8&qid=1287249246&sr=8-2)

Do the SAMS guide first, then O'Reilly. Do the examples, do the examples, do
the examples. That's the most important part. Even if you only have a few
spare hours per day, you can get through 3-4 chapters of HTML/CSS, but I would
recommend only doing one chapter of the O'Reilly book a day, since it's a bit
more to learn than the SAMS book. So, it should take you about 3 weeks to work
through both of those, and have at least a competent grasp on web dev. From
there you can probably make your own decisions about where you want to go from
there.

~~~
endtime
>I didn't know any technical guys well enough to be a technical co-founder, so
I decided I was going to be the technical co-founder.

The world needs more people like you.

------
frou_dh
Zed Shaw recently made a nice free book for those with zero programming
experience:

<http://learnpythonthehardway.org/>

That's not a path, but a start.

------
grovulent
I started learning python in March of this year. I couldn't tell you how much
time I've put into it - it's hard to keep track of.

Within two months I had my first rudimentary web app up and running. I used
Django for the app itself and used linode for the hosting.

Now it's not a great app by any means. It doesn't make a real contribution to
the world. But the experience was enormously satisfying and genuinely life
changing.

One thing that astonished me was that I had to learn a whole lot less than I
thought I would in order to actually get something done. One of my best mates
has been coding in PHP for years and years and watching him made me think that
the process of deploying a webapp was monumental. I thought - wow, I have to
learn html, mysql, css, before I can even make use of my pythony backend.

But it's just not true anymore. There is so much free code out there -
enormous amounts. It's a wonder to me now why everyone isn't coding. It's
really only one level of effort removed beyond learning to deal with the
shitty interface on over hyped product X you just blew your hard earned on.

Just over six months on from the time I started - I certainly don't count
myself particularly skilled as a coder - not by any means. But no matter what
I think up to do next, within a few days I've figured out how to do it. I
kinda feel like there just isn't anything I can't do if I put my mind to it.
As my confidence grows I come up with ever more ambitious ideas. It's a
wonderful feeling.

So stop worrying about how much time it's gonna take you to get to your
(probably myopically) perceived endpoint - and just get on with putting code
to screen to see what you can do right now. It's a lot more than you think.

------
k3dz
A must read before starting the journey.. <http://norvig.com/21-days.html>

------
agentultra
You can probably hack something out from tutorials, books, etc... but it won't
be _good_. It'll work and seem impressive, but you might be surprised by
security holes or server outages. Dealing with those issues will teach you
other things... but it takes a certain amount of thick skin to learn in such a
"trial by fire."

If it's your own time/money -- go for it.

However, mastery of anything demands sacrifice and dedication. If you want to
go beyond practical application and become really good at something where you
can create and contribute new ideas; it will take you years of work and study.
You will have to crack open text books, take notes, read source code to old
operating systems, review the important academic papers, constantly hack on
new projects, and spend a lot of time developing poor vision, lower back pain,
and RSI. Learn to fear the outdoors and make sure you find a partner who'll
remind you to take care of yourself and stop sitting in front of the computer
so much.

------
ze_dude
This says it much better than I can: How to Build a Web Site from Scratch with
No Experience ([http://lifehacker.com/5336113/how-to-build-a-web-site-
from-s...](http://lifehacker.com/5336113/how-to-build-a-web-site-from-scratch-
with-no-experience))

It details how the author built mixtape.me starting with basically zero
experience, and is quite worth your while.

The advice below uses Rails as the framework, but will work whichever one you
choose. The steps stay the same: build a basic app with help (from a book,
tutorial, etc.) to understand the framework/language, start building what you
want to create and learn at the same time.

What I'd suggest is to obtain a copy of "Agile Web Development with Rails (4th
edition)" ([http://pragprog.com/titles/rails4/agile-web-development-
with...](http://pragprog.com/titles/rails4/agile-web-development-with-rails)).
Side note: it's not published yet, so make sure you get the beta version (an
e-book version, and you'll be notified of updates as content is
modified/added).

Then read through the book while building the example application in the book
(a basic shopping website). This approach is great, because you learn by doing
and you also get to glance at agile methodologies.

Once you've gone through the toy app and understood it, you'll be quite proud
of yourself and will be able to build simple things already.

At this point, you should start to work on your own idea, it's much more
motivating and you'll always learn the most when working on a "real" project.

To be noted: the Rails book does assume you have passing familiarity with Ruby
(or at least a programing language), HTML, etc. If you need/want to learn
programming first, you should probably also get an appropriate book on the
subject, such as "Learn to Program (2nd edition)"
(<http://pragprog.com/titles/ltp2/learn-to-program>) or, if you're more
advanced, the Pickaxe (<http://pragprog.com/titles/ruby3/programming-
ruby-1-9>).

Oh, and the reason I mention PragProg books isn't because I'm affiliated with
them (I'm not), but because I have yet to get one of their books that doesn't
live up to my expectations.

------
evo_9
I'd start much simpler than any of the full-on backend languages mentioned
like Ruby, Python, Java, etc.

Get the very basics down - it will be fast and easy and you'll feel good you
are making progress. HTML and CSS - don't get bogged down in HTML5 or any
latest cutting edge thing or another. Just the core for now.

Once you've got this down, which really is pretty simple stuff, I'd go into
jQuery and Javascript. Both are fairly easy to approach though deceptively so
maybe, with a ton of upside; and with the push that NodeJS is making, that may
be all the programming you need even for the backend.

I don't have any good rec's on learning HTML but google it, there's a ton out
there.

CSS I'd do the same, though I also really like _CSS - The Missing Manual_ by
McFarland.

For Javascript you'll be hearing a lot of _Javascript - The Good Parts_ by
Douglas Crockford, a must read if you are serious.

And jQuery, honestly is so fun/powerful/addictive, if you get a big of
Javascript down you will be off and running. There are countless tutorial
websites on jQuery and more books coming everyday. Bookwise it's hard to rec
right now as the new version of jQuery just dropped today and everything is a
bit out of date as it stands.

Bottom line, don't get caught up in trying to learn too much to begin with.
Also, good UI Coders are hard to come by and you can always find a
Rails/Python/back-end guy to help out until you get that stuff down too.

------
cool-RR
My advice is: Before you think "how many months/years it will take me to
create program X", just dive in for a couple of weeks to basic programming.
The information you'll have from this experience will allow you to decide much
more wisely whether you want to continue on this path or not.

------
jim_lawless
You're going to need to learn more than a programming language. You should
really learn how web transactions work, the roles of the browser and web/app
servers, browser-side markup and programming, ...etc.

I would recommend that you pick up the book "Using Google App Engine" by
Charles Severance. The book teaches the reader how to build applications
specifically for the GAE, but it contains very good introductory chapters for
the person who is trying to come up to speed quickly on web development
technologies.

The early chapters begin with explanations of the mechanics of web
transactions. The next chapters deal with HTML and CSS. Another chapter in the
progression then provides rudimentary Python programming instruction (
programs in this chapter are executed under a command-prompt ).

After these fundamentals have been covered, the GAE web programming specifics
are introduced. At least one of the programs that had been an exercise in the
command-prompt-Python chapter is then rewritten as a web application to
illustrate some of the differences.

Development for the GAE itself is different than other approaches to web
development, but I believe that if you become conversant with the subject
matter covered in this book, you could more readily learn other web
development technologies.

------
dpavlenkov
I've been programming for probably 17 years, since high school, and just
recently I appreciated JavaScript. For all its shortcomings, it's beautiful.
If you'd just understand it, you would be able to easily understand other
languages, dynamic or otherwise.

~~~
sushi
_If you'd just understand it, you would be able to easily understand other
languages, dynamic or otherwise._

I am genuinely curious to know why you think so.

~~~
dpavlenkov
Sorry for delayed reply. I think so because JavaScript, with its prototype
system, dynamic typing and closures, makes various famous language features
and their implementations explicit, while other languages may hide their inner
workings in the name of simplicity, safety, etc. Thus, by learning JavaScript
first, one can bypass the reverence for OOishness espoused by Java or C#, and
yet understand them better because "class", "type", "object" in JavaScript
understood to be not atomic concepts, but constructable pieces of code. With
JavaScript, one starts interacting with inner workings of the language very
early in the learning process. Really, in which language one learns about
events first? Remember "onClick"? Sure, interaction starts at level 0, but
that's great because already the value of events is understood without writing
a single "public static main voiid".

------
untamedmedley
1\. If you don't already have familiarity with HTML and CSS, learn those
first. I recommend a book called Learning Web Design:
<http://www.learningwebdesign.com/>

It teaches like a math book, with practice problems after each lesson.

2\. Pick a language to learn. I had a C++ background that I hadn't touched
since high school, so I found Ruby a little confusing. But it may also be
because of the teaching style of the books I used...

Anyway, I switched to PHP and learned from Larry Ullman's book, PHP 6 and
MySQL 5 (<http://www.dmcinsights.com/phpmysql3/>)

3\. Going through both of these will probably take you 2-3 months if you're
diligent. But once you're halfway through the second book, I'd say you know
enough to start building something and using the PHP book as a reference.

What you'll find is that as you build things, you will learn a lot more about
how to make your app come together.

Also, I disagree with the comment that it takes years to be able to do
something decent with your newfound programming knowledge. Yes, it will take
years before you can talk shop with the best of them, but as someone who has
taken several languages (Spanish, Japanese, Latin) and played several
instruments (piano, flute), I know it doesn't _have_ take years to get past
doing scales.

That's has more to do with ability to learn quickly and dedication.

------
japherwocky
I'm teaching a dozen people or so how to build "websites" with
HTML/CSS/Javascript/python. There's four intro lessons that take about an
hour-ish, and then we review code once a week or so.

The idea is to give you the absolute minimum exposure you need to build what
you want to build, show you how to look up the rest, and introduce you to some
of the more abstract principles by correcting your code as you go.

Definitely still in Beta / Guinea Pig mode, but send me an email if you'd like
to try it out: japherwocky [at] pearachute.com

------
alttab
Start with more basic tasks like script automation and you'll be able to work
your way up. I went like this (if its any help):

HTML, IT-Basic, Visual Basic, C++, Java, C, PHP, Ruby.

Of course there's small pieces of python, shell, more Javascript than I'd want
to admit, and a couple of others.

But I first started writing HTML. This helps because it makes you think
technically at multiple levels. First what you want to do (the goal), then the
language needed (HTML), and why what you wrote (HTML) isn't what you want (the
goal). Trial and error will get you into a program's mind.

Then I ended up using TI-Basic to program every math problem I would have to
solve in high school into menu-based programs for tests.

Then I started writing VB programs (hangman, calculators) and even wrote a
fully animated GDI game. It was slow, the VB code was absolutely terrible.
Which moved me into C++ / DirectX for making games... etc.

So mainly, start with something small and consumable. Once you can eat that,
hopping to the next, bigger problem seems smaller from where you are?

------
ashitvora
Don't think of it as learning a language. You will never be able to learn
everything.

Best way is to pick a project. Any simple small project to begin with. And
start implementing it.

Dont worry about anything (optimization and all stuff) as far as you are
getting results.

If you are not able to find any Simple project, just try to implement a To-do
list.

------
smutticus
I'm a believer that in order to learn programming you first need to find a
problem you want to solve. Then solve it. It really, really helps if there is
someone who you can ask questions of. But it's not absolutely necessary.

Which language you pick is less relevant than finding the right problem to
give you the motivation to want to learn.

------
cleshmd
I've written a very basic introduction to Django, no programming experience is
required, or assumed:

<http://www.instantdjango.com>

It also includes a standalone Django development environment for Windows, so
you don't need to waste time learning how to install and configure everyting.
Give it a shot, and see if you can follow along. If you like it, there are
plenty of great free Python and Django resources out there.

As an aside, I'm also writing an iPhone game programming tutorial for complete
beginners:

<http://coconutcollege.net>

It's not done yet, but the first four courses should get you up and running
with Cocos2d for iPhone. I should have the next two courses finished and
posted within the next two weeks.

------
efedorenko
I'm trying to learn programming with zero experience too, and highly recommend
book "Learn to Program" (<http://pine.fm/LearnToProgram/>). It was worth every
hour even while my goal is to learn JS and book based on Ruby. Now I'm reading
JS book with much better understanding of basic things.

Also, "Ship It!: A Practical Guide to Successful Software Projects"
(<http://www.pragprog.com/titles/prj/ship-it>) gave me a good understanding of
development process. I think it's worth to read even if you are going to work
on project alone.

------
jacobroufa
Everyone's gotta start somewhere. My advice to you is to stop worrying about
how long it's going to take you to do what you want. Just keep putting one
foot in front of the other and working towards that (those?) goal(s) and
you'll be there before you know it. If you've worked with startups before,
just not the technical side, talk with some of the programmers you know and
ask them to give you a lesson or two or even just direct you towards some good
resources and cheat-sheets (these are a lifesaver for me). Just stop worrying
about the time; you'll drive yourself crazy and it will feel like going
nowhere fast.

------
jashkenas
If Ruby intrigues you, there's no better place to start than with the Poignant
Guide:

<http://mislav.uniqpath.com/poignant-guide/>

~~~
techiferous
TryRuby <http://tryruby.org/> and Learn to Program
<http://pine.fm/LearnToProgram/> are better places to start.

The Poignant Guide is more entertaining but not the greatest for actually
learning the language.

------
leif
_At a university._

I can't tell you how sick I am of laypeople thinking they can just pick up one
or two programming languages in a couple hours a week and get a job. These
people end up with a very small skillset and no knowledge of what things they
don't know or where they might learn those things, and therefore they're of
negative worth to a programming team. You need the experience and breadth of
at least topical expertise before you'll be of any use to anyone.

~~~
rezrovs
University will teach you the underlying principles of computing and give you
the foundation and knowledge to be a better programmer, but it won't
necessarily teach you how to be a programmer.

It doesn't teach you a variety of languages or the language that you hope to
work with professionally. It doesn't teach you about version control or how to
work with legacy code.

I decided to get a degree because it would make be a better programmer and
hopefully that has happened. But it wasn't going to a university that taught
me how to get stuff done in a language I like.

For reference: I have been in the programming industry for seven years and
only this year will I finish my degree (been studying part time).

~~~
leif
_At a good university, with the intent of putting in lots of extra effort on
your own and going beyond the scope of the classes._

I contest that the vast majority cannot program effectively without the
foundation you get at a university, nor without learning what knowledge is out
there that you don't have yet.

Also, _my_ university had a class all about version control, legacy code, and
portability. [so, suck it, other universities ;-)]

------
phamilton
<http://www.greenteapress.com/thinkpython/>

This will get you a very good understanding of basic programming. After that,
try <http://railstutorial.org/> if you want to learn rails. (while ruby is a
different language, Think Python teaches concepts that apply is all languages.
Python is just the transport.)

Good luck

------
Locke1689
_Was it weeks/months/years until you felt comfortable writing an entire Web
app with basic functionality?_

Felt comfortable? Probably months.

Looking back -- was actually competent? I'm not sure that I am now but I'd
wager 2-3 years before I knew enough to both code an app, debug said app, and
secure the app.

------
zatara
I understand the common HN view for just jumping in and trying to build stuff.
Nevertheless, I wonder when would you consider a good time to attack some more
complex stuff (e.g. SICP, PAIP, K&R, etc)?

I guess it is the kind of thing you don't miss, until you go through them and
really see what you're missing.

~~~
silentbicycle
They should probably have simple programming experience (say, basic Python)
first, otherwise they won't have enough context to know "SICP" from "PAIP".
That's just a bunch of acronyms.

SICP - _Structure and Interpretation of Computer Programs_ by Abelson,
Sussman, and Sussman (<http://mitpress.mit.edu/sicp/>). Free online. Probably
one of the best _computer science_ books. It doesn't cover web programming,
but if you know your programming fundamentals and theory well, you'll be in a
good position to pick up whatever else comes along after current web
programming techniques become unrecognizable. (The code is in Scheme, a Lisp
dialect.) Do the exercises. Seriously - do the exercises. And yes, some of
them are difficult.

PAIP - _Paradigms in Artificial Intelligence Programming - Case Studies in
Common Lisp_ by Peter Norvig. This could very well have been three or four
separate books. It has case studies of historical AI projects, chapters on
learning / optimizing / implementing Lisp, chapters on search problems and
logic programming, etc. Highly recommended, but I would wait on this one until
you're proficient in at least two unrelated languages.

K&R - "Kernighan & Ritchie", aka. _The C Programming Language_. This is _the_
book on learning C. Short, concise, informative. Your programming will benefit
considerably by learning C (you'll be able to access low-level OS features,
esp. on Unix, and it gives a good mental model for the lower-level stuff going
on). If you like C and are comfortable with the exercises in K&R, then get _C
Interfaces and Implementations_ by David Hanson - it covers practical library
/ API design, by way of a guided tour through several of the author's freely
available libraries.

Also recommended:

_The Practice of Programming_ by Kernighan and Pike - Concise, practical
advice about the programming skillset not specific to any one language:
debugging techniques, how to write clean code, testing, rules of thumb for
performance tuning, etc.

CTM, _Concepts, Techniques, and Models of Computer Programming_ by Van Roy and
Haridi (<http://www.info.ucl.ac.be/~pvr/book.html>). This book is about the
fundamental models different programming languages are based on, and how they
complement each other. The writing is lucid and accessible, and covers many
things (constraint programming, for example) that similar texts never get to.

------
petervandijck
Choose a programming language, and write an application where anyone can add
links+titles, and people can leave comments on them. Doing something will make
you learn a lot more than reading books.

------
LInuxFedora
I can also relate to this problem ? I want to learn programming from scratch.
Should I start with C and then go for C++ and then to Python or which way ?
For me difficulty of learning is of no concern, I can manage ? But how and
where to start ?

------
nozepas
It shouldn't take long. You should be able to do it in weeks time.

Just search the internet for something like 'ruby tutorial'

~~~
japherwocky
I think it would be constructive if one of you downvoters left some sort of
comment on why you've downvoted poor nozepas into graydom. :(

I, for one, think if you were persistent and started with a ruby tutorial, you
could indeed make an MVP in a few weeks effort!

