Hacker News new | ask | show | jobs
Ask HN: What would you look for in a platform to learn programming?
5 points by michaelhhogue 881 days ago
Hey everyone!

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.

6 comments

There are three distinct things, which you probably need to keep separate: learning to program, learning to program in a particular style/approach/methodology, and learning to program in a particular language.

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.

Those are some solid points that I didn't consider. Thank you.
> what does the perfect programming education platform look like to you?

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

This is s great point. I was already a coding with things like Visual basic and Java long before the cloud was invented so I was familiar with the idea of text files, a compilation step, and then a runnable binary (or .jar).

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.

Yes, exactly. I think this is now the problem I’m aiming to solve. Not necessarily teaching programming, but teaching you how to how to actually use real-world tooling, real-world data-structures, and real-world design patterns.

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.

Here are the absolutely fundamental things I see many programmers missing.

* 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.

> How important are career-tracks and certifications to you?

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

I've fallen out of like with exercism, but I'm curious what your reason was? I still recommend it for people wanting to sample a new language but I found the exercises in all the tracks were a bit too generic and didn't appropriately demonstrate the unique aspects of each language. Particularly with languages like Erlang and Elixir, they had few exercises which really demonstrated concurrency and message passing as baked-in language facilities. (I pulled it back up, I only found two exercises that promoted using concurrency for Erlang.)
I like the idea of a course centered around a guided project. For example, learning Swift by developing a simple iOS app.

Maybe I'm missing something, but why does the platform need to be a desktop app?

> 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.

Check out replit. They implement a browser-based IDE. I could be mistaken, but I don't think it's really focused on tutorials/teaching.

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.

Very interesting, thank you. Thinking about taking the project in a different direction based on the feedback I'm getting.
Not the OP, and I'm not sure something like this needs to be a desktop application. But having your learning resources hosted on your own device is vastly preferable to online-only resources. The interaction is more responsive. For programming, as you progress you can start using your own tooling instead of the course-administered tooling (in the case of a web IDE for instance). And you can access the materials without needing an internet connection or at least not a fantastic internet connection once the materials are acquired.
Well, you responded with a question and then deleted it.

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.

Yeah sorry I deleted it because I sort of figured out what you meant.

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.

boot.dev is pretty close I’d say. Project / exercise based, AI help if needed, growing content and discord community.
Wasn't aware of this. Looks very interesting. Thank you!