ossu / computer-science

:mortar_board: Path to a free self-taught education in Computer Science!
MIT License
165.56k stars 20.91k forks source link

Finished OSSU, ask me anything #727

Closed spamegg1 closed 3 years ago

spamegg1 commented 4 years ago

(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:

Disadvantages:

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?

Courses I took, roughly in this order:

Courses I took that are NO LONGER on the curriculum:

Courses I took that are NOT on the curriculum:

Courses I did NOT take that ARE on the curriculum:

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

The "shining core" of OSSU

Best Courses:

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

Takeaways:

What now?

The Most Difficult Thing:

The Most Important Thing:

martinrg commented 4 years ago

Thank you for this summary! You mention that you didn't take any math course... If you had to cove / review math for CS, what courses / books would you recommend?

Moreover, regarding CS50 vs MIT 6.0001, what's your take?

Another question that I wanted to ask you is whether you took CS50's Web Programming with Python and JavaScript ?

Thanks again for your help!

Best,

Martin.

On Tue, Jun 9, 2020 at 9:45 AM spamegg notifications@github.com wrote:

(I'll update this as I go along)

Tuesday, June 9, 2020

Course-by-course review (coming soon!)

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.

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 https://github.com/ossu/computer-science/issues/690
  • Intro to CS and Programming using Python
  • Core Theory
  • Databases (Stanford)
  • Computer Graphics (skipped last assignment)
  • 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)

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)

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.
  • 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.
  • I felt like the other classes did not add much, or were mid/low quality, or too unenjoyable, even though I enjoyed some of them A LOT, such as How to Code.

