As a longtime Ruby user I've become accustomed to how nice and friendly the Ruby community is. There's a saying among Rubyist - MINSWAN - Matz is nice so we are nice. This is not just a reference to Ruby's creator Yukihiro Matsumoto, but also to what Rubyist feel they should be because of Matz. And through the years I've been able to submit a few ideas for improving Ruby that he's accepted, a recent example here, Using Ruby 2.5’s new Integer#sqrt method.
Looking to keep my programming skills current, I keep an eye out for other languages to learn that I may find interesting, useful, or just fun. With that in mind, around 2015/6 I heard about Nim, then I saw this video, and after reading this article I started trying to learn it to do some really serious stuff. It looked like it could be a nicer alternative to C/C++ to write machine level code in.
So I join Nim's forum, reading the threads and posts, looking at its docs, and trying to get a feel of its community and the direction of the project. One thing that became an immediate frustration was a lack of good (or any) documentation, so many of my initial posts (as other newbies) were questions about how to do basic things. Also, coming from a dynamic language like Ruby to a compiler based language required a shift in thinking.
According to its wikipedia page, Nim was created by Andreas Rumpf (whose forum handle is araq
) and first appeared in the public in 2008. Here's a video presentation he gave in 2015. As I write this, it's at version 0.18.0 (for my Linux OS) pushing to get to 1.0.
Let me say now, Nim has some great technical potential. I can now write Nim coded applications that are much faster than some C++ versions. But it has remained a small niche language, not well known to the broad programmer public, not because of a lack of technical merit, but more so because of the attitude of its developers. They need to understand and appreciate, if you aren't nice to users, and respect them, and try to make them happy, your project won't grow.
Just as Ruby has a nice community because of Matz, Nim has nowhere near the
friendly community that creates user loyalty and love, because Nim's devs, led by araq
, seem to (so unnecessarily) go out of their way to be condescending, rude, and in my case, petty and vindictive. Why did this happen? Read on.
On July 4th, 2018 (Independence Day in the USA) I woke up and checked the Nim forum to find that I had been banned from it by araq
for the 'offense' of being impertinent to him.
Because of this, it seems every post I have made, in any forum thread, has been made invisible (at least to people who don't login to the forum. I can log in and see my posts, but don't know if others who login can see them too. It would be nice if someone would verify this).
As it happened, at the end of June I asked how to do something in Nim I could do in Ruby|Crystal. It was as really simple question, I thought. Here's the Nim forum link to the thread explain this behavior to me and to the pdf of link that contains its full content.
There's really two parts to it. The first part deals with the discussion around how to get the phrase to compile (ultimately by me figuring out how to rewrite it so it would compile). Then I came back to the thread a week later trying to convince the devs to add some syntactic sugar
to the parser|compiler so it could do this automatically, to make programmers' lives easier.
You can see from the full thread, though I couldn't convince most responders to see it my way, they didn't get personal, except for araq
. For whatever reasons, he's had a history of trolling my posts, and he starts out here being antagonistic, and also mischaracterizes what I say, shown below.
That's just your opinion...
and Yes, let's document the features that Nim does not have. Brilliant idea.
and And Swift deprecated ++ because it's bad. ;-)
.
After trying to ignore these comments, I finally felt I had to respond to him and correct his mischaracterizations of my posts. Here's the full response of my last post.
Well you said it yourself, there is no unambiguous intent here, at least 2 different interpretations are possible.
No. the two English translations of if num.inc == 10
are equivalent phrasings and unambiguous to an English speaker. And you didn't present your English translations of any of the examples. So if you think they are ambiguous I am interested in seeing what you (anyone) thinks those programming snippets are saying.
So, the examples in 1) are clear and unambiguous as to programmatic intent.
Also Ruby, Crystal (with Nim) allow this programming style, but make it easy for programmers to do it.
Ruby: if (r += 1) == rescnt; .... end also (.....) if (r += 1) == rescnt
Crystal: if (r += 1) == rescnt; .... end also (.....) if (r += 1) == rescnt
Nim: if (r.inc; r) == rescnt: (....) also if (r += 1; r) == rescnt: (....)
So, in all three of these languages (as a non exhaustive sample) this programming paradigm is allowed and possible. However, while Nim could also provide the syntactic sugar
that Ruby, Crystal, et al provides, you insist to force the programmer to become a manual parser to conform to your whims, than to provide the simple means to deal with these cases, and make programmers lives easier.
Well, if you're going to force programmers to be compilers you can at least clearly document this for their benefit.
After making this post I was finished with the thread. Five other responses followed, with araq
posting twice, with his last post in the thread being this.
you insist to force the programmer to become a manual parser to conform to your whims, than to provide the simple means to deal with these cases, and make programmers lives easier.
I checked your previous posts a bit. This was your last impertinence.
And with this response by araq
, I was arbitrarily and unceremoniously banned on the 4th of July from the Nim forum.
Let's breakdown that last sentence by araq
. He starts with I checked your previous posts a bit.
Here was a person who obviously had a long simmering antagonism toward me, seething with invective, searching to justify punishing me. Of course, he only needs a bit
of a reason to do so (as Nim's creator, and a forum admin) so no due process is necessary. But then he states The
real reason for the action, my impertinence. Here's its definition that most likely captures what he meant.
...a presumptuous rudeness toward persons entitled to respect.
So in his mind, he sees himself entitled to respect
, and I, of all people, did not have the status (and permission) to address him in such a manner. And I say of all people because araq
has a history of showing belligerence and antagonism toward me, as demonstrated in these forum threads.
But as a Black person being addressed by a white male in this manner, I know what he was really saying and doing in taking this absurdly vindictive and extreme action. You see, by calling me impertinent
he was really saying I was being uppity, and acting outside of (in his mind) my social status. Why else would my noncontentious statements provoke such a response? No one else in the thread showed any hint of animosity or taking personal offense.
Unfortunately, araq
has demonstrated bad behavior toward a lot of people in the forum, and has mostly been allowed to get away with it without being put in check by others. In fact, he has created permission for others to follow his example in how to respond to, and treat, forum members.
Here's just one example, in a thread started a month before I was banned (June 1, 2018), where two other people spoke out about how they felt badly treated, and unwelcomed, by araq
specifically, and other devs. Note how others in the thread make excuses for araq's behavior.
So araq
likes to respond with micro aggressive
comments and statements to others but apparently can't take the blowback
from his provocations. This obviously doesn't create an atmosphere and environment where people feel safe to come to, and thus is detrimental to the growth of Nim as a project, and the use of Nim by programmers as a language.
Nim recently issued a notice for its 2018 survey.
But from the 2017 survey results,
under What improvements are needed before v1.0 can be released?
, the top item was Documentation. Creating more, better, and useful documentation (of all forms) would absolutely attract more users and PRs (pull requests). I think a bulk of araq
's attitude toward me has come in my criticism of, and suggestions to improve, documentation.
Nim would also attract more none programming help and benefits (doc producers, translators, videos, tutorials, testimonials, user groups, financial support, etc), if the devs realized these non-programming elements are essential for growing it. Just because you build it doesn't mean people will come, or stay, especially if not treated right and made to feel unwelcome.
It should be without saying that the Nim admins need to unban me, and then institute (and enforce) a clear Code of Conduct for the forum, which applies to themselves as well.
The future will show whether Nim devs learn how to create a friendly and welcoming community, else Nim will litter the floor of programming language history as just another unfulfilled promising idea which never achieved critical mass and use.