NHacker Next
  • new
  • past
  • show
  • ask
  • show
  • jobs
  • submit
Ask HN: Platform for senior devs to learn other programming languages?
roetlich 7 days ago [-]
I think you are looking for Exercism: https://exercism.org/

Great website!

Edit: This also looks good, haven't tried it yet: https://app.codecrafters.io/catalog

Raed667 7 days ago [-]
amazing ! Yes thank you

I was thinking about this post https://news.ycombinator.com/item?id=41463734

fifilura 6 days ago [-]
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.

0xmarcin 6 days ago [-]
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.

skydhash 6 days ago [-]
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.
rickette 6 days ago [-]
Go really got this right, just one 'go' tool for dependency management, build/compile, tests, you name it.
bhasi 6 days ago [-]
Rust too - cargo for everything.
bshacklett 5 days ago [-]
I’m not convinced given how many makefiles I see in Go projects.
arunc 6 days ago [-]
Absolutely. Simple and fast language, simple and fast build system!
tomcam 6 days ago [-]
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.
0x073 6 days ago [-]
The worst is js development.

You need thousands of tools and there always exists 3 alternatives.

Js/ts as a language is the smallest problem.

dakiol 6 days ago [-]
I think the worst is Java/Kotlin. Gradle is a nightmare and I just refuse to spend my time learning it. I just can’t.
the__alchemist 6 days ago [-]
I started Android development recently at work.

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.

wruza 6 days ago [-]
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.

0x073 6 days ago [-]
I think the biggest problem is that js is way faster charging than almost every other language.

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.

skydhash 6 days ago [-]
If you're doing tooling churn, that may be an issue. But in an organization, tooling updates are always slow.
fifilura 6 days ago [-]
A clever blogger or even entrepreneur sees the opportunities here.
wruza 6 days ago [-]
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.

fifilura 6 days ago [-]
What you describe is exactly the challenge and opportunity to overcome.

Why should I have to rely on Google/stack overflow/chatgpt to set up my environment?

Cotterzz 6 days ago [-]
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.
antonvs 6 days ago [-]
Ask a good LLM those questions. Saves a lot of time.
awongh 6 days ago [-]
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.
jwsteigerwalt 6 days ago [-]
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.
narnarpapadaddy 5 days ago [-]
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.

fifilura 5 days ago [-]
It is a good comment.

But I am an engineer, I build stuff. I am not sure I want to become Picasso

luffy-taro 4 days ago [-]
https://github.com/astral-sh/uv

Python tooling got better with uv.

marxisttemp 6 days ago [-]
> how do I install and work with venvs

An unsolved problem in computer science

siva7 6 days ago [-]
It's solved since Python 3.11
suprjami 7 days ago [-]
There is also

https://learnxinyminutes.com/

It gives small language syntax/feature tours.

Each file is legitimate syntax for the language it documents.

whalesalad 7 days ago [-]
Would love the equivalent of this but before applying practical problem solving. For instance in go you learn to leverage goroutines and channels. In another language it would be threads. Common design patterns etc. Gotcha’s of the language. In Python you use exception handling very commonly, in golang you’re using a special return value of an error type. JavaScript you’re using a ton of anonymous function closures. Async vs await.

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.

em-bee 6 days ago [-]
https://rosettacode.org/ shows you how to solve problems in many languages. you can add your own problems too.
whalesalad 6 days ago [-]
brilliant!
otteromkram 7 days ago [-]
curtisblaine 6 days ago [-]
Devdocs is just a collection of official documentations. GP wants a collection of documentation that explains comparative, idiomatic problem solving in each language. How are they even remotely similar?
Suppafly 6 days ago [-]
sure but the comment two steps up mentions wanting to build a site, devdocs exists and could host that information they want to compile and build.
JanisErdmanis 7 days ago [-]
This is excellent. I checked Julia which is my main language and all essentials are there. Looked up to Zig, F#, Go all accessible expositions and makes it easy to get a good taste before looking into the manuals.
labarilem 7 days ago [-]
As a self-guided alternative, you could try going through https://adventofcode.com/ problems with your language of choice.
shay_ker 7 days ago [-]
I'm a big fan of Execute Program from Gary Bernhardt:

https://www.executeprogram.com/