Best Courses:

  • Core Theory (Kruskal's Minimun 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!
  • 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.
  • I would not recommend doing OSSU as it's listed. Pick and choose your own courses. If a course feels boring, irrelevant, or not very useful, skip it. Don't get hung up for months like I did!
  • 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!

The Most Important Thing:

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

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ossu/computer-science/issues/727, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAPFBPSJ36MJHBRNBMJPZ4DRVYVH5ANCNFSM4NZL2YAA .

spamegg1 commented 4 years ago

@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 commented 4 years ago

I'm in the midst of MIT 6.00.1x right now, so that's a relief.

Thank you both for having this discussion!

On Tue, Jun 9, 2020 at 9:51 AM spamegg notifications@github.com wrote:

@martinrg https://github.com/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 https://number-python.herokuapp.com/ I bent over backwards to avoid Javascript, so I found something called Brython https://brython.info/ 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!

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/ossu/computer-science/issues/727#issuecomment-641310088, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABDLAES3H7Y7JBEGOT2QEADRVY453ANCNFSM4NZL2YAA .

spamegg1 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

Keep going, dude! Thanks for this beautiful review.

SarCoptU-zz commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

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

AbdesamedBendjeddou commented 4 years ago

@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 commented 4 years ago

@AbdesamedBendjeddou Very appreciated!

spamegg1 commented 4 years ago

@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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@calexandrepcjr @mabouguerra Thanks for all the encouragements!

xxzozaxx commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

@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 commented 4 years ago

@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 commented 4 years ago

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 commented 4 years ago

Regarding the other site: https://github.com/ossu/computer-science/blob/master/FAQ.md#why-is-the-firebase-ossu-app-different-or-broken

spamegg1 commented 4 years ago

@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 commented 4 years ago

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. https://github.com/ossu/computer-science/issues/466

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

ghost commented 4 years ago

@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.

Thank you for the clarifications, and congratulation on the massive undertaking, all the more impressive in light of the personal issues you describe you have been facing. I hope to some day reach your productivity levels...

CyrusYip commented 4 years ago

Hi, @spamegg1 .

My problem

  1. In terms of algebra, is there any difference between high school algebra and high school math?
  2. If I finish high school algebra, does it mean that I can skip algebra1 and algebra2 in high school math? If I finish finish high school math, does it mean I can skip high school algebra?
  3. I am taking Introduction to Computer Science and Programming using Python and I am bad at math(Please refer to my background for more information). In order to understand this course, which math course is more suitable for me-high school math or high school algebra?

My background.

I have graduated from high school for almost 3 years. I often flunked math in high school. I have never learn or use math since graduation. Thus, I almost forget the knowledge of math. I even forget how to calculate the area of a circle, Perhaps I can only do algebraic operation now.

Looking forward to hearing from you soon!

spamegg1 commented 4 years ago

@CyrusYip Yes, these lists on Khan academy seem to be confusing to a lot of people. They are more or less the same materials that cover the same things; but they are grouped differently for different people.

  1. Yes, high school math is more comprehensive with topics other than algebra. The high school algebra link you gave simply goes into more microscopic details of the algebra courses.

  2. Yes, I think these are the same algebra materials, just shuffled around (probably). I think you can go through the high school math link you gave, but even that one has a lot of repetitions grouped under different labels. Someone said that Mathematics I, II, III cover everything.

  3. How are you feeling in that course? Are you having trouble? That course introduces the Big-O Notation and the running time analysis of algorithms, so you need to be comfortable with polynomials.

Given your personal history I can say this. Our good friend @waciumawanjohi recently wrote some instructions for another person struggling with math. This may be redundant but it may also help you. Here it is:

If your pre-algebra is shaky, one of two things is likely:

You had great understanding of arithmetics and poor instruction of pre-algebra. You had poor instruction in arithmetics. Either way, Khan Academy is the go-to resource.

I recommend you start with this assessment on arithmetics: https://www.khanacademy.org/math/arithmetic#arithmetic-subject-challenge

If you knock it out of the park, great! Move on to this assessment of basic geometry: https://www.khanacademy.org/math/basic-geo#basic-geo-subject-challenge

After basic geometry is pre-algebra: https://www.khanacademy.org/math/pre-algebra

Then you will be ready for Math 1, 2, 3 which will cover algebra, pre-calculus, high school geometry, trig, stats, etc.

For memory related problems, I recently took this course that goes into how Long Term Memory works, and what to do to make things stick: https://www.coursera.org/learn/learning-how-to-learn/ It's a 4-week course but you can probably finish it in 4 days. Turns out regular, spaced repetition and lots of sleep are very important for long-term memory.

CyrusYip commented 4 years ago

@spamegg1 Thanks for your thorough explanation. Your explanation really removes my doubts. @waciumawanjohi ' s instructions are helful, too. I just began the intro course several days ago and finished the contents of week1. I have not met big problems in week1. When I learned the approximate method in week2, it was hard for me to image the process of the method. It suddenly occured to me that whether I should learn math before moving on. I have no idea what is polynomial or Big-O Notation. It seems that I need to take math course at first.

As for waciumawanjohi' s instruction, does that mean that arithmetic, basic geometry and pre–algebra are prerequisites for high school math? If I can pass the assessment of the three courses, I can begin high school math. If I fail the three courses(or some of them), I should learn the courses I fail before taking high school math course. Am I right?

spamegg1 commented 4 years ago

@CyrusYip Yep that's exactly right. Take those assessments and go from there. Good luck! Also drop by on Gitter, I'm always there.

Mo-Fatah commented 4 years ago

Congratulations , You really inspired and motivated me to continue , I hope you the BEST .

I am now in "programming languages C" , and I am really stuck with the first assignment , the provided code doesn't run and causing errors and the discussion forums are dead , nobody responses . I think the problem is with my ruby version or tk library maybe I don't know . Could you tell me what exactly did you do in the setup for the assignments ?

this is my thread : https://www.coursera.org/learn/programming-languages-part-c/discussions/weeks/1/threads/lDLYoXZ8TWqy2KF2fA1qGw

spamegg1 commented 4 years ago

@Mo-Fatah Come to Gitter, I can help you more easily there.

I tried running my own solution on my current PC and I get the same errors.

EDIT: I got it working. First I installed ActiveTcl, then installed the gem with: gem install tk -- --with-ActiveTcl

spamegg1 commented 4 years ago

@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 commented 3 years ago

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 commented 3 years ago

Where are you from?

spamegg1 commented 3 years ago

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

synked16 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

@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.

eduardoltorres commented 2 years ago

@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 commented 2 years ago

@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" :smile: 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 :smile:) 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" :smile:

dylancdavis commented 1 year ago

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 commented 1 year ago

@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 commented 1 year ago

@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 commented 1 year ago

@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 :laughing: