Hacker Courses The online courses programmers keep recommending, ranked from 20 years of public forum comments.
i
#50 overall

CS106A Programming Methodology

Stanford University

10 recommenders · 10 threads · recommended in 4 years, 2009–2013 · score 11.1

Go to course ↗

Stanford's introductory programming course, taught through lecture videos and assignments. It starts with the Karel the Robot language and moves into Java, building projects such as Breakout, Hangman, and Yahtzee.

Commenters call it a fun, well-structured introduction to programming and computer science, with a lecturer who is easy to learn from and assignments that give quick, rewarding results.

CS Fundamentals & Systemsbeginnerfreevideo lectures#karel#java#programming methodology#mehran sahami#introductory cs

Recommendations by year

20062026

What commenters said (13)

  1. Strongly recommendsnatasham252012in “On the Usability of Codecademy”

    I highly recommend you check out all the exercise for the Stanford course: http://see.stanford.edu/see/materials/icspmcs106a/assignment... (the ones at the bottom, not the top). The reason the class was so much fun was because we got to make Breakout, Hangman, Yahtzee, and ended by creating a simple version of Facebook.

  2. Strongly recommendsnatasham252012in “On the Usability of Codecademy”

    I was a complete beginner at coding a few months ago. I really really wanted to learn, so I've tried going to local meetups designed to teach newbies to code and I've tried Codecademy.

    The problem I found was this tendency to start with the terminal as the teaching tool. The terminal is a black and intimidating hole to a beginner. Sure, I happily typed in 2+2 and got 4 as a result, and I understood how to store variables and even if statements and while loops, but honestly, I found this to be too abstract. I didn't understand what the terminal was and how typing in 2+2 was supposed to help me build a website, which is why I wanted to learn to code to begin with. I got frustrated and quit learning to code for a while as a result.

    But then I decided to try out the free Stanford CS106A course. I was hooked from the very first lecture. Instead of starting at the terminal, Stanford had me download Eclipse (which is less intimidating than the terminal) and they started with a fun "Karel the Robot" language. In the first assignment, my goal was to make Karel the Robot run around the grid and drop / pick up diamond 'beepers'. I LOVED it. The excitement I got from actually getting Karel to do what I wanted was exhilarating and far more rewarding than getting a pretty badge from Codecademy. I completed the course in about a month and am now learning Ruby, which I absolutely love.

    My point is, people want to learn to program so they can build something, so starting off with concrete and fun projects (versus typing random stuff into a Terminal) is the way to go.

  3. Strongly recommendsrobjohnson2011in “Dive Into Python 3 (online book)”

    The Stanford Intro to CS course was the best reference for learning Python that I used. The companion manual was How to think like a Computer Scientist and I thought it was just great. I can't speak to the DIP books, but I would wholeheartedly recommend the references above to anyone I knew.

  4. Strongly recommendsopen2011in “Suggestions for Introduction to CS?”

    Check out Mehran's Programming Methodology course publicly available on iTunes and Youtube.

    http://www.youtube.com/view_play_list?p=84A56BC7F4A1F852

    While the course is called Programming Methodology, the focus of the course is really to teach computer science and what it means to be a computer scientist and teach solid software engineering principles. The language choice really doesn't matter and Mehran has said so himself but they chose Java as it had good OOP principles to teach.

    It's by far the absolute best teaching style I've ever personally witnessed and he makes the classes fun and engaging and very easy to learn from.

    One thing I would probably have personally changed would be instead of Java, use Python (but that is really a personal preference and bias since I like Python better). Hope that gives you some inspiration. I would try and sit down and watch the first 3 lectures just to check out the style and the way the course is structured.

  5. Recommendskyoung182013in “Ask HN: Where to start?”

    I think you should find a resource that will guide you step-by-step along the way and teach you modern software engineering concepts, not just language syntax. A lot of tutorials out there today simply focus on syntax and eschew the bigger picture, which is critical for fully understanding what your doing.

    If your at least somewhat familiar with object-oriented programming concepts already, I would highly recommend the following course: https://courses.edx.org/courses/BerkeleyX/CS169.1x/2013_Spri...

    It deals with modern programming practices in the ruby/rails environment. I'm working through it myself and it's already answered a lot of questions that I've had about most of the tools you mention and how they work. It has specific sections on BDD and TDD also, among other relevant topics.

    If you need some more general background first, take an introductory computer science course. I would recommend CS106A Programming Methodology from Stanford, which is a good pre-requisite course for the one listed above.

    All of these courses are free.

  6. Recommendsmcplusplus2012in “So I started a blog ... about learning how to code”

    Python is a great way to start programming. Congrats on starting! However, I'd suggest following a university course (like stanford's cs106/cs107 etc) and doing the weekly assignments. That way you'll learn concept after concept rather than just random programs like prime factors.

  7. Recommendscodeswimmer2011in “Ask HN: What's the best way to make the switch from web-designer to programmer?”

    You might want to take a look at some of the available online computer science courses (iTunes U, MIT OpenCourseware, Khan Academy, Udemy). Tons of really, really good introductory courses are available that can help with picking up the basics (Stanford's "Programming Methodology" [http://goo.gl/Tbejg] and "Programming Abstractions" [http://goo.gl/RdwLt] come to mind).

    As others have pointed out, Meetups are a great way to learn, particularly specialized and cutting-edge stuff, not to mention the networking-with-others potential. Same for joining an open source project and contributing as you learn.

    Finally, if there's the equivalent of a Hacker Dojo (http://goo.gl/B2ats) local to you, drop in. People love to help and mentor others.

    Good luck to you!

  8. Recommendsdlo2011in “How can I learn to program? ”

    And here's another resource.

    http://see.stanford.edu/see/courses.aspx

    In particular, check out CS 106A.

  9. Recommendskleech2011in “Ask HN: I dropped out. How do I continue my CompSci education?”

    I would highly recommend iTunes University, its has many high quality recordings of lectures from many of the top universities. I've been programming for 10+ years and am self-taught, however I'm currently 'attending' the Programming Methodology course from Stanford University.

  10. Recommendsliuhenry2011in “My Students Laugh, HaHa, Laugh, at the HN Naysayers ;)”

    Karel's great, it's how I first learned Java. Cuts down on all of the unnecessary stuff and boilerplate, and presents an easy way to learn programming logic and theory.

    If anyone's looking for a good intro course to OOP and Java, CS106A at Stanford is great, and the lecture videos and course material is online: http://see.stanford.edu/see/courseinfo.aspx?coll=824a47e1-13...

  11. Recommendsjamesk22009in “Ask HN: Where to begin programming?”

    Python is fantastic but Learning Python might be a bit steep for someone who's not familiar with programming at all.

    Strangely, I think this youtube lecture series from Stanford is fantastic. http://www.youtube.com/watch?v=KkMDCCdjyW8

    It's java but the lecturer eases you into the most important concepts with an understanding of how to engineer readable, reusable code. So watch it free. Then buy Learning Python. If there is an equivalent python learning video on youtube, I haven't found it.

  12. Mentionsbirdymcbird2022in “Ask HN: Best front end courses recommendation?”

    Very open ended question. Maybe tell us what you tried so far, what depth knowledge or background you has now.

    pick any of the top results on youtube for react development. course not super necessary but if u really want, check react on coursera and take any of top results with good rating.

    if you want to be very successful dont glue yourself to one specific stack.

    start with react node but focus on patterns like how requests are made from client to server, server gives back responses. you application had metrics, logs, likely connects to some database.

    it would be good to take an intro to CS course on YouTube. Stanford and mit have free online.

    Deeper understanding will help u differentiate from crowd of everyone else trying to take boot camp and become coder.

    practice what you learn. Code side projects. learning react? Everything u learn, try apply to your own website.

  13. Mentionsavenger1232013in “Ask HN: Learning to Code (where to start)”

    First of all, how much time do you have to devote to this? Will you be quitting your full time job? Will you be doing this over all your free time? The amount you want to accelerate is entirely dependent on how much time you have to devote to it. This is also a question of how much patience you have and how you get started. Programming really is all about peeling the onion. It's easy to write an Hello World app but there are so many layers below that it can become very overwhelming. I will make the assumption that this is a side thing you want to get going.

    Programming by itself is not hard. What is hard is the amount of implicit (or explicit) knowledge that exists in the profession that isn't directly related to writing a web application or another piece of software. Now, its not hard to pick up this knowledge but its a barrier. To be a good programming you need to understand computer architecture, TCP/IP networking, HTTP protocol, how a piece of text written in a programming language ultimately gets turned into assembly language and then run on the CPU. There is a lot more along those lines. Now, I am not saying you need to understand it at a PhD level any of this but you need a more than basic understanding to be effective.

    What most of us that have been doing this for a long time don't realize is that our passion for technology and computers in general at a young age had given has a head start since we've picked up most of this knowledge (either self-though or going through CS or engineering programs).

    My recommendation would be to sign up for the online Stanford Introduction to Computer Science courses:

    http://see.stanford.edu/see/courses.aspx

    And start to do the first one on your own.

    Alongside that you can also start the Coursera courses: https://www.coursera.org/courses?orderby=upcoming&cats=cs-th...

    The Learn to Program and the Algorithm courses are good.

    If you are keen you should be able to go through these courses fast. The Stanford ones are not easy but will give you a taste of what a real computer science curriculum is all about. The lectures themselves are extremely worthwhile (Mehran Sahami is a great teacher).

    The point of these are not to make you a Ruby on Rails developer, or Python whiz, etc. It's to help you understand the fundamentals.This will also help you determine if it really is the career path you want to take. It takes a certain type of person to sit patiently in front of a glowing screen for hours and studiously write code and actually enjoy the process.

    If you want to build your own start-up ideas, don't bother learning to develop. Save enough money and hire it. There's very competent developers around the world that will make whatever you want (I am not saying its easy to find quality developers, but they are out there).

    Personally, if I was in your shoes, I would give myself six months to really delve into the fundamentals. If by the end of six months, you feel its a chore and the thought of sitting in front of the screen for another couple of hours learning something else just turns you off, then please have the honesty to stop. But, if its the opposite and you are able to keep going then please don't stop. I would say if you still have the drive to learn and practice after six months, you will be on your way to picking up whatever knowledge gaps you have.

Related courses

Keyboard

In the course grid
←↑→↓
Move between courses
Home End
Start / end of row (with Ctrl: first / last)
PgUp PgDn
Jump several rows
Enter
Open course
S
Save / unsave course
1–5
Best, Trending, Hidden gems, Evergreen, Saved
[ ]
Previous / next topic
On a course page
← →
Previous / next course in your list
S
Save / unsave
O
Open the course website
Esc
Back to the grid
Everywhere
/
Search
T
Light / dark theme
?
This help