Open Source Society University – Path to a free self-taught education in CS

2025-05-2517:06534162github.com

🎓 Path to a free self-taught education in Computer Science! - ossu/computer-science

Open Source Society logo

Path to a free self-taught education in Computer Science!

Awesome Open Source Society University - Computer Science

The OSSU curriculum is a complete education in computer science using online materials. It's not merely for career training or professional development. It's for those who want a proper, well-rounded grounding in concepts fundamental to all computing disciplines, and for those who have the discipline, will, and (most importantly!) good habits to obtain this education largely on their own, but with support from a worldwide community of fellow learners.

It is designed according to the degree requirements of undergraduate computer science majors, minus general education (non-CS) requirements, as it is assumed most of the people following this curriculum are already educated outside the field of CS. The courses themselves are among the very best in the world, often coming from Harvard, Princeton, MIT, etc., but specifically chosen to meet the following criteria.

Courses must:

  • Be open for enrollment
  • Run regularly (ideally in self-paced format, otherwise running multiple times per year)
  • Be of generally high quality in teaching materials and pedagogical principles
  • Match the curricular standards of the CS 2013: Curriculum Guidelines for Undergraduate Degree Programs in Computer Science

When no course meets the above criteria, the coursework is supplemented with a book. When there are courses or books that don't fit into the curriculum but are otherwise of high quality, they belong in extras/courses or extras/readings.

Organization. The curriculum is designed as follows:

  • Intro CS: for students to try out CS and see if it's right for them
  • Core CS: corresponds roughly to the first three years of a computer science curriculum, taking classes that all majors would be required to take
  • Advanced CS: corresponds roughly to the final year of a computer science curriculum, taking electives according to the student's interests
  • Final Project: a project for students to validate, consolidate, and display their knowledge, to be evaluated by their peers worldwide

Duration. It is possible to finish within about 2 years if you plan carefully and devote roughly 20 hours/week to your studies. Learners can use this spreadsheet to estimate their end date. Make a copy and input your start date and expected hours per week in the Timeline sheet. As you work through courses you can enter your actual course completion dates in the Curriculum Data sheet and get updated completion estimates.

Warning: While the spreadsheet is a useful tool to estimate the time you need to complete this curriculum, it may not always be up-to-date with the curriculum. Use the OSSU CS website or the repo to see what courses to do.

Cost. All or nearly all course material is available for free. However, some courses may charge money for assignments/tests/projects to be graded. Note that both Coursera and edX offer financial aid.

Decide how much or how little to spend based on your own time and budget; just remember that you can't purchase success!

Process. Students can work through the curriculum alone or in groups, in order or out of order.

  • We recommend doing all courses in Core CS, only skipping a course when you are certain that you've already learned the material previously.
  • For simplicity, we recommend working through courses (especially Core CS) in order from top to bottom. Some students choose to study multiple courses at a time in order to vary the material they are working on in a day/week. A popular option is to take the math courses in parallel with the introductory courses. Course prerequisites are listed to help you determine if you are prepared for a given course.
  • Courses in Advanced CS are electives. Choose one subject (e.g. Advanced programming) you want to become an expert in and take all the courses under that heading. You can also create your own custom subject; the Discord community may provide feedback on your planned subject.

Content policy. If you plan on showing off some of your coursework publicly, you must share only files that you are allowed to. Respect the code of conduct that you signed in the beginning of each course!

How to contribute

Getting help (Details about our FAQ and chatroom)

  • We have a Discord server! Discord This should be your first stop to talk with other OSSU students. Why don't you introduce yourself right now? Join the OSSU Discord
  • You can also interact through GitHub issues. If there is a problem with a course, or a change needs to be made to the curriculum, this is the place to start the conversation. Read more here.
  • Add Open Source Society University to your Linkedin profile!

