Ask HN: What would you look for in a platform to learn programming?
I'm curious, what does the perfect programming education platform look like to you?
I'm an experienced developer, but I really think that the current options for learning programming could be a lot better. I know that there are platforms like CodeCademy and places to watch video courses like YouTube and Udemy. There are also so many scammy "learn to code" sites (CodeFinity).
The pattern I notice is that platforms like CodeCademy are web-apps and are very career-path-oriented (i.e. get certifications). I personally think that having a platform which was a desktop app would be a better solution. Rather than focusing on career-tracks, you could follow courses to build a specific project using an integrated IDE, 100% on your machine.
How important are career-tracks and certifications to you? Or, would you rather just learn to build a specific project on your own machine all in one application?
Basically, a native desktop platform to learn programming by actually building projects on your own machine. No BS.
A series of loosely guided, non-interactive tutorials that require researching/figuring out on your own with some pointed hints when one gets stuck. Many of the online platforms are too hand-held and gloss over a lot of pretty important details about the how/why of writing, building, running a program. It'd be nice to see something that introduces a lot of correct vocabulary for unknown unknowns that equips someone with the tools needed to find answers on their own by knowing the right words to punch into a search engine.
Even just referring to the opening pages from K&R it says: "you have to be able to create the program text somewhere, compile it successfully, load it, run it, and find out where your output went. With these mechanical details mastered, everything else is comparatively easy." Jumping right into "hello world" that runs in a fully abstracted web IDE glosses over so much of the basics that a complete programming novice wouldn't understand.
My experience with being self-taught was that struggling with really basic things like installing the language/runtime/whatever and actually getting a hello world working to then write more involved apps was just as valuable as actually building a project because it required learning how to find answers and discover the correct vocabulary to articulate the language, system, tools I was using
Places like freecodecamp and cs50x where the lessons are done in the web app or in a cloud IDE abstract the steps of setting up a dev environment on your local machine.
Its the same kind of missing link that gen Z are lacking with apps and tablets vs file browsers and terminals.
Only concern I have is how marketable this would be. Most beginners simply don’t care about what’s outside the abstracted cloud IDE, and those who complete cs50x are probably just ready to use VSCode.
Not at all.
I used to like https://exercism.org/ for learning a new language but no longer do, maybe worth looking at for other people
Maybe I'm missing something, but why does the platform need to be a desktop app?
I would think of the desktop app as being an IDE built for beginners with free project-based courses built in. Any good IDE realistically has to be a desktop app so that it can integrate deeply with your OS.
Didn't mention it in my original post, but there's a premium membership that offers an integrated AI tutor to provide live feedback, explanations on course materials, and automatically tailor the course to the user, their experience, and their system. I also didn't mention that I'm very close to an MVP.
What comes to mind immediately is how to use the tooling that usually comes with an IDE. If you could add tutorial on using the debugger and git tooling that comes with popular IDE's like VSCode, I think that would be helpful for people looking to make the jump from coding on the side to doing it professionally.
What I mean is that I consider an application, when you use it as a singular word like this, to be one integrated thing. Like Excel (as typically used), Safari, Chrome, etc. Perhaps with the option of extensions, but still a singular integrated application. And, in particular, not a thing that's directly integratable into other applications and parts of the system (or at least not trivially).
Is that what's needed for an offline programming teaching environment? You could look at something like DrRacket. It provides an IDE as an application, but also a lot of command line tooling. This allows students to "graduate" from the, possibly restricted, environment you provide to a fuller environment on their computer. An advanced student could switch, sticking to Racket as the example, from using the supplied IDE directly to using a combination of the CLI programs and emacs (my preferred way of using Racket when I use it). They still get all the benefits of the learning tools, but can move past them once they're ready.
So I guess I'm just saying, it doesn't need to be a singular, dedicated, sandboxed application. Instead it could really be a suite of programs + an interface (or piggyback on an existing interface like VS Code by providing an extension). This can give a more graceful path out of your educational program than a too-tightly restricted/limited application. A big issue I had with a lot of the restricted learning-targeted applications that were used in my high school and a couple (fortunately only a couple) college classes was that inability to use the same language or whatever outside the sandbox. This had a significant impact on a number of my peers who had difficulty moving on from the restricted environment, they didn't have the right mental model for how to program or use the computer to program without the sandbox.
But I see exactly what you’re saying. I’m pivoting the project in a different direction. Scrapping the courses, focusing on the editor. The goal is to ease the learner out of those restricted and unrealistic sandboxes and into professional environments with professional tooling.
For teaching programming in a language, you just need some kind of guide to the language plus an IDE.
For teaching programming in a style (FP, say), some kind of guide to FP, plus some IDEs for some FP languages, plus guides to those languages.
For teaching programming at all... I'm not sure there's a way to teach what programming is without teaching at least one of FP/OO/structured/some other approach. But if you do, then you're not teaching programming, you're teaching programming by that approach - unless you teach them all.
Maybe the best you could do is say that programming is giving instructions to the computer in a formal language. So you create an IDE (plus guide) to some synthetic thing that lets you program, but has no bias for any particular approach (allows them all, or does none of the above). For that, it probably needs to be fairly simple - something for learning, not something for real work.
Note that BASIC and Pascal started with this approach.
* Organizational skills. This is like finances for programming. If you do not learn to get good at it then it will own you and limit you no differently than failed personal finances in the real world. Compensating and hoping tools and frameworks will just do it for you are like pay day loans.
* Data structures. Advanced navigation of data structures irrationally scares the shit out of many programmers more so than anything else I have observed.
* Ownership. Developers, and their leadership, must be zip tied to their successes and failures as publicly as their organization allows. This forces people to more carefully consider risks and appropriately apply solutions. It’s the arbiter of maturity. Just own it.