CS50's Introduction to Computer Science is a free online course based on one of the most popular on-campus courses at Harvard University. In this course, you can learn about core computer science concepts, such as:
- Algorithms - binary search, bubble sort, merge sort etc.
- Data structures - linked lists, hash tables, etc.
- Memory - stack and heap
The languages used are C, Python, SQL, plus some others based on what you choose for the final track (UPDATE: It seems like they got rid of tracks for the 2021 version). There are a myriad of free CS courses available online, but this is the most enjoyable and engaging one I've found so far.
I wrote "self-taught developer" in the title because I figured that those with no formal CS education are less likely to have had a chance to be exposed to these topics in depth. But of course, I would recommend it to anyone who's interested in these topics.
Here are three points that I love about this course, and two potential cons.
Pros
- Their philosophy
- The lectures are a joy to watch
- The assignments are creative
(Potential) Cons
- May not be useful for your day-to-day work
- You don't get to see staff-implemented solutions to assignments
Pros
1. Their philosophy
This course is geared towards people of all programming levels. They tell you in the first week:
what ultimately matters in this course is not so much where you end up relative to your classmates but where you end up relative to yourself when you began.
Just for reference, I have 1 year of professional experience, though none in C or Python. Some of the assignments were still very tough for me, and one week's worth of coursework would take me about 10 hours to complete, depending on the material (As a Ruby dev, the Python stuff was a lot more intuitive than C!).
The course does a great job of being beginner-friendly and challenging at the same time, because the lectures walk you through the content well but the assignments require you to really think and do more research. Also, often they give you a choice of two assignments, depending on whether you're "more comfortable" or "less comfortable".
2. The lectures are a joy to watch
In addition to being informative, Professor David Malan's lectures are well-paced, animated, and creative. Watch any of them, and you'll probably agree (available on Youtube too).
3. The assignments are creative
Rather than boring tasks like "iterate over this array in C", you get to implement programs like photo filters, spell checkers, voting systems, and Hogwarts student databases, using concepts that you learned along the way.
Another thing I like is their testing system called Check50, which gives you instant feedback when you submit your code. It's gratifying when you finally get all the tests to return a green smiley face :)
(Potential) Cons
1. May not be useful for your day-to-day work
For better or for worse, this is not a crash course. If you want to learn a specific topic quickly, like React for example, there are better tutorials online (complete digression, but I highly recommend Scrimba for learning front-end languages/frameworks including React).
That being said, I think learning these core concepts of computer science will be beneficial to any developer in some way.
For example, I'd been using Ruby hashes (dictionaries) for a long time, and I knew that finding a value from a hash by its key was much faster than finding a value from an array. But before I took this course, I didn't understand how hashes were implemented under the hood. Learning about hash tables and actually implementing one allowed me to also understand Ruby hashes better.
2. You don't get to see staff-implemented solutions to assignments
As I mentioned, when you submit an assignment online, your code gets tested via a system called Check50. You don't get to see the solution that the staff had in mind or do a side-by-side comparison with yours.
This wasn't always a problem and I understand their reasons, but there was one particular occasion when I wished I could see staff-implemented solutions: when I was writing SQL queries. My queries worked, and passed the Check50 tests, but there was no way to tell if they could've been optimized further. Seeing staff-implemented answers would've helped there.
If this course sounds interesting to you, I highly recommend that you check it out on edX. And if you do decide to take it, best of luck to you.
I'm also still enrolled, about to start the iOS track. Wish me luck!
Update - 2020-12-28
The final project took me some time, but I've completed the course :)
Top comments (34)
Hi Risa! I'm taking the same course and using the notes you took it from the billboard in one of the Doug's videos. I realized that your name is japanese, and I googled it. I started to study japanese two and a half years ago, and I truly love the language. My level is N4 now... I'm not as young as I was, but my head still works. I finally decided to change my career options this year because I'm not having enough work as a music producer and audio engineering right now, everything is close because of the pandemia. I'm taking a certificate Google Automation with Python course as well, but it does not compare with this one. I would like to work in Japan for a short period someday and improve my language skills. Or maybe, do something related with Japan, some collaboration or freelance remote job. I wish to establish some kind of connection there, and travel once in a while. I don't know if it's possible to do for a guy in his 30's with almost no experience in developing, that's why I'm using the entire day to study. I have a lot of experience in music, but I think that's not valuable right now.
Well, that's my story, I told it because I truly loved your blog and I feel that your thoughts are similar to mine. ありがとうございました!Saludos desde Argentina!
Hi Lauutt, thanks for the comment! I'm glad people find that Youtube comment useful - I found myself pausing to take notes while watching, so I decided to just post a comment there for everyone's benefit :)
Software engineers are currently in very high demand in Japan, though having professional experience and/or Japanese skills would give you more options. Some companies don't require Japanese proficiency though! Japan Dev is a website that lists such companies, so it might be worth checking out if you ever become interested in more long-term job opportunities in Japan: japan-dev.com/
Gracias y buena suerte!
You may also check out EJ - (EmploymentJapan.com). Especially if you are a foreigner curious about Japan, you may find a lot of resources about Japan besides IT.
Good Post, @risafj, and Best of Luch for the iOS track :)
I also subscribe for this course from edx, but i have some confusion?
Like now I'm learning java, and i complete array and string yesterday. So if i follow this course alongside my java course ( i learn from YouTube). Can i do that? There is any burden on me, and like I'm on java,Will this course help me in my Java learning phase?????
I'm sorry, I'm having trouble understanding your situation. I'm guessing that you're learning Java from Youtube videos, and you're wondering if you should take CS50 at the same time (Since CS50 doesn’t use Java)?
I think it depends on your goal - if you want to focus on Java for now, learning C at the same time might be confusing for you. But CS50 isn't really about learning C, it's about learning the core concepts of computer science through C. So in that sense, as far as you don't have trouble learning the different syntax, I think it's worth trying.
I hope this answers your question.
I think i should follow this course but avoid c, just focus on core concept of computer science. By the way thanks.
I don't know how viable that will be, because you'll have to write C yourself in the problem sets 😕I guess it won't be a big problem if you intend to skip the problem sets and just watch the lectures.
I recommend doing the problem sets too if possible though, because they give you a better understanding of the material. Perhaps you can give them a try? Good luck either way!
Thanks for your advice. I'll do it, and let's see what it's take from me?
Thanks Risa, for the informational introduction to this comprehensive course!
I was thinking about looking after some solid foundations to build on, as I just started our learning basic web development and I can't see through my way with all the information mixed up in my head I follow all over the web, for sure, CS is a very complex topic.
As someone who only has some college background in humanities and half of my life worked in a totally unrelated field (pun intended ;) ), it's especially challenging to me.
Thanks for this handy article and am glad to see you got your nice little paper personally from Prof. Malan :))
Hope you got along well, either you decided to continue on with it's next track or could simply used up the knowledge this guy provided you on his entertaining way.
Wish you all the best!
And me too, haha
I will try to read your other articles as much I can follow the content in them.
Adam
Hi Adam, thanks for your comment!
I totally feel you! I have a background in humanities as well (though unlike you, I don't have experience working in a literal field), so learning CS was pretty daunting.
Hope you enjoy the course as much as I did! Best of luck 🤞
Hey Risa!
May I ask about how did you get in the position you are at now coming from also from a different background? You are self-learnr or perhaps did some additional school while working something else? How long it took to get employed, I am just curious :)
Thanks for the quick reply for a year old post :)
Sure! I was a self-learner and didn't go to a bootcamp or coding school. I was very lucky because my partner (who is an engineer) basically mentored my learning journey. I had a different full-time job, so I spent my weekends learning programming for about 5-6 months before applying for jobs. The job-hunting process wasn't too bad - probably helped that engineers are in very high demand in Japan, and that I had a few projects (Github repos) that I could showcase to companies.
Hope this answers your question somewhat :)
Hi Risa,
Thanks for your detailed write-up. I am thinking about starting this course. But For a non CS background like me, how is this effective and I mainly focus on learning python. Do you think it will be great for me? Also is there any suggestion for me to learn python more effective way?
Glad you enjoyed the post!
As I wrote in the article, I think CS50x is especially helpful to people with no CS background and little exposure to CS concepts. That being said, I suggest looking at this year's course content and seeing for yourself if it interests you: cs50.harvard.edu/x/2021/
I don't write Python professionally so I have no idea. I'm sure that if you go to the #python tag on dev.to, there are articles that talk about learning resources for Python.
Thanks, Risa! Really appreciate your help.
The awesome community at reddit.com/r/cs50 is as good as it can get if you want your code to be reviewed. Official staff members (Professor Malan included) drops in the comments once in a while as well.
That’s so true! Like I mentioned, there were some SQL queries that I suspect could be optimised further. I’ll go consult with the Reddit community later. Thanks :)
Hi,
Congratulations for your post, one month ago I was subscribe for this course in Edx. But unfortunatly my job and how English isn't my native language that results in me to shut down this project, when I read your post entusiasm me for try again.
Please do you think the language it's a limit if you are not a native speaker? I think that because for me it's complicate the videos.
Thank you so much.
Hi, thanks for reading the post!
I feel you - enrolling in this course while having a full-time job is not easy. I used to spend nearly a month doing one week's worth of coursework, since I only have time on weekends. Because of the whole self-isolation situation, I've had more time recently 😅
As for the language aspect, I think it really depends on how comfortable you are listening to English lectures. I don't know if you're aware, but the videos have closed captions (subtitles) which may help if you're having trouble catching what they're saying.
Best of luck if you decide to give it another try!
This is really interesting. A friend of mine and I are considering to join microverse.org
The thing is I am self-taught, I have a lot of experience with side-projects but have always acted as a UI designer or PM / head of PM professionally.
Microverse's program is really, really long. I am wondering what's better for a self-taught person.
I basically just want to learn about data structures & algorithms, I know most of frameworks and a lot of programming principles already but I want to take it to the next level to become hireable as a frontend designer in the future.
Thoughts?
I'd never heard of Microverse, and my opinion is based on the quick look I had of their website, so please take this with a grain of salt :)
My short answer is, I think it depends on what you want. You wrote
but also
so I'm not sure.
Microverse looks like it's very career-oriented, the ultimate goal being to find you a job opportunity as a dev. The time commitment required also looks intense, as you wrote.
While I think that CS50 is beneficial for devs, I'm doubtful that taking CS50 alone will train you enough for a full-time job. It's an introductory-level college course after all - it's not meant to. Plus, the material is mostly related to computer science, and I don't know how much relevance it has to designer jobs (since I'm not a designer).
But if your main goal is to learn about data structures and algorithms, I'd suggest taking a look at the lecture video and materials for Week 3 of CS50, which is where they cover algorithms. Unless you've learned C before, some parts may be difficult to understand, but you'll be able to get a feel for what the lectures are like. If you like it, I suggest giving it a try! It's free after all :)
cs50.harvard.edu/x/2020/weeks/3/
Btw, my original reason for enrolling in CS50 was to learn about algorithms too. When I started, I was considering only doing the course until that point and then dropping it. But I enjoyed it so much that I decided I wanted to do the whole thing.
Thank you for introducing great lectures.
It'll be very useful for beginners.
I've been working a programmer for many years, it is also interesting to me.
Professor David J. Malan's lecture is very funny!
Thank you for the comment! I completely agree, the lectures were phenomenally good.
I also recommend them even tho I studied computer science
Good to know! :)