I’m going to be delivering an online intro to programming session to a non-technical crowd who will be “following along at home”. Because it’s online, I can’t provide them with machines that are already set up with an appropriate development environment.

I’m familiar with Linuxes and BSDs but honestly have no idea how to get set up with programming stuff on Windows or macOS which presumably most of these people will use, so I need something I can easily instruct them on how to install, and has good cross-platform support so that a basic programming lesson will work on whatever OS the attendees are running. Remember they are non-technical so may need more guidance on installation, so it should be something that is easy to explain.

My ideas:

  • C: surely every OS comes with a C compiler pre-installed? I know C code is more platform-specific, but for basic “intro to programming” programs it should be pretty much the same. I think it’s a better language for teaching as you can teach them more about how the computer actually works, and can introduce them to concepts about memory and types that can be obscured by more high-level languages.

  • Python: popular for teaching programming, for the reasons above I’d prefer not to use Python because using e.g. C allows me to teach them more about how the computer works. You could code in Python and never mention types for instance. Rmemeber this is only an intro session so we’re not doing a full course. But Python is probably easy to install on a lot of OSes? And of course easy to program in too.

  • Java: good cross-platform support, allows for teaching about types. Maybe a good compromise between the benefits outlined above for C and Python?

Any opinions?

  • helianthropy@lemmy.ml
    link
    fedilink
    English
    arrow-up
    1
    ·
    3 days ago

    I’m also going to lean on javascript. It’s practical and if the student produces something interesting, it’s rather trivial to distribute (with minimal risk from sharing).

    There are various web-based tools as well, or going old school with locally edited files, the browser is also your debugger.

    Creating visual content is easy and there’s multiple options for output that don’t rely on extra code for a full app.

    Javascript also has that C-like syntax if you want curly braces and the like.

  • GnuLinuxDude@lemmy.ml
    link
    fedilink
    arrow-up
    7
    ·
    8 days ago

    Since you said non-technical I definitely recommend Python. It is easy to install and easy to get going with. It is feature ful. It is generous. You can do really interesting things without sweating details like pointers and segfaults.

    If this was a technically minded crowd, especially students like in high school and in person, I would have said C

  • HiddenLayer555@lemmy.ml
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    9 days ago

    I need something I can easily instruct them on how to install, and has good cross-platform support so that a basic programming lesson will work on whatever OS the attendees are running. Remember they are non-technical so may need more guidance on installation, so it should be something that is easy to explain.

    Honestly, as much as I personally despise it as a language and as much as you probably shouldn’t use it for large applications, JavaScript.

    If ease of setup and platform compatibility are your absolute top priorities, nothing beats it. Every mainstream OS runs JavaScript, and it’s already pre-installed in the form of a web browser. On any desktop system (and even mobile systems with some effort) you can use any text editor to write an HTML file with inline JavaScript and run it by just clicking it.

    Python, the next best option IMO, still requires knowledge of how to use the command line, and on Windows, requires installation that is slightly more involved than installing a regular program (adding it to your PATH, etc). Python for beginners are also limited mostly to console apps, and making a GUI is much more difficult especially for new programmers. Again, you’d first have to teach them what a console even is and how it’s actually still used by developers and is not a relic of the DOS days (something I’ve noticed non technical people tend to assume, they think GUIs made consoles obsolete). JS on the other hand is literally made to create GUIs on the web, meaning they will be able to create the kinds of software they’re already used to interacting with, which is both easier for them to wrap their minds around and also more enticing. Someone with no technical experience might wrongly assume that a text only interface is like “training wheels” and what they’re learning doesn’t apply to “real” software.

    More importantly, they will be able to show off what they built to their friends, without needing them to install anything or send source code or executables which can get blocked by social media filters. Services like Netlify will host your static pages for free, making sharing their work as simple as posting a link. Having a GUI is even more important in this regard, so they don’t have to walk their friends through how to use a console app when they barely understand it themselves.

    JS in the browser also has the benefit of being in a sandbox, meaning they can’t easily interact with other parts of their computer like files or system configurations. This may seem like a disadvantage but for someone just learning what programming is, it’s reassuring that they can’t accidentally kill their OS or delete their files.

    However, keep in mind that JS is pretty infamous for teaching bad habits that will have to be un-learned when switching to other programming languages (and so does Python TBH, though to a much lesser extent). It really depends on what kind of developers you want them to be by the end of this. For people just looking to casually make some interesting software they can show off to their friends, JS is probably the easiest way to do it. If this is meant to be the start of a path toward becoming actual professional developers, Yogthos’s suggestion of Clojure or Scheme is probably better because those languages will teach much more rigorous programming and software design practices from day one.

    • Machinist@lemmy.world
      link
      fedilink
      English
      arrow-up
      2
      ·
      9 days ago

      Second on Scratch. Then Python or Java.

      (Pretty sure windows doesn’t come with any compilers anymore. Even if it did, it lacks an ide.)

  • ☆ Yσɠƚԋσʂ ☆@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    9 days ago

    I would suggest taking a look at Scheme or Clojure for somebody who has no development experience. The big reasons being that these are high level languages so you can focus on learning the actual concepts without all the incidental complexity of imperative languages. Scheme in particular was designed as a teaching language. The other aspect is interactivity, Lisps have a tight integration between the editor and the REPL and you can evaluate functions as you write them. This is incredibly helpful for learning as you can write a function, send it for evaluation, and see the result immediately. So you can play with code and get an intuition for how things work.

  • Arcanoloth@lemmy.ml
    link
    fedilink
    arrow-up
    3
    ·
    9 days ago

    I’d be surprised if MS Windows came with a C compiler, tbh. But it’d be a bad choice for non-technical people anyway; it’s not exactly a user-friendly language…

    Python would’ve been my choice, but maybe also consider Lua (a lot of games include it as their scripting language, which might be an easy selling point for people)

  • bradboimler@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    9 days ago

    I suggest having your students install IntelliJ IDEA and using Java. A full blown IDE might be much but I can’t think of an easier way to install a JDK and an editor suited for it.

    • communism@lemmy.mlOP
      link
      fedilink
      arrow-up
      2
      ·
      9 days ago

      That might be a good idea actually. I think Java’s a good balance of demonstrating a variety of programming concepts (I think Python obscures too much that would be good to learn about for a beginner), and telling them to install IntelliJ should be straightforward enough without needing to babysit too much the install/setup process.

  • lefixxx@lemmy.world
    link
    fedilink
    arrow-up
    2
    ·
    8 days ago

    python or lua

    i loved learning on lua, it is a little better to learn than python (less keyword, “end” instead of }, 1-index, less types) but python is waaay more prominent

  • comfy@lemmy.ml
    link
    fedilink
    arrow-up
    3
    arrow-down
    1
    ·
    8 days ago

    If there’s no specific use-case (this is a general introduction, not Intro to Operating System Design) and this isn’t academic Computer Science teaching, then certainly a scripting language.

    Easy to learn, easy to use, and much more applicable for simple automation that benefits the people learning.

    C is dangerous if someone doesn’t take care. Java is verbose and personally I didn’t enjoy it one bit. You said this is a non-technical crowd and you expect them to follow at home.

  • BassTurd@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    9 days ago

    Python 100%. It’s the most human readable and easiest to pick up, especially for a non tech person. It’s easy to setup contrary to what I’ve read in the comments. Go to python.org install the latest version and that’s it. The downloader includes Idle so no other ide is required, but I’d consider vscode as well. Either watch an install video or better yet do it yourself before going to class.

    I think you need to highlight the differences between OSs when it comes to setup if you plan on having a mixed environment of systems. It will also affect the code you write, so to be thorough, you’ll need to cover those differences as well.

    Don’t go low level like C. These people will die the first time they have to compile in terminal.

  • Lightfire228@pawb.social
    link
    fedilink
    arrow-up
    1
    ·
    9 days ago

    Python

    It’s an amazing scripting language, and my goto for writing automation scripts.

    It’s the most lenient of the 3 with dynamic typing and managed memory. It’ll let you learn the basics of reading / writing / running code as well as basic control flow and logic

    C is also great to learn, as it teaches you how computers work at a fundamental level, but it’s more stuff to learn up front, and can lead to some very difficult to fix bugs

    Java is good as an “application” language. Being memory managed like Python, but statically typed like C. Static typing makes it easier to manage larger code bases

  • jacksilver@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    9 days ago

    Use Google Collab or another web hosted platform. If you’re unfamiliar Google Collab is a part of Google docs that you can run Jupyter Notebooks on (and it’s free). This avoids the need for anyone to install anything and means you can test materials in the same environment everyone will run against.

    Additionally, Jupyter notebooks makes it easy to add markdown, so instructions can be in stylized format and the students can run the cells over and over again to see how the output changes in real time.

    Lastly, I would lean towards python, but there are many different languages supported in Google Collab and similar web hosted tools.

  • WolfLink@sh.itjust.works
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    9 days ago

    Mac is very similar to Linux in that it comes with bash (these days zsh) and a lot of the command line tools you’d expect on Linux, including gcc and python3 installed by default. You’ll want them to have a decent text editor with code coloring. Sublime is what I was taught to use in university.

    Windows is more difficult. The command line is very different (it inherits from DOS instead of Unix like both Mac and Linux). It doesn’t come with Python pre-installed. I’ve generally installed git-bash when working on Windows. There are some Python libraries that work fine on both Mac and Linux but have issues on Windows.

    You could look into VSCode which is a decent IDE that works on all platforms. Of course, an IDE can be a bit of an information overload for a beginner, especially something like VSCode that’s constantly pushing AI features and plug-ins.

    • pivot_root@lemmy.world
      link
      fedilink
      arrow-up
      2
      ·
      9 days ago

      Mac is very similar to Linux in that it comes with bash (these days zsh) and a lot of the command line tools you’d expect on Linux, including gcc

      No it doesn’t.

      The gcc command is a wrapper for clang, and the clang command is a stub that runs an executable used to install the “Xcode Command-Line Tools”

      It also uses the BSD coreutils, rather than the GNU coreutils present on most Linux distros. The two are only compatible up to functionality defined by the POSIX standard, and anything beyond that is an inconsistent mess.

      Windows is more difficult. The command line is very different (it inherits from DOS instead of Unix like both Mac and Linux). It doesn’t come with Python pre-installed

      If you limit yourself to not using WSL, sure. WSL 2 runs an actual Linux kernel with the same Linux executables you would find on any other distro.

      It’s still Windows and full of telemetry and AI garbage nobody wants, but it somehow manages to have better Linux compatibility than macOS.

      • communism@lemmy.mlOP
        link
        fedilink
        arrow-up
        1
        ·
        9 days ago

        If you limit yourself to not using WSL, sure. WSL 2 runs an actual Linux kernel with the same Linux executables you would find on any other distro.

        I mean yeah but I don’t want to sit through instructing people how to set up WSL. I’ve only done it once years ago so maybe it’s simpler now—I don’t remember it being hard for me but for the average person I can imagine them getting confused at some point.

      • WolfLink@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        9 days ago

        I suppose my setup already has “Xcode command line tools” installed, so gcc works as expected. It’s been a while but IIRC the process for installing the command line tools is pretty self explanatory.

        I remember WSL being a whole process to setup, but it’s been a while, and as you might guess, I’m a lot more familiar with Mac than Windows.

        What I do know is I had to support a Python project on all 3 OSes and Windows was by far the hardest to get working. We were deliberately not using WSL for that scenario.