To a lot of non-developers, learning to code seems like an impossibly daunting task. However, thanks to a number of great resources that have recently been put online for free, teaching yourself to code has never been easier. I started learning to code earlier this year and can say from experience that learning enough to build your own prototype is not as hard as it seems. In fact, if you want to have a functioning prototype within two months without taking a day off work, it’s completely doable.
Below, I’ve outlined a simple path from knowing nothing about software development to having a working prototype in eight weekends that roughly mirrors the steps I took.
Introduce Yourself To The Web Stack (10 Minutes)
The presence of unfamiliar terminology makes any subject seem more confusing than it actually is. Yipit founder/CEO Vin Vacanti has a great overview of some of the key terms you’ll want to be familiar with in language you’ll understand.
An Introductory Grasp Of Python And General Programming Techniques (1 Weekend)
- Learn Python the hard way: Despite the title, the straightforward format makes learning basic concepts really easy and most lessons take less than 10 minutes. However, I found that the format didn’t work as well for some of the more advanced topics, so I’d recommend stopping after lesson 42 and moving on.
- Google’s Python class: Read the notes and / or watch the videos and do all of the associated exercises until you get them right — without looking at the answers. Struggling through the exercises I kept getting wrong was the best learning experience. I would have learned far less had I just looked at the answers and tried to convince myself that I understood the concepts.
These two resources are somewhat substitutable and complementary. I recommend doing the first few lessons from both to see which you like better. Once you’ve finished one, skim through the other looking for concepts you aren’t fully comfortable with as a way to get some extra practice.
An Introductory Understanding Of Django (1 Weekend)
- Work through the Django tutorial.
- Delete all your code.
- Work through the tutorial again, from scratch.
The first time I went through the tutorial I inevitably ended up just following the instructions step-by-step without really understanding what each step did since everything felt so new.
The second time through I wasn’t as focused on the newness of the concepts and was better able to focus on understanding how all the parts work together.
Build Deeper Understanding Of Python/General Programming Concepts (2-4 Weekends)
- Udacity’s intro CS class: Udacity’s courses are generally 7 session classes (2-3 hours per session) that you can take at your own pace. (I’m a huge fan of Udacity’s pedagogy and recommend the intermediate programming class or the web development class as follow-ups to this two-month curriculum.)
- Unit 1 of MIT’s intro CS course: Really well taught and surprisingly approachable.
Again, I would sample each and see which you like the best. I ended up doing both but that was probably overkill.
Practise Building Simple Web Applications (1 Weekend)
- Work through a few of the exercises in Django by example. These exercises don’t hold your hand quite as much as the Django tutorial but they still provide a fair bit of guidance so I found it to be a nice way to start taking the training wheels off.
Build Your Prototype (1 Weekend)
- Build a prototype in just one weekend? Yes, you’ll be embarrassed by what it looks like (I sure was) but that’s the whole point.
That’s it. Eight weekends (or less) and you’ve gone from zero to a functioning prototype. Not so daunting after all is it?
Author’s Note: It goes without saying that there’s a huge difference between the relatively cursory amount of knowledge needed to build a simple prototype (the focus of this post) and the depth of knowledge and experience needed to be a truly qualified software engineer. If you want to learn all that it takes to build modern web applications at scale, getting professional web development experience at a fast-growing startup like Yipit is a great next step. If you’re smart, hard-working, and passionate about creating amazing consumer web experiences drop us a line at [email protected] — we’re always looking for great people to join our team.
How I Taught Myself to Code in 8 Weeks [Yipit Django Blog]
David Sinsky started at Yipit without any prior coding knowledge. Before long, he was a full developer contributing features directly into the code base.
This story has been updated since its original publication.
Comments
19 responses to “How I Taught Myself To Code In Eight Weeks”
Not sure the title fits this article. You learnt to write code but i feel that is different to knowing how to code.
I review work that comes from coders all the time as part of my job and let me tell you the quality levels between ‘coder’ to ‘coder’ varies substantially.
In a literal sense both ‘coders’ know how to code, however in my mind there is difference between knowing syntax and knowing how to do the best implementation of that syntax. The latter takes much time and experience to learn.
Which is the difference between a coder and a programmer. A coder implements things – a programmer knows WHY he implements things.
Agreed. There’s an excellent article by Peter Norvig called “Teach Yourself Programming in Ten Years” that makes a similar point. He wrote it in response to articles just like this one…
You can just about learn a technology in about the average time it takes for that technology to become obsolete. I have gone through several phases and learned several languages and technologies in my career. A whole mess of the technologies that I have been proficient in are now dead. I have coded in COBOL (a looong time ago) and am now floating around C# and JavaScript with all sorts of strange things in between.
The biggest thing is not necessarily knowing the language or the syntax inside out. While some code is quite obfuscated (I am looking at you, Regular Expressions) often you can look at an unfamiliar language and figure out what it is doing. There is a core skill that transcends language and technology that is basically about taking a bunch of human requirements and working out the simple core rules that define them, or looking at code and working out its intent.
The ability to understand a proposed system and create ironclad logic to implement that system while considering the edge cases is something that comes through experience with any language. It is a kind of wisdom. You can’t learn wisdom. You have to earn it over time, and through both success and failure. As you do so, you will find greater levels of understanding of code that you read and your options when you write. Familiar patterns will emerge that transcend the implementation language. You might know what you need to do with a new language, even if you have to google some syntax to know how to do it. You will start to think about relationships and structures in code at a broader scale.
Basically, the ability to read and write in proper English doesn’t make you a great author, yet a great story can be told well in many languages. Learn a language and then work on the craft of writing great stories.
It’s the difference between someone who can cook and a chef. I can do the mechanical stuff, cutting, stirring, etc and I can follow a recipe, but a chef has a level of understanding that goes beyond all that. They know how the ingredients go react to each other, they which flavour goes with which, they know how the meal will work from a big picture standpoint and it all adds up to a proper meal.
Mind you ‘only’ being able to cook isn’t a bad thing, it’s all most people need, just don’t follow one of these articles and think you’re going to come out with the ability to make much more than tweaks on the topics directly covered by the guides.
Yep. It’s the difference between “Coding a database submission form” and “Coding a database submission form that is secure against script injection attacks and can handle 1,000 concurrent submissions”. I’ve requested coding submissions for job applications in the past, and the number of times I’ve seen “INSERT INTO dbname VALUES( ‘”.$_POST[ ‘name’ ].”‘);” is crazy. Bobby Tables’ mother would not be impressed!
You make a good point. I definitely agree with you on the fact that there is a difference between knowing basic syntax and knowing the best method of implementing.utilising it. There is indeed a big difference between the two and it is very interesting from a philosophical perspective. However, the author never suggested he was able to do the later. He just said that he was able to do some stuff. Now maybe I’m totally wrong here but I think it’s important to point out (at least from an argumentative point of view) that the claim seems to be more ‘being able to code in the literal sense’ rather than ‘how to best implement the syntax’. Just my 2 cents….
I’m interested in learning something like this. Should I follow this method or start with ios app development? I have a tiny bit of experience coding in java and matlab.
I also want to learn how to Program. Should I fellow this or go and learn C?
i found that for me personally learning something procedural like C++ helps first. being procedural makes it easier to get started as you dont need to worry about objects.
As you progress to objects you can do these in C++ too, i find it helpful as inheritence & polymoprhism is a bit more obvious here so you understand the concepts better.
when your ready for pure OO i recomend a bit of java. once comfortable with the basics hit up the mainstream stuff like C# and Vb.net
W3schools are helpful as are java doc.
Python is a decent language to learn with: it has a simple syntax (its predecessor was a teaching language), and is expressive enough to write complex programs that are still maintainable.
Once you’ve got the hang of the basics, it is probably worth while experiencing a language like C or C++ that doesn’t give you automatic memory management. It is also worth while learning a functional language so you can see how it compares to imperative languages.
Coming soon:
‘How I taught myself medicine eight weeks’
‘How I taught myself engineering in eight weeks’
‘How I taught myself architecture in eight weeks’
brought to you by the same author from
How I taught myself journalism in eight minutes
To be fair, a bunch of introductory courses to subjects such as medicine, engineering and architecture (among many other subjects), last 8-12 weeks or so. Enough to give you a very rudimentary understanding of the concepts/formulas involved in the subject area. Of course as has been pointed out, that’s a lot different to having a good working knowledge of them, but still….
Excel formulas that build a Web Application.
I have been thinking about how to make programming simpler to learn for a few years now. I came up with this: Software Tool that requires no HTML, database, or web server knowledge. If you know how to use excel formulas, then you can create your own interactive web application. In mins not days.
My problem is, the above is too general. I suspect I should target one problem.
Rough video, that shows what it can do: http://www.youtube.com/watch?v=M3-U6xc9DJU
I have a prototype, but am a bit stuck on how to move things forward.
Eddy.
maaaaaaaan, HTML isn’t even code – its all metadata, really. Can’t do that then you shouldn’t even be doing 8 weekends worth of python.
Who needs coding when you have beer!
This is why there are so many security holes etc… in web apps. People who go thru 8 week courses on the interweb then set themselves up as coders by just cutting and pasting code from the interweb without any understanding of the basics of say – good design. It’s like teaching yourself acupuncture by using your wife’s sewing needles and calling yourself an acupuncturist.
Yeah I could probably may a half decent journalist in 8 weeks as well – it’s probably how the writer learnt journalism.
What’s a prototype?
For me, it would be soldering a few electronic parts together – but hey, I’m a hardware guy. So what’s a prototype – for a programmer?
Is it – a script file? A web app? Database front end?
An iphone / Android app?
A windows / Linux / OSX program?