Hi, I'm very new to Nim, so far it's been an interesting experience. I'll 
provide my perspective, not to debate it, instead, to share what it's like as I 
bump into walls and try to figure things out.

My relevant background My day job is managing programmers so all my actual 
programming time is as a hobby. I was using Haxe prior to this to learn more 
about game engines and 3D graphics. While using Haxe (JS and HashLink) there 
were some limitations that frustrated me and so I took a break, deciding 
instead to take a closer look at Nim. This was after @deech's tweets and a 
largely positive review from a friend of mine who I initially encouraged to 
look at Nim (they wanted low-level but weren't jazzed about C/C++/Rust).

My first impression without actually touching the language The docs are pretty 
good and at least they're organized with links to source so I have a map. I 
read through the 3 tutorials in about an hour to get an overview, that was easy 
and it built a map of concepts.

My first impressions actually working with it Both myself and the friend who 
'reverse-recommended' it to me were immediately struck by Nim's weak IDE 
support. Especially given that VS Code and LSP have been such a boon for other 
smaller language communities we've otherwise encountered. Haxe has a pretty 
miserable story here too from my perspective, but that's mostly an indication 
that I've been spoiled rotten by what's available in Java, TypeScript, Kotlin, 
etc. I don't expect a world class IDE, but my expectations were higher because 
of Nim's JS target and the existence of nimsuggest and my inferring that meant 
an easy road to feature rich LSP implementation. This isn't ideal for someone 
new to the language, but something that can be fixed with a bit of time. If 
you're wondering why, examples that immediately come to mind: auto-complete is 
a great way to reduce search space, debuggers are a handy way to learn the gaps 
between ones mental model vs the implementation, and templates/snippets are a 
great way to convey subtle style cues.

What I'm currently working on with Nim I figured it wouldn't be that hard to 
improve the VS Code extension for Nim, I've poked at extensions before and 
since Nim targets JS this should be a good way to learn Nim. Also, I figured if 
I helped improve it maybe the community would grow for those going through a 
similar Nim journey such as myself. So after realizing the extension was 
written in TypeScript and the most mature LSP implementation seems divorced 
from I decided to look at converting it to Nim first, you can see my [terrible 
ongoing port of it to Nim 
here](https://github.com/saem/vscode-nim/tree/wip-extension-in-nim) if you're 
curious. My objectives, learn Nim, improve IDE support, maybe help grow the 
ecosystem and pave the way for new contributors. At this point I thought, given 
that the Nim compiler is written in Nim, it targets JS, there is nimsuggest, 
it'll be awesome!!!

Community impressions thus far One thing to note, as I was googling about and 
trying to understand why things were the state they were in, I encountered a 
lot of seemingly acerbic/derisive/vitriolic comments towards VS Code, IDEs, 
LSP, and so on, they're bit off putting and people are of course entitled to 
their opinion. Where it went beyond that and honestly I started to have doubts 
about engaging ( **including my own hesitation as I write this very message** ) 
there was more than one occasion were said criticisms were used to cast 
aspersions on the users/developers. It's not all doom and gloom, here is a 
bright spot that as small as it is meant a lot to me, I [opened an issue to let 
the vscode-nim extension](https://github.com/pragmagic/vscode-nim/issues/172) 
folks know I was attempting a Nim port and those little emoji's of 
encouragement help move past the dips in enthusiasm.

My current opinion things are positive, I'm enjoying myself. I've run into a 
roadblock with trying to use nimsuggest/sexp parsing in JS and in the midst of 
an ever expanding search for answers I stumbled upon the forum and this post.

Some challenges I've run into I'm purposefully trying to draw from the beginner 
mindset and experience so they might seem trivial:

  * the manual being single page makes it hard to scope browser text searches 
to single sections
  * IDE support is very weak so it's hard to support learn as you go
  * the manual rarely tells you what happens in JS backend and it's not always 
easy to try it
  * it feels difficult to reason about the stdlib and how it works in js+node 
so I've been wrapping native js APIs and ignoring that for now... this brings a 
world of hurt (cstring + cint) and I probably deserve that ;)
  * it's hard to figure out how I should setup "my first project" without deep 
dives, nimble/nim.cfg are still confusing especially with various interactions 
with choosenim
  * learning "good taste" in Nim feels like forever away



I hope this is useful 'anecdata' for folks here, if someone would like to learn 
more about my perspective, I'll happily share but I'm not looking to debate it. 
If you'd be interested in helping me at all with my learning or the porting 
project, then maybe let's connect outside this thread so it stays on topic.

Reply via email to