It uses interactive exercises + spaced repetition. It's really the only way I've managed to learn Regular Expressions.

fishtoaster 6 days ago [-]
I would second this. I have pretty extensive experience in a few python-like languages, and had written a few hundred lines of python over the years, but had never had a full-time job writing it. I had an upcoming job working on a python codebase. I found ExecuteProgram to be a pretty great as a way to bone up on intermediate python syntax, idioms, and standard library so I could minimize the first few weeks of "How do I do [common thing I know in 5 other languages] in python?"
kristianp 7 days ago [-]
On a related note, I found going through "The Raytracer Challenge" helped me to re-familiarise with C++ (after 20 years). Note that the book isn't language-specific. Installing clangd (and getting it to work with my text editor) really helped too, to speed up the edit-fix loop. Perhaps going through a book like that is a good way to challenge yourself to learn enough of a language and its tools. The test-driven format of the book was good to make sure that my code is correct at every stage.

https://pragprog.com/titles/jbtracer/the-ray-tracer-challeng...

keyle 7 days ago [-]
Alternatively rewrite some non trivial work of your own from X to Y language. You'll learn more than making frivolous programs about made up stuff.
SoftTalker 6 days ago [-]
Any time I start using a new language I always start with "Hello world" and working a few simple example programs to get my head around the syntax, idioms, and common data structures. But yes, don't spend a ton of time on this, as soon as you have a sense that you know what to do, start tackling actual work.

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.

dragonmost 6 days ago [-]
I try not to use AI when learning a new language. I don't want to rely on premade answers to my problem. I prefer using the language's documentation and some light SO searching so I can figure it out on my own. AI is the last resort for me when learning something new.
em-bee 6 days ago [-]
that and as you are new to the language you won't easily detect errors the AI introduced.
thebigspacefuck 7 days ago [-]
Not sure which post you reference but https://codecrafters.io is pretty cool for learning a new language
amoskvin 7 days ago [-]
+1 for codecrafters
ecuaflo 7 days ago [-]
What’s the difference between how a senior and non-senior learn that would warrant a unique platform for each?
devjab 7 days ago [-]
I’m going to go against the flow and say nothing. I think the primary reason you see seniors looking for senior focused platforms is because almost all the learning content is terrible. Seniors will spot this sooner than juniors. I’ve worked as an external examiner for CS students for a decade and the stuff they put themselves through to avoid reading official docs is amazing. They’ll literally sit through 50 hours of video of what is essentially two a4 pages of “example how-to”.

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.

zifpanachr23 6 days ago [-]
I 100% agree with your take and suspect most actual "seniors" do as well.

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.

drivingmenuts 7 days ago [-]
That's how I've learned Python, so far. Between that and, writing my own code, and looking at other's code, Ive picked up quite a bit (not an expert but I think I'm doing OK).

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.

zifpanachr23 6 days ago [-]
This doesn't sound like Dunning-Kreuger to me.

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.

itronitron 6 days ago [-]
I think the main issue with most documentation is that everything is treated equally, and often critical details get a passing mention, so it's helpful to have focused course material that can give some indication of priority and a heads up for the tricky parts.
devjab 6 days ago [-]
The challenge with this, and I agree with you, is that I don’t think you’ll find many people capable of creating such a course being in the course creation business. I suspect almost no one would be interested in doing it. The only financial motivation would be to go the consultancy route like Uncle Bob, and I’m not sure who would have any sort of motivation to do it as a hobby project. You’d be more likely to find those people contributing to the actual programming language in some way.

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.

ellen364 6 days ago [-]
“50 hours of video” seems especially true for cloud certificates. Figured maybe I should finally pick up an AWS cloud cert or two and realised that video courses tend to be 40-50 hours per certificate. If you’ve already worked with AWS, or any cloud provider really, a lot of that content looks tedious.

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.

threatofrain 7 days ago [-]
All your reasoning is agreeable but I disagree with the foremost conclusion

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

