I'm new here so I'll first quickly introduce myself. I'm developing software 
for a living, mostly in the field of IT security, crypto and networking. Having 
used C for many years, with some not insignificant experience in Ada, Pascal, 
Python and some more esoteric security centric or formal verification 
"languages", I was always searching for "my perfect language" \- and seem to 
have largely found it in Nim, albeit with with some buts (after trying many 
ranging from C++ (yuck) to some functional languages and D, Go, ...).

I might be wrong but it seems to me that the Nim team is quite concerned with 
the question why professional developers and companies use or don't use Nim and 
on the other hand I'm quite concerned too. After all, the language I use is of 
high importance to me (and certainly others too). Hence this thread.

Frankly, I was a bit unhappy with how the survey was handled. Not only took it 
an eternity to get the results but those were - at least from my point of view 
- sometimes quite superficial and occasionally even misleading. Example in 
question: Visualstudio Code which strongly grew over the year and is clearly 
leading. Hurray. Or not? I _hate_ Visualstudio Code. It has lots of quirks, 
it's an insanely large monstrosity, it often quite retardedly autocompletes, 
etc. Yet I use it. Why? Because I'm forced to; at least it seems like that to 
me. Reason: I'm not interested in editor wars (vim or emacs) nor am I 
interested in becoming an editor wizard (e.g. knowing all key combinations of 
vim). And I NEED A DEBUGGER. Granted, I'm amazed how rarely I really need a 
debugger with Nim (as opposed to e.g. C) but still _I need a debugger_. If 
there is no debugger for any given language I don 't even use it and take it be 
a toy, simple as that. And the only way I found so far to get someting like a 
debugger with a GUI working with Nim is VSC plus some plugin. It's ugly and 
quirky but it kind of works.

So, to call out VSC as the happy winner seems akin to asserting that Breshniev 
was an excellent leader whom the Russians loved because he got 99% of the votes.

In that context I should also mention that I'm one of those guys who actually 
downloaded and tried Aphoria. And I also noted @Araq using some Nim editor (of 
his own?) in a presentation but I failed to get at that editor and to get it 
properly working.

Ladies and gentlemen that is a quite poor status quo for Nim. About the only 
way to use it in a halfway decent way is giving in to the VSC rape (sorry, 
that's how I perceive it. Take it as a compliment. I like Nim _so much_ that I 
was willing to install and use that VSC monster).

No matter how nice the language is; if you want considerable uptake in 
professional contexts one extremely decisive point is practical USABILITY. In 
capitals. Unlike hobby hackers a professional programmer can't (and usually 
won't) spend lots of effort and time just to be able to actually use a 
language. And "real world usability" is also my title for a whole group of 
problems that plague Nim.

What is needed?

  * _easy_ to use with the major editors (vim, sublime, VSC is the bare 
minimum. Possibly others too, eg. emacs)
  * _easy_ to use with a gdb GUI (gui in Capitals). Can be a plugin, can be via 
Nemiver, etc.
  * optionally an IDE would be nice. You should revive Aphoria or similar. Many 
