
#6 overallClassic
CS50: Introduction to Computer Science
Harvard University
72 recommenders · 73 threads · recommended in 15 years, 2012–2026 · score 107.3
CS50 is Harvard's introductory computer science course, covering programming fundamentals in C, Python, and web technologies along with algorithms, data structures, and problem-solving. It is offered free through Harvard's public course site and edX.
Commenters repeatedly call it an excellent, high-production-value intro that builds a strong foundation, with David Malan's lecturing singled out as a major strength.
CS Fundamentals & Systemsbeginnerfreevideo lectures#introduction to computer science#c#python#algorithms#malan
Recommendations by year
20062026
https://www.youtube.com/watch?v=jjqgP9dpD1k
Harvard's CS50 is best of class. Created by David J. Malan. I've never seen an online course that has production quality or clarity of concepts as good as this. Even if you know how to code you may find a few useful bits in there and if nothing else you're learn excellent ways to explain programming concepts to people. They also make a new one every year, so maybe the 2020 or 2021 version is better.
https://www.youtube.com/watch?v=BDqvzFY72mg
Yale's Power and Politcs was created by Ian Shapiro is an excellent zoom out into global politics and how how the modern world was made.
https://www.youtube.com/watch?v=7cAzgUIKI68
Poker at Hopkins was an intersession course created by Avi Rubin, a poker enthusiast professor who collected resources over many years with the thought in the back of his mind "maybe one day I'll teach a course on poker somehow". It's very much an introduction but a good one.
Hey Totaldude,
I taught myself programming over the course of a couple of years, having started from pretty much zero. Now I am working part time as a developer for a startup, and run a business of my own - having built not just the website and app for my business, but also developed the hardware and firmware!
Below are the classes that I took to get started along with a bit of a storyline:
http://learnpythonthehardway.org/ - I started this a while ago and never finished because I got distracted. It's kind of bare bones, but will get your wheels spinning.
https://www.edx.org/course/introduction-computer-science-har... - I started and got all the way through the last problem set. This course is EXCELLENT: wonderful lectures, challenging assignments, expansive community (facebook group, reddit.com/r/cs50, stackoverflow, etc). If there was only one class to pick from this list, CS50 would be it.
After CS50, I wanted to get good at a specific language and decided to learn Python. It is a very flexible and powerful language. It's very clean syntactically making it easier to learn. You can use if for data science, for little scripts, for web development, for pretty much anything.
https://www.edx.org/course/introduction-computer-science-mit... - i started this late (not self paced like the CS50), and played catch-up a good amount of the time. A solid class, mostly did it because I wanted to get good at Python. I got most of the way though this course as well.
https://www.edx.org/course/introduction-computational-thinki... - I started this class next because I wanted to use Python to crunch numbers, and eventually get into machine learning. I made it just a few weeks into this course before getting distracted with my own projects.
It's not just about learning a programming language, but learning to program. With two hours a day, you can churn through the CS50 course in a couple of months, during which you'll build a website & webapp. It'll definitely be a challenge (it took me a couple of tries to make it all the way through), but it's an amazing course - make sure to take advantage of the huge community.
I was in this spot about a year ago and have picked up quite a bit of web dev ability since.
I tried a few books, but they didn't really sink is all that well. Here is what I recommend:
- Take cs50 (Harvard intro class) from iTunesU. After attending school for 16 years, this is the single most worthwhile class I've ever taken. Plus it's free. It will give you a basic understanding of programming and a look at how to solve problems. Once you have completed this class, php, js, objective-c or whatever language you are interested in will have a lower learning curve. If you want more, Harvard has archived lectures and assignments of several other web dev classes and they are available online (for free).
- Start with Laravel, which is a relatively new php framework. The best thing about Laravel is that you can make progress in building items quickly and as you learn more, improve them. Like you, I wanted to start building things immediately. Within about 4 hours of reading tutorials, I had a basic CRUD application live. Laravel has a big community with many, many free tutorials. Check out: www.scotch.io and http://maxoffsky.com/category/code-blog/
As others have said, you can probably do this same thing with Angularjs. It might even be the better option.
- join Stackoverflow.com. It is likely that any problem you encounter with Angularjs or Laravel will be discussed and solved there.
- Join Codecademy.com to practice js, jQuery and php syntax.
Good luck.
I would highly recommend Harvard CS50. Everything is available on the course website, https://cs50.harvard.edu/ . There is a linux appliance with a console utility that allows you to submit problem set solutions for automated testing/grading.
The moment I knew it was a good choice for me was after I completed a problem set that required us to write sorting algorithms.
My prior experience was with Ruby and JS, so .sort() => done, no idea how this mysterious .sort() was returning my ordered set. After the lecture and writing the algorithms, I didn't just have the code as you would following a tutorial. I had a better understanding behind "the magic". I understood how to evaluate the performance of these algorithms using Big O notation and why my Google killing search engine won't do much Google killing if I use bubble-sort.
Give it a try. You'll get a good introduction to CS and write some cool programs, including a program that can recover "deleted" images from a memory card.
I wholeheartedly agree with the OP. I took Prof Malan's course via the Harvard Extension School my junior year of high school while trying to get into programming. I first tried to get into PHP and C++ the prior summer (I had no clue, and had no idea of how clueless I was). Enter MIT's OCW and CS50. I quickly watched all of the lectures in about a week or so, and decided to take the course for the following fall shortly thereafter.
Prof Malan is one of the best lecturers I have had the pleasure to learn from, knowing how to keep an audience interested in just about anything. Malan and his army of TAs have also done a fantastic job of creating a community around CS50, and have provided a plethora of resources for their students. Their assignments and problem sets were also perfect. They were challenging and interesting without being inaccessible; teaching both programming skills and being relevant to important CS concepts. We also got a special lecture from Brian Kernighan at the end, which was a real treat.
I'm extremely appreciative for the skills and knowledge CS50 has given me, and would highly recommend it to anyone willing to take on the challenge. It's the reason why I have my current interest in and basic understanding of CS.
I'm really excited for what online education can offer if many other classes can be brought up to the high standard Prof Malan and his team has set. With 5 years of community college (8th-12th grade) and a semester at a top liberal arts college, all taken in-person, CS50 remains one of my favorite classes (in terms of interest, challenge, fun, etc).
I should also mention I took CS75 with Malan as well, and while it wasn't quite as enjoyable for a number of reasons, it was also an excellent course.
I think you're focusing on all the wrong things and come across a bit naive IMHO.
- Your PC specs don't mean anything to anyone.
- 'top 2000 technicaians in the Nation from Stellantis of North America.' - This doesn't mean anything to anyone hiring for a coding position.
- 'Everyone assumes abs module because...' - This is a cute curiosity that doesn't mean anything to anyone.
1. does printmakerai.com actually work? It seems like a vibecoded landing page.
2. has it made any money? Your pricing tiers don't make any sense to me.
3. > even being this smart ... - start from a more humble position.
- You should make a github profile and write code and put it there.
- Take CS50x https://cs50.harvard.edu/x/
- Take a data structures and algorithms course
- Do some LeetCode
- Apply to jobs on hackernews 'who's hiring' thread, and other places.
I would do (and have done) CS50X online https://cs50.harvard.edu/x/ do all the problem sets and projects by hand using no AI to write any code. The lectures and tutorials are outstanding. By the time you're done you'll be ready to build whatever and research what you need to learn to build most things
If you need to go deeper, then do https://cs50.harvard.edu/web/ as well.
If you need to really nail DS/ Algorithms do the courses from Berkley:
https://cs61a.org/ (if you did CS50x already you can skip)
https://sp25.datastructur.es/ (CS61B)
https://cs61c.org/fa25/ (Optional/advanced stuff)
The best CS-for-beginners course is Harvard's CS50. (And you can take it for free online through EdX.) It's fun, but you learn a lot, and you get actual coding experience with coding tools.
There's a lot of free online support that comes with it - Reddit, plus virtual "section" videos, etc.
If you just want to get "into" the tech industry, your transition could start by taking (non-technical) work at a tech company. Some of your skills in the hospitality industry should match up to something to get your foot in the door...
Maybe I'm assuming that being "in the tech industry" means computer programming (and not hardware design or business planning). Either way, my go-to advice is just try taking Harvard's CS50 course online. (It's free to audit.) It's a whirlwind tour through easy programming exercises in multiple languages that gradually ramp up in difficulty. By the end of the class you're exposed to a lot of the major languages (and the most common pitfalls), plus a little history and lore. It fills in a lot of holes...
https://pll.harvard.edu/course/cs50-introduction-computer-sc...
I would recommend these two courses by Harvard in order:
1. CS50's Introduction to Computer Science
2. CS50's Web Programming with Python and JavaScript
Even if you know programming, you should still go through the first course. You can choose watch the lectures on 1.5x or 2x but definitely do the assignments. The assignment and project based approach of these courses will definitely make you learn the stuff deeply and will make you a good full-stack developer. All the best!
Links:
1. https://www.edx.org/learn/computer-science/harvard-universit...
2. https://www.edx.org/learn/web-development/harvard-university...
Just to clarify, I mean I won't try to use vim to write the code.
I definitely recommend people to try the CS50 course.
I enjoyed the CS50 course few years ago, where they talked about how to build native apps with React Native.
I remember the professor/lecturer was using vim to write the code, no IDE whatsoever! That’s was very cool but I don’t think I’ll ever try it.
I can highly recommend CS50 from Harvard (https://www.youtube.com/@cs50). Even after being involved in tech for 25+ years, I learnt a lot from just the first lecture alone.
Disclosure: Professor Malan is a friend of mine, but I was a fan of CS50 long before that!
I know a few people who have been unemployed since July and October due to being laid off. Some of them found jobs but not others. That's 6+ months of searching.
Given you're not in financial distress I would suggest spending a few weeks or a month learning without a bootcamp to see how you like it. For example https://cs50.harvard.edu/x/2024/ is often referenced as a good intro to programming and web development course and it's free.
If you still like it after that then either continue self learning or try to find a bootcamp that has a good deal around employment like you only have to pay them after you land a job or they have a really strong system around helping you find employment.
I'm pretty sure the market for hiring junior / beginner developers right now is going to be brutal, bootcamp or not. Jobs are weird though, there's so much luck involved around being in the right place at the right time. If programming is something you really want to do, being prepared for that type of scenario is of course worth it.
A few resources which you may want to check out, in roughly increasing order of difficulty:
- Free Code Camp: https://www.freecodecamp.org/
- CS50: https://cs50.harvard.edu/x/2023/
- How to Design Programs (HTDP): https://htdp.org/
- Nand2Tetris: https://www.nand2tetris.org/
These are geared towards making you a better programmer in general, though it won't necessarily bring you closer to an AI/ML career.
Also, math is pretty important if you want to get into AI and similar things. Even otherwise math is important; don't listen to people who say you can get by without the math! So, try to get a head start on probability, calculus, linear algebra etc.
Good luck!
Gosh, I'm embarrassed about what I was up to when I was 16.
Start with one or more of Harvard's intro CS courses: https://www.classcentral.com/report/harvard-cs50-guide/ Then you need a lot of data structure / algorithms work.
There are free online CS courses at Harvard, MIT, and Stanford. Computer Science is a huge field, with many specializations. Computer Science is the study of concepts, programming is the implementation.
Web Dev or Software Engineering? For web, I'd recommend starting with some basic youtube tutorials on building a clone of X. The goal here is not to really learn the concepts, but to learn if you enjoy it. There will be alot alot of learning and effort involved throughout this career. You need to learn if you can stay motivated because you genuinely enjoy it or if it will be a slog.
Then I'd recommend FreeCodeCamp. Don't worry about languages/frameworks/etc - you'll get there.
Don't go the codecamp/paid course route until you've tried building a bunch of things.
Software, start with CS50 MIT course.
I went thru cs50 a few years back. Fantastic course. I think they may teach you how to use AI in computer science. Not blindly copying generated code, but rather explain concepts, patterns, data structures, etc. chatGPT is an invaluable tutor already, so this makes perfect sense to me.
CS50 was a gigantic intro class designed to whet non-comp-sci students appetite for coding and computer science, generally. (I took it when it was C/PHP, so they may have changed things.) While the lectures are very straightforward, the smaller 'sections' lectures with the dozen-or-so teaching fellows were more intensive, and p-sets were pretty challenging for newbies. The weekly help sessions ended up being a million lost students in a giant hall waiting to see one of a few dozen TAs offering uneven pedagogical quality. The assignments were often automatically graded upon submission and you often have some equivalent of a unit test to see if you got it right before submission, so you know if you got it wrong, but not how wrong. Just having a resource for sanity checks and walkthroughs of lesson concepts without trudging to the hall-o-TAs is prolly really useful.
Totally legit philosophical debates aside, I think this is a great use of the technology. It's a very, very well-funded class (bigger dedicated full-time year-round staff than some entire departments,) so I'm sure it's not a half-assed effort.
Malan is a great lecturer and his CS50 classes are all on YouTube. I sometimes send new coders to them but they're a fun watch, in general.
If you like this, I strongly encourage you to also check out Harvard’s CS50. Lectures are all on YouTube. https://cs50.harvard.edu
It's going to take more than one. As an MVP of sorts, start with the Harvard course. As you move through that, start looking for the next one and so on. Eventually you'll know if it's time to slow down or pivot a bit, etc.
There is not a single best path. What's most important is to start walking and adjust as you go.
Also used in Harvard's, excellent, CS50. I recommend this for any middle or high schoolers thinking about a career in tech.
https://pll.harvard.edu/course/cs50-introduction-computer-sc...
I usually just recommended Harvard's CS50 as it is a very high quality introduction course (To be clear I was not a Harvard or any _fancy_ university).
Is there any better course available?
Harvard's CS50 course is the best place to start (I think much better than MIT 6.0001). The teaching is great, and it covers a lot of stuff without dumbing things down. They also have a couple of follow-up courses which focus on web/games/ML.
I agree, I did the original Harvard CS50 and it was one of the best online courses ever done. I just wish there were more like this even if not to the same level of production.
Usually I say the best introductory programming class is Harvard's CS50 (available online for free through EdX). What's good is they don't just focus on one language, but keep switching languages as the weeks roll along. That gives you not just programming experience, but that crucial insight that languages have more in common than their differences. (And it also tries to touch on most of the major constructs -- linked lists, sorting algorithms, recursive loops.) It's slogan is "challenging, but definitely do-able" -- which I think is one of its biggest strengths. It's fun, but it also gives you some of the actual excitement of real-world programming -- and it exposes you to things that are excellent jumping off points for further study.
CS50 is really good, and the instructor is real rockstar, not a shame to recommend it too. Guess many people expected a course like Codecademy with `print 'Programming is fun!'`.
I have been hearing a lot about cs50/cs50x. I will take as a sign and start the course.
This course looks "fine"; however, I would recommend that anyone interested in exploring CS (or perhaps even if you are a self-taught and very able coder who wants to learn those missing fundamentals ) takes CS50 out of Harvard.
It is easily the most engaging course I have ever taken and it's available for free on edx.org or you can take the "real" class from Harvard extension for a couple grand. You can go into this class as an underwater basket weaver or a strong coder and get a ton out of it.
Have you looked at the amazing CS50 online courses on Harvard?
I think CS50 (edx) and Nand2Tetris (coursera) would be great courses to start with. Also, freeCodeCamp has some great introductory courses to Python (computing, data, ML etc) as well as web dev (js, react, html/css and even a bit of node).
I looked him up. Not bad. One content that I recommend to peers that are after C++ is this one particular course from Wondrium. https://www.wondrium.com/introduction-to-c-programming-conce... Also the CS50 for the very basics to the programming.
I've always wondered what would happen if you offered the top high school students a chance to take the Harvard/edX class CS50 together.
In the real world it's taken by incoming freshmen. But it's such a good foundation for future studies in computer science.
Thanks for your reply and your recommendations. This helps a lot.
With regards to CS books: Any you can recommend in particular having the hobby web dev context in mind? Not a book, but a few weeks ago a friend recommended the CS50 course on edX. So this is definitely on my list.
- Take CS50
- Take Nand2Tetris
- Take Casey Muratori's upcoming course StarCode Galaxy.
- Get some inspiration from Jonathan Blow and Casey Muratori on YouTube, and start the rabbit hole there.
- Be prepared to question a lot of the dogma that you have already absorbed.
I think you know more than you think you do. Some random advice:
There is a lot to learn. One of the wisest coders I know told me to try to narrow my focus. (There's no way anyone ever learns everything about everything -- so just pick one language/project realm that you see has some long-term interest/potential for you, and be proud of that.) The advice they always give you is to learn one language really well, because that will make it easier to know what to look for later in your career when you move to another language.
Someone once told me: just code. Just start coding up things. Fun things; things you want to do, so you'll do a lot of them. Besides being good practice, along the way you can upload it to your GitHub repository, so you'll eventually have a body of code that you've written yourself.
One thing I wish I'd done more of: collaborate, maybe on a large project. You can find them on GitHub. This will get you reading other people's code, which is always a good practice on its own. (In the last few years there's now Twitch channels where people talk about their code, but you need to be reading the code too.) Just learning the dynamics of a coding project is helpful for employment.
Live people really de-mystify coding - and also help you stay focused. I found a study group for CS50 (which I was taking online), and that really helped me feel like I wasn't the only newbie, and kept me going. Harvard/EdX's CS50 was a terrific online class, by the way -- "challenging but do-able," as they say. I learned a ton of things about the programming world, but the best thing was it wasn't too easy, so I was really pumped about the things I ended up doing, and it gave me the thing I needed most: confidence.
Maybe the most important advice: if you can actually get involved in professional programming, anywhere, then that will get you doing it every day, and a lot of the rest of your learning will take care of itself. Volunteering for an open source project is a good step to take if you can't get someone to pay you to do it. (If you're not comfortable about your coding, they also need documentation -- which still gets you reading code and thinking about code...)
Stay positive. Stay healthy -- and get some exercise. Help others. These things really help with your mindset, and help make good things happen...
I think the way Harvard's CS50 course approaches this is really good. It used to be entirely in C but in more recent years they start with C for the first few weeks and then move on to Python and expose you to a bunch of other tools as well.
CS50 is on edx so you can actually submit assignments for grading and such. Definitely the place to go and definitely recommended; it's a fantastic introduction to CS and programming.
https://teachyourselfcs.com/ is also a good resource.
I highly recommend the CS50 course to get familiar with C:
https://www.youtube.com/playlist?list=PLhQjrBD2T381L3iZyDTxR...
Sure it doesn't get in details about the language but you get the essential and the videos are great.
there are additional sections where they broke off into smaller groups.
It is selling you into the world of computer science, a window into it. This could be further seen by its spin-off courses for different audiences.
It's an "intro" course. In fact, this intro course covers way more than what colleges in the US do for an intro course.
Nope, and why should they be?
David Malan answers this here: https://qr.ae/pNsCkQ
1. There’s a companion C book for the course 2. The labs go into much more detail compared to lectures 3. The psets can be Nintendo-hard; you’ll be doing devilish pointer stuff by week 3 or 4.
The happy-go-lucky, flashy tone of the course is completely misleading. It is a challenging course, so much so that it’s been the subject of numerous cheating scandals from students caving under the pressure over the years.
As for depth, this is a first intro to CS meant not only for CS majors but for people from other domains (Econ, humanities, hard sciences, what have you). The style is meant to cater to people who might not be a priori fascinated by flipping bits. Still quite a bit of people decide to concentrate on CS after taking the class, so it must be doing something right in that sense...
The course is not mandatory for CS concentrators, so if you already know your fundamentals you can jump right into CS51 (functional programming) or CS61 (intro to systems), which are outstanding courses but much more terse in style.
In comparison with teachyourselfcs OSSU looks lame, serious. Structured badly, tons of links & strange YouTube channels. TYCS has chapters and 2-3 best resources about, ideal for this case.
For beginners I highly recommend Harvard CS50, the best of the best course available for free and paid too.
I'm a PM turned programmer, I did both.
I started with Harvard's CS50 and web programming in Node independently, and I ended up with a masters in software engineering and can now push production-ready code (mostly in React/Node by choice, although studying university-level classes has exposed me to different paradigms and languages: C, Java, OCaml...)
I whole-heartedly recommend concurrently studying first principles and a couple of applied technologies. They serve different purposes but are ultimately connected in the big picture. University courses very rarely teach how to make real-life projects. Conversely, learning real-life technologies rarely shows you the theoretical principles that fuel them, at least not explicitly. React/Redux for example have really interesting ideas on managing state drawn from functional programming. To churn out React code, you certainly don't need an FP course or formally studying the pains of managing state in programs, but I found it to be immensely helpful. Same with many other areas: studying systems and networking will help you with many back-end technologies, compilers can help you understand many different programming languages, etc.
I don't think there's a program that teaches both, because it's probably impractical to design it. Simply pick one theoretical route like Teach Yourself CS and a couple of applied technologies, and work on them simultaneously.
Khan Academy has programming classes, including both AP courses. Also look at their Pixar in a Box classes. Free
EdX has a bunch of college level CS courses, including several verions of Harvard's CS50 courses. Start with Introduction to CS. Free to audit.
It might not be the most useful answer given the context of your question. But in my experience the thing that made the best courses stand out were the depth of understanding of the instructor and their basic didactic skills. Are they able to explain the concepts clearly to a novice student? Are they able to structure the course into a logical progression of topics?
To me, what I consider to be secondary aspects such as interactive quizzes or homework assignments never really made a difference. One thing I noticed that really did not work well for me was asking quiz questions in between that did not require understanding just memorization of what was just said 30 seconds ago. It's like you're checking if they're paying attention v.s. are grasping underlying concepts.
I would recommend you check out CS50 by David Malan (if you haven't already) as it's somewhat of a gold standard for MOOCs in my book.
Good luck with your MOOC! The world needs more of them, make sure you make them as publicly accessible as possible.
Can't edit my comment on mobile, so I'm adding relevant info here:
https://www.extension.harvard.edu/
It's not exactly cheap (tuition can cost ~50k$ for a bachelor's). Quality of tuition also varies, there's some fantastic courses and some less stellar ones. Still, I recommend taking a look if you are interested in completing your bachelor's/master's degree mostly online.
For a CS oriented degree, I'd definitely recommend the following courses:
CS50 https://cs50.harvard.edu
CS61 https://cs61.seas.harvard.edu
CS20 https://lewis.seas.harvard.edu/pages/csci-e-20
CS40 https://www.extension.harvard.edu/course-catalog/courses/com...
CS121 https://cs121.boazbarak.org/
CS124 http://sites.fas.harvard.edu/~libcs124/cs124/index.html
This is very good stuff. I'd also recommend CS50x, [1] the Intro to Computer Science from Harvard for those who need an intro before diving deeper, as it gives a solid grounding in most of these topics.
[1] https://www.edx.org/course/cs50s-introduction-to-computer-sc...
I'm surprised you didn't list CS50. That's one of the best intro to programming / CS courses around.
You can enroll for free at: https://www.edx.org/course/cs50s-introduction-to-computer-sc...
I never went to University and didn't take a lot of CS courses but since I create web development video courses I wanted to be able to reference other courses to folks who asked so I took CS50 a few years ago to vet it. It was a great intro course and I even learned a little bit of C in the process. David Malan (the head instructor) is also top notch.
Try getting her to do the CS50 intro course by Harvardx on Edx.org, it teaches computer science by making you actually figure out how to solve problems. It’s one of the most creativity sparking/pushing online courses I’ve seen.
It’s not easy, but it’s self paced and the environment they supply students with is extremely great.
Fair enough :)
My recommendation would be to check out CS50: https://www.edx.org/cs50
My comment was in regards to a young daughter asking how she could break into the start-up world. The author suggested that coding was a good idea.
The author went on to mention that learning in the span of a summer would help pick a good team member or even build a prototpe him/herself.
We know from both studies and personal experience, that tech interviews just don't work all that well. This is tech interviews done by professional programmers and managers. We don't know how to pick people who are good vs talk like they're good!
This is not anecdotal - it is well known via studies, done by top psychologists.
Given that - how would a summer coding bootcamp help pick a co-founder? It's certainly better than nothing. It is also not clear how much one would benefit from 3 months versus taking one of the many excellent online courses and working at your own pace, such as Harvard's CS50, freely available on youtube.
Regarding building your own prototype after 3 months of programming - I just want to throw my hands up in the air of this wishful thinking that 3 months is anywhere close to enough time. You will need someone who's tech savvy, and then you're right back to the same difficulties.
You can take CS50 and following or the MIT MOOCs on edx.org and learn more about CS in a few weeks than I did during my entire freshman year of the university of Aalborg.
Sure it’s introductory, but so was my freshman year.
I don’t really agree with the article though, I enjoyed philosophy and history as side tracks doing my entire schooling, and I use the creativity and insights I got from those a whole lot more than I ever use economics or math.
For those who would like to have a solid understanding of how Web works, I would definitely recommend David J. Malan's CS75 lecture 0. (the first lecture). He has a positive vibe and the pace is optimal, so you will really enjoy the lecture. I also would like to thank him and Harvard Uni. for making this available to everyone for free. I sure would not be able to afford studying there, but these lectures helped me a lot.
https://www.youtube.com/watch?v=8KuO4r5CHjM
I think it is important to understand how basics work before jumping into details. You will not enjoy the best tools available if you don't know how to use them either.
CS50 is great but many of the free courses on Udacity are superior. (Not all of them, but I would say more than half).
Also, Udacity is for learning self-driving cars, algorithmic trading, conv nets for object recognition and stuff you wouldn't get elsewhere.
I have spent a lot of time taking online courses. Here are my favorites.
CS50 (https://www.edx.org/course/cs50s-introduction-computer-scien...) - Best Intro to Computer Science
Nand2Tetris I and II (https://www.coursera.org/learn/build-a-computer) - Build a computer from logic gates up to a compiler, this is the best class I've ever taken.
Agile Development Using Ruby on Rails (https://www.edx.org/professional-certificate/agile-developme...) - Great introduction to web development and software engineering principles
I've also been reading some technical books. Would definitely recommend
Modern Operating Systems - Tanenbaum Designing Data-Intensive Applications - Kleppmann
I second this as well
I would do CS50 and doing FreeCodeCamp in parallel. This way he builds a light web foundation, and have a solid CS foundational base to work through other courses.
Other good courses are found through udemy, like Colt Steel. Another good one I recommend is watchandcode.com, for basic foundational programming principles
I'm glad to see this OP, as my post was initially going to be pointing you towards the support materials, eg.g Caesar: https://www.youtube.com/watch?v=ergRKv3DglI
I would suggest you have a golden opportunity here, tbh. You have identified an area of useful skills which you currently are lacking - and a source of info where to learn. That's good. More importantly than that, your fianceè is currently doing the course and is right at the start! If you sign up to CS50 now (it's free!), you have maybe 4-6 hours of lectures to catch up before you are at Ceasar yourself, and then you can work through this excellent course together!
You will learn lots, some of which may be very useful. As will your fianceè. And you'll both have a much easier and fun time having a partner to discuss the lectures and problem sets, helping each other out here and there, before having to reach out for assistance.
The point of studying data structures and algorithms that you may not use on a day-to-day basis is that they make you learn to think abstractly about problem solving. That is the whole point of getting an undergraduate degree in CS. I'm sorry that you have trouble with this stuff OP, it would be a good idea to do the cs50 course with your wife until you're comfortable with this stuff. I'm sure it will pay dividends in your future.
I've taken CS50 a while ago and I think it is a phenomenal introduction to CS/programming.
Starting off with a toy language, Scratch, to six weeks of C, followed by two full web projects (Python/JS). The instructors find a wonderful balance between theoretical concepts (compilers, binary, Big-O) and practical applications in different domains: a bit of crypto, a project about finance, usage of APIs, ...
The course is wonderful in showing what is out there and contrasts with beginner courses that hit people with a year of data structures & algorithms (e.g. MITx's 6.001x - also good but less "real world").
Recommending the course is my go to answer for the question "how can I learn to program?"
This is so awesome. I always wanted to know how to start with game development.
I took CS50 in 2013 and it was the best course that built my CS foundations.
The interviewer in my first job interview had asked me to explain Binary Search to a layman. Hehe.
Thanks David
This is great. CS50 (http://cs50.tv) is the best course I've taken on any topic, including all other university courses I attended physically. The course packs a ton of essential information into a very well organised learning path with clear and effective lectures and useful assignments. I'm stoked that there is another course by the same team now.
CS50 on EdX was a great intro course helping me to get into programming.
Agile Development Using Ruby on Rails (in two parts) on EdX was also great, primarily because they encouraged students to set up pair programming sessions over Google Hangouts. It's amazing how many ways there are to solve a problem, and live discussions in small groups over Hangouts were an outstanding resource to learn.
I am currently enjoying courses from the Applied Data Science with Python specialization on Coursera. I love how they are using Jupyter notebooks for assignments; it makes the problems feel realistic and at the same time very accessible.
You can just recreate a CS degree and build yourself a foundation from which you can build anything.
Before anything else, check out Coursera's Learning How to Learn course.
You can jump right into CS50 which will provide you with a very strong foundation.
If you wished to continue developing your C skills from CS50, you could work your way through K&R, Hanson's C Interfaces and Implementations (in conjunction or following working through material on algorithms and data structures), and learn lower level details by working your way through Bryant and O'Halloron's Computer Systems: A Programmer's Perspective.
You can learn proofs from Hammack's Book of Proof, freely available online. From there, you can learn algorithms and data structures from Stanford and/or Princeton's courses on Coursera.
The above would be the equivalent of a strong CS minor.
From there, you could dive into pretty much anything. The recommendations from https://teachyourselfcs.com/ are spot on. Between Coursera, edx, Stanford's Lagunita, and Udacity, you can learn pretty much everything. Be sure to check out Udacity's courses on debugging and testing, as well as anything Peter Norvig teaches. Lagunita will be helpful for CS theory, Computer Networking, Compilers, Databases, and Data Mining.
If you were to complete all of the courses I explicitly mentioned, you would have the equivalent of a CS major as long as you study discrete math (Rosen and Epps are the standard texts) and Operating Systems, too.
I recommend cs50x: https://www.edx.org/course/introduction-computer-science-har...
Top notch quality free course
Try CS50 :) It's Harvard's free online course. It'll take you from 0-1 really fast. 1 to 100 is experience from building stuff. Good luck!
There's a really great course from Harvard called CS50[1][2]. This course teaches C with training wheels on so to speak and later removes them. Would highly recommend taking it. It's also free!
1. https://cs50.harvard.edu
2. https://www.edx.org/course/introduction-computer-science-har...
Is this their first time programming? If yes, the approach to learning computer science is more important than the particular language used.
There's something to be said for David Malan's approach in Harvard's CS50 [0]. He and his team work very hard to make computer science exciting and get the students to have some results quickly. The production values are incredibly high. He takes the class through C and Python.
Coming from a very different approach, you have Matthias Felleisen at NorthEastern University and his How to Design Programs (HtDP) book [1]. Matthias has written extensively on the decisions behind HtDP [2][3]. HtDP uses teaching languages built into DrRacket (which was originally based on Scheme) to gradually introduce new concepts to students.
HtDP is based on the classic Structure and Interpretation of Computer Programs (SICP) from MIT [4], but it addresses some criticisms of SICP as an introductory text. Namely that SICP leans too heavily on domain knowledge outside of computer science.
The course webpage [5] for Fundamentals I from NorthEastern is not very useful for self-study. Instead check out the EdX course "How to Code: Simple Data and Complex Data" [6] by Gregor Kiczales at University of British Columbia.
Unfortunately the course has been branded as "how to code" for marketing reasons, but overlook that because it is a very solid offering that is directly based on HtDP. In fact, Gregor's page outlining and summarizing the HtDP design recipes for How to Design Functions, How to Design Data, and How to Design Worlds, is significantly clearer and easier to comprehend than the original explanation from the book.
The only limitation with the EdX How to Code course is that for some reason they are only "open" for enrollment once pear year. Fortunately the first course is currently open at the moment. Obviously don't bother with the verified certificate/MicroMasters stuff, the content is the only important thing.
Also of note if you're still looking for Python based, is the newish Berkeley CS61A course taught by John DeNero [7]. It is the most all-in-one option for self-learners as the book, the course assignments, and the videos, are all freely available online, and well organized. Similar to HtDP, DeNero's CS61A is also based on Structure and Interpretation of Computer Programs. I have not yet gone through this course so I can't speak to the content first-hand. Of historical note, the course was taught by Brian Harvey using SICP and Scheme up until he retired a few years ago. Brian wrote his thoughts on the change and there was a discussion here on HN [8].
DeNero has written his own book called Composing Programs [9]. Additionally the couse uses Phillip Guo's pythontutor.com for visualizing assignments.
All in all I would say if you are good at self-teaching and don't mind the lack of videos or course materials, check out SiCP. Otherwise, if high production values are appealing then check out CS50. And if you want an all-in-one package that has some of the same solid foundation as SiCP, then go for Brian Harvey's CS61A.
Hope this is useful to someone.
[0] CS50 at Harvard: https://cs50.harvard.edu
[1] How to Design Programs book: http://www.ccs.neu.edu/home/matthias/HtDP2e/
[2] Essay by Matthias on The Philosophy of HtDP: http://www.ccs.neu.edu/home/matthias/OnHtDP/turing_is_useles...
[3] Essay by Matthias on Growing a Programmer: http://www.ccs.neu.edu/home/matthias/Thoughts/Growing_a_Prog...
[4] The Structure and Interpretation of the Computer Science Curriculum: http://www.ccs.neu.edu/racket/pubs/jfp2004-fffk.pdf
[5] Fundamentals I at NorthEastern: https://course.ccs.neu.edu/cs2500/
[6] EdX course based on How to Design Programs: https://www.edx.org/micromasters/software-development
[7] John DeNero's CS61A at Berkeley in Python: http://www-inst.eecs.berkeley.edu/~cs61a/fa16/
[8] Brian Harvey: Why SICP matters https://news.ycombinator.com/item?id=4784827
[9] John DeNero's Composing Programs Book: http://composingprograms.com
Harvard is not on a quarter system, Fall and Spring semesters are about 15 weeks long. For students who already have some programming experience, there are many opportunities to challenge themselves in the problem sets and especially the final project.
As for the t-shirt, CS50 has one of the largest enrollments and Malan puts a lot of effort into making it fun, engaging, encouraging, and fostering a sense of community. Out of such a large enrollment at a liberal arts college, of course many will not take other CS course, but the course has definitely contributed to an increase in the number of students declaring CS as their major (what Harvard calls a "concentration").
[disclosure: GT CS alum]
This is something I wanted to highlight from your post. I don't think this is surprising, nor do I think it is reasonable to state that a course (or a degree program) is poor quality because it didn't meet the standards of Ng's ML course. That is an exceedingly high bar.
Its something I noticed, because I am a recent grad, so while I was in my mid-level courses, and had recently taken Tech's intro CS course, I was able to watch (Harvard's) CS50 and other courses. But on the other hand, I've seen some very bad online courses. The successful and large online courses are successful and large specifically because they are head and shoulders better than the rest. And there are a lot of decent online courses, so to measure against what are some of the absolute best online courses is to measure against courses that have more resources, more planning, and more feedback than most.
(as an aside, they also have more incentive to be good, but that's a bit tangential to the point that they also have more opportunity to be good).
You type in "Machine Learning" on coursera and you get over 1000 results (not all of which are relevant, but assuming even 10% are), its little wonder that one or two are going to be better than the even the best courses that you'll take during a bachelors or masters, because Coursera offers more Machine Learning courses than most people will take in their Bachelors or Masters.
Combine that with these courses coming prefiltered (you've heard of the Stanford Course, but what about "Applied Text Mining in Python" from UMichigan, which for all I know might be great, but it doesn't come with the hundreds of recommendations that the Ng course does, so I don't know that it will be great) and you have a really great recipe for a bias against the in person courses.
I can't say enough great things about the lectures on cs50.tv & cs75.tv. The prof (David Malan) is engaging, all the materials are available (homework, TA sessions, notes, slides, videos... everything). cs50 is particularly great for those who don't have a CS background but are interested in understanding CS principles from the ground up (vs trying to learn JS by doing a few tutorials).
The Harvard CS50 course on edx does a pretty good job of teaching C, esp if you do the recommended reading/psets of "hacker level" which is from the book Hacker's Delight 2.
There is some initial magic, where they have you import cs50.h which is full of black box functions in the beginning but other than that it's a good example of teaching beginner C.
Sure, there is of course the CS50 introduction to computer science (Best MOOC EVER), also Sedgewick lectures on algorithms and data structures, control of mobile robots on coursera and the software engineering interview on coursera, beside that most courses on Udacity are awesome.
The Harvard computer sci course really helped me out. I didn't take the class, but put all classes on my iPod. I would listen to lectures while exercising at night.
This course really helped me understand the ever changing computer lingo. I probally should have done the lessons.
Once you get used to the vocabulary, and all the acronyms--it's all starts to fall into place.
If you do not have a math background , I suggest you start with Logarithmic analysis and properties of logarithms ( many tutorials in youtube ), then attend the Coursera algorithm courses and some selected courses on CS50's youtube channel.
Check out this class https://www.edx.org/course/introduction-computer-science-har.... It might be below your skill level, but if it's not go through it. It's very interactive and you'll enjoy learning the course material.
Princeton's CS50 course on edx.org covers C and recommends other good books like Hacker's Delight.
This is also a good presentation for safer C programs https://www.bsdcan.org/2010/schedule/events/172.en.html
Harvard students are buying into the idea that knowledge of the basics of computer science and programming is useful in a wide variety of fields. Malan's CS50 has also definitely contributed to a significant increase in the number of undergrads choosing Computer Science as their concentration (what Harvard calls majors). Other concentrations offered within Harvard's School of Engineering and Applied Sciences have also seen increased enrollment and there's been an increase in the quantity and proportion of women in SEAS concentrations. But being a CS concentrator doesn't necessarily mean they'll seek "careers as devs," CS is not just "how to program" and Harvard (College) not a trade school.
I took it in 2009 through Harvard's Extension School (CSCI E-50 is now its course number through that School); it was a great class and from what I've seen it has only gotten better since then.
I have been learning by myself for the past year, and if I may, let me share a few thoughts gathered along the way:
- This will never be “2 months, and I'll build next Facebook”. Consider that this is a field of knowledge that is exponentially evolving every year, and you will need years before you are comfortable with it. Learning code or computer science is a long term decision, and you should go for it if you really see yourself doing it as a hobby. If you are not up for it, better learn web design or something that relies less on programming;
- Following my previous point, start by learning the basics of computer science. You will not understand the abstract concepts, or know what you are doing before you have the theory basis behind it – You will get unmotivated faster. How fun is it to play a guitar without knowing music theory? There are dozens of ways to learn CS, and I personally find the CS50x class from EdX the best source to start;
- If you don't like math, well.. start liking it! Part of the enjoyment of programming is the satisfaction you get from solving problems. Read books about algorithms and/or take the online classes in Coursera or Udacity. Also make Project Euler as a daily visit, and try to solve several challenges per week;
- Again, start small, and go small every step. Make a structured plan of what you want to learn, such as "Monday I study Python, Tuesday for Algorithms, Wednesday for CS..". Take advantage of dozens of courses available in Coursera, Udacidy and EdX.
- Part of learning anything is making yourself motivated along the way. You should study at least 10h per week (I work full-time and I never study less than that) and make your successes visible, such as placing a post-it with every online course you completed in a wall;
Btw, I studied Economics for 5 years and I am 24. Even if you are older, never fall in the excuse that you are too old or it's too late. That's your "I am afraid to fail" thoughts. You don't have any pressure, no one is asking you to develop a whole new Microsoft.
The difference between CS50 and others is that CS50 gives you a similar experience of taking a class in flesh and blood, while offering all the flexibility of online education; in other courses, it feels like the professors are held at gun point and are asked to teach the material in 10-15 mins intervals.
It is awkward to both the teacher and the student, because teaching with a camera up so close to one's face is so, and just because Salman Khan (Khan Academy) did so, doesn't mean every Udacity, edx, and Coursera should. Remember that in the beginning, Salman Khan intended those videos for his cousins.
Just look at SEE[1], to see how effective a traditional class room style teaching can be. SICP[2], SEE and CS50 are hands down the best lectures I ever had the pleasure to learn from.
[1] http://see.stanford.edu/see/courses.aspx
[2] http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussma...
Cs50 and cs75 by prof David malan are great courses. The prof is really cool
I'm signed up for CS50x and 6.00x (Introduction to Computer Science).
6.00x has started and is great. It's taught in python, which I've had some exposure to before (having done the exercises in Learn Python The Hard Way). So far, I'm finding edX's delivery to be superior to Coursera's. I'm looking forward to starting CS50x.
My housemate started the 6.002x course last session, and said it was great (but did not have the time available to finish it).
CS50 doesn't just do C - it's more of a 'survey' through the CS landscape. Students start off with Scratch before diving into C, and take detours into PHP, JavaScript, as well as HTML.
It's a very popular course, and the majority of students are taking it as an elective. It doesn't go into particular depth with regards to algorithms or data structures, so if you're looking to learn more than just the basics (binary search, trees, etc) it probably isn't for you. It has a good reputation on-campus, and is one of the most popular classes. It's also already got an established distance education component, which is one reason why it's being offered as one of the first edX courses.
I have only taken CS50, so I wouldn't want to comment on MIT's offering, but hopefully that will help you out! If anyone had any questions about the course I can try and answer them - the course hasn't changed substantially since I took it.
You first need some CS background ('CS', for lack of a better term. I don't mean Automata, just something deeper than, say, lynda.com!). Check out Harvard CS50 (cs50.tv), MIT OCW (ocw.mit.edu), see.stanford.edu, udacity, coursera, academicearth.org and Khan Academy (and in a few months, http://edxonline.org/). Start at the basic courses (CS50 is the best starting point).
That's the best thing you can do. Sure, you can start coding right now but you don't know what you're missing. You have the luxury of not having to worry about money in the sort term, so make the most out of it and educate yourself. You'll get nowhere if you don't know the fundamentals of how computers/web/operating systems/... work.
I've been hiring devs at multiple companies.
It seems you are misunderstanding me again, If someone puts something on resume. It's a signalling they think it's important. And in order asses candidates on their strengths, we use the resume.
If you are worried that they are missing the information from the course, I gave how it's actually great tool to asses candidate.
You also thinking that can outsource in some sense if developer will workout at the work place you are hiring for. This is a mistake.
Instead of making blanket statements, and dismissing people on frivolous things. Like going to ivy league universities or having certificate.
It's better to test the person, to get the know more about the strengths and weaknesses.
A resume is just window into the candidate thinking process.
-edit It's clear from your comments you're not aware of the great work at Harvard with CS50 course.
True, but incomplete.
Filtering just EE/CS, there are 30 or 35 courses with full video lectures on ocw.mit.edu (which are all hosted on Youtube AFAIK). OLL seems to have four.
Sometimes lectures are linked on a class website e.g. the modern Underactuated Robotics lectures: https://underactuated.mit.edu/
If you're going down the rabbit hole, search "site:https://video.odl.mit.edu/collections/" or videolectures.net or archive.org, or you can search MIT's student pages for class assignments. Honestly, this is the only way to find substantial info on some entire fields e.g. Thermal-Fluids Engineering (2.005 and 2.006) ... or Course 2, in general.
It helps to learn a specific school's curriculum (Stanford and Berkeley also have great resources) and target specific courses. You won't find lectures such as MIT's Inference course by looking on Youtube and OCW alone.
[Not just replying to parent comment] If you plan to teach, sample some lectures by Patrick Winston, Anant Agarwal, Donald Sadoway, robert ghrist, and/or David Malan. The modern approach to engineering instruction seems to be 5 to 15 minute snippets posted online, but these five are among my favorite when it comes to full lectures.
Harvard divides its credentials into "tiers", if you will. There are students who go through the competitive admissions process, and there's the Extension School which is basically open enrollment, even if you want to take courses for-credit. You only have to apply if you want to pursue a full Bachelors or Masters, and even then you're given the chance to prove yourself by doing good in a handful of courses.
I personally never thought I could experience Harvard before I found out that CS50 (and tons of other CS courses) could be taken for-credit and even lead to a degree.
Harvard also has online-only, non-credit programs like Harvard Business Online (formerly HBX) and HMX (Medical courses).
Harvard can, and does, strengthen its brand by opening itself to the public. There's a huge spectrum between being a totally-closed institution and being completely open enrollment.
Scratch is a good introduction to programming concepts, regardless of age. How fortunate for your sixth grader; if such courses were common in earlier grades, a course like this could start with more challenging material.
This is not an EE class, it's an intro CS class, one that's not for those with prior knowledge who know they'll choose CS as a major. This kind of course can get new people interested, those who didn't think they'd like or could do CS. Even if they don't major in it, by taking this one course, they know more about an important part of what makes our world work.
CS50 at Harvard College [0] is also a very large, popular course that gets more people interested in CS as a major but is also useful to those who don't take another class. It also starts with Scratch though it switches to other languages very quickly and appears more challenging overall than this course.
[0] https://cs50.harvard.edu
I was mostly self-taught when I entered the industry. Years later, I now work for one of the bigger companies in Silicon Valley.
I want to preface this by saying that you do not need to be a CS expert to get started in software engineering. Do not buy into the hype. Sure, you'll need to know a few basics, but there are plenty of successful engineers out there who majored in quantitative / logical fields, who definitely do not know the equivalent of a CS degree's curriculum, and they're doing just fine. Indeed, there are a few successful engineers who didn't even go to college.
So the deep CS background is optional, but the following is not: are you the kind of person who enjoys and is good at solving puzzles? Will you persist after hours of bashing your head against the wall? You must have this character trait to succeed as a software engineer.
Assuming you have it, you should start with web development in Python / Django:
- The ecosystem is mature and beginner-friendly, meaning you can dip your toes in the water by using well-built, well-documented libraries that the community has put together over thousands of man-hours.
- The results of your programming will be concrete -- you can interact with the product, and find bugs, as a layperson.
- You can program something basic without any CS training. The libraries you will use to build your web apps will be leveraging plenty of CS concepts, but these concepts will be hidden away from you.
To learn Python syntax, there are a lot of different ways a beginner can go. I would recommend Code Combat for a complete newbie: https://codecombat.com/.
Once you have the basics of Python down, look for tutorials on the internet for building web apps in Django. Build simple web apps until you:
- Know how to think in Python.
- Understand the basics of relational databases and SQL.
- Understand the basics of HTTP / HTML / CSS.
Then, read a book on code craftsmanship, like "Clean Code," and reflect on how ugly the code is in your first few web apps. In the professional world, you'll be expected to adhere to standards of cleanliness and code organization, so refactor at least one of your web apps using the principles that you've learned from the book.
Only after you've determined that you can handle the above, you can start exploring the basics of CS. Harvard's CS50 is a lovely course, but there are more practical courses, for your purposes, on Coursera - namely Algorithms courses. I would recommend Princeton's Algorithms courses by Wayne and Sedgewick. Their courses are a bit less theoretical than the equivalent Coursera courses from Stanford, which is a good thing for someone in your position. I remember Sedgewick's instruction being very clear, yet rigorous. I believe the course requires you to learn basic Java, but given the programming experience you've built up to this point, you should be ready to dip your toes into compiled languages.
---
This entire process can take as little as a few months depending on how sharp and motivated you are, and it's only a first step. At this point, you can continue your CS education if you're really interested in the field. But if you're looking to land a job ASAP, you're better off building up your portfolio, and making sure you really understand the basics of data structures and algorithms.
Furthermore, you should network at coding meetups. Look for a potential manager who is willing to work with a relative newbie such as yourself. I was lucky enough to find one early in my career, and it helped me immensely.
Harvard Extension School (HES) is an open-enrollment school at Harvard that lets you take individual courses, as well as pursue certificates and undergraduate and graduate degrees.
My experience with HES has been very positive. I've taken 2 courses there so far: CS50 and Calculus 1. I took both as a remote student. This is nice if you're busy with other things like family and work, because you can watch the materials when you're free, alert, and most ready to learn.
I intend to pursue the Masters in Software Engineering, but I'm taking things one step at a time.
Undergrad courses in most subjects are currently $1,550, while graduate courses are $2,700. I believe only Computer Science and Digital Media courses are priced at the graduate level even if you take them for undergraduate credit.
You actually get a Harvard transcript, and if you earn a degree, you get to participate in the annual commencement in May. To get a degree, you have to complete at least one course by going in-person to Cambridge (more for some degrees).
I don't have any first-hand information on job prospects, but I would imagine the more you can make it to Cambridge, the more classmates and professors you can network with.
For more information, please check out the HES website:
https://www.extension.harvard.edu/
"There's no "intro to programming" course at Harvard—this is it [...] I think CS50 is great for the first two-thirds, but completely lacking for the last third. There's just too much material in too little time."
There is actually a course for the last third, it's CS1. I used to Head TF it: like CS50 it counts for Gen Ed credit, but it is designed primarily for that last third you talk about that may find CS50 too fast paced. It uses Java rather than C. No plans to take it to edX though (with both MIT and Harvard's Intro CS classes the space is crowded enough!).
CS1 was originally designed pre-Malan when CS50 was basically only taken by those majoring in CS, and it is somewhat less popular now as many students want to take CS50 for the 'experience'. The massive success of CS50 at Harvard (now one of the top three most popular classes across the entire undergraduate catalog) is both a blessing and a curse: it's great that more students are interested in learning to program, but it's also meant the department is having to rethink what it offers post-CS50.
Harvard's CS50x has a very loose structure. It's open until April 23 and one can complete the exercises, problem sets, lectures on his own time.
MIT's 6.00x has a strict weekly structure.
Udacity's courses have all eliminated the schedule and are now always-open, self-paced.
Most of Coursera's courses are structured.
If you want your friends to actually become programmers I'd recommend that you push both an Intro course as well as codeacademy for language practice. Codeacademy by itself isn't going to get you anywhere. The tutorials don't provide a solid enough foundation to actually implement anything meaningful. As a beginner programmer I went through every Python tutorial in < 30 hours. I used them as Python language practice, which worked well as a supplement to the core Intro courses. Both Udacity and 6.00x use python so they work well with codeacademy's python tutorials.
I want to address the following quote from the article: "During the fall term, the Stanford students taking CS221 preferred watching the KnowLabs videos. Thrun says this improved their performance."
I took the official Stanford offering this past fall. I am not a Stanford student (anymore), but I enrolled as part of SCPD. As a result of the official course starting two weeks earlier than the public offering, the course staff usually didn't post up the YouTube videos in time for me to do the assignments, so I relied primarily on the lectures. (Actually, as a distance student, I relied upon the lecture recordings.)
I eventually did catch up on the YouTube videos, and I can attest that they are indeed better. However, they produced superior results mainly because they covered more material. For example, in one case, I did over two pages of error-prone calculations because I didn't know the mathematical shortcut that was taught in the YouTube videos. And I gasped as the professors spelled out in detail how to do problems that I had to think hard about how to do. Indeed, one problem that I was pleasantly challenged by on the midterm was simply not covered in lecture; in contrast, the professors explained it tutorial-style on YouTube.
Using the terminology of the course, I would say that the YouTube videos "overfitted" to the homework and exam problems -- so of course the students preferred the videos!
I do suspect that short, interactive, and extremely polished videos will be proven to be better in most cases, but unfortunately this experiment cannot be used as a basis for forming that conclusion. Clearly, the lectures were handicapped.
And to be honest, I am skeptical of how videos would perform against some of the tremendously excellent lectures out there, such as the introductory computer science lectures that are posted at Stanford Engineering Everywhere.
With all this said, I had a great deal of fun taking this course. I applaud the course staff for doing a stellar job, and I am grateful to be part of what I am certain will be a historical experiment.