PMunch 7 days ago [-]
Well a senior developer would be assumed to share a certain common understanding of concepts and terms that a more junior developer might not. When teaching anything one of the most important parts is ta gauge your pupils and determine whether they need more or less information to keep the topic interesting while not making it impossible to follow along. Since written or otherwise pre-recorded teaching materials aren't afforded the luxury of interacting with their pupils they must choose ahead of time what level they are aimed at. And since a senior in any field would be able to follow along with materials meant for the junior, albeit at a slower and less interesting pace, but not the other way around they tend to err on the side of over-explanation. A platform for teaching senior developers would therefore allow a more engaging and time saving experience for those able to consume it.
tester756 7 days ago [-]
Senior doesn't need to learn about loops, ifs and so on

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.

ecuaflo 6 days ago [-]
These things are taught in the first semester of a CS degree and part of the interview process for an entry-level position.
tester756 4 days ago [-]
What "these things"?

Differences between languages?

chx 7 days ago [-]
The essence of being senior, I feel is "I have made the mistake you are about to make". This echoes in language learning. When I was learning Go I could easily pinpoint what language design decisions were made because of lessons learned from this language or that. (I do not want to suggest schismogenesis applies to programming languages but ... it kinda sorta does?) Teaching with this in mind needs a very different curriculum.

Also, basic exercises are boring because we did them ten thousand and one times already just with slightly different syntax.

wnolens 7 days ago [-]
Another programming language as reference. I can learn a new language really easily this way, but the first was really hard - it was so unlike anything i had ever done before.
whartung 6 days ago [-]
“Writing Fortran in Lisp” should not be disregarded. There’s a lot of value of having hands on exposure and success with common, even if not idiomatic, concepts.

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.

pseudocomposer 6 days ago [-]
I’d like to echo what others are saying about building stuff you want to exist in the language you want to learn. I learned Flutter/Dart largely by building BeatScratch (https://beatscratch.io), and Rust entirely (and parts of functional React) by building Jonline (https://jonline.io).

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.

paxys 6 days ago [-]
As long as you know basic programming, the best way to learn a new language is to just jump into an existing project or start a new one from scratch. Classes and tutorials will get you nowhere.
danjl 7 days ago [-]
Learning a new syntax takes a day or two, a week or two at the most. Having a site or product that helps you with that doesn't seem important, at least to me. The hard part about learning a new language is learning how to use it, not its syntax. Learning how to use it requires working with it, and for a long time, somewhere in the 3 to 10 year range to really become an expert. You can't learn experience quickly using any product or YouTube video.
0xmarcin 6 days ago [-]
My bet would be to write a small program using your target language. With ChatGPT this is extremely easy as you will get a list of recommended libraries to use. Try to choose an app that requires some serious coding e.g. creating an image board like 4chan is better than coding a tic-tac-toe.

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.

t-writescode 6 days ago [-]
My old boss gave me some good pointers: find Koans. Ruby Koans, Kotlin Koans, there's probably a Koan for your language. It'll help you wrap your head around the basics of the language, and sometimes they'll even help you set up the development environment, which some people have alluded to being difficult.

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 :)

itronitron 6 days ago [-]
I've found https://www.boot.dev/ useful for picking up the language specifics of Python and Go, and they have many other courses as well.
bhasi 7 days ago [-]
Codecrafters! Highly recommend it. Also the second half of Nand2Tetris.
revskill 5 days ago [-]
Create or realize your own problems first. Then reuse and improve existing solutions.
cannibalXxx 6 days ago [-]
you could look for help here on this site. there you will find a lot of pertinent information related to programming https://chat-to.dev
nunez 6 days ago [-]
Honestly, if you're looking for practical experience, you can learn a lot just from having that language's linters/security/style cops up and running and building a toy app (with tests) in that environment. If you want high-level understanding, the tutorials are usually enough.
zifpanachr23 6 days ago [-]
This is a bad question cause it comes off as judgmental and everything...

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

acuozzo 6 days ago [-]
The usefulness of beginner materials really depends on how big of a jump it is, no?

Going from writing firmware in C & asm for 30 years to Haskell would likely require more than just documentation.

cperez081890 6 days ago [-]
[dead]
cperez081890 6 days ago [-]
[dead]
cokeandpepsi 7 days ago [-]
[dead]
swishman 7 days ago [-]
Use LLMs. Claude could generate a full course plan and execute it
hn_throwaway_99 6 days ago [-]
Honestly, I find ChatGPT excellent for this. There are two basic things I usually ask it for:

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.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact
Rendered at 15:06:50 GMT+0000 (Coordinated Universal Time) with Vercel.