I’m liking the content at https://exercism.org/ - I just finished the perl track, now starting the crystal track. There are 81 more languages there to practice with. I’m also interested in Zig, rust and lisp.
You can use the online editor, or if you have the language installed locally, you can download the exercises, solve them and submit them.
Much nicer than udemy IMHO, and it’s free and self-paced.
I can recommend codecrafters.io for more complex projects, but it’s paid. On the other hand, they open access to one of the projects for free every month.
They have projects like Build your own HTTP server (with TCP), Redis, and SQLite. They give you a git URL. You clone the project, implement the stage, and push your code. They test it with a lot of test cases. If it fails, they tell you where it failed until it runs properly.
An example of a failed test:
[tester::#ZV2] Running tests for Stage #ZV2 (Filename Completion - File completion)
[tester::#ZV2] [working_dir] - pineapple-60.txt
[tester::#ZV2] Running ./your_program.sh
[tester::#ZV2] ✓ Received prompt ($ )
[tester::#ZV2] Typed "wc pineappl"
[tester::#ZV2] ✓ Prompt line matches "$ wc pineappl"
[tester::#ZV2] Pressed "<TAB>" (expecting autocomplete to "wc pineapple-60.txt" followed by a space)
[your-program] $ wc pineappl
[tester::#ZV2] ^ Line does not match expected value.
[tester::#ZV2] Expected: "$ wc pineapple-60.txt "
[tester::#ZV2] Received: "$ wc pineappl" (no trailing space)
[tester::#ZV2] Test failed