This may seem silly, but I found the most difficult part of learning RoR was getting my development environment set up. I tried several times since 2005 to get started, but failed due to a sticking point that for some reason I couldn't get past. It wasn't until a friend with a bunch of RoR experience walked me through the setup of the black box of different parts to run a web app that I actually got it. Comparatively, coding, refactoring, implementing best practices is much easier and enjoyable.<p>If you view programming as a craft, having mentors/coaches/peers definitely helps you improve much faster.
Taught myself to program over 6 years ago. I've learned low level and high level languages, algorithms, data structures, how to make websites and mobile applications, etc, etc. While I may have wished for an instructor at parts (specifically when my computer refused to run certain pieces of software, or when I accidentally wiped my entire hard drive while trying to install linux) in retrospect, I don't think I would choose to do it any other way.<p>Then again, I prefer learning from reading a book than from being taught. Everyone is different. It must be amazing to have someone guide you and check up on you once in a while though.
I taught myself programming last year (starting with Python from Google's course) and am incredibly jealous of this. I'd have killed for someone to explain what on earth Object Oriented Programming was in the context of the project I was working on. It simply did not make sense to me for a very long time.
I went through a very similar process and I highly recommend it. I'm a web designer and I had a bit of experience with Javascript (just enough to be dangerous) but I really wanted to build an actual web application. I just couldn't seem to grasp OOP, but in hindsight it's because Javascript's OOP is so obfuscated.<p>I live in a small tourist town and I was surprised to find a local Ruby developer. We met up and I asked him to tutor me a couple of hours per week trying to build an actual Ruby on Rails application.<p>He set up the project structure and wrote a couple of tests, and I'd go back home and try to get those tests to green. Boy it was hard. I'd grind for days trying to get the last couple of tests to pass, so when we'd meet up for our weekly session he'd resolve them in just a couple of minutes and it made perfect sense. It was worth it just for those "ah ha!" moments.<p>Of course, the motivation isn't in learning the language/framework itself, it's in building something useful or meaningful to you.<p>In the end, with 2-3 hours of weekly mentoring, I was able to release the functional application in six months and learned tons in the process.
I am in a similar situation to the author: I am an experienced programmer, and I am tutoring my wife, who left her job so she could devote all her time to learning to code. She's gone through all of the HTML, CSS, and JS CodeAcademy courses, and is now doing the Python course on Udacity.<p>While she hasn't needed a lot of help with those, she has also been working on extracurricular projects that I've helped put together for her. This is where I think the article was most revealing: I have been worried about helping too much, but now I can see why the opposite is true.<p>The author mentions that struggling with what you're learning is important. I agree. However, I think I have been letting my student struggle with the wrong things in the name of not "doing it all for her". I think it would be better to err on the side of providing every resource I can to define a straight path to a completed project. When she gets comfortable at a certain level, we can make the projects more complicated by involving more parts, rather than more frustrating by giving her less information.
Cool post! I've seen a lot of beginners learn to code (I started a non-profit to help bring more women into software development) and while we're addressing the issue of code literacy, there's still a huge skills gap between those who "can code"/ have done some tutorials and those who are ready to flexibly architect software.<p>I'm hoping to make the process of going from newbie to experienced easier and more meaningful with CodeMontage (<a href="http://bit.ly/CodeMontageLaunch" rel="nofollow">http://bit.ly/CodeMontageLaunch</a>) - you get to work on real, open-source and social-mission projects, you get feedback and code reviews from experienced developers, and you build a portfolio of open source, quality code that you can reference later or use to get a job.
It's also really nice for the experienced developers / experts in a language to be able to give code reviews on important projects - it's nice if you have a friend willing to pair on your side project, but definitely can wear on a relationship over time (and when all your friends are learning to code...).
According to emails I still get for my (yet-to-be revised) Bastards Book of Ruby, this statement rings particularly true:<p>> <i>Since we finished our final tutoring session in March 2012, I didn't hear from Brian for six months. He recently sent me an email mentioning that he just wrote a Python script to help him model personal stock investments: "I'm very proud of this script because it was the first thing I've done that was both practical and purely for personal use. I was evaluating a stock investment and wanted to simulate a bunch of scenarios. I started to model the scenarios in a spreadsheet before I realized that a spreadsheet wouldn't work, but python was perfect."</i><p>Showing how programming is useful for "both practical and purely for personal use" seems to be the surest path for enticing non-professionals...with everything that we have to keep track of in our lives, purely academic pursuits can be tough to stick to.
Essentially this is where I am - I've completed about 1/4 of codecademy's codeyear, and I'm digging into Arduino pretty well (hello self-driving trash can). Codecademy covered the basic concepts well, but I'd like to make sure there aren't any concepts I'm missing. If I'm doing something the hard way, I'd like someone with more experience to tell me.<p>I've already got a BA in business, and while repaying college loans, I really can't afford to pay for college classes to be able to meet with a professor. Besides, I'm not sure that college courses would teach me electronics and programming faster than I can teach myself. (College was a good experience, but I'm not trying to get another BA)<p>I'd almost like to start a service connecting interested learners with subject-matter mentors. In fact, some type of mentorship/tutoring program could be an integral part of a good hackerspace.
Any advice for the <i>slightly</i> motivated beginner?<p>My wife has recently asked me to teach her some programming. I doubt she will be that highly motivated though. I am guessing her interest is just to explore this world and perhaps better understand the work I'm doing. I have never taught any beginners but this could be a fun experience for both of us. I am wondering what kind of assignments, projects or scenarios to go through, and what kind of a development environment to use.<p>I love python and think it's probably the best language to learn (and use), but I'm not sure how excited my wife will be from looking at a console? I was considering a little bit of javascript together with HTML/CSS, but most of the programming involved with interactive web pages I find a little boring... Any suggestions for some cool simple projects to walk through and learn programming with?
I'm currently mentoring someone using a method similar to this -- build steps of a project, be available for questions as they come up. We've covered basic OOP and are moving into more abstract concepts like FSMs. I'm curious about what happens next for someone who has learned to program decently well, but has no traditional formal education.<p>If going back to school is probably not an option for this guy due to other obligations (and finances) do you have any advice for the path from solid hobbyist into entry level professional?
Sadly, new Python-based MIT courses are at least mediocre.<p>By mere rewriting the code from Scheme to (ugly) Python they lost all the elegance and convenience acquired by decades of evolution of the classic courses and two editions of SICP.)<p>Watching 6.00CS is boring, when you remember how this very code supposed to look in Scheme.<p>The old Berkeley's CS61A, which is based on the same great book, was also translated into Python.<p>For teaching in Python, at the very least, its standard idioms must be carefully selected and used, as it is in the original Python tutorial on the web.
To those looking to start programming, but don't have a tutor nearby: pick up Steve Kochan's "Programming in C" and head on over to <a href="http://cs50.net" rel="nofollow">http://cs50.net</a>. They have a Google Group set up where David Milan and his aides will answer your questions!<p>It's how I finally added some structure to my learning adventure.