It actually uses a variation of LISP. I know old MIT college courses in Computer Science used to teach it.

The book, “How to Design Programs,” is based on a variation of LISP, which I know used to be taught in college computer science courses.

I have zero programming experience, but I want to learn—not for a job, just to truly understand it.

A lot of modern advice says to start with Python because it’s easier or faster, but I’m not looking for shortcuts.

I want to go old-school. This book teaches programming with a 1990s-style approach. It may not use the latest tools, but I’ve heard it actually teaches how to think like a programmer and builds real logic skills.

Once I finish it, I plan to take the University of Helsinki’s Java MOOC. Again, sticking to fundamentals and learning the core ideas, not just trendy frameworks.

For context, I’m not naturally a math person either—I’m teaching myself beginning college algebra right now. That’s less about going old-school and more because I never had a college education, so I’m starting from scratch across the board.

So, does this sound like a solid strategy? My goal isn’t a career—just a deep, strong foundation to see if I can really do this.

What do you all think?

  • setsubyou@lemmy.world
    link
    fedilink
    arrow-up
    5
    ·
    10 hours ago

    IMHO, LISP is ok for theoretical fundamentals but it won’t necessarily get you a practical understanding of how computers work. Functional languages are more like how mathematicians wish computers worked. All programming languages are abstractions, but functional languages abstract away how the underlying hardware works in ways that procedural languages don’t.

    And Java is pretty useful if you want to get a job but if you don’t want that, then there are less painful options. The difference to Python is mostly that Java often feels like it was intentionally made annoying to use. But it’s a pretty high level language, I wouldn’t call it more fundamental or basic than Python. Java wins on performance but that has nothing to do with how high level it is.

    For practical fundamentals, if you actually want those, I’d recommend starting with microcontrollers and their assembly. Modern CPUs are so complex that learning fundamentals from scratch with assembly is quite difficult. But with smaller/older microcontrollers (like PIC or something) it’s both more approachable and more useful. It’s almost a shame that hobbyist microcontroller platforms are pretty advanced now too. But you can move on to C first, you can ignore MicroPython for a while if you want.

    If you want a game way to learn absolute basics, there is a game called Turing Complete. It basically teaches you how to build your own CPU architecture from logic gates. You start with the basics about logic circuits and eventually build a simple CPU, and then another more complex one. I think this actually goes a bit too far in terms of fundamentals, it will take you forever to learn how to even make something write Hello World on a screen. But I guess this is the closest to how I started out. Of course for me the logic part was theory only. And the CPU I eventually learned programming first was a 6502 and not something I designed myself.

    • astrsk@fedia.io
      link
      fedilink
      arrow-up
      7
      ·
      10 hours ago

      I will always recommend Ben Eater’s breadboard computer 6502 project for anyone who wants to know how it works. The 8-bit breadboard computer project as the next step too, to really dive into all the pieces. But the 6502 project is a nice entry point into hardware itself as well as the basic components of processor and memory. How and what the 1s and 0s are doing and how to make them do what you want them to do. Getting up to a working character display and serial input for a keyboard to type is such a satisfying process that takes only a few hours if you kinda know what you’re doing and a few days if you know nothing.

  • solrize@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    edit-2
    14 hours ago

    I don’t remember being that impressed with HTDP but it’s been a while and I didn’t look much. I’d say read SICP first in either case.

    The Java thing sounds totally uninteresting and if your next language after Lisp isn’t a a mainstream one, I’d say try Haskell.

    Regarding math: it can help but it’s not that important for pure programming. If you’re good at languages and writing, that’s helpful in the same way. If you’re good at music, that is at least a helpful mindset.

    • Proudly Green@feddit.ukOP
      link
      fedilink
      arrow-up
      3
      ·
      edit-2
      14 hours ago

      I don’t remember being that impressed with HTDP but it’s been a while and I didn’t look much. I’d say read SICP first in either case.

      I actually read that HTDP was written to be read before SICP, because they thought that for a beginner, some of the core fundamentals in SICP may be missed.

    • Proudly Green@feddit.ukOP
      link
      fedilink
      arrow-up
      1
      ·
      14 hours ago

      The Java thing sounds totally uninteresting

      Again, about fundamentals. I actually wanna do python since is seems more “fun” but I wanna get all the basics down. And I did read after you have learned the harder languages, learning other languages comes much easier.

      But I’ll look into Haskell. Thank you!

      • solrize@lemmy.world
        link
        fedilink
        arrow-up
        7
        ·
        13 hours ago

        Java isn’t exactly hard, and it’s not particularly fundamental. It’s just bureaucratic, and Python will be both more enjoyable and more useful. Java was trendy in the 1990s and lingers on because so much Java code is still around. If your goal is to use a serious type system (Lisp and Python don’t have that), Haskell will be far more enlightening than Java. If you want to use the JVM for some reason, Clojure (a Lisp dialect that run in it) might interest you.

        For low level fundamentals, you want assembly language! That gives you almost no assistance and you have to do EVERYTHING yourself, organizing the program in your own head. For old fashioned imperative programming with lots of organizational assistance, try Ada.

        You will probably have to learn C at some point, but save it for later when it will be easier for you to spot the weaknesses.

      • NightFantom@slrpnk.net
        link
        fedilink
        arrow-up
        1
        ·
        11 hours ago

        In university we had c++ and python courses alongside each other, and I currently get paid to write python. I honestly believe my knowledge of c++ (and of course the rest of the courses which went deeper into cpu architectures and data structures and whatnot) makes me a better python programmer, because of the deeper understanding of what goes on under the hood.