Courses

We offer many courses. For each, we offer verified certificates for a fee and a free certificate. Verified certificates involve a verification process through edX and, therefore, may be regarded by others as more authentic. Free certificates are issued using a unique URL.

CS50x is our flagship course. This course teaches students how to think algorithmically and solve problems efficiently. Topics include abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web programming. Languages include C, Python, and SQL, plus HTML, CSS, and JavaScript.

  • The following may be considered “continuation courses”. These courses have CS50x or similar coursework as a prerequisite:
    • CS50 AI is a follow-up to CS50x. The course explores the concepts and algorithms at the foundation of modern artificial intelligence, diving into the ideas that give rise to technologies like game-playing engines, handwriting recognition, and machine translation. Through hands-on projects, students gain exposure to the theory behind graph search algorithms, classification, optimization, reinforcement learning, and other topics in artificial intelligence and machine learning as they incorporate them into their own Python programs. By the course’s end, students emerge with experience in libraries for machine learning as well as knowledge of artificial intelligence principles that enable them to design intelligent systems of their own.
    • CS50 Web picks up where CS50x leaves off, diving more deeply into the design and implementation of web apps with Python, JavaScript, and SQL using frameworks like Django, React, and Bootstrap. Topics include database design, scalability, security, and user experience. Through hands-on projects, students learn to write and use APIs, create interactive UIs, and leverage cloud services like GitHub and Heroku. By the course’s end, students emerge with knowledge and experience in principles, languages, and tools that empower them to design and deploy applications on the Internet.
  • The following programming courses are more orthogonal to CS50x. They may be taken before or after CS50x, though also will conceptually interact with that course in various ways:
    • CS50 Python is an introduction to programming using a language called Python. Learn how to read and write code as well as how to test and “debug” it. This course is designed for students with or without prior programming experience who’d like to learn Python specifically. Learn about functions, arguments, and return values (oh my!); variables and types; conditionals and Boolean expressions; and loops. Learn how to handle exceptions, find and fix bugs, and write unit tests; use third-party libraries; validate and extract data with regular expressions; model real-world entities with classes, objects, methods, and properties; and read and write files. Hands-on opportunities for lots of practice. Exercises inspired by real-world programming problems. No software is required except for a web browser, or you can write code on your own PC or Mac. Whereas CS50x itself focuses on computer science more generally, as well as programming with C, Python, SQL, and JavaScript, this course, aka CS50 Python, is entirely focused on programming with Python. You can take CS50 Python before CS50x, during CS50x, or after CS50x. But for an introduction to computer science itself, you should still take CS50x!
    • CS50 R is an introduction to programming using a language called R, a popular language for statistical computing and graphics in data science and other domains. Learn to use RStudio, a popular integrated development environment (IDE). Learn to represent real-world data with vectors, matrices, arrays, lists, and data frames. Filter data with conditions, via which you can analyze subsets of data. Apply functions and loops, via which you can manipulate and summarize data sets. Write functions to modularize code and raise exceptions when something goes wrong. Tidy data with R’s tidyverse and create colorful visualizations with R’s grammar of graphics. By course’s end, learn to package, test, and share R code for others to use. Assignments inspired by real-world data sets.
    • CS50 SQL is an introduction to databases using a language called SQL. Learn how to create, read, update, and delete data with relational databases, which store data in rows and columns. Learn how to model real-world entities and relationships among them using tables with appropriate types, triggers, and constraints. Learn how to normalize data to eliminate redundancies and reduce the potential for errors. Learn how to join tables together using primary and foreign keys. Learn how to automate searches with views and expedite searches with indexes. Learn how to connect SQL with other languages like Python and Java. The course begins with SQLite for portability’s sake and ends with introductions to PostgreSQL and MySQL for scalability’s sake as well. Assignments inspired by real-world datasets. Whereas CS50x itself focuses on computer science more generally, as well as programming with C, Python, SQL, and JavaScript, this course, aka CS50 SQL, is entirely focused on SQL. You can take CS50 SQL before CS50x, during CS50x, or after CS50x. But for an introduction to computer science itself, you should still take CS50x!
  • These courses are geared toward professionals in certain fields, and others who do not want to jump into text-based programming right away, focusing almost entirely on written assignments and simplified programming only:
    • CS50 Business is a variant of CS50x designed especially for business professionals. Whereas CS50x takes a bottom-up approach, emphasizing mastery of low-level concepts and implementation details thereof, this course takes a top-down approach, emphasizing mastery of high-level concepts and design decisions related thereto. Ultimately, this course empowers students to make technological decisions even if not technologists themselves. Topics include cloud computing, networking, privacy, scalability, security, and more, with an emphasis on web and mobile technologies. Students emerge from this course with a first-hand appreciation of how it all works and all the more confident in the factors that should guide their decision-making. This course is designed for managers, product managers, founders, and decision-makers more generally.
    • CS50 Cybersecurity is an introduction to cybersecurity for technical and non-technical audiences alike. Learn how to secure your accounts, data, systems, and software against today’s threats and how to recognize and evaluate tomorrow’s as well, both at home and at work. Learn how to preserve your own privacy. Learn to view cybersecurity not in absolute terms but relative, a function of risks and rewards (for an adversary) and costs and benefits (for you). Learn to recognize cybersecurity as a trade-off with usability itself. This course presents both high-level and low-level examples of threats, providing students with all they need to know technically to understand both. Assignments inspired by real-world events.
    • CS50 for Lawyers is a variant of CS50x designed especially for lawyers (and law students). Whereas CS50x itself takes a bottom-up approach, emphasizing mastery of low-level concepts and implementation details thereof, this course takes a top-down approach, emphasizing mastery of high-level concepts and design decisions related thereto. Ultimately, it equips students with a deeper understanding of the legal implications of technological decisions made by clients.
    • CS50 Scratch is an introduction to programming using Scratch, a visual programming language via which aspiring programmers can write code by dragging and dropping graphical blocks (that resemble puzzle pieces) instead of typing out text. Used at the start of Harvard College’s introductory course in computer science, CS50x, Scratch was designed at MIT’s Media Lab, empowering students with no prior programming experience to design their own animations, games, interactive art, and stories. Using Scratch, this course introduces students to fundamentals of programming, found not only in Scratch itself but in traditional text-based languages (like Java and Python) as well. Topics include: functions, which are instructions that perform tasks; return values, which are results that functions provide; conditions, via which programs can decide whether or not to perform some action; loops, via which programs can take action again and again; variables, via which programs can remember information; and more. Ultimately, this course prepares students for subsequent courses in programming.
  • These courses have been retired, but remain available in archive form (the content may be viewed, but work may no longer be submitted and certificates are no longer issued):
    • CS50 Games (course ended 30 June 2024) picks up where CS50x leaves off, focusing on the development of 2D and 3D interactive games. Students explore the design of such childhood games as Super Mario Bros., Legend of Zelda, and Portal in a quest to understand how video games themselves are implemented. Via lectures and hands-on projects, the course explores principles of 2D and 3D graphics, animation, sound, and collision detection using frameworks like Unity and LÖVE 2D, as well as languages like Lua and C#. By class’s end, students will have programmed several of their own games and gained a thorough understanding of the basics of game design and development.
    • CS50 Mobile (course ended 30 June 2020) picks up where CS50x leaves off, transitioning from web development to mobile app development with React Native, a popular open-source framework maintained by Facebook that enables cross-platform native apps using JavaScript without Java or Swift. The course introduces students to modern JavaScript (including ES6 and ES7) as well as to JSX, a JavaScript extension. Through hands-on projects, students gain experience with React and its paradigms, app architecture, and user interfaces. The course culminates in a final project for which students implement an app entirely of their own design.
    • CS50 Technology (course ended 30 June 2024) is for students who don’t (yet) consider themselves computer persons. Designed for students who work with technology every day but don’t necessarily understand how it all works underneath the hood or how to solve problems when something goes wrong, this course fills in the gaps, empowering students to use and troubleshoot technology more effectively. Through lectures on hardware, the Internet, multimedia, security, programming, and web development, as well as through readings on current events, this course equips students for today’s technology and prepares them for tomorrow’s as well.