To anyone who's tried to learn (successfully or not) Node.js: What were your hurdles? What were your successes?

I'm doing some research for the Node.js Education Working Group (WG), and I have high hopes that this will be a good place to get some feedback.

So, have you tried to learn Node.js?

If so, what were the tools you used to learn? Tutorials? Courses? Mentorship?

What did and didn't work while you were attempting to learn it? How were those tools successful and how did they fail?

Thanks!

Davor Minchorov's photo

I've taken a few Pluralsight courses on NodeJS and wrote a few scripts / a server which it wasn't too hard but the whole async nature of things and following / controlling the flow is the only problem I am still trying to figure out in detail.

I am talking about scenarios where you have to loop over an array of few items and run a method for each item but the function does an asynchronous call (redis) behind the scenes and after that is done, continue. Sometimes it feels chaotic a little bit.

Usually, these scenarios are not shown in tutorials, so I have to learn them by myself or ask for help.

Show +3 replies
Dong Nguyen's photo

@ruffles Did you mean something like async.series or async.parallel?

Vijay Thirugnanam's photo

I have not used Node for production yet. I used Node with Bower and Gulp. Now, using Meteor.

I formally learnt node from a Pluralsight course by Kyle Simpson.

Node looks fairly simple for someone who is good with ES 2015.

There should be some reference material available for using Node in serious applications - caching, scaling, transactions, queues, workflows, performance, microservices, docker.

Show +1 replies
Tierney Cyren's photo

Also, what kind of format would you like to see that reference material in? Would you be preferred to be taught or be shown? When you were a new programmer, how would you have been ideally taught production caching, scaling, transactions, queues, workflows, perf, microservices, and Docker?

Vijay Thirugnanam's photo

Yes - the same course.

A reference implementation in GitHub will be good enough. Once we see some source which we can get it to work, we can customise it for our individual needs. For those who are new, workshop can be conducted for explaining the reference implementation.

Marco Alka's photo

I learned Node.JS just for fun a few years ago. What I did to learn it was what I did for every language and framework: I just used it. All you need is a project. Something you want to create. And then you google whatever you need.

The first big hurdle: I was a PHP developer before, so I first had to realize that Node.JS works fundamentally different. When you make a homepage with Node.JS it's not really a website, but more like an application itself.

The first big moment was when I finished porting my big web application framework from PHP to Node.JS

My second big hurdle: Requiring all files at the top of a script might lead to circular dependencies (which is not bad) which end in script not being executed in some files. I solved it by writing a module loader (which is FOSS and on NPM by the way).

My second big moment was when I realized that I can use Electron and NW.JS to make desktop apps, Cordova to make mobile apps and that there are even people making whole operating systems just with node.JS (well... except for the HAL and webkit maybe). Node.JS is awesome!

My third big hurdle: Struckturing Node.JS applications with thousands lines of code and many different modules (not Node.JS modules). I overcame this problem by taking ideas from C++ and TypeScript and mixing in my own ideas, ultimately separating the interface from the code and having every single method (together with its helper functions) in its own file each.

Dong Nguyen's photo

I started learning Node.js since 2011 by writing several small scripts. Because I've worked at both back-end and front-end sides several years early so Node.js was not very difficult for me at that time. But, without real project, everything was just for fun.

The first project I've done with Node.js is upgrade a chat application, replace the traditional AJAX-pull mechanism with a modern server-push mechanism. I got a copy of "The Node Beginner Book" by Manuel Kiessling, and done some researches about Socket.io, that's it. It taken around 1 week to get the project done. Today, we may do the same thing in a hour :)

I did not follow any Node.js class.

Shrihari Shastry's photo

Node.js server technology is great, provided you have to use it in right ways. Things to be considered are :

  1. Try reverse proxying NGINX for any node related project.
  2. Never ever try to serve static files with NodeJs(nodeJs weak area). Since Node run on single thread the response time for serving up static file(HTML, images, js or css files) would be really considerable so.
  3. Use Promises carefully.
  4. Try to use platform like Heroku or similar kind.. Because most of the cares for right usage is provided by them.
  5. Regarding database try to use NoSQL databases which goes well with node . But if you choose to work with sql databases please do choose ORMs intelligently.
  6. Try to use PM2 kind of process managers.

These are my personal experiences I dealt with and I was stuck. These are the links that helped me.

Hope this helps you.

Rajkumar's photo

Been there, done that. It wasn't hard to write small utilities with Node, but to put it as an complete framework and do all we need is a bit of an task. It took me 1 day to get started with Node, but 1 month to get an web app up and running.

Major hurdle was, as mentioned by many, the async nature. Even with all those libraries, it is still a nightmare. I am yet to figure it out, but hope I will do it one day, once I'm free!!!

Jan Vladimir Mostert's photo

I read through the docs at nodejs.org and after that wrote an app myself and helped somebody else write an app.

Docs are fairly decent.

Haven't used NodeJS since.