Having access to various Ruby article feeder sites I recently came across this
https://hacklines.com/en?ucc=rubyflow&tags=Ruby%2CRails%2CSinatra
which is multilingual. It lists articles and blogposts on a long list of various languages, but not Nim. I think it would be good exposure for Nim to see how to get it on their language list.
I also subscribe to different languages (Rust, Elixir, Julia) which use the Discourse ecosystem for their forum/communities communication system. I know Nim has this forum, but using Discourse may make if more accessible to people who haven't even heard of Nim. Just some thoughts.
A funny fact is, that many people just ignore Nim because its community is very small.
Recently I read a blog post of Mr Lemire quoting:
https://lemire.me/blog/2017/01/16/best-programming-language-for-high-performance-january-2017/
I am going to ignore Rust, D and Nim as they have too few users. Programming is a social activity: if nobody can use your code, it does not matter that it runs fast.
He is a bright guy, so I think he knows well the consequences of his attitude. Many people seems to have this attitude.
One reason many people use a game engine like Unity is that probably every question you ever ask about, was online already asked somewhere. So easy just copy the snippet from there and there we go!
I think there's a problem with this kind of behavior: People stop thinking about concepts and ideas. An example of this behavoir are these people who dismiss OOP and therefore use C instead of C++ or don't use C++'s classes. But in the end they probably implicitely use OOP. Just because you don't explicitely write class something {...}; it doesn't mean you aren't using OOP. These people probably only want to counter the Java like ultra OOP(everything must behind a getter/setter, classes named BusisnessLogicManagementControllingBehavior).
And yes there are reasons when you want to interface an existing code base. When rewriting is simply wasting resources etc. But that's one things Nim is incredible at. I mean you can interface C, C++ and Objective-C. You can even share code between a client and a server by compiling to Javascript.
Rewriting doesn't have to be bad. One of the reasons is that it may be possible to write a more efficient implementation more easily in another language (see: Rust's enums are faster than C++ virtual, especially for small ones). ;) Also: just like a wrapper with native types (uses seq instead of T*, unsized) is better than a simple wrapper, a native-style wrapper (uses object hierarchy and methods instead of function pointers) is better than a wrapper with native types. But a native-style wrapper isn't always possible, sometimes things need to be adjusted to another model, especially if performance matters.
Please notice: you wouldn't like to use C++'s template-magic in Nim. You really wouldn't. You'd prefer something, ANYTHING else. Believe me.
It appears most of the comments made to my original post are not addressing the issue I raised, which is increasing the exposure of Nim. In fact, some commentators seem to be suggesting they don't see a high need to increase Nim's exposure. I think this is a very insular view and attitude of the world and detrimental to Nim's development, adoption, and future.
I also totally agree that every language (be it programming or human) is inherently reflective of a distinct community of people and their way of thinking about, interacting with, and solving problems (and what is even considered a "problem").
Consider the Tale of Two Languages
Forth
Most people have never heard of Forth, which was created by one person, Charles Moore, and first released to the world in 1970. He wrote it for himself so he could easily control radio telescopes at the U.S. National Radio Astronomy Observatory, where he worked.
https://en.wikipedia.org/wiki/Forth_(programming_language)
It is a stack based language that's been implemented in hardware cpu systems (Forth Engines), many of which have fueled NASA, and European Space Agency (ESA) missions.
https://en.wikipedia.org/wiki/RTX2010
https://www.forth.com/resources/space-applications/
https://www.forth.com/resources/forth-apps/
http://forth.org/successes.html
Many of you are probably too young to remember that in the 1970's into the early 1990's HP was a major player in calculators (especially scientific ones), before the advent and ubiquity of "personal" computers. HP calculators were based on Forth, and used reverse-polish-notation (RPN) and stacks. To this day, IMHO, they are the best calculators on the market (technically) but other cheaper brands (Casio, Texas Instruments (TI), etc) rule that market now.
When I was an engineering student at Cornell in the early/mid 1970's it was considered "cool" to have an HP calculator (especially a programmable HP-45, which I saved to pay a ransom sum to get). So when I started working for NASA in 1979, and assigned to use Forth on prototype flight/ground systems, I felt right at home.
Forth is one of the most powerful programming environments you can ever use. It allows you to do literally anything you can thinks of, if you can think of it. Whatever the cpu could possibly do, Forth allowed you to control every register, instruction, and byte of memory of it.
However, like becoming a "really good" violin player, you had to appreciate, learn, and practice using its capabilities, otherwise, like most people who try to play the violin, it just becomes a piece of wood with strings attached. If you take the time to master it, you can make people laugh, dance, or cry, depending on how you play it.
To this day, Forth has a vibrant and vocal user community, but at best now, it's a niche language (though sometimes it's some company's secret development language).
https://groups.google.com/forum/#!forum/comp.lang.forth
Why have most of you never even heard of Forth, or seen articles on it, or conferences about it, etc (and all these still do occur)?
The major reason is because people in the Forth community have never had the vision, and ultimately the desire, commitment, and unity, to change the language to expand its reach, by making it more friendly and useful to a wider community of people other than themselves. Does this sound familiar?
Ruby
Now consider Ruby. It too was created by one person, Yukihiro "Matz" Matsumoto, and released to the world (Japan) in 1993.
https://en.wikipedia.org/wiki/Ruby_(programming_language)
It's highest goal is, as quoted from Matz in the wikipedia article:
..we need to focus on humans, on how humans care about doing programming or operating the application of the machines. We are the masters. They are the slaves."
Matz, and the Ruby development team, and its community, takes this goal very seriously.
So for the traditional Christmas release (December 25, 2017) of the new major version 2.5, it included the method prepend to class Array, solely because of community desire for (English) linguistic consistency, since there already was an append method. And both of these are aliases of the original core methods unshift (add elements to beginning of an array) and push (add elements to end of an array).
These additions were soley requested and added to the language because people wanted to write better readable code. So now, instead of writing: ary.unshift(1,3,4) and ary.push(5,6,7) you can write ary.prepend(1,3,4) and ary.append(5,6,7). Anyone who understands English can read such code and immediately knows what it's doing.
https://blog.jetbrains.com/ruby/2017/10/10-new-features-in-ruby-2-5/
This commitment to user happiness means Ruby's users and community will always be working to make themselves more happy using it, and thus it will be around a long time.
Nim
I think Nim's developers and community needs to become much more flexible with the language to accommodate users, since just about everyone who will use Nim will come with experiences from other languages and have certain expectations and desires. It's just a given of human nature.
And you can't/won't get users if you don't have greater exposure and visibility.
Nim doesn't even earn a listing on wikipedia's History of Programming Languages page.
https://en.wikipedia.org/wiki/History_of_programming_languages
and has a meager individual page, though (currently) it's over 9 years old.
https://en.wikipedia.org/wiki/Nim_(programming_language)
I think Nim has very good technical merits as a programming language. Other languages, however, are eating Nim's lunch because they have larger and more friendly/accessible communities, better documentation, and more public mindshare.
Technologies rarely prevail solely on technical merit however, (remember VHS vs Betamax), because people (human beings) rarely use technical merit (of anything) as the sole, or even highest, priority/criteria for choosing to use them. This is a severe blindspot that some commenters, and Nim developers, seem not to want to acknowledge. Just because you make a faster (fastest) car doesn't mean people will choose to buy/use it just to go to the grocery store.
Nim deserves wider use. But in order to achieve this it needs much greater exposure than it currently has. And in order to get this greater exposure its adherents/community needs to work more on the non-technical stuff to attract, educate, and please (make happy) newer users.
It really is all about making people feel comfortable and happy using the language.
I am going to ignore Rust, D and Nim as they have too few users. Programming is a social activity: if nobody can use your code, it does not matter that it runs fast.
What the professor really means: his students can't get hired at AAA firms when trained in languages that aren't in the top 20.
Nim is an excellent project but its ecosystem is too damn small. Besides the core devs what Nim needs is small companies that try nim and release more and more quality pkgs like yglukhov did with his Reel Valley project.
If you do not have the resources to build something like that do small screencasts, write short blog posts about what you think are cool aspects of Nim and how did it help you to achieve your goal.
Other than that we need 1.0 and a continuous development for the C/CPP and JS backends.
I read about Nim in a reddit thread where someone was asking advice about what next language to learn. I was curious, so I read a little about nim. My understanding was that Nim was sold as an efficient language with python-like syntax (plus being strong in some concepts I'm not familiar with like meta-programming).
That sounded really cool to me, because Python is more or less my only programming language, and sometimes I would like to learn something else, and that may allow me to write faster programs. So I read the tutorial and gave a try at Nim by writing a Nim version of a small bioinformatics data manipulating program that I already have in Python and Haskell.
I'm happy with the result, but my impression so far is that Nim is actually not so easy to learn. It is not at all as beginner-friendly as Python. The documentation is comparatively poor, and one major issue is the discoverability of solutions to my practical problems. This in turn is probably due to the small size of its user community. Look here for instance: https://codereview.stackexchange.com/questions/tagged/nim Two questions only, none answered.
I struggled getting my program to do simple things such as being able to read either from stdin or from a command-line-given file. Now I want to be able to read from gzipped data, and the only thing I found was this file: https://github.com/nim-lang/zip/blob/master/zip/gzipfiles.nim
I have little clue was streams are (versus Files), and it will probably difficult to understand how to use this. I need examples. Maybe Python made me a lazy programmer, but the way I learn is by being exposed to examples more than by reading the manual of the language (that said, the first language in which I wrote small programs was TurboPascal, and I learned by reading paper documentation back in the pre-internet era).
A larger community would likely help fix these issues, by multiplying the availability of code examples, by increasing the chance someone gets answers in stackexchange sites.
@jzakiya Thank you for these suggestions and for writing up that longer post, it was an interesting read. Please don't be dissuaded by the replies to this thread so far.
Your suggestions are good, here are my requests/thoughts:
Having access to various Ruby article feeder sites I recently came across this
https://hacklines.com/en?ucc=rubyflow&tags=Ruby%2CRails%2CSinatra
I'd love for Nim to be included on this website. But how do we get Nim there? Perhaps you know? If you do, what's stopping you from getting Nim there?
We desperately need people who care about Nim and do everything they can to get Nim noticed, like what you've suggested. I would love to do it myself but my time is currently really stretched to its limit.
I also subscribe to different languages (Rust, Elixir, Julia) which use the Discourse ecosystem for their forum/communities communication system. I know Nim has this forum, but using Discourse may make if more accessible to people who haven't even heard of Nim. Just some thoughts.
Yes, we could do this. The main reason we don't is because we are proud of this forum (by we I mean myself and Araq), and it has been with us before Discourse was ever a thing so it would be sad to replace.
I think Nim has very good technical merits as a programming language. Other languages, however, are eating Nim's lunch because they have larger and more friendly/accessible communities, better documentation, and more public mindshare.
Which languages are those? Rust? Go? Those languages have a lot of resources behind them. There are certainly things we could be doing better, but please understand that we rely on other members of the Nim community to help out. You're already helping by letting us know what we could be doing better, and I appreciate that. Do consider going a step further and doing everything you can to implement your requests yourself.
@bli Thank you for taking the time to write down the pains you've experienced while learning Nim :)
Look here for instance: https://codereview.stackexchange.com/questions/tagged/nim Two questions only, none answered.
I didn't even realise this stack exchange site exists, sadly I think by now those users have moved on :/
I struggled getting my program to do simple things such as being able to read either from stdin or from a command-line-given file. Now I want to be able to read from gzipped data, and the only thing I found was this file: https://github.com/nim-lang/zip/blob/master/zip/gzipfiles.nim
The best thing to do in those situations is to ask questions. The advantage of the small community is that if you join IRC/Gitter and ask a question like this, somebody will answer you (and that somebody might even be Nim's creator, Araq).
Here is an example of how to use this: https://github.com/nim-lang/zip/blob/master/tests/gziptests.nim (note, you'll need to change the import ../zip/gzipfiles to import zip/gzipfiles, this really should be fixed in the repo...). You will also need to install this package via nimble install zip.
Hope that helps :)
@dom96 Thanks for the clever suggestion to look at the tests.
I'll ask questions regarding my particular practical issue in another thread.