These days my main problem when learning is coming to terms with the development environment.
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.
Ad Scala - it depends if you already knew a JVM based language. If you are coming from Java you will have a head start: use Maven/Gradle instead of SBT, you will already know IJ, you will know your way around managing JVM versions and understand core concepts like jar files and class loading.
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.
The best way to learn a language is to build a project with it. Anything else is just exploring its feature. The trickier issues are always features integrations.
I couldn’t agree more. And once you have mastered or at least come to terms with the development environment, eventually you must learn how to deploy. That’s also a minefield.
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.
It’s a newcomer confusion vs old-timer habit. You’ll feel the same in C, python, etc if you never seen these. And vice versa in any direction.
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.
It’s a yet another facebook shaped opportunity though. The hardest part is not to collect and systematize information, but to become distinguishable from a mountain of shitty blogspam that google agrees to promote for financial reasons.
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.
Yes, if you're using the popular stacks of tools, frameworks and proprietary embellishments like Typescript.
If you're focused on vanilla JS development along with modern native browser tech like WebGL, WebGPU, WASM and Web Audio things are much more straightforward, the only tricky choices I guess are which 3D engine to use and what +1 language you want to take to the WASM party.
Second this. For any reasonably popular language you can ask for the variation of dev env boilerplate you specifically need, and also ask questions about it and why it’s setup that way. Specifically what certain configurations do and why. Getting this info through an LLM is so much better than doing it by google search or reading docs.
An experienced software engineer can learn new languages and syntax quickly. I would say the same for the core libraries for a given language. Learning the development environment, productionalization, deployment, and hosting can be daunting even for experienced architects.
Seniors have a language-independent model of software development tasks such as writing code, testing, debugging, building and publishing artifacts, etc. to work from. They can map that model more or less to any software ecosystem. That model comes from hands-on experience building software, and often takes years to build.
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.
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.