Let me give you some advice about how to learn programming: 1. Read books about algorithms. I can recommend anything written by Sedgewick. 2. Program "find substring" in the language you want to learn. Don't avoid this exercise because the language's library already offers it -- the point is to program it yourself. 3. Avoid: regular expressions and PEGs. 4. Focus on programming tasks: Ideally you only use functions from libraries that you could have written yourself but didn't for the lack of time, not because you couldn't do it at all.
As your programs grow bigger, avoid the `string` datatype. `string` indicates a lack of structure, it's effectively dynamically typed code. Use the static type system to the best of your abilities. Nim is not optimized for beginners but it's not a bad choice either: * The static type system enforces good programming habits and helps you structure your problem. * Its notation is not so far off from Python/Java so that code snippets can be translated rather easily. * The language grows with you, there is no need to switch the language once you get past a certain program size. Sure, the documentation could be better and sometimes "2 line helper procs" are missing from the standard library, but that's details that won't help you as much as you seem to think. You don't need "more fish", you need to learn how to fish.