SkillAgentSearch skills...

Reviews

Reviewing some online CS courses I took

Install / Use

/learn @spamegg1/Reviews

README

Spam's CS Corner: Course Reviews

Contact me: spamegg1 on Discord, or on Slack, or on Matrix

It soon became clear that the unconscious instincts for logic and language which had enabled me to succeed were not shared by the large majority of my students. - Susanna Epp (author of Discrete Mathematics with Applications, 5th edition)

Bjarne Stroustrup on the importance of Mathematics and Computer Science fundamentals

DISCLAIMER: These are my subjective personal opinions! Make your own judgment. Also, I will talk a lot about my feelings! You are warned.

I keep mentioning something called OSSU. Here it is in case you haven't heard of it.

Originally written June 2020

Updated September 2020 (Game Theory 1)

Updated November 2020 (Formal Concept Analysis)

Updated May 2021 (Fullstack Open, Intro to Logic)

Updated July 2021 (Effective Programming in Scala)

Updated June 2023 (Kotlin for Java Developers)

Updated November 2023 (C for Everyone)

Updated February 2024 (Semantics of First Order Logic)

Updated March 2024 (Jetbrains Academy Functional Scala)

<a name="tips"></a> Learning tips

Metacognition, universal patterns

  • Prioritize math, logic and proofs. Logic is the root of all the thinking patterns and the concepts. Writing proofs is the best way to strengthen your metacognition. "Coding is to programming what typing is to writing, if you learn to program by learning to code, you essentially only know how to type." In this quote, writing / programming is math, more specifically writing proofs. Everything you're doing is a proof whether you know it or not!
  • Think "I'm trying to prove something", not "I'm trying to do something" (or make something work).
  • Take your hands off the keyboard, get pencil and paper, work it out first. Don't bang on the keyboard like a monkey trying to write Shakespeare.

Hitting the wall of meta-knowledge

  • Most people (not everyone) can do a decent amount of math / CS (not all of it), but usually proper instruction and proper thinking habits / patterns are missing.

  • "I'm just bad at it" is not a good explanation.

    • I've had students who were terrible, and then became very good within 1-2 months.
      • Because some ideas started to click in their minds.
    • They were able to identify what their issue was, probably subconsciously.
  • There is something I'd like to call "hitting the wall of meta-knowledge":

    • you're "bad at it", but repetition / exercise does not help much, and
    • you don't know the reason or what you're lacking, and
    • you don't know where / how to learn it.
    • Or, you are able to "get through" the problems, but it feels like you're not really getting it, or don't know why what you're doing is correct.
    • You don't know what it is that you don't know, hence the name "meta-knowledge".
      • It is not necessarily something explicit like a topic or subject that you are missing.
      • It's more often something implicit, like a thinking pattern, connection, idea.
    • I've seen people who skyrocketed once a good teacher solved this issue for them.
    • I've also seen the opposite unfortunately:
      • some kept studying, struggling over and over for a long time without getting better.
      • They couldn't climb over the wall of meta-knowledge.
      • They would solve one problem with help, but get stuck on another problem right after.
      • They couldn't abstract or generalize the problem solving methods.

Implicit knowledge and meta-knowledge deadlock

  • The above goes into tacit, or implicit knowledge.

    • Even most teachers don't know how to teach it.

      • They "get it" but they don't know why they get it and their students don't.
      • The general belief is that, with lots of practice, you'll eventually connect the dots.
        • Like walking through a very light, gentle rain and eventually getting soaked without even realizing it,
        • also known as learning by osmosis.
    • This is the "expert blindness" mentioned in the video linked above.

      • The student and the teacher are stuck in a meta-knowledge deadlock:
        • The students do not know what it is they don't know,
        • and the teacher does not know what the students are missing either.
    • Some examples:

      • It soon became clear that the unconscious instincts for logic and language which had enabled me to succeed were not shared by the large majority of my students. - Susanna Epp

        • It's not really instinctual; logical / mechanical / symbolic / abstract thinking is not very natural for human beings in general.
        • But this shows that even the best teachers believe that it's instinctive and that not much can be done.
      • Math for CS prof Albert Meyer could not figure out why 20% of his students were struggling with induction:

        • The reason was the implicit use of Modus Ponens, students told him "it feels like circular reasoning".
          • The course does not teach any deductive calculus. So the students are missing the underlying ideas, which are implicitly assumed.
        • But instead he decided to put proofs by contradiction via the Well-Ordering Principle ahead of induction in the course to solve students' issues with induction, which did not help.
        • Came to a false conclusion "20% of students just can't get it no matter what."

Breaking the deadlock and climbing the wall

  • So, what to do?
    • Get expert feedback, from a human, not chatGPT.
    • Stop drilling problems and look into studying the foundations!
      • Look beyond the surface level technical details, look for the reasoning patterns.
    • Use EMPATHY! Like so:
      • Adopt a teacher mentality (below), try explaining it to someone else who is less knowledgeable than you.
        • Or a rubber ducky.
        • "Explain like I'm five".
      • If you can't teach it, you don't understand it well enough.
      • Anticipate the ways they won't get it, assume they are missing the mental patterns you (subconsciously) have.
    • Even when you get it right, remain unsatisfied.
      • Think deeply about why it was right, how it could be wrong, whether it generalizes.
    • When you don't get it right, try to identify the underlying idea or concept that you're not getting.

Mental habits

  • Split your mind into two people: teacher and student.
  • Assume the teacher's role and explain what you learned to the student.
  • You can practice this anywhere, anytime (on the bus, in the shower, when you're exercising, etc.)
  • It's a bit like talking to yourself, but instead of going crazy you get smarter.

Motivation, Mental Resilience

  • Consistency is key! No matter what, do not skip even one day, even if you study just 5-10 minutes that day.

    • Have the marathon mentality.
  • Follow through and finish what you started! If you get bored and lose motivation, don't abandon it: stick to it a little bit every day (see above).

  • It's all about doing what you don't want/like to do. (Just like life in general) It's very difficult and usually not all that pleasant. It has to be a struggle; without struggle there is no growth.

  • Adjust your expectations! Your expectations are almost always too high, and they are your enemy. Falling short of your unrealistically high expectations will demotivate you quickly. This applies both to your expectations from yourself, and from the language / tools you use.

  • You are always behind, despite getting stronger. That's OK. Because when you get stronger, you notice the harder problems and set your sights on higher challenges. You notice how much was beyond your vision previously. It opens up a whole new world of more stuff you don't know. You didn't know how much stuff there was that you didn't know. Now you have a much better idea of how much you didn't know (it's a lot more than you thought!). Some peo

View on GitHub
GitHub Stars349
CategoryData
Updated6d ago
Forks17

Languages

JavaScript

Security Score

100/100

Audited on Mar 31, 2026

No findings