
Nim Advocacy and Promotion Strategies - andybak
http://forum.nim-lang.org/t/671
======
bjourne
Alright, then show me! For example, the beginner tutorial was linked a while
ago ([http://nim-lang.org/tut1.html](http://nim-lang.org/tut1.html)) and I
wouldn't criticize it at all, because it's well written, but it doesn't show
me why _I_ would care about Nim when there are dozens of languages I could
choose instead.

It looks like Python, with a little more types.

Fwiw, I'm also a language geek and my favorite language is Factor. If I wanted
to evangelize it, I could show how idiomatic Python or Haskell code translated
to Factor takes up less than half or a third in size. So that's its USP
(Unique Selling Point) -- really short code. What is Nim's USP?

Julia: "fresh approach to mathematical computing", Rust: "safe resource
disposal without GC", Go: "C successor backed up by Google", Swift:
"Replacement for Objective-C", Clojure: "Scheme on the JVM", Nim: "no idea
what to write here"

Is it the Why should I be excited? paragraph: "Nim is the only language that
leverages automated proof technology to perform a disjoint check for your
parallel code. Working on disjoint data means no locking is required and yet
data races are impossible" If I understood what the hell that means, maybe I
would be excited. :)

~~~
eaurouge
_I_ am excited about Nim because it compiles to C that can run on an ARM
microcontroller. I believe this was a possibility at some point, but I don't
know if this is a priority for Araq. So (personally) I see it as a (potential)
"C replacement for embedded systems".

~~~
haberman
I'm just trying Nim for the first time. How do you compile to totally self-
contained C?

I tried pulling the files out of nimcache/*.c, but it is wanting to include
nimbase.h.

Is there a way to compile an entire Nim program to a single self-contained .c
file (ie. an amalgamation, aka SQLite?)

~~~
mmfZ4e4OqQ7RRwP
You copy the nimbase.h file along with the nimcache/*.c files. That's it. The
compiler doesn't do it because it's a waste of time/space copying a file which
you most likely can include from somewhere else, and it's not a generated
file.

~~~
haberman
Good to know. It would be nice if there was an option for the compiler to
build a single .c file that was totally self-contained, for distribution
purposes.

~~~
mmfZ4e4OqQ7RRwP
I don't know anybody who redistributes source code as a single C file, but you
could try concatenating the files into one. Usually people redistributing
source code don't mind having several files bound together by some make|build
script. The nim compiler has the --genScript switch to make one. Most people
willing to get something redistributable prefer a binary static|dynamic
library or final executable.

~~~
haberman
> I don't know anybody who redistributes source code as a single C file

SQLite pioneered this approach, called an Amalgamation. It offers some
noticeable advantages:

[https://www.sqlite.org/amalgamation.html](https://www.sqlite.org/amalgamation.html)

It is gaining some followers:

[https://github.com/vinniefalco/Amalgamate](https://github.com/vinniefalco/Amalgamate)

[http://stackoverflow.com/questions/2719311/tool-to-create-
an...](http://stackoverflow.com/questions/2719311/tool-to-create-an-
amalgamation-combine-all-source-files-of-a-library-into-one-fo)

[http://lua-users.org/lists/lua-l/2008-08/msg00594.html](http://lua-
users.org/lists/lua-l/2008-08/msg00594.html)

> Usually people redistributing source code don't mind having several files
> bound together by some make|build script.

A single .c file is easier to integrate into various build systems. For
example a Visual Studio project, or another Makefile without needing a
separate script. It's just cleaner.

> Most people willing to get something redistributable prefer a binary
> static|dynamic library or final executable.

These aren't portable like a C source file is.

------
fsloth
As an engineer I would be persuaded by a) implementing something practical but
simple simply, b) implementing something a bit more complex legibly and c)
writing about the results which explain why they are neat.

The killer promoter is of course a book.

I usually wait before starting on new languages so I'm not slowed down by
incomplete tooling, missing compiler features etc.

What really gets me going is a 1-2-3 tutorial which explains how to implement
something non-trivial like calling c dlls.

~~~
okasaki
The package manager Nimble is written in 800 lines of Nim:
[https://github.com/nim-
lang/nimble/blob/master/src/nimble.ni...](https://github.com/nim-
lang/nimble/blob/master/src/nimble.nim) Maybe that would satisfy (a)

------
phantom_oracle
Lack of tutorials...

Learning the syntax/features of the language should be part of documentation,
not a tutorial.

"Hello World" as the core/intro example with nothing else after that (or
trivial command-line programs) will not get many adopters.

Show people how to build REST APIs, GUI programs (like a text editor), a small
web-server and maybe some other scientific/math example.

Showing just a few features and then saying "go build" will not get normal
people to adopt the language. Only "savants" will pick it up.

Give examples/libraries and people will build on those.

The syntax is also not _that_ close to Python. It is obscure in some places
and not as readable. If you're going to compare it to Python, do a readability
test:

Write the exact same application in Python and Nim and then ask somebody else
to compare the 2.

I tried to pick up Nim, but I was fighting against it every time I tried to go
beyond a trivial CLI program.

I'll take Pythons slower implementation with 3000 libraries over Nims "C-like"
speed where I can't even build a REST API.

I like Nim, but if all the effort of promoters is just promotion, the language
will stay where it is.

You geniuses working on Nim for a long time need to share your examples and
show the noobs how you built things with decent screencasts/tutorials/lessons.

Something tells me that even just 3 decent examples where real applications
are built (eg. a game like Snake using a GUI and game-engine/lib) will get
+1000 Youtube hits in no time.

------
lazzlazzlazz
Nim is very, very close to being the most competitive language in my toolkit.
If JSON were handled more elegantly, like Python, I'd probably be completely
sold.

Binding to Python would also be an absolutely killer feature.

~~~
mmfZ4e4OqQ7RRwP
Take a look at [http://forum.nim-lang.org/t/360](http://forum.nim-
lang.org/t/360) for Python bindings, that should lead you to
[https://github.com/micklat/NimBorg](https://github.com/micklat/NimBorg).

------
cormullion
Perhaps they could fix the Wikipedia and Wikibooks presence? Has it really
been "banned" from Wikipedia?

~~~
def-
[https://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletio...](https://en.wikipedia.org/wiki/Wikipedia:Articles_for_deletion/Nimrod_\(programming_language\)_\(2nd_nomination\))

> Lacks reliable independent secondary sources to establish notability as
> required by WP:GNG. Every source is WP:PRIMARY. Every one of them. Googling
> turned up posts to online discussion forums but nothing useful.
> Additionally, I note that the decision to delete at the previous AfD was
> unanimous for the same reasons.

> Perhaps think of it this way: a language becomes notable when people who
> haven't been involved in its creation start writing about it. If/when this
> language gets to that point you'll have no problem creating an article. At
> the moment, though, there just hasn't been enough uptake to get the coverage
> we need for notability.

~~~
Symmetry
Would the Dobbs article be enough to get it reinstated then?
[http://www.drdobbs.com/open-source/nimrod-a-new-systems-
prog...](http://www.drdobbs.com/open-source/nimrod-a-new-systems-programming-
languag/240165321)

~~~
def-
No, since it's written by Araq, the creator of Nim.

------
bwilliams
Maybe update the site design and logo? It looks very 2000's and could be a
huge benefit.

~~~
vardump
An aesthetically nice website is a neutral or a negative signal when it comes
to technical subjects, like computer languages. Content first, graphical
design is completely secondary.

Just need to represent information about the technical subject clearly.

If the technical merits are there, adopters will come. Technical people are
not baffled by $animal . $excrement. Instead, it puts them off.

Edit: I get downvoted a lot, but could someone prove me wrong? What technical
concepts (like programming languages) got popular with help of nice graphical
design?

~~~
bwilliams
That kind of thinking will only prevent adoption, not help it.

Aesthetics are important to technical subjects as well. It shows that a lot of
time and consideration have gone into every part of the project, not just the
technical side. It's also a good sign of community support/interaction. I will
agree that content is the most important, but you shouldn't write off
aesthetics so easily, especially when you want people to be interested and
adopt your technology.

~~~
vardump
Try to google some popular languages. Use
[http://archive.org/](http://archive.org/) to see how their respective pages
looked like in the past. I find it hard to believe aesthetics helped their
adoption.

Interesting article, related to web design and conversion rate:

[https://blog.kissmetrics.com/shocking-truth-about-
graphics/](https://blog.kissmetrics.com/shocking-truth-about-graphics/)

~~~
bwilliams
Here's Ruby for example, before it was popular: (2004)
[https://web.archive.org/web/20040211074335/http://www.ruby-l...](https://web.archive.org/web/20040211074335/http://www.ruby-
lang.org/en/) and here's when/right before it (arguably) started picking up a
community
[https://web.archive.org/web/20070805190709/http://www.ruby-l...](https://web.archive.org/web/20070805190709/http://www.ruby-
lang.org/en/) (2007)

Popularity being based on the Rails 2.0 release since that's when Ruby/Rails
seemingly started to take off. It's a bit before my time so if anyone knows
better feel free to correct me.

~~~
vardump
So we can probably agree that at least Ruby didn't get popular because of
graphical design.

And here's Nim:

[http://nim-lang.org/](http://nim-lang.org/)

It looked pretty good when I saw it for the first time today. Told me what it
is about concisely. I don't see how a better design could significantly
improve Nim's adoption.

Edit: I did completely miss the carousel at top of the Nim main page. I think
it'd work better, if it was just serially on the page instead of the widget.
Same content, less "design".

~~~
bwilliams
You're missing the entire point. If they had a better design it would probably
interest people more, pertinent information would be more visible, and it
wouldn't look like it came out of 2002.

This is pretty much the "sales" page for Nim and it looks outdated and
unmaintained. For comparison check out the Rust homepage. It's not "flashy"
but it's simple and looks fairly nice. It gives you a simple example and tells
you why you should be using Rust in as few words as possible.

[http://www.rust-lang.org/](http://www.rust-lang.org/)

Here's some other sites that have fairly good designs that show that the
community cares about how they and their language come across.

[http://elixir-lang.org/](http://elixir-lang.org/)
[http://rubygems.org/](http://rubygems.org/) [https://www.ruby-
lang.org/en/](https://www.ruby-lang.org/en/) [https://new-
www.haskell.org/](https://new-www.haskell.org/) [http://www.scala-
lang.org/](http://www.scala-lang.org/)

All of those languages/tools show that the community/devs care about how they
and their language look to others/potential adopters. I'm not saying that
having a great site design (not graphical design, that's different) are going
to make Nim the most popular language on the planet. I'm suggesting that it
can, and will help if they move forward and pick up a more modern design and
simplify the content to get their point across.

------
vezzy-fnord
I don't understand why Python comparisons are being thrown around here. From
my limited experience with Nim (I liked the name Nimrod better, but oh well),
it seemed a lot more Wirthian than it did Pythonesque. And of course: AST
macros.

------
trwired
I am looking for a systems programming language that would work well with
battle prooven GUI toolkits such as Qt. Would Nim be a good choice?

~~~
eaurouge
Writing Qt-flavored C++ was a lot of fun last I tried it (some five years
ago). And now there's QML. Have you tried writing your entire project in Qt?
It may be a smoother experience than you think.

~~~
trwired
I have some experience using C++ with both Qt and wxWidgets, but I am looking
for an excuse to learn something new. And a systems language with Python
inspired syntax and comparable expressiveness that is suitable for creating
GUI apps is something that would definitely make me want to investigate Nim
further.

~~~
Cyther606
You may be in luck:
[https://github.com/filcuc/NimQml](https://github.com/filcuc/NimQml)

~~~
trwired
Thank you for the link, but I can reasonably expect that Qt bindings for Nim
either exist or will become available soon, as most languages that get any
traction get them. I still don't know, however, if it's a good choice to try
and put a GUI app together in Nim. Will it surprise me with a huge binary,
like Rust does? [1] Will it be easy to develop in it on multiple platforms? I
can find all those things myself, but in the spirit of what the OP describes
as putting the best foot forward, I'd like to be able to quickly assess
whether the language is potentially a better choice to solve my next problem
than those I already know or am planning to learn.

[1] - [http://endl.ch/content/cxx2rust-pains-wrapping-c-rust-
exampl...](http://endl.ch/content/cxx2rust-pains-wrapping-c-rust-example-qt5)

~~~
Cyther606
Having seen multiple young open source projects, like Nim, play themselves out
over the course of my many years in the Bitcoin space, I expect the savviest
developers at this point to benefit most from Nim by establishing themselves
as core contributors.

The devs who got into Bitcoin on the ground floor in 2011 and 2012 are three
years later on the most sought after venture backed teams, with the whole
world hanging onto their every last word. Young and profoundly promising
languages like Nim offer a similar opportunity if you're willing to risk it.

It could very well be better to use the myriad of other, more mature and
stable languages to solve truly pressing issues. Nim is very young, and the
risk:reward ratio is skewed more towards contributors than users who can't
risk bugs.

------
hahainternet
I find it disturbing that languages are now adopting promotion strategies
because not enough people are using them.

For fuck's sake, focus on improving the language and this will come
organically. This isn't a competition as to who has the most popular language,
and the most popular languages are always going to be total shit.

Just write good code, marketing departments are the bane of the entire IT
sphere, you shouldn't be trying to create one for a niche language.

~~~
melling
That's not true. Being the first few people means that the tools are not
developed, common questions aren't answered, books aren't written, getting
help is difficult, etc.

There are only 18 questions on StackOverFlow, for example:

[http://stackoverflow.com/questions/tagged/nim](http://stackoverflow.com/questions/tagged/nim)

People don't want to burn too many cycles discovering how the language works.

~~~
mmfZ4e4OqQ7RRwP
The fact that there are only 18 questions on StackOverflow could also mean
that the language is that good that rarely you find something requiring
further explanation. Or maybe Nim users use the Nim forum instead for
questions ([http://forum.nim-lang.org](http://forum.nim-lang.org)), where
finding a C forum or Python forum is not that easy/direct.

