Ask HN: Zero programming experience and badly want to learn. Where to start?
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?
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.
45 comments
[ 3.5 ms ] story [ 110 ms ] threadJust search the internet for something like 'ruby tutorial'
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!
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.
http://learnpythonthehardway.org/
That's not a path, but a start.
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.
http://mislav.uniqpath.com/poignant-guide/
The Poignant Guide is more entertaining but not the greatest for actually learning the language.
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.
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.
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...
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...
You can freely download the book:
http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
I recommend you look into SASS/Compass. You have to learn the abstractions on top of CSS but from there you can leverage other people's knowledge of the tricks/hacks involved in putting together a good CSS layout.
I've recommended this to a number of people in roughly your position with good success. The biggest problem they've run into is with the SCSS syntax and once I got them converted over to sass (-x SASS) they all did fine. SASS won't teach you design and the designs have all been terrible, but generating the stylesheets ceases to be the problem.
On the other hand, I've had a terrible track record trying to do the same with designers.
> This is a good sign (I think?).
The revulsion tends to go away after you've been doing it a few years. You never stop learning, so there's usually a sigh when you see something you could have done better.
I was the guy he emailed saying "want a free intern?" and I can safely say: listen to what he wrote above and execute on it. It is straight up good advice. For one, I've been writing code with Eric since he just wanted to hang out and watch me and another person write code, and he's made progress that I would've doubted was possible a-priori. Just having a resourceful predisposition is half the battle.
The reality is that it probably takes ~10 years to get to the level where you are proficient in all the relevant areas to make a scalable, robust, well-designed web application. Most projects you'll take on won't make it to the stage where those are relevant. The only way to get there is by doing and doing over again.
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?
I am genuinely curious to know why you think so.
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.
I guess it is the kind of thing you don't miss, until you go through them and really see what you're missing.
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.
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.
I would recommend picking up SAMS Teach Yourself HTML and CSS in 24 Hours: http://www.amazon.com/Sams-Teach-Yourself-Hours-Coverage/dp/... and O'Reilly's Learning PHP, MySQL, and Javascript: http://www.amazon.com/Learning-MySQL-JavaScript-Step---Step/...
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.
The world needs more people like you.
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
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
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...). 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.
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.
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).
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 ;-)]
Which language you pick is less relevant than finding the right problem to give you the motivation to want to learn.
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.
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.
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.