Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finished OSSU, ask me anything #727

Closed
spamegg1 opened this issue Jun 9, 2020 · 64 comments
Closed

Finished OSSU, ask me anything #727

spamegg1 opened this issue Jun 9, 2020 · 64 comments

Comments

@spamegg1
Copy link
Contributor

spamegg1 commented Jun 9, 2020

(I'll update this as I go along)

Proof of completion (you have to scroll sideways a bit)

Originally written: Tuesday, June 9, 2020

Course-by-course review (FINISHED!)

Took 2 years (late May 2018 - early June 2020)

My significant advantages:

  • used to teach college math. So I skipped math classes
    (there used to be A LOT MORE math in the curriculum, some of you might remember!)
  • worked on OSSU full time

Disadvantages:

  • easily demotivated, difficulty feeling rewarded

I am Strongly biased towards math and functional programming, biased against object oriented programming. I learn by doing, I dislike long lectures/concepts/info dumps.

What happened in 2 years?

  • two deaths in the family
  • got demotivated and "quit" twice: once for 3 weeks, once for around 2-3 months
  • lots of stress from economic/political/war stuff that happened where I live. Had a few panic attacks! Financially OK (quit stock market early enough to avoid losses)
  • hardware problems:
    GPU broke right when I was taking CUDA programming. The irony!
    Burnt motherboard's CPU socket from too long parallel execution. CPU is fine though!
  • COVID-19 (right at the end, during my Spec. Quarantine took a psychological toll on me. Also good luck finding hardware in a pandemic!)
  • Lost much weight, built a little muscle

Courses I took, roughly in this order:

  • CS50
  • How to Code 1,2
  • PLABC
  • Learn Prolog Now!
  • Haskell from First Principles
  • Nand2Tetris 1,2
  • Intro to Networking
  • Hack the Kernel
  • Intro to CS and Programming using Python
  • Core Theory
  • Databases (Stanford)
  • Computer Graphics (skipped last assignment)
  • Machine Learning
  • Compilers (from Udacity)
  • Software Debugging
  • Software Testing
  • Software Architecture & Design
  • LAFF - On programming for correctness
  • Intro to Parallel Programming (very hard!)
  • Functional Programming in Scala (5 courses, free to audit the whole thing!)

Courses I took that are NO LONGER on the curriculum:

  • Software Construction 1,2
  • Cryptography 1 (very hard MATH course)

Courses I took that are NOT on the curriculum:

  • CS50's second half and its final project
  • Software Processes (from Coursera)
  • Software Architecture (from Coursera)
  • Functional Programming in Haskell (from FutureLearn)
  • Design of Computer Programs (Udacity CS212)

Courses I did NOT take that ARE on the curriculum:

  • Software Engineering Intro/Capstone
  • The Security courses that were added recently

Things I wish I knew / I wish somebody told me before:

  • difference between Computer Science and Programming. Apparently it's huge! I was more interested in Programming since I have theory from my math background. Ironically it turns out I don't like Programming that much. Much prefer CS, especially algorithms.
  • How to create a "learning lifestyle" and stay motivated, feel rewarded.
    Those "Mindshift" classes buried at the bottom of EXTRAS should be the first thing we are required to take!

The "shining core" of OSSU

  • CS50, PLABC, N2T, Core Theory and Machine Learning.

Best Courses:

  • Core Theory (Kruskal's Minimum Spanning Tree algorithm with Union by Rank and Path Compression and its running time analysis with the Inverse Ackermann function are so beautiful, I had tears in my eyes!)
  • Nand 2 Tetris (makes you feel like you can do ANYTHING)

Most useful courses: Core Theory and PLABC (by far)

Takeaways:

  • Be very clear about your goals and expectations from the beginning. OSSU might not give you what you expect!
  • If you only "kinda" like CS/programming, it looks "cool", but you don't "love" it, it's gonna be hard. Maybe reconsider? Or do only as much as interests you? Put things into a long term perspective.
  • Specializations are no big deal. Like "normal" courses. By far the most useful to prepare me for the Spec were PLABC and the Haskell book. The rest were not relevant. I could have EASILY taken the Spec after those (I had not even taken Core Theory at that point).
  • Don't pay! Not even for Specializations. They offer very little support and some stuff is outdated. Not worth the money.
  • Sometimes I focused way too much on finishing a course as quickly as possible and getting it out of the way, moving on to the next. I did not learn too well. When confronted with courses that were not very good / that I did not enjoy, my motivation would switch from learning to "getting it over with", forcing my way through. Don't do this! Better to skip such courses entirely.
  • Physical exercise is extremely important to stay consistent and motivated.
  • I pushed my "challenge yourself" thing a bit too far I think. At the same time I started OSSU I also started lifting weights and intermittent fasting. You should adjust things so that what you're doing feels A LITTLE challenging but does not overwhelm you.

What now?

  • I feel very burnt out. Don't want to see a single line of code for a while! Not even clever functional one-liners that magically process gigabytes of data.
  • I want to do some fun stuff later. I'll take CS50's intro to Game Development, then maybe audit the Game Specialization.
  • My goal was not to get a job (although a low-key part-time remote job would be nice), but to challenge myself. MISSION ACCOMPLISHED! By a lot.
  • My original goal was to take all of Advanced Programming. I'll do that at some point. Advanced Systems and Theory are left. Should take another 3 months or so.
  • Eventually I should bite the bullet and stop avoiding the topics I disliked: web programming and Javascript.
  • Looked at Scala jobs, Functional jobs, Triplebyte, and some local jobs. All want "senior" devs with 5+ years experience and lots of other tech I don't know yet. I can only work remotely. So I gotta keep at it! In addition to Spark, I will look into learning other tools in the Scala sphere: Akka, Play, Scala.JS

The Most Difficult Thing:

  • Reading an existing code base. Reading is extremely hard. This is probably why so much software goes unmaintained, rewritten and into the garbage.

The Most Important Thing:

  • Everything is at least 20x easier than Hack the Kernel.
@martinrg
Copy link

martinrg commented Jun 9, 2020 via email

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 9, 2020

@martinrg 1. I actually kinda went through the Math for CS class. I spent 2-3 days on it. It was a decent, OK course. I did not like its textbook. It was super wordy and thick and confusing. I'll have to think of alternative books.

  1. I took both CS50 and MIT 6.00.1x. Personally I prefer MIT. But actually I took CS50 as my "first beginner" class (that's how the curriculum used to be). I think they are difficult to compare because CS50 uses C and goes into low-level matters (memory, pointers etc.) To a beginner I would definitely recommend MIT 6.00.1x.

  2. OK my story here is a little weird. I did take CS50's second half, and completed the Javascript Homeworks too. But I didn't really understand/learn it. For my web project I bent over backwards to avoid Javascript, so I found something called Brython that lets me use Python directly inside HTML. It's horrendously slow, but it works. My site looks very crappy but it has a working interactive Python console and an Ace code editor!

@WildRyc
Copy link

WildRyc commented Jun 9, 2020 via email

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 9, 2020

@WildRyc It's a great course, I really like the instructor Eric Grimson too. It packs a lot into one short course (running time analysis and big-O notation, object oriented programming, data visualization etc.) and has just the right level of challenge in programming assignments (they are not so easy!)

Killer beard by the way!

@epikkoder
Copy link

I'm curious if you eventually developed the proper lifestyle you needed to keep at it. I, myself, want to really get into computer science to level up in my career, but the hardest part is to have the consistency and discipline to do it everyday or almost everyday WHILE not neglecting my other responsibilities in life. As it is, it already kinda feels like there's so many "adulting" things I need to do and learn (taxes, financial literacy, everyday chores, keep the wife happy, etc.), and it's like I'm being pulled from all different directions.

So if you can share any advice regarding that, I'd really appreciate it. 😊

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 9, 2020

@epikkoder Yeah I eventually did, but I must say that I have a very simple, minimalist lifestyle. My life was pretty much eat-sleep-exercise-code-run some errands. I feel you, sometimes aside from the adulting, even taking a shower or brushing teeth feels like a chore. It might be difficult with family, spouse, kids and other obligations which I don't have (except my mother). Not these last 2 years, but long ago I was also swamped. I had to make some sacrifices and cut out some things.

I eliminated most things that are pulling me in directions. Greatly simplified my finances, got out of stock market/investments into no-hassle, safer options, automated all the payments, taxes etc. I don't have a car so I don't have to worry about insurance, gas, check-ups etc. Got rid of my cell phone years ago. I gave up on some hobbies and interests, gave away pets and plants, got rid of furniture etc. to reduce cleaning, and significantly simplified/shortened my exercise (which actually improved my health).

I also have to run errands but I squeeze them into my "break from coding" times. Many of these are physical in my case so I treat them as exercise. It helps that I need frequent breaks anyway because that's how my head works.

I suppose in your case you have to separate some "me-time" everyday, turn everything and everyone off for a while, and stick to it, also make this clear to your family members. Gotta be selfish a little bit, and say no to others every now and then. That's the only way to do it.

This is actually similar to the "writing problem" that many academics are/were having back when I was teaching. Among all the other obligations, teaching, office hours, friends/acquaintances etc. we had no time to write our dissertations/research. We were trying to do all the other things perfectly, and feeling guilty if we didn't "do it properly".

TL;DR: You must simplify as much as possible, eliminate some things and make some sacrifices, respectfully tell others to leave you alone for a while, and learn to be a little selfish and stop feeling guilty or inadequate.

@josh-keller
Copy link

Can you talk a little bit more about the How to Code classes? I'm just starting the first one and thinking about how to approach it. Did you use the online book, "How to Design Programs" in conjunction with the courses? What do you feel is the best way to approach these two courses?

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 10, 2020

@wboard82 I did not use the book at all. I actually did not know it existed until much later. DO NOT feel like you are missing out or incomplete if you don't use the book. The courses/videos are complete on their own. The best way to approach is to have Dr. Racket open, and follow through the videos and type along with Prof Kiczales.

(As an aside, I'd like to say to everyone that doubts/feelings of incompleteness/unreadiness will keep haunting you forever if you don't tackle them; you gotta start combating them early. The trick is to move on to the next course without exhausting all the relevant resources. When I started my Specialization I had never seen a single line of Scala code, but I came out dominant, confident and on top. I didn't read any books first.)

Consciously stick to the discipline they teach you in that class: creating stubs for functions, writing the signature (input-output type), writing the tests first, writing a template for the function body from the data type you are using, and writing the "solution" ONLY at the very end (resisting the urge to guess/write the solution immediately). Just this one thing will carry you through both courses.

These courses are functional so they are all about "functional decomposition" and rigidly sticking to this discipline will force you to break down problems correctly. The data types will get more complicated but always remember, they are just made up of smaller parts! You'll see what I mean at the final project of the second course. It's super hard! But it works out as long as you keep breaking it down to smaller problems.

Also, think recursively!

@RmdanJr
Copy link

RmdanJr commented Jun 10, 2020

Keep going, dude! Thanks for this beautiful review.

@SarCoptU-zz
Copy link

Wow, congratulations! That I can only imagine was a massive undertaking.
The idea of reducing all the clutter in your life in order to finish a difficult task could not ring more true for me. I used to have 5-6 hobbies that I tried to squeeze in every day. I does lead only to frustration and burnout. Also trying to complete every task and really get any perfect result at anything gets you nowhere, a lesson I learned the hard way.
I will take my chances and ask this, although it is ok if you don't think is of interest to the topic and ignore this part of the comment.
I wanted to ask an opinion on the little web app I created as a final project for CS50x - Intro to CS. It was inspired by OSSU and it is basically a database with basic info on the courses taken/in progress so far with a web interface and Flask on the server side. It is done in CS50 ide with the SQL imported from CS50 module.
Youtube video https://www.youtube.com/watch?v=zAUmEEJ2iPI
Github https://github.com/SarCoptU/my-CS-education

I am thinking on learning how to deploy it and create for it a register/login page so myself and other people, maybe in OSSU community can use it without needing to have access to CS50 ide just to have a look at it functioning.

Best wishes,

Remus

@spamegg1
Copy link
Contributor Author

@SarCoptU That's awesome! This is what I requested a few months ago, when someone in Gitter chat said they could lend their time and expertise to help out OSSU. You can deploy it using a free service such as Heroku following the instructions from CS50, which is what I used

@SarCoptU-zz
Copy link

@spamegg1 Great stuff! I'll do that. Thank you very much.

@AbdesamedBendjeddou
Copy link

@spamegg1 congrats, and thanks for all the helpful information, I admire your commitment, I wish you all successes and I hope that I can do it too.

@spamegg1
Copy link
Contributor Author

@AbdesamedBendjeddou Very appreciated!

@spamegg1
Copy link
Contributor Author

@Andreilg Hard to say. I think it's not "directly" applicable, that's probably true. It teaches you tons of important stuff in simplified format, on a "toy" computer. You wrap your head around how a computer works from the bottom up. It's true that spending too much time on it would be a waste.

But if you ever have to write a compiler, parser, or assembly/VM code, the ideas you learn will definitely help. When you get to OSTEP you'll definitely see it. For example it helped in Hack the Kernel where I have to implement first-fit or best-fit memory allocation. It also helped writing the system calls (necessary to understand how registers work). Maybe take a look at the Computation Structures courses in Advanced Systems? I'll do that in the future and report whether N2T was applicable or not.

It's my favorite course among all, but mostly because of the fun and how it made me feel. When I was a kid I wanted to be an electrical engineer and make hardware, but that didn't happen, so these courses were like a childhood dream for me. Also it made me feel connected to computing history, and made me feel overpowered like I could do anything.

Interesting, I didn't like their machine language either (very cumbersome) but really liked the assembly code (with the D, M, A). The least intuitive was the VM code. But I never learned x86 so I don't know. I'm not surprised that x86 would be more straightforward, because it's a much richer instruction set, with probably much more convenient commands. In this case "simpler" actually means "harder".

If you think about it from the perspective of the creators of the course, they must have had to decide on a trade-off between simplicity/accesibility and features/difficulty. To me it feels like they made a good trade-off.

@spamegg1
Copy link
Contributor Author

@Andreilg Yeah it definitely makes you think what your code does on the lower levels, what the compiler does with it, etc. I think programming in C and using tools like valgrind is probably the best to develop that skill.

I think it would be silly to expect their assembly language to work like ARM or x86. The Hack computer's CPU instruction set is so simple, they made an "ad-hoc" assembly language. When you go with a bigger system you can't do ad-hoc, you gotta think more systematically. But I can understand your distaste for it if you were already familiar with x86. I was an "assembly-virgin" so I really liked it.

@mabouguerra
Copy link

Hey, congrats for completing this challenge, and thanks for sharing your experience.
I have taken many moocs in the past, including the excellent core theory that you mentioned, but I forgot most of what I learned because I didn't use it in practice. So what I recommend is, if your intent is to merely feed your own curiosity, go ahead and pick whatever seem interesting to you. But if your goal is to train yourself for a certain job, I don't think it is efficient to go through the suggested curriculum in a linear fashion because you will lose motivation very easily, and waste a lot of time learning a ton of material that will end up irrelevant and then forget it anyways. IMHO, the best approach is to make your learning motivated by the problem that you will be solving e.g. building web applications, or training neural networks, and pick up the prerequisites on an as needed-basis. Good luck for whats next.

@spamegg1
Copy link
Contributor Author

@mabouguerra I agree! Good advice. Tons of irrelevant stuff in OSSU (and college curricula in general). I won't remember much of it (looking at you, Intro to Networking). Not to mention boring and low quality. I still want to take some GOOD, FUN irrelevant stuff though.

In the future I want to create shorter, more focused curricula for specialized purposes. For example, aiming at a functional job one can take How to Code 1,2, PLABC, the Haskell book and the Scala specialization. It should take less than 1 year.

@mabouguerra
Copy link

@spamegg1 to get a job, especially without a formal degree, you must focus on building a strong portfolio of projects, an active GitHub etc to prove that you can get shit done. And let the need to build those tangible skills and projects guide your learning. Key is to be as efficient and possible, and one year is plenty of time if sent wisely.

@calexandrepcjr
Copy link

Wonderful review, thank you!

I recommend the same than @mabouguerra suggested to you. You did a wonderful job, don't stop there, OSSU background is more complete than the majority of the bootcamps out there.

@spamegg1
Copy link
Contributor Author

@calexandrepcjr @mabouguerra Thanks for all the encouragements!

@xxzozaxx
Copy link

How to create a "learning lifestyle" and stay motivated, feel rewarded. Those "Mindshift" classes buried at the bottom of EXTRAS should be the first thing we are required to take!

I'm waiting to see a blog/artical recommendation about how to make this lifestyle motivational mindset, I actually quit alot especially when course aren't interested topic for me -even if I know it's so important later on- like Programming language part C, I don't like OOP at this time, and I really didn't enjoy ruby 1.+(1), although I learned alot about interesting concept

Don't pay! Not even for Specializations. They offer very little support and some stuff is outdated. Not worth the money.

maybe we should pay them to motivate them making more, such as MITOCW donations, not because their certification or something like that

@spamegg1
Copy link
Contributor Author

@xxzozaxx I had the same problem; whenever I'm not getting some positive feedback/satisfaction from a course I tend to procrastinate and quit. I believe I may have figured out a few things. Maybe I will write some tips and tricks later.

Hmm... it's certainly a good idea to support independent creators who make really good content, but I think the academics already get paid to create those courses, don't they? I'm not sure more money is something that would allow them to do more teaching. Academics like free time more than money; there is a concept called "sabbatical" that allows them to give up their teaching responsibilities once every 7 years, and they use it to focus completely on research. These sabbaticals are highly coveted, highly competed for positions.

My guess is that the content already exists in one form or another, but they have to "transfer" it to an online version which takes time. (This is probably why we see many low quality courses that are simply "online dumps" of college courses, with no consideration for online learning format/pedagogy. MIT's Scholar versions are a rare exception as they were the pioneers of MOOCs.)

My comment was more about Coursera (and possibly other for-pay sites like UDemy). I don't think the certificate is worth paying for, but regardless of that, there are unresponded comments asking for help going back months, and even when a "teaching staff" replies to you, they are very unhelpful; it's clear they don't know anything about the course I'm taking, they are offering one-line blind guesses. Generally giving someone money online is a bad idea, whether it's Craigslist, Kickstarter, or Coursera. They don't have to do what they promise, and it's near impossible to force them, or get a refund.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 12, 2020

After a bit of studying the science of learning, I have some idea as to why Nand2Tetris courses felt so amazing. It's true that the projects in these courses will not be directly applicable or useful in real life. However, the ways of thinking acquired in this course are highly transferable chunks of understanding that will allow you to understand many other similar things in CS. It touches upon almost everything in CS. (Now I understand why Multivariable Calculus was my all-time favorite math class to teach.)

Moreover it covers so many different topics interleaved with one another. According to learning research this interleaving of similar yet different topics is extremely beneficial for long-term learning. It causes dopamine release and feeling of not only reward, but future rewards. No wonder I found myself describing the situation as euphoric. It's literally hormonal!

The same applies to Programming Languages A, B, C (all three cover programming languages, but different: functional, OOP etc.), Machine Learning (similar concepts, many different awesome applications) and Algorithms (they all cover algorithms but very different strategies: divide-and-conquer, greedy, dynamic, randomized etc.) All these three courses provide repetitive-enough, but also varied-enough practice. (All three also had great instructors.) They form a "library of interconnected chunks" in your brain, and give you the feeling of finally leaving the world of repetitive practice and stepping into creative, independent thinking. It feels like you are at the precipice of some amazing discovery and you can do anything.

However just covering lots of different topics is not enough, if the course is a boring, unmotivated giant info dump without practice, pedagogy, or good instruction (like Intro to Networking) or with too much repetitive practice (like Databases). Both of these covered a ton of topics but did not feel good. The topics were not very well interleaved either.

@aaronhooper
Copy link
Contributor

@xxzozaxx I recommend you check out Julia Evans's talks on YouTube. I think she really embodies this kind of learning lifestyle, and it's encouraging to hear someone speak about taking on challenging ideas and the mindset that comes along with it.

@spamegg1
Copy link
Contributor Author

@aaronhooper Excellent link and I completely agree with her points on growth mindset, for example: "I don't know Linux" -> "I can master Linux!" It's all about attitude and in fact I gave myself the added challenge of switching to Linux in the middle of the hard Algorithms class (and I was a bit forced to; on Windows I was running out of memory and max recursion depth).

Once you knock down a few challenging courses you'll get confident and start growing an appetite to consume and learn more challenging topics! From "nothing", in just a few months, I even started out helping other beginners on Linux forums with their issues! I have 250+ posts.

@ghost
Copy link

ghost commented Jun 14, 2020

When googling OSSU some results point to a site that seem to have content a bit different from https://github.com/ossu/computer-science, to clarify the course outlined in the repo is what you finished right?
"By far the most useful to prepare me for the Spec were PLABC and the Haskell book. "
What Haskell book are you referring to?

@waciumawanjohi
Copy link
Member

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 15, 2020

@creamynebula I updated the text with a link.

@waciumawanjohi Why doesn't someone delete that outdated version? Is that not possible? I remember falling for that too 1 year ago, especially when this curriculum started to change a lot.

@waciumawanjohi
Copy link
Member

I have long advocated that if the site is not going to be updated, that it should be taken down. Other students have made the same point.
#466

As far as I know, @SergeyKhval maintains complete control over the website and prefers to have it up, even though it confuses students.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jun 27, 2020

@martinrg I found this free Discrete Math book: https://link.springer.com/book/10.1007/b97469 It's shorter, more accessible and readable than the Math for CS textbook. Might be a good idea to add it to Extras or Readings too.

@mabouguerra Thanks I'm taking Full Stack Open now!

@spamegg1
Copy link
Contributor Author

spamegg1 commented Jul 8, 2020

Thanks everyone, I'll close the issue now as it's been a month and no new comments recently, but feel free to continue commenting here, and I'll check up on this from time to time! Also you can find me on Discord.

@rudbar
Copy link

rudbar commented Nov 10, 2020

Where are you from?

@spamegg1
Copy link
Contributor Author

spamegg1 commented Nov 10, 2020

@rudbar I was in the US, I'm somewhere else now. You can come over to Discord https://discord.gg/5pUhfpX

@synked16
Copy link

synked16 commented Sep 29, 2021

Hi @spamegg1 !! You have inspired me a lot to pursue this course!! Now[Sept 2021] there is "Python for Everybody" in the intro C.S. How do you recommend it? Also, I know programming already and considering to skip intro C.S. and directly start with CORE CS, though YOU took the "Introduction to Computer Science and Programming" using Python AFTER so much advanced stuff... what do you recommend? Is it worth re-learning the basics? Actually the problem is that in "Introduction to Computer Science and Programming using Python" you need to upgrade to give the mid-term and final exam.

[EDIT1] Looked up py4e, its a great course and on discord i saw many things, I hadn't seen before, so I will take it.
So now, the trouble is about "Introduction to Computer Science and Programming using Python"... will not giving exams be a problem?

@birimbau
Copy link

birimbau commented Dec 3, 2021

Hello,

Congratulations and I have to say that your path is an inspiration. At the moment I'm thinking on following OSSU as well, my question is if in the end of the course you feel that you have the qualifications to become an artificial intelligence engineer? Or if the Data Science OSSU degree is more suitable for that.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Dec 3, 2021

@synked16 This is a very common question. You can skip Py4E, but DO NOT skip "Introduction to Computer Science and Programming". That one has some quite hard stuff in it, and people who skip it suffer later.

@birimbau No probably not, the curriculum is very general and not geared specifically to AI engineering. I don't think Data Science is more geared for AI either. AI requires very strong theory and fundamentals. At the very least, you have to take all of Core CS. After that you'd have to go in your own AI direction. There is Modern Robotics in Advanced Applications.

@etorres07
Copy link

@spamegg1 thanks for the write-up; I also read your course reviews. How sure were you at the beginning that you wanted to do the 2 years (or whatever time it took) of the whole curriculum and how did you stick to it? I already tried once but I sort of burned out after CS50x (all assignments) and How to Code - Simple Data (I must have completed like 80%-90% of the course). I was having fun, I like CS, and I love to learn. I keep coming back to CS since 2010 so I don't think it's a problem with a genuine interest for the topic. I would like to try again but I'm not entirely sure how to set myself up for success on this one because of its length. I'm quite organized and disciplined--specially for the first 3-6 months--but I seem to run out of gas after the 6 months mark. Although I have to say that this happens outside of the CS topic as well. Any thoughts would be appreciated.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Dec 17, 2021

@eduardoltorres Hi, welcome.

When I started I didn't envision 2 years at all. I didn't have goals. I thought it would probably take 3-4 years, but my non-goal was to "become a life long software person" instead. Mentally I saw it as "I have nothing to lose." Also keep in mind I have the giant advantage of strong math, and skipping the math courses. Those are probably tougher than the CS classes for most people.

I actually could not stick to it for a while, as you've read above. Self-learning so many tough subjects is like climbing Mount Everest, so you gotta go easy on yourself and sometimes decide to move on. It's better to get through, say, 80-90% of the curriculum, than to get stuck on one part and refuse to continue. I'm not suggesting it's OK to leave gaps in your knowledge, but you gotta do what you gotta do.

Also we need to admit the limitations of online self-learning, as much as we'd like to believe it's amazing and perfect. Online self-learning is an extremely new thing in human history, we don't fully understand its effectiveness. When kids switched to online school due to the pandemic, we have seen the shortcomings of non-physical learning more clearly. Sometimes you need a teacher, a classroom, fellow learners, an environment to keep you accountable and get you through such a difficult curriculum. We're not meant to do everything by ourselves. No shame in admitting that. I'd have probably gotten through HtK with some other people (but face to face).

There were parts of the curriculum that is like candy to me: math heavy parts like algorithms, functional programming etc. Algorithms was about halfway through, and Scala was at the end, so I had big motivators spread out. So to get through the rough parts I've used some real hardcore delayed gratification and negative reinforcement!

I have done some tough long term things in the past, without "seeing the light at the end of the tunnel" and in general I like challenging/pushing myself (cold showers only since 2009!), so that seems to be well-suited for computer science. For example recently I started learning piano, and I don't have specific goals either; just a life-long direction.

My personality is such that I'm not a goal oriented person at all, and I didn't start this with the intention of "I'm gonna finish it in X amount of time!" I don't care too much about doing "real world applications" immediately, and I'm interested in academic things for their own sake, so that helps. Also when I'm learning something, I always look at it with a teacher's mind, not learning for myself, but "how would I explain this to someone else?" to help our others. So I ended up becoming a tutor for OSSU Discord, and a contributor/member.

I have a vision for what I'd like to be when I'm old, a powerhouse of "useless knowledge" 😄 This kind of thinking solves the "long term problem" for me. Same way of thinking allows me to stick to exercise habits, eating habits, brushing teeth. avoid hunching over, etc.

I'd like to say "this is what I did, so do that!" but I recognize I'm just a minority weirdo. (It's possible that math/CS people in general are weirdos 😄) So you'll have to figure it out what keeps you going. Maybe doing some projects in between courses, or contributing to open source, or just going into your own cave and do a private personal project to satisfy yourself. (Just don't take Hack the Kernel.)

If you have trouble sticking with long term things in general, and not just computer science, then that's another issue. Motivation in general is an unsolved problem and a lot of research says there is no one-size-fits-all answer. Many people, including myself, cannot find the motivation to even finish a video game! The Learning How to Learn and Mindshift courses have some suggestions there. To go beyond that you'll have to understand your personality really well, what motivates you, how you can "trick" yourself into doing things, the right combination of positive/negative reinforcement that works, or even how to do a bit of "self-brainwash" 😄

@dylancdavis
Copy link

Over the two years you worked through the curriculum, do you have a total hour count of the time you spent, or an estimated hours/week? The OSSU GitHub estimates 2 years at about a 20 hour/week pace and I'm curious to see if that pace is actually true in practice.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Sep 1, 2022

@dylancdavis I don't have a total hour count, but I'd say it's not accurate, it's longer than that. I was definitely doing more than 20 hours/week. I skipped all of the math, and my math skills significantly shortened Core Programming and Core Theory. For someone else it should be closer to 3 years.

@Vishal-Ichor
Copy link

@spamegg1 I am starting core theory and it says to use any programming language. so what do you use?..I see from the order you completed the course that you knew prolog and haskell at the time of core theory..so what language should I choose?

@spamegg1
Copy link
Contributor Author

spamegg1 commented Sep 3, 2022

@Vishal-Ichor Up to you! I used Python. For performance reasons it's probably a better idea to use a compiled language, not an interpreted one. Java is probably a good candidate. For a super hard core challenge you can use a low-level language like C where you have to implement everything manually from the ground up; or use Haskell because it does not allow any mutation! Note that this will take you much longer 😆

@ghost
Copy link

ghost commented Sep 19, 2022

Hi Sir,, can you tell me please what is PLABC mean? I google it but cannot find answer. it is a course? Thanks for your answer.

@WildRyc
Copy link

WildRyc commented Sep 19, 2022 via email

@ossu ossu deleted a comment Sep 20, 2022
@TheChronicMonster
Copy link

TheChronicMonster commented Oct 11, 2022 via email

@spamegg1
Copy link
Contributor Author

spamegg1 commented Oct 11, 2022

I am beginning an intensive 6-month program that will imitate what is usually completed in two years.

PLEASE don't do that. This curriculum should normally take about 3 years, I skipped the math since I used to teach it. Not to sound arrogant, but if it took me 2 years, it will probably take you longer.

The human brain takes quite some time to properly absorb so much information and convert it to knowledge. I've seen a few learners who tried to go quickly like this, and they did not retain much knowledge.

Finishing the curriculum in a short amount of time is NOT something to be proud of. Finishing the curriculum in a properly long enough amount of time, is.

I am now beginning to regret doing this AMA, as it gave the wrong impression I think. I never had a time goal.

My intention was to say "look it's a long journey, and a lot of things will happen during it, many of them unexpected and outside your control; you need mental and emotional resilience to overcome hurdles."

But people seem to be ABSOLUTELY OBSESSED WITH THE AMOUNT OF TIME instead. I've never understood this, but it seems like people are time-optimizing freaks. I wish I'd never mentioned the amount of time. Ironically it's too late now.

The mentality to get through the curriculum, in my opinion, is quite the opposite: not worrying about time, but accepting it as a long journey instead, going at your own pace instead of planning a time table.

@therealironjaw
Copy link

therealironjaw commented Oct 11, 2022 via email

@dtnwen
Copy link

dtnwen commented Feb 28, 2023

(I'll update this as I go along)

Proof of completion (you have to scroll sideways a bit)

Originally written: Tuesday, June 9, 2020

Course-by-course review (FINISHED!)

Took 2 years (late May 2018 - early June 2020)

My significant advantages:

  • used to teach college math. So I skipped math classes

    (there used to be A LOT MORE math in the curriculum, some of you might remember!)

  • worked on OSSU full time

Disadvantages:

  • easily demotivated, difficulty feeling rewarded

I am Strongly biased towards math and functional programming, biased against object oriented programming. I learn by doing, I dislike long lectures/concepts/info dumps.

What happened in 2 years?

  • two deaths in the family

  • got demotivated and "quit" twice: once for 3 weeks, once for around 2-3 months

  • lots of stress from economic/political/war stuff that happened where I live. Had a few panic attacks! Financially OK (quit stock market early enough to avoid losses)

  • hardware problems:

GPU broke right when I was taking CUDA programming. The irony!

Burnt motherboard's CPU socket from too long parallel execution. CPU is fine though!

  • COVID-19 (right at the end, during my Spec. Quarantine took a psychological toll on me. Also good luck finding hardware in a pandemic!)

  • Lost much weight, built a little muscle

Courses I took, roughly in this order:

  • CS50

  • How to Code 1,2

  • PLABC

  • Learn Prolog Now!

  • Haskell from First Principles

  • Nand2Tetris 1,2

  • Intro to Networking

  • Hack the Kernel

  • Intro to CS and Programming using Python

  • Core Theory

  • Databases (Stanford)

  • Computer Graphics (skipped last assignment)

  • Machine Learning

  • Compilers (from Udacity)

  • Software Debugging

  • Software Testing

  • Software Architecture & Design

  • LAFF - On programming for correctness

  • Intro to Parallel Programming (very hard!)

  • Functional Programming in Scala (5 courses, free to audit the whole thing!)

Courses I took that are NO LONGER on the curriculum:

  • Software Construction 1,2

  • Cryptography 1 (very hard MATH course)

Courses I took that are NOT on the curriculum:

  • CS50's second half and its final project

  • Software Processes (from Coursera)

  • Software Architecture (from Coursera)

  • Functional Programming in Haskell (from FutureLearn)

  • Design of Computer Programs (Udacity CS212)

Courses I did NOT take that ARE on the curriculum:

  • Software Engineering Intro/Capstone

  • The Security courses that were added recently

Things I wish I knew / I wish somebody told me before:

  • difference between Computer Science and Programming. Apparently it's huge! I was more interested in Programming since I have theory from my math background. Ironically it turns out I don't like Programming that much. Much prefer CS, especially algorithms.

  • How to create a "learning lifestyle" and stay motivated, feel rewarded.

Those "Mindshift" classes buried at the bottom of EXTRAS should be the first thing we are required to take!

The "shining core" of OSSU

  • CS50, PLABC, N2T, Core Theory and Machine Learning.

Best Courses:

  • Core Theory (Kruskal's Minimum Spanning Tree algorithm with Union by Rank and Path Compression and its running time analysis with the Inverse Ackermann function are so beautiful, I had tears in my eyes!)

  • Nand 2 Tetris (makes you feel like you can do ANYTHING)

Most useful courses: Core Theory and PLABC (by far)

Takeaways:

  • Be very clear about your goals and expectations from the beginning. OSSU might not give you what you expect!

  • If you only "kinda" like CS/programming, it looks "cool", but you don't "love" it, it's gonna be hard. Maybe reconsider? Or do only as much as interests you? Put things into a long term perspective.

  • Specializations are no big deal. Like "normal" courses. By far the most useful to prepare me for the Spec were PLABC and the Haskell book. The rest were not relevant. I could have EASILY taken the Spec after those (I had not even taken Core Theory at that point).

  • Don't pay! Not even for Specializations. They offer very little support and some stuff is outdated. Not worth the money.

  • Sometimes I focused way too much on finishing a course as quickly as possible and getting it out of the way, moving on to the next. I did not learn too well. When confronted with courses that were not very good / that I did not enjoy, my motivation would switch from learning to "getting it over with", forcing my way through. Don't do this! Better to skip such courses entirely.

  • Physical exercise is extremely important to stay consistent and motivated.

  • I pushed my "challenge yourself" thing a bit too far I think. At the same time I started OSSU I also started lifting weights and intermittent fasting. You should adjust things so that what you're doing feels A LITTLE challenging but does not overwhelm you.

What now?

  • I feel very burnt out. Don't want to see a single line of code for a while! Not even clever functional one-liners that magically process gigabytes of data.

  • I want to do some fun stuff later. I'll take CS50's intro to Game Development, then maybe audit the Game Specialization.

  • My goal was not to get a job (although a low-key part-time remote job would be nice), but to challenge myself. MISSION ACCOMPLISHED! By a lot.

  • My original goal was to take all of Advanced Programming. I'll do that at some point. Advanced Systems and Theory are left. Should take another 3 months or so.

  • Eventually I should bite the bullet and stop avoiding the topics I disliked: web programming and Javascript.

  • Looked at Scala jobs, Functional jobs, Triplebyte, and some local jobs. All want "senior" devs with 5+ years experience and lots of other tech I don't know yet. I can only work remotely. So I gotta keep at it! In addition to Spark, I will look into learning other tools in the Scala sphere: Akka, Play, Scala.JS

The Most Difficult Thing:

  • Reading an existing code base. Reading is extremely hard. This is probably why so much software goes unmaintained, rewritten and into the garbage.

The Most Important Thing:

  • Everything is at least 20x easier than Hack the Kernel.

@dtnwen
Copy link

dtnwen commented Feb 28, 2023

Thank you, would love to know what cs related you're doing now

@dtnwen
Copy link

dtnwen commented Feb 28, 2023

@synked16 This is a very common question. You can skip Py4E, but DO NOT skip "Introduction to Computer Science and Programming". That one has some quite hard stuff in it, and people who skip it suffer later.

@birimbau No probably not, the curriculum is very general and not geared specifically to AI engineering. I don't think Data Science is more geared for AI either. AI requires very strong theory and fundamentals. At the very least, you have to take all of Core CS. After that you'd have to go in your own AI direction. There is Modern Robotics in Advanced Applications.

@spamegg1
Copy link
Contributor Author

spamegg1 commented Feb 28, 2023

Thank you, would love to know what cs related you're doing now

Creating my own CS / Math curriculum.
Also check out Futurecoder which I worked on.

@krishnakumarg1984
Copy link

Creating my own CS / Math curriculum.
@spamegg1 Is this ready, and available online for students to see?

@vr-varad
Copy link

vr-varad commented Jan 8, 2024

@spamegg1 what are u doing now as if what's your professional as of now after all this

@awomae
Copy link

awomae commented Jan 9, 2024 via email

@JaihsonK
Copy link

Is it possible to put this course on your resume? Has this helped anyone get a job?

@waciumawanjohi
Copy link
Member

Is it possible to put this course on your resume?

My impression is that most learners list the advanced courses that they have completed (which generally demonstrate that the learner has completed prerequisite material).

Has this helped anyone get a job?

Yes, there are a number of OSSUnians that have used their study of the curriculum to proceed into grad school for CS or into a job in software engineering. This is easiest for those who have a Bachelor's degree in some unrelated field and are looking to make a transition.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests