I thought I favored the link, but I can't seem to find it ? Any help ?
Great website!
Edit: This also looks good, haven't tried it yet: https://app.codecrafters.io/catalog
I was thinking about this post https://news.ycombinator.com/item?id=41463734
Python, how do I install and work with venvs? What is poetry and why is it better?
Scala, what is sbt and how do I make it work in Intellij?
Things I have learned under way, but still more of a headache than the actual language, since most ideas there are recognizable. And problems in the dev env can make you get stuck for several hours.
Docker helps a bit as an abstraction, but not all the way to the development environment.
For me the most time intensive part of learning a new language is learning the new libraries. I don't mean here the standard library but rather things like library for interacting with SQL database, how mocking works in the new language, how concurrency works, web API framework.
Learning "just" a language can be done over the weekend. Learning to properly use its standard lib and the entire environment of libraries may take years.
You need thousands of tools and there always exists 3 alternatives.
Js/ts as a language is the smallest problem.
I will confidently back you up. I am a well-rounded programmer, and have used many languages and domains. Kotlin (in the Android SDK at least) is the most complicated, messiest, least-pleasant I've found. JS/Node is second place.
I'm reasonably confident it's not the Kotlin language itself I dislike, so much as the tooling associated with it, and the expected project structure.
Edit: But I absolutely agree that $subj platform should focus on that, not even on the language. A language can be learned in one evening on a “fiddle” site, no platform required.
Personally, when I become interested in another language, all I want is a page of common snippets or a cheatsheet to get the feel of syntax, and then how to make and deploy a non-toy project with all the usual libs and tools attached.
I was used to use vue, there was webpack now it's vite or nextjs, some tools are build on top of others like nextjs on webpack and vite on esbuild.
If you stop working 2 years in js your tools will completely change.
E.g. java has maven and more and more use graddle, but it's way slower change.
For meta, I’d say our issue here is not the lack of platforms or manuals, but that we simply don’t have a decent search engine, because we don’t have a decent internet economy model. Our models and tools are indecent and there’s no help.
Why should I have to rely on Google/stack overflow/chatgpt to set up my environment?
While they are building up that conceptual model of software development, an engineer is also building up knowledge about the _details_ of their first or primary language’s ecosystem, libraries, and tooling. This also takes years, one just doesn’t notice it with the first language because it intuitively feels like “learning programming” since it happens in parallel.
The result is that a senior engineer can be productive quickly in any language, relying mostly on their conceptual model. But to go from “productive” to “mastery” with a new ecosystem is still all the same time and effort it took for the first one.
But I am an engineer, I build stuff. I am not sure I want to become Picasso
An unsolved problem in computer science
Python tooling got better with uv.
It gives small language syntax/feature tours.
Each file is legitimate syntax for the language it documents.
I keep wanting to build this mega doc site to teach more than just “what are scalar types in this language” and more of how to apply it in idiomatic ways.
https://www.executeprogram.com/
It uses interactive exercises + spaced repetition. It's really the only way I've managed to learn Regular Expressions.
https://pragprog.com/titles/jbtracer/the-ray-tracer-challeng...
If the languages are at all commonplace, having an AI convert a program from language X to language Y might speed you along as well. No guarantees it will be perfect but it will probably get you in the ballpark.
Why a senior wouldn’t just head directly to the documentation for a programming language or the equivalent to “The C++ Programming Language” is a different question though. Learning a new language is extremely easy, it’s learning how the compiler, runtime and so on which is hard. You’ll very rarely find that outside of official docs or books written by extremely knowledgeable people.
Eventually most seniors should come to the realization that expecting there to be a "senior" oriented platform is unrealistic for a variety of reasons (mostly, because the exercise based nature of platform learning in the beginner sense just isn't the sort of thing you need to learn to become senior level in a language and isn't super useful to seniors coming from other languages...).
A real senior that is really trying to learn a new language or ecosystem to a reasonable amount of competence should start with the docs and with a small (but sizeable, enough to have to learn the languages tooling and whatnot) project.
I shouldn't even comment on this, but if you expect there to be video tutorials for the kind of thing you are trying to learn, then maybe you have experienced some form of title inflation. Eventually, people need to learn to read the (f'ing) manual, and I hate to say it like that because it's infamously toxic when inappropriately told to beginners as advice, but it's the truth for somebody that calls themselves a senior.
The easy part is the language, the difficult part is learning to do things the Pythonic way.
Of course, I have to allow for the Dunning-Kreuger effect.
You sound well aware of the fact that being able to put out working python code doesn't necessarily mean you fully understand all of the best practices and idioms that the particular community uses, and that's okay. You are aware of your weakness.
If you were stuck in "tutorial hell" but thought you knew the language, then maybe that would be Dunning-Kreuger. Or if you were unaware of your not writing idiomatic code due to coming from a different language and being new.
As I see it the programming teaching industry, or whatever you might call it, is similar to other self-help industries where people who are good at marketing sell you empty calories. Even if you created an in dept course on something, you would probably have an issue distributing it in the vast ocean of courses.
In the end I bought a “course” that’s 6 practice exams with high quality questions and explanations of each answer. For AWS it’s been a nice approach, so far anyway, because the docs are truly vast and I probably wouldn’t have thought to read the docs for Snowmobile, which I don’t use day to day.
> I’m going to go against the flow and say nothing.
Whether we're talking about the actual language or the surrounding tooling and ecosystem, very few language and ecosystem experiences are actually different. As a result you're often mapping needs that you already satisfied and can explicitly state to another language. Someone who has already learned their n-th language looks at learning very differently.
This also makes a seasoned learner vastly more capable of extracting value from a friend or colleague who is willing to steer the learning experience.
For example when learning C++ while being proficient at C# I found useful this blog: https://www.jacksondunstan.com/articles/5530
"C++ For C# Developers: Part 1 – Introduction"
Author compares features between C# and C++ and shows what is similar, the same, different, non-existent, etc.
Also, basic exercises are boring because we did them ten thousand and one times already just with slightly different syntax.
Ye Olde “write once, throw it away” concept. Using prior language knowledge can make the first steps much smaller as you learn not just the new language, but environment and tools.
This can give you a quick, solid foundation with which to leverage learning newer ideas and idioms of the new system.
But secondly, if you can, get work or your career path to let you build something in a new language. A lot of learning new languages (both programming and human) comes from social reinforcement and riding social waves. Smaller companies are a lot better for this than bigtech.
I learned Ruby at a company I was hired as a Java dev for initially (that had lots of Ruby staff). I learned Go and my first bits of React when a Ruby company I worked for was acquired by a Go company. My current company hired me to work on an Elm frontend without me having written a line of Elm in my life.
My recommendation is that the learning app should:
- Interact with an SQL database
- Expose an HTTP endpoint (REST or GraphQL)
- Use a logging framework
- Use concurrency
- Use a unit testing framework and a few integration tests
- Build should be automated using GitHub actions
In my opinion that's the fastest way to learn a language or more broadly a platform (as every language now is a kind of platform with its own set of libraries, conventions, idioms and untold rules).
PS. My list is probably not good for a system language like Rust or C++, but should work for languages from Ruby & Python, though Java & C#, up to Go and Erlang.
From there, it's just ... using it. Making lots and lots of mistakes.
I didn't start really learning Typescript until it was a very real obligation for me, and my style of programming and the reasons for it have definitely changed over the last year as a reflection.
Accept that this sort of change is going to happen and that it's natural and even a good thing. It's okay to be new at things again and to make mistakes :)
But what do you think you are getting out of a "platform" when it comes to learning a language?
I agree with keyle that you'll learn more working on a real project than doing a platform curriculum that is usually designed around beginners.
Just my personal hot take. I like exercise I suppose if that's the sort of thing you really think would be helpful.
The only reason I'm giving you this answer is cause you said explicitly "for senior devs". I don't really know any senior devs personally (that would admit to) using "platforms" or exercises to learn new languages. For me, I open up the docs and start writing a project, and I think that usually gets the job done learning a new language a bit faster.
Most platforms are way too beginner oriented, and you'll rarely get anything that requires more than a small amount of code...it's tough to learn a language very well until you have more than say 1000 lines and are seeing how the tooling and modules and whatnot really work on a realistic size of project...
Going from writing firmware in C & asm for 30 years to Haskell would likely require more than just documentation.
1. First, I ask it to give me a conceptual overview, going through the main features of a language I know well and then asking for the equivalent in the new language. I also ask it for specifics/features in the new language that aren't present in the language I know well.
2. If I have specific questions, I'll write a code snippet in a language I know well and ask it to translate it to the other language. I might also ask it for "library equivalents", e.g. if there is some specific library that is the "standard" for doing something in one language, I'll ask what is the standard in the other language.
Related example: I suck at shell scripting because there is so much esoteric shit in it, so I used to just write short scripts in JavaScript and run them in Node because I'm so much more comfortable with JS and Node. Now, though, I'll just ask ChatGPT to write the script for me. The code isn't always 100% bug free, but I understand shell scripting well enough to usually fix any bugs. Also, if there is something I don't understand (e.g. ${VAR_NAME##*/} was a new one for me today), ChatGPT explains it well.
If you haven't tried it, I strongly recommend using ChatGPT (or Claude, etc.) for learning a new programming language.