Another excellent piece from Iris Meredith - strongly recommend reading if you want an idea of how to un-fuck software as a field.

  • V0ldek ( V0ldek@awful.systems ) 
    link
    fedilink
    English
    arrow-up
    8
    ·
    1 year ago

    I’m glad this exists even though I vehemently disagree.

    I would bounce right off a course like this. I fucking hated the webdev course we had. I don’t care about websites. Writing a program in C that finds a shortest path in a graph and dumps it to the terminal? Fuck yeah, that’s where the dopamine lies.

    I agree that teaching people Java or Python as the first language is a bad idea, but for me it’s not because they need something simpler that has tangible results - that’s the opposite of what my experience tells me! I want them to write code in C that doesn’t produce any GUI at all. They need to know how to test code that has no visible buttons to click. How to debug code just using a debugger. Having a tangible result other than just a dump on the terminal is a blight, it makes people lazy. It’s very easy to determine that the program works because when I click through buttons in the GUI it does what I expect. When you have a library that doesn’t have a GUI but just does things to objects in memory you can’t take a shortcut, you need robust testing to convince yourself it does what you want. If you are GUI-centric, they will think that the only code that matters is the one that they can see from the front-end. This is precisely the way people get taught coding now with Python - it doesn’t actually matter what is the code, it matters that you get a plot that looks right at the end.

    The way to enlightenment lies in having 200 lines of C code that segfaults but only sometimes and having to figure out where the bug is using nothing but a debugger and your brain to analyse the code you wrote. That’s how you learn how a computer actually works underneath, and once you get through that then stuff like Java or Python is small potatoes. You’ll get the high-level language because you’ve seen the nightmare underneath the surface.

    If the problem is that people don’t feel motivated to do that and need a pretty website to feel like coding is fun then idk maybe they should train in something different? If having to debug broken code feels bad then you might want to do something else that’s more rewarding. It’s fine if there’s like 50% fewer programmers but they’re more conscious of all the layers between the user and silicon on average and fixing arcane problems scratches their itch.

    • lproven ( lproven@awful.systems ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      I don’t care about websites.

      Agree, in spades.

      Writing a program in C that finds a shortest path in a graph and dumps it to the terminal?

      Disagree, although I am not immune.

      Graphics. That, for me, is key. Drawing pretty pictures (procedural stuff, like Logo; fonts; and teenage me’s particular crack, fractals) was where it was at.

      Fuck C and everything it spawned. Give me a Pascal-family thing that doesn’t have so much fucking syntactically significant punctuation marks FFS. WORDS, mthrfckr, words not code-breaking types of bloody parentheses.

      • V0ldek ( V0ldek@awful.systems ) 
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

        C is a terrible programming language and I think we must be clear and open about it when teaching it. But it is perfect for what it is: a showcase of how terrible all those low-level details are, how pointers work and why you don’t want to rawdog them, etc.

  • istewart ( istewart@awful.systems ) 
    link
    fedilink
    English
    arrow-up
    7
    ·
    1 year ago

    The point about a static site generator being an ideal intro project is well-taken. I’m working my way through Practical Common Lisp right now, as it’s recommended as one of the best CL intro books, and its intro project of an MP3 database is only barely relevant to me because I still have a stash of MP3s I started building up around the time of the book’s original publication.

    I struggle to imagine what might supplant the HTML generator suggestion in the future. If anything, its desirability is made more apparent by the proliferation of JS monoliths all over the Web. You can show students how quickly it renders compared to a corporate website or heavyweight social-media feed, use that as an introduction to performance considerations and profiling, introduce modularity by bolting on a more dynamic framework piece-by-piece…

    • BlueMonday1984 ( BlueMonday1984@awful.systems ) OP
      link
      fedilink
      English
      arrow-up
      2
      ·
      edit-2
      1 year ago

      I struggle to imagine what might supplant the HTML generator suggestion in the future.

      I can’t really think of anything to supplant it either. The only addition I can think of would be some complementary arts education, to build students’ creative abilities and further highlight the expressive elements of software.

    • lproven ( lproven@awful.systems ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      I hadn’t seen this post of yours before. I like it. I like it a lot.

      My $SPROG can’t really read very well yet but she can open a saved program in Scratch and run it and show off the results, in SUGAR. I was so proud.

    • zogwarg ( zogwarg@awful.systems ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      When I was a kid in France it was Basic on TI and Casio graphing calculators, while in principle I agree that not every child will enjoy math, the sieve of Eratosthenes, LCM and GCD are good exercises for a first program. And i think it’s easy to grasp that it’s a lot less tedious to write a program for it, than to do it by hand.

  • swlabr ( swlabr@awful.systems ) 
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 year ago

    I completely agree with this. Good, lucid, concise commentary on CS/SE education and how to improve it. If I had written this article I’d just be telling people to ban python in coding education.

      • Architeuthis ( Architeuthis@awful.systems ) 
        link
        fedilink
        English
        arrow-up
        6
        ·
        1 year ago

        Not who you asked, but both python and javascript have code smell as a core language feature and we are stuck with them by accident of history, not because anyone in particular thought it would be such a great idea for them to overshoot their original purpose to such a comical degree.

        Also there’s a long history of languages meant to be used as an introduction to coding being spun off into ridiculously verbose enterprise equivalents that then everyone had to deal with (see delphi and visual basic) so there’s certainly a case for refusing to cede any more ground to dollar store editions of useful stuff under the guise of education.

      • swlabr ( swlabr@awful.systems ) 
        link
        fedilink
        English
        arrow-up
        6
        ·
        1 year ago

        Short version is that 10-15 years ago, when I was a student, it had the same “vibe” as vibe coding has today, i.e. the promise of easy implementation, but with the final product being sloppy, unreadable and buggy.

        • diz ( diz@awful.systems ) 
          link
          fedilink
          English
          arrow-up
          8
          ·
          edit-2
          1 year ago

          Python code really requires 100% branch coverage tests as an absolute minimim… with statically typed languages the compiler will catch some types of bugs in branches you don’t test, with python chances are it won’t.

          edit: basically think of non covered lines the way you think about files you didn’t compile.

          • swlabr ( swlabr@awful.systems ) 
            link
            fedilink
            English
            arrow-up
            3
            ·
            1 year ago

            Great question that I don’t have a good answer to. My bit about python was more just a throwaway joke that was also supposed to indicate that my own opinions aren’t sufficient to write the linked article.

            Here are some wrong answers, but with reasons for and none against:

            • Assembly: really gets you to understand that you are contending with a computer chip, and that anything interesting that you want to do requires abstraction.
            • C: similar to the above, but also gets you to understand some of the fundamental aspects of programming languages, mostly memory.
            • Perl: if you’re willing to teach python, why not Perl? Less readable, more magic, fun language to play golf with, so tutorial exercises could be fun.

            By coincidence, these are the first three languages that I encountered as a CS student with no preexisting knowledge of programming (not in this order).

            Anyway, for something approaching a real suggestion: Dart/Flutter could be an interesting choice, for some of the reasons given in the article for HTML. I haven’t given this much thought so this might still be a bad answer. Also this is the language I’m using at work right now.

            • Gotcha. It’s still a fun question to think about though.

              My uni switched from teaching their intro classes in Java to python the year before I started, and in defense of python, I have to say: it’s so simple for small things, that it gets out of the way in the classroom. Sure, it’s not great for big projects, but it is very easy to demonstrate concepts in a readable manner.

              (That was the second program I enrolled in, btw. The first one, at another uni, they started with Haskell. No joke. And while I do appreciate Haskell and functional languages in general now, maybe in part due to this, it just got in the way of the concepts they were actually trying to teach.)

              But in any case: uni isn’t really there to teach you to code. That’s something you are supposed to pick up on along the way, or on the job.

            • Assembly: really gets you to understand that you are contending with a computer chip, and that anything interesting that you want to do requires abstraction.

              This is only tangential to your point, but I did remember (now-defunct) game studio Zachtronics put out a few games heavily featuring assembly: TIS-100, which directly revolves around programming the titular computer in its own version of assembly, and SHENZHEN I/O, which centers around building embedded systems and programming the microcontrollers contained within.

              The company’s catalogue is completely free for schools under the Zachademics program, so you could use them to show how assembly programming’s like if you were running a school.

              • froztbyte ( froztbyte@awful.systems ) 
                link
                fedilink
                English
                arrow-up
                3
                ·
                1 year ago

                frankly, it’s really not a good idea to early-years kids assembly (double especially not fantasy assembly), if your goal is to encourage learning the field. this is why all the strong/popular pi-based educational distros and options focus on stuff like scratch, some light python (often paired with light pygame and turtle), and other low-entry-effort exploratory things like sonic-pi

                many do come to explore programming topics in depth later (asm via zach games, other structural/dependency things via satisfactory/factorio, etc), and that’s fine too

                there is of course a longer-term balance to be struck with (and structural problems coming from) people not understanding the layers below them (cf. current nightmare of tottering piles of javascript and continually worsening app performance everywhere despite having literal supercomputers in our pockets), but “learn asm” is bad starter advice for the same reason that “you should know how to write in c” has been part of why we’re in this fucking mess in the first place