look down to "hobbyists" who need an IDE but you shouldn't underestimate the 
number of companies where IDEs are used and the generations of developers who 
are used to and want an IDE (I'm not one of them but I know many in companies).



All of the above for linux, Windows, apple [their OS] at the minimum.

  * good documentation. For me personally I'm OK with what is basically just 
nim-doc pages for most things. But I feel that at least the less common and 
well known things (like macros!) absolutely need a _good and extensive_ 
tutorial and documentation.



My other problem with Nim is (I might be wrong; it might just be a subjective 
and misguided impression) that the core team seems to care an awful lot about 
ever new gadgets rather than about getting a stable solid basis. That basis 
doesn't need to be (called) 1.0; it can be 0.20 ... 0.21 ... and there can be 
some changes, preferably in the form of new things rather than wildly changed 
existing things - but it should be reasonably stable and solid.

Now to my personal and honest responses:

_Do you use Nim?_ \- Yes. Actually I use it even professionally. In the 
beginning I was quite mistrusting but I found Nim to be pleasantly good and 
reliable (modulo experimental and some bleeding edge or exotic stuff. But 
that's OK)

_How could we help make Nim more accepted at your company?_ \- See above, plus: 
Right now, no chance. My colleagues just grin. Gladly I'm in a position to do 
what I like (as long as the results come and are of good quality). Sidenote: I 
can't quite follow the "we need v. 1.0!!!" argument; seems "corporation" minded 
and I do not see any _real_ benefit in just calling, say Nim 0.20 "Nim 1.0" but 
obviously that would make many quite happy.

_What editor(s) do you use when writing Nim?_ \- I use VSC - because I'm 
basically forced to. But I would _very, very, strongly_ prefer sublime.

_What is your experience with the following tools?_ \- They seem to work. I'm 
(as a personal taste thing) not too concerned but I like Nimble.

_How did you most recently install Nim?_ \- github ... build. Old school.

_Top reasons why programmers stopped using Nim_ \- not even almost. _if_ at any 
point I had stopped it would have been over the editor and debugger issue. But 
I didn't - for good reasons (see more below). TL;DR Nim is so good that it's 
worth some pain.

_Top reasons why programmers are not using Nim_ \- From what I see in 
companies: see above.

_Do you feel well informed in the direction that the Nim project is heading?_ 
\- No. For mainly 2 reasons, (a) too much info too spread all over the place, 
and (b) I don't care that much, I trust Araq; he has provided enough reasons 
over the years to trust him.

_Should Nim 1.0 have been released already?_ \- Personal answer: I don't care 
at all. General answer: Probably. There are _many_ out there, particularly in 
companies who think more "formally".

_What improvements are needed before Nim v1.0 can be released?_ \- Docs (incl. 
tutorials), tools (editor, debugger, optionally IDE), stability, both as in 
"reliability" and as in "stable state" (to which is added but which is hardly 
ever changed in not insignificant ways). A mixed model comes to mind. One 
_stable_ branch and a dev. branch the letter being switched/copied to new 
stable only after extensive testing.

Finally I'll add some points and thoughts why I LOVE Nim:

To understand my line one must understand and consider where I come from: I'm 
obsessed with safety and security - which also is the main reason I left C. And 
I'm not just obsessed, I'm also dead serious about it. For me that issue is not 
about blabla, mode du jour ("design by [insert this weeks "wisdom"]). A 
language, for example, without a strong static typed type system isn't even 
worth a look in my minds eye. And I can say based on quite some experience, 
both academically and professionally and pain suffered, that Araq made a _very 
smart_ set of decisions. He understood and picked up just the right mix from 
different languages (only exception imo: he should also have picked up Wirth's 
':=' assignment operator). Plus, unlike many smart people in academia Araq also 
understood something else: Whatever good and safe and secure and whatnot 
language you design, it also must be easily and comfortably usable (many 
programmers are lazy). In fact, one of Nims real powers is in the fact that the 
strength of the language does not get in ones way (e.g. Ada, sigh) but actually 
helps the developer and is comfortable to use.

There seem to be quite many complaining about Nim not having enough "standard" 
libraries. I disagree. For one Nim has a nice set of the usual stuff, but (imo 
by far more important) Nim makes it _easy_ to bind or port C libraries. I know 
what I talk about because I had to bind or in some cases just rewrite (in Nim) 
some stuff, mostly crypto libraries. It's not (yet) well enough documented and 
I had to spend a lot of efforts and time to get all the relevant info together 
but once you master it, it's a breeze.

Another set that Nim has got just right is threads and async. Once more Araq 
chose perfectly well and smartly by picking up the await model. Compare that to 
Ada which has _excellent_ multithreading facilities but when async was desired 
some of the Adacore developers who thought about binding libuv pretty much gave 
up (it seemed to me. afaik it's still not finished and possibly even just 
dropped). And it would have been a pita to use anyway.

I have looked at quite some alternatives (before Nim). To name just a few, D is 
a weird zoo (imo) and anyway just yet another "a better C(++)" approach. 
Regarding Rust I better just politely stay mum other than mentioning that it 
too is but yet another "a better C(++)" approach. Regarding Go I'd like to 
praise the channels (which Araq correctly identified as very desirable and 
picked them up) but Go is not up to par, sorry. TL;DR there is no competitor. 
Yes, some (more or less) new languages have more uptake or are more well known 
and trendy or ... but when summing up what really counts there is but Nim that 
has it all and does it well. My search has come an end. I have found my perfect 
language.

Reply via email to