11
junon
61d

I might create a coding course for people actually interested in learning how to program correctly (not Get Rich Quick Bootcamp style, not webapps, not magic Javascript incantations).

I have an idea on how to structure it but I worry it'll be too weird for most people to follow (starting from binary theory and then teaching machine code and then working upwards to C and beyond) explaining how a computer works along the way, showing the real errors with annotations explaining things, etc.

I've always wanted to teach in this format but I feel as though it's too.. idk, "useless" to most people? But I've never had a friend go through e.g. CodeAcademy and come out knowing how to actually make applications from start to finish without just hacking together random React components and hoping the frankenstein project works well enough.

The target demographic would be those either completely new to programming or just have a fundamental or web-centric preexisting knowledge, or maybe those who simply want to understand computers better.

Am I barking up a shitty tree?

Comments
  • 1
    @Root @SortOfTested @kiki would love your thoughts as we seem to share many viewpoints about how/what people learn.
  • 1
    There are couple of projects around generating book / html page from markdown.

    You might want to look at them.
    One of them is mDBook ( written in rust )
    It’s nothing revolutionary but can help.

    Good luck !
  • 3
    @vane The format would be an interactive desktop application with a structured, tree-like curriculum. You would write code that actually runs and you can inspect the output and see what is happening at multiple layers.
  • 1
    Cool but that’s challenging and there are fundamentally challenging problems
  • 1
    @kiki Any examples of the problems? I know you have a lot of relevant experience here.
  • 1
    @junon Cool I had similar idea couple of years ago yet I haven’t got patience to finish it.

    Things to remember:
    - installing dependencies - nobody would like to install them by themselves ( I wanted to hack writing wrapper over qemu and docker but amount of glue code scared me).
    - terminal emulation
    - explaining steps between your actions
    - drawing some diagrams

    I think those were things I considered as blockers. Maybe web assembly can solve something.

    Or you can just start small and add features as you encounter them.

    Anyway good luck !
  • 2
    @vane Good points, fortunately I've been down this road before.

    - Dependencies would be bundled on the platform I intend to distribute on. Glue code isn't an issue here since I've worked with LLVM pretty intimately.

    - Web assembly would come in handy here though I only intend to provide a terminal-like Interface in select situations.

    - Not sure what you mean for this third point.

    - Diagrams are the easy part in this case :)

    And thank you for the well wishes ^^
  • 1
    @junon oh, a lot. For example dependency organization based on project size and countless similar problems
  • 0
    @junon explaining steps I meant how to explain user what’s going on the screen that is visually appealing and understandable.

    I was thinking about qemu just because I could use it later as a bridge to offer some cheap one click hosting / deployment for user code to the “private cloud”.
    But maybe your approach with bundle is also good.
  • 0
    I'm not sure how much market there is for that considering the time you'll need...
  • 0
    @Root reminder
  • 0
    @N00bPancakes Can you expand on that?
  • 0
    @junon

    I did a boot camp. It was 3 months non stop full time type hours.

    To really get beyond only being able to graft this and that together you're going to need a lot more time.
  • 0
    @N00bPancakes This isn't a Bootcamp though.
  • 0
    @junon how many hours of material are you thinking then?
  • 0
    @N00bPancakes Not sure, I'm not going by hours. I'm going by number of lessons. They aren't seminars, videos or whatever. Time is not a variable while using it.
  • 2
    @junon when I was teaching myself back in undergrad (because shitty undergrad college), I found this course and followed it, the materials can be had for free. Pretty comprehensive view of computer systems for programmers assuming you know just the very basics of programming already (look at "schedule" for stuff).

    https://www.cs.cmu.edu/~213/

    Might help you organize things . Tbh I'd call this slightly outdated but eh, I found it super useful.
  • 1
    @RememberMe Nice, thank you :D
  • 1
    @root reminder :D
  • 2
    I like the idea, and that is basically how I learned.

    I did some back and forth between low and high level, too, which seemed to work pretty well for me as it helped me learn both sides of programming and meet them in the middle.

    1) TI-Basic
    Learned how to edit an existing program (it looked like garbage at first). Learned to write my own, and mastered the language.

    2) z80 Assembly
    This let me do things that TI-Basic didn’t, and it was actually fast! But so much more difficult. Also requires me to learn what a byte, pointer, register, interrupt, was etc.

    3) VB
    brief foray into VB because required; trivial after the above. Allowed me to build windows applications with many moving parts, and use high-level everything.

    4) C/C++
    This tied everything I knew and learned together. It solidified my low-level knowledge and pointer skills, helped me write better / more complicated data structures than I could in Assembly, and allowed me to interact with userland and build some high-level features, too.

    From there I went into game dev.

    There were a few things I didn’t lean that I sorely missed: the internals of how floats work, binary trees and related, the implementation of instruction sets, and how compilers work.

    Honestly, I really believe the focus on low-level helped me be a better dev, as most of it is now second nature.

    ———

    I love your idea of being able to inspect what’s happening at multiple layers of the application. That helped me considerably when transitioning from Assembly to C++, and when writing low level graphics routines in game dev.

    tl;dr
    Great idea. Let me know how it progresses! I’m actually looking forward to taking the course when you’re finished 😊
  • 1
    Thanks @root :) Confirming my experiences as well.

    Will definitely keep updating here ^^
  • 0
    While I think that this is the right way to learn, I also know that there are very many (maybe even the majority) devs that are simply not interested in all the details and basics. They are pragmatic and just stick to what they know and what works for them, even if they don't understand it fully. And they see no reason to change that.

    So, your approach will be attractive to a very narrow set of potential users. But that shouldn't be a bad thing necessarily.
  • 2
    @Lensflare I'm not interested in those people; they are a huge problem anyway, in my opinion.
  • 2
    @Lensflare That kind of person makes for an absolutely abysmal developer. Do not want, do not like, would never hire.
  • 1
    To me, it's the equivalent of a surgeon getting hired and only ever wanting to play with hearts without knowing how the rest of the pulmonary system works.

    "Hey this is fun, and Im making money with it too! So easy!"
  • 1
    They sound like a shell script. 😔
  • 0
    Nice to hear that.

    The last two companies I was forking for, had mostly those kinds of devs. Do you have different experiences?
  • 1
    @Lensflare Only in certain, lucky cases. However, working with open source has shown me that most projects outside the "fad" technologies sphere tend to have developers that know what they're doing. It's also why I tend to gravitate toward C++ - the community is generally very knowledgeable, if not a bit colder.
Add Comment