Warning: There are a few third-party/deprecated/outdated material that you might find when searching for OSSU. We recommend you to ignore them, and only use the OSSU CS website or OSSU CS Github Repo. Some known outdated materials are:

  • An unmaintained and deprecated firebase app. Read more in the FAQ.
  • An unmaintained and deprecated trello board
  • Third-party notion templates
  • Core CS assumes the student has already taken high school math, including algebra, geometry, and pre-calculus.
  • Advanced CS assumes the student has already taken the entirety of Core CS and is knowledgeable enough now to decide which electives to take.
  • Note that Advanced systems assumes the student has taken a basic physics course (e.g. AP Physics in high school).

This course will introduce you to the world of computer science and programming. This course gives you a flavor of the material to come. If you finish the course wanting more, Computer Science is likely for you!

Topics covered: computation imperative programming basic data structures and algorithms and more

All coursework under Core CS is required, unless otherwise indicated.

Topics covered: functional programming design for testing program requirements common design patterns unit testing object-oriented design static typing dynamic typing ML-family languages (via Standard ML) Lisp-family languages (via Racket) Ruby and more

Discrete math (Math for CS) is a prerequisite and closely related to the study of algorithms and data structures. Calculus both prepares students for discrete math and helps students develop mathematical maturity.

Topics covered: discrete mathematics mathematical proofs basic statistics O-notation discrete probability and more

Understanding theory is important, but you will also be expected to create programs. There are a number of tools that are widely used to make that process easier. Learn them now to ease your future work writing programs.

Topics covered: terminals and shell scripting vim command line environments version control and more

Topics covered: procedural programming manual memory management boolean algebra gate logic memory computer architecture assembly machine language virtual machines high-level languages compilers operating systems network protocols and more

Topics covered: divide and conquer sorting and searching randomized algorithms graph search shortest paths data structures greedy algorithms minimum spanning trees dynamic programming NP-completeness and more

Courses Duration Effort Prerequisites Discussion
Divide and Conquer, Sorting and Searching, and Randomized Algorithms 4 weeks 4-8 hours/week any programming language, Mathematics for Computer Science chat
Graph Search, Shortest Paths, and Data Structures 4 weeks 4-8 hours/week Divide and Conquer, Sorting and Searching, and Randomized Algorithms chat
Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming 4 weeks 4-8 hours/week Graph Search, Shortest Paths, and Data Structures chat
Shortest Paths Revisited, NP-Complete Problems and What To Do About Them 4 weeks 4-8 hours/week Greedy Algorithms, Minimum Spanning Trees, and Dynamic Programming chat

Topics covered Confidentiality, Integrity, Availability Secure Design Defensive Programming Threats and Attacks Network Security Cryptography and more

Choose one of the following:

Topics covered: Agile methodology REST software specifications refactoring relational databases transaction processing data modeling neural networks supervised learning unsupervised learning OpenGL ray tracing and more

Topics covered: Social Context Analytical Tools Professional Ethics Intellectual Property Privacy and Civil Liberties and more

After completing every required course in Core CS, students should choose a subset of courses from Advanced CS based on interest. Not every course from a subcategory needs to be taken. But students should take every course that is relevant to the field they intend to go into.

Topics covered: debugging theory and practice goal-oriented programming parallel computing object-oriented analysis and design UML large-scale software architecture and design and more

(*) book by Blackburn, Bos, Striegnitz (compiled from source, redistributed under CC license)

Topics covered: digital signaling combinational logic CMOS technologies sequential logic finite state machines processor instruction sets caches pipelining virtualization parallel processing virtual memory synchronization primitives system call interface and more

Topics covered: formal languages Turing machines computability event-driven concurrency automata distributed shared memory consensus algorithms state machine replication computational geometry theory propositional logic relational logic Herbrand logic game trees and more

Part of learning is doing. The assignments and exams for each course are to prepare you to use your knowledge to solve real-world problems.

After you've completed Core CS and the parts of Advanced CS relevant to you, you should identify a problem that you can solve using the knowledge you've acquired. You can create something entirely new, or you can improve some tool/program that you use and wish were better.

Students who would like more guidance in creating a project may choose to use a series of project oriented courses. Here is a sample of options (many more are available, at this point you should be capable of identifying a series that is interesting and relevant to you):

After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science. Congratulations!

What is next for you? The possibilities are boundless and overlapping:

  • Look for a job as a developer!
  • Check out the readings for classic books you can read that will sharpen your skills and expand your knowledge.
  • Join a local developer meetup (e.g. via meetup.com).
  • Pay attention to emerging technologies in the world of software development:
    • Explore the actor model through Elixir, a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
    • Explore borrowing and lifetimes through Rust, a systems language which achieves memory- and thread-safety without a garbage collector!
    • Explore dependent type systems through Idris, a new Haskell-inspired language with unprecedented support for type-driven development.

keep learning

OSSU's code of conduct.

Fork the GitHub repo into your own GitHub account and put ✅ next to the stuff you've completed as you complete it. This can serve as your kanban board and will be faster to implement than any other solution (giving you time to spend on the courses).


Read the original article

Comments

  • By sulikns 2025-05-264:422 reply

    I'm 37 and live in one of those lesser-known countries whose diplomas likely don’t hold much weight elsewhere—but that’s not the point. I’ve decided to change my profession. After many trials and errors, I studied Python. I wrote some scripts and bots, but I kept feeling like something was missing—I didn’t really understand programming.

    Then I discovered OSSU and, after reviewing their curriculum, I realized just how little I actually knew about computer science. I started over from scratch, even relearning math. Because of the language barrier (yes, I learned English by forcing myself to study in English), my conversational skills are still shaky, and this text was polished with the help of GPT.

    I’m not thinking about a job just yet. My current goal is to get a solid academic education, and I believe OSSU is one of the best initiatives ever created—accessible to the entire world. It's not just about being free. Maybe the best universities are in the U.S., but compared to what's available in my country, the OSSU curriculum is several levels higher in both quality and structure.

    As for work, I plan to contribute to the open-source world, hoping to make the world a better place, just like the creators of OSSU did. Education should be accessible to everyone—not just a privileged few.

    • By ido 2025-05-2613:251 reply

          Maybe the best universities are in the U.S.
      
      For undergraduate I don't think it matters that much as you're far enough removed from the state of the art at that point anyway- you'll probably get about the same level of bachelor-level CS education at any decent university in the developed world as you would in the top US institutions like Stanford and MIT (and most Americans don't go to these elite institutions anyway)?

      For graduate/research it's of course a different case altogether, these elite institution seem to mostly be elite in research, not pedagogy. What probably does matter is that the base level of tertiary education is good enough (which seems like it's the case in western Europe, but maybe not in a lot of the developing world).

      • By sulikns 2025-05-2616:07

        Honestly, I'm not aiming to participate in cutting-edge research or be involved in elite academic projects. My goal is much simpler — I just want to become a good, competent developer who understands the fundamentals of computer science and writes code thoughtfully. I love computers and problem-solving, and I enjoy building things for the fun of it, not for money or prestige. If I manage to live long enough and find work — that’s more than enough for me. For me, a platform like OSSU (Open Source Society University) is the only truly accessible and supportive environment where I can learn, get help, and grow. I can't afford an expensive formal education, but thanks to the community and open materials, I'm making steady progress. As for the claim that "at the undergraduate level it doesn't really matter" and "you'll likely get about the same education in any decent university as in places like Stanford or MIT" — I have to disagree. In many so-called "decent" universities, the baseline can often mean: • outdated curricula and technologies (e.g., focusing on C without exposure to modern languages and practices), • a purely theoretical approach with little connection to real-world applications, • instructors with little or no industry or research experience, • and unfortunately, sometimes a lack of academic integrity. In such environments, students may graduate with a diploma but without real practical skills or understanding — making their education nominal rather than competitive. That’s why it’s not just about where you study, but what and how you study. If someone is learning CS with curiosity, consistency, and a focus on real-world practice — even without a prestigious degree, they can still go far. I hope to become that kind of developer, even if I'm not from MIT.

    • By JFingleton 2025-05-269:191 reply

      Really inspiring thankyou.

      Although I've not used it, I've heard good things about Khan Academy... Which is aimed at kids/teenagers but would cover any core principles you might be missing:

      https://www.khanacademy.org/computing

      • By sulikns 2025-05-2610:581 reply

        Yeah, I studied with Khan Academy too, and my kids are learning with Khan as well. But unfortunately, it doesn't go deep into core principles. There are better resources for Algebra, Geometry and Precalculus, like Professor Leonard, OpenStax, and The College Preparatory School, which is listed in the OSSU prerequisites for Computer Science.

        • By kadushka 2025-05-2616:381 reply

          Coursera and Udacity have been around for a long time. Not to mention countless youtube lecture courses on any imaginable subject.

          • By sulikns 2025-05-2618:04

            There is same courses on youtube, + books etc. All is free and perfectly organized.

  • By waciuma 2025-05-2521:112 reply

    If you're an experienced engineer that wants to give back to learners, OSSU is a great place to do so. This can look like:

    - Setting a regular time that you'll pair (or mob!) program on a side project of your own with OSSU learners. - Developing familiarity with one or more courses in the curriculum and responding to students who have questions or are stuck. - Attending weekly check-in meetings, sharing what you are working on and listening to what learners are working on.

    To do so - Visit our Discord server: https://discord.gg/wuytwK5s9h - And ping me @waciuma or the @tutor role

    I'm one of the leaders of OSSU and we agree that community, networking, and projects are part of a complete education. That's why we celebrate not only the professors and universities creating free courses, but also the many engineers and practitioners that have volunteered with OSSU learners over the years. I hope some of you will join that group!

    • By nand_gate 2025-05-2610:59

      No Discord, please.

      Plenty of FOSS alternatives exist.

    • By dokyun 2025-05-265:464 reply

      [flagged]

      • By JFingleton 2025-05-269:264 reply

        It does make me sad that in 2025 we still don't have an open real-time chat service.

        IRC was too janky for widespread use... Everything else that has come after it hasn't been able to reach the "network effect". Too many options, too many half finished projects. Lots of missed opportunities.

        • By dijit 2025-05-2612:51

          Zulip works pretty well for this, rust-lang.zulipchat.com is a good example.

          Completely open to guests, open-source and self hostable.

        • By saghul 2025-05-2611:161 reply

          But network effect doesn't have an impact here, does it? Matrix exists and would be a great fit for this initiative.

          If someone is committed enough to help out but using Matrix (either directly from the web browser or installing the Element client) is too big a burden I'd question that original commitment.

          PS: I'm not affiliated with Matrix in any way.

          • By Sanzig 2025-05-2614:34

            I like Matrix but unfortunately it has major stability issues. The GrapheneOS project moved most of their chat over to Discord after their Matrix community got nuked twice. They still maintain a Matrix community which is bridged to their Discord instance, but most users are on the Discord side of the fence.

            IMHO, Revolt is a better FOSS Discord alternative: https://revolt.chat/. Relatively young project, but they are unashamedly cloning the Discord user experience (even with the name). By default it uses infrastructure in Europe run by the project maintainers but can also be self hosted.

        • By dokyun 2025-05-2617:44

          You guys forget about XMPP or what? It's got tons of clients, lots with E2EE with OMEMO if you're into it. Matrix sucks shit by comparison.

        • By trbleclef 2025-05-2614:22

          I've been using IRC for almost 30 years. We communicate pretty easily

      • By CalRobert 2025-05-267:55

        I love open protocols, IRC, etc but right now the reality is that discord is where people are.

        I hated when Slack broke their IRC bridge but ultimately Slack was better for most people.

      • By chairmansteve 2025-05-2617:472 reply

        That was my reaction, but I have never used Discord...

        What's the problem with it?

        • By dokyun 2025-05-2618:12

          This is just me, but aside from being complete proprietary spyware, I've got problems with the culture it's designed to cultivate.

          On a normal text-based chat like IRC or XMPP, you chat with people, maybe share files and that's about it, the way it should be.

          On Discord, everything is grabbing your attention in this pavlovian game where the actual substance of what you're talking about is secondary, on the other hand it's more about cultivating attention towards yourself with reactions and memes. It also promotes segregating everyone into a caste system with "roles" and whatnot. If you've ever been around you'll notice how quickly people sardonically accept Discord as being the name-brand platform for predators and sex perverts.

          I think a lot of the problem with kids on the net these days has to do with the way they chat with people like this. When you're on IRC you've got a place to "post into the void", where what you say is ultimately ethereal and even if two people are flaming one day they can go back to being buddies the next day cause it doesn't really matter. When you're on Discord everything you say is logged, and the air hangs thick around you cause what you're supposed to say is meant to matter to someone, even though most people are just cultivating this emotional persona detached from their real selves. So you get this really toxic cesspool as a cultural penchant built-in.

          I've never really connected with that many people I've met through Discord the on the same level as IRC-adjacent people, FWIW.

        • By robobro 2025-05-2618:19

          It's a chat program designed to be anti-user inherently.

          And it's spyware.

          Discord being full of sex perverts and pedophiles are just reasons to avoid it after the fact that it is a terrible, terrible replacement for IRC channels.

          If you are afraid of IRC, playing Matrix should be no problem. But please don't play discord.

      • By hackable_sand 2025-05-265:591 reply

        Discord is very accessible and convenient for learners to just hop in and ask questions.

        • By dijit 2025-05-266:352 reply

          Sure, I suppose that is similar to how facebook is convenient for organising events.

          It might be considered somewhat ironic though that a curriculum with “open source” in the name would use something that is considered very non-open.

          Like the EFF organising their next meet in a facebook event.

          I understand the parents incredulousness.

          • By therealpygon 2025-05-2613:451 reply

            Did you just assume they don’t? EFF has a fairly active Facebook page. You meet people where they are, not where you decide you wish they were.

          • By johnisgood 2025-05-267:23

            I understand, too, and "Like the EFF organising their next meet in a facebook event." is a really good way to put it, but then again, were it not for Discord, it might not have a thriving community (assuming it currently has).

  • By fzwang 2025-05-2518:332 reply

    I run a comp sci education program to help students self direct their education[1]. We sometimes reference the OSSU curriculum.

    Althought there are lots of benefits to the self-taught route, there are some caveats which students should be aware of. You will have to work harder on the "signaling" and networking. There are definitely social benefits in being associated with a university. And a lack of degree will mean you're "marked"[2], which you'll have to overcome. A setback or mistake will be attributed to your lack of degree, whether justified or not. And some hiring managers can't take the political risk of hiring a non-degreed candidate. Not insurmountable, but this means we work on it from day one. If you do decide to self-direct your education, the benefits are that you learn faster and don't waste time spining the hamster wheel, so to speak, to grind out courses. Everything you learn is in context and relevant. If you realize you miss some fundamentals, you'll just go back and learn those concepts/topics. It's a different way of learning, which imo, is inevitable for technical professions. But it's not for everyone, and some students just vibe with it more.

    What's sad is that many students are sort of forced into the self-taught route, because they don't have the financial resources to go to college/university. And if they're not aware of the trade-offs, they could really struggle.

    [1] https://www.divepod.to [2] https://en.wikipedia.org/wiki/Markedness

    • By Aurornis 2025-05-2518:582 reply

      I’ve followed and part-time mentored several people through their self-taught education. There are a lot of pitfalls and traps that can send people down the wrong path if they’re not careful.

      One that I did not expect but that seems obvious in retrospect: It’s really easy to start reading Reddit or watching Twitch streams of developers ranting about the industry and think that actual skills don’t matter any more. There’s a temptation to think that you’re a fool to study and practice the job skills because what you really need to do is optimize for interview skills. So they drop everything and starting grinding LeetCode, putting unfinished “side projects” on their GitHub that have all the right things in the README.md (just hope nobody actually looks at the code) and memorizing S.T.A.R. format responses for the common behavioral interview questions.

      This strategy actually worked reasonable well for a few years, but the game has changed and most companies are better at catching professional interviewers who don’t know how to do much else.

      I should note that this mindset isn’t unique to self-taught people: There’s a parallel epidemic of cheating in college among students who see it as “just a piece of paper” and think they’d be foolish to actually learn the subject material. This also hits hard when they reach graduation and are faced with the current style of interviews which are not as easy as they expected to bluff your way through.

      • By fzwang 2025-05-2519:14

        This is something I had to deal with as well. It also surprized me in terms of how limited their information sources are, esp with younger students. One thing I found helpful is to actually introduce them to engineers in person (like a take your kid to work day), which I think grounds them a bit. But this box-checking influence is everywhere, including in the K-12 curriculum. In some ways I understand their perspective. Most schools/teachers do have a box-checking mentality, and I think students intuitively understand that what these "educators" are after is a metric. They don't actually care about real skills. But to your point, the rest of the world actually values competency and it's something students should strive towards for the long-term.

      • By alephnan 2025-05-262:35

        > putting unfinished “side projects” on their GitHub that have all the right things in the README.md (just hope nobody actually looks at the code) and memorizing S.T.A.R. format responses for the common behavioral interview questions.

        This perfectly describes my experience when reviewing resumes of grads from certain bootcamps. The program held their hand as evidenced by every student have a similar setup: claiming the cookie cutter 3 month CRUD white labeled webapp as work experience. Everyone on the team is a “co-founder”. Apparently all 4 people "managed a remote team of 4 developers". When you dig into the code, it’s a toy project not intended for any real users. The bulk of their "webapp" is a "case study" page with sections including "the problem", "the solutions", "What is a build a process". It seems these sections were assigned as homework. Their resume includes what things they clicked on in the AWS UI.

        In fact, it seems the whole group were instructed to post on HackerNews "who is hiring" with the exact same template. That is the extent of handholding occuring in these bootcamps.

    • By dgb23 2025-05-268:341 reply

      Some challenges as an autodidact:

      - Some people assume you lack theoretical/foundational knowledge.

      - Guidance/mentorship is harder to come by.

      - You’re likely learning on your free time while working. Quality time is hard to carve out.

      - It’s harder to get a sense of where you’re at.

      - External validation is much more difficult to get. But you need it when you’re searching for a job.

      - You inevitably make a lot of decisions that university students don’t have to make. This can be taxing.

      - It requires more discipline, because there isn’t anyone checking in or forcing you to demonstrate your learning.

      On the other hand, overcoming these challenges is beneficial, especially if you never really stop learning/studying. You pause from time to time, but you pick up again, because there’s always more to learn.

      A big advantage that might not be obvious: You pick up niche subjects, simply because they interest you.

      You’re not just learning things that seem useful in your context. It’s actually often the other way around: you learn things that you’re curious about and perhaps a year later you encounter a situation that you can solve a problem because of that.

      Curiosity is an interesting mechanism. It’s often a better guide at driving your learning than an analytical approach.

      • By fzwang 2025-05-2612:20

        I agree. Self-directed education definitely front loads a lot of the problems/decision making early on. I think one of the goals of a good advisor, if you can find one, is to smooth out these issues so they don't become overwhelming.

        And to your point about curiosity-driven learning, I'm often shocked at how deep some students get with their learning, if/when they are interested. In some ways, I think we really underestimate how capable young people are. And it's very satisfying, as an educator, to see a student start to embrace continuous learning, as their default mode, and don't interpret learning as a chore or box to check.

HackerNews