I've been around writing relatively large applications in mainstream languages as well as personal projects in languages like Erlang, Ocaml, Rust, and Scheme. To sum it up, I'm a PL aficionado.
It is very mandatory today that a good programming language is 50% about good tooling and ecosystem. For instance, I love Ocaml, but it's 2020 and it still doesn't own a native concurrent construct and its barrier to entry is too high for busy programmers to spend time learning it. A lot of great languages die because they don't have a straightforward path to success and small wins to warrant users' productivity loss.
My go-to language is almost always Go. It's not a great language by itself, but most of my work is about building API servers and its tooling is just very robust and frictionless. Also, it takes little effort to type in Go (at least for me) and the error messages are very debug-friendly.
So today I've decided to pick up Nim and try writing a small command-line tool in my project at work with it. And heck, its learning curve is so chilled I could become productive almost in the first hour! Being a compiled language makes executing code straightforward and the error messages are very intuitive. From where I am it's a mystery why Nim hasn't caught on faster. Any ideas?
Basically I agree -- for someone with at least a minimal computer science background reading Araqs tutorial part I and II is enough to start, and that takes only a few hours. Learning macros, async, parallel processing is not that easy. And fully unskilled people seems to have some more problems of course -- ref, ptr, value object, generics, templates, macros and still small community.
learning curve is so chilled
But that is not the core component of a great language: Learning playing a drum may be easier than playing a piano or a violin, but does this mean that only a drum is a nice music instrument?
We could assume: popularity = corporate_hype + 0.3 * quality + random()
...and despite the correlation, things that both very good and very popular are really rare compared to very-good OR very-popular
I'm actually having a bit of the opposite issue...
It seems to me most of Nim's existing code is written by experts (for experts?) using expert language features. This is just a side effect of the 'traditional' users already being Nim experts, and the V1.0 release bringing a lot of 'newbies' like me.
For instance, I've been trying to write a silly lil command line utility. A bit of command line processing, a bit of logging, and some basic file manipulations. I found cligen on github and started hacking away.. Had some problems, decided to see if I could read the source code to figure out what I was doing wrong. Waaay over my head...
Is this Nim's fault - No, is this cligen's fault - No, am I biting off too big a piece to start with ? I don't think so...
There just isn't a lot of 'intermediate' level content/tutorials yet for Nim. I think if anyone that really knows Nim has the inclination, blogs/tutorials showing how to transition from 'hello world' to more complex programs would be greatly appreciated. Jester seems to have the most of this sort of content so far, but it would be nice to see more!
I'm actually having a bit of the opposite issue...
a lot of 'newbies' like me.
You are mixing many different issues:
First, using basic libs like cligen should be easy even for unskilled people. But for some modules documentation is missing or incomplete still. This will change when really many people are using the modules. I myself do write no or minimal docs at first, often I am tired when I have finished modules like my rtree or cdt. When I see later that many people want to use the modules, I get motivated to write extended docs and examples or improve API. So just create github issues or ask in forum. But please do not ask for extensions or special support and vanish some weeks later...
For general basic level Nim documentation we have really a lot now, see https://nim-lang.org/learn.html. But that can not really replace what people generally learn in first year CS course at university -- if you have not visited courses, you may find all the needed info in internet now, but learning generally takes more than a few weeks.
Your other issue with the experts code -- of course every language community has some bright experts like araq or mratsim, and plain users may not understand their code or what they are talking about. That is just a fact, but generally not a problem for using the language.
And the last issue -- we have still no real Nim textbook with chapters about advanced Nim like macros, threading, await, memory management. But I guess when all that language features are mature and when user base is large enough someone will write that book.
I'm sorry - you seem to feel I was complaining? I really wasn't - just pointing out an area I thought would be good for nim bloggers. I don't really expect hand holding or what-not, and in fact have been really impressed with the help I've gotten from the Nim community.
I've also gone thru some of the documents on the learning page, and continue to refer to them. I'm sure they're great if you're learning nim as a first language.
What hasn't had time to develop yet, is the intermediate level docs. In my case, I do mostly utilty scripts around Terraform these days and system automation. So that's stuff like command line parsing, logging, config file parsing. All the boring stuff. So I'm mainly looking for Nim 'best practices', library recommendations, etc.
My original post was simply to point out that if people wanted to blog/write articles about Nim, I personally (and of course, I could be wrong..) would think this sort of content would be appreciated and valuable helping people coming from other languages to learn the 'Nim way'.
Thanks!
Ohhh - I think I missed that one... I looked at commander, docopts, and some others... ahh - this is the one from the crypto project. Awesome, I'll dig into it more!
Thanks!