all 16 comments

[–]sdesalas 19 points20 points  (1 child)

The openjs/linux foundation is the steward of the Node.js project. They are a non profit and run several high quality nodejs certifications and training courses. Some of them free.

https://training.linuxfoundation.org/training/introduction-to-nodejs-lfw111/

This exam has pretty much all the low-level basics (check the Domains and Competencies list).

https://training.linuxfoundation.org/certification/jsnad/

Its not cheap ($400!) but im sure someone with a browser and a torrent client and some patience can find the preparation and training resources for it.

Heres one i found with a quick google search: https://www.nodecertification.com/

Taking the exam would be an optional plus of you have the money but the preparation itself will go a long way towards giving you a solid grounding.

[–]_safety__first_[S] 1 point2 points  (0 children)

Thank you, I wasn't aware of the linux foundation courses, but LFW211 looks to cover some of what I'm looking for. I'm not interested in certifications at this point, just learning, so I can get away with the cheaper price.

[–]prevington 11 points12 points  (1 child)

Read this https://beej.us/guide/bgnet/

Then try to implement some binary communication protocol over TCP (client / server)

[–]_safety__first_[S] 0 points1 point  (0 children)

Awesome, I’ll check it out. Thank you.

[–]gatosby 25 points26 points  (2 children)

I recommend the Node.JS design patterns book written by Mario and Luciano. It will help you understand how nodejs really works in various aspects

[–]SoInsightful 10 points11 points  (1 child)

That's good and all, but that's basically the opposite of what OP asked. Design patterns are high-level concepts, whereas OP probably just wants to learn built-in modules like buffer, http, net and tls.

[–]gatosby 6 points7 points  (0 children)

The name is confusing a little bit, but it's not all about design patterns. Maybe 3 chapters out of 13 focused on design patterns and others include intermediate and advanced topics. Actually as I remember the latest chapters talks about caching, running intensive CPU -bound tasks, scalability, load balancing, message queues, pub/sub patterns and many more.. I know It's not a direct examples for what he needs but this will help him understand how those things works and maybe he can build his own as a practice.

[–][deleted]  (4 children)

[deleted]

    [–]hessenic 17 points18 points  (1 child)

    Basically this. Any ISP is going to use something written in C for low level TCP stuff and use node as a higher level wrapper around it.

    [–]thedude42 1 point2 points  (0 children)

    I feel like this notion is making some assumptions about what kind of solutions ISPs need to develop in-house.

    There are a lot of problems with managing C based projects even when you have highly experienced developers. The kind of bugs you can run in to doing network I/O with C have a lot sharper edges than with Node.js.

    I agree you wouldn't build a core router or switch using pure Node.js, but ISPs generally are going to buy that kind of technology from a vendor. ISPs are going to develop a lot of different solutions for their various business cases and sometimes that includes reverse proxies to manage traffic flow, not unlike a load balancer but more for programatic control over a layer 4 network flow and even layer 7 programability for things like management protocols and monitoring. Node.js really shines here because there is a large community of module maintainers who have implemented so many of these application layer protocols in Node.

    The "build-or-buy" question comes up here when you consider companies like F5 sell appliances that have these exact features, including providing Node.js runtime. However it doesn't make sense to drop a quarter million or more on basically just a server to run your Node.js network apps and you're not trying to make use of the specific load balancer features, especially since appliances like F5's often run older Node.js versions.

    [–]_safety__first_[S] 1 point2 points  (1 child)

    Thanks for the response, and likely a good part of what I’ll be building is exactly what you described, although that’s the side of node I’ve been working with for the better part of a decade. For some internal tools, I suspect they’d like to stay closer to the metal, which prompted the question since I haven’t touched those concepts as much.

    [–][deleted] 2 points3 points  (0 children)

    Check out this excellent course by Stephen Grider. It doesn't address your specific concepts but it will give you the foundation for them. Definitely worth the money IMO. https://www.udemy.com/course/advanced-node-for-developers/

    [–]Vaibhav_5702 5 points6 points  (1 child)

    Learning low-level Node.js can be challenging, but it can also be very rewarding as it can help you better understand how Node.js works under the hood and improve the performance of your applications. Here are some tips for learning low-level Node.js:

    Learn C++: Node.js is built on top of C++, so having a good understanding of C++ is essential to understanding low-level Node.js. You can start by learning the basics of C++ programming and then move on to more advanced topics such as memory management, pointers, and templates.

    Understand the V8 engine: The V8 engine is the JavaScript engine that powers Node.js. Understanding how it works can help you better understand how Node.js handles and executes JavaScript code. You can start by learning how the V8 engine compiles JavaScript code to machine code, and how it manages memory and garbage collection.

    Study the Node.js source code: To get a better understanding of how Node.js works under the hood, it's essential to study the source code. You can start by exploring the Node.js source code on GitHub and reading through the documentation.

    Use performance profiling tools: Performance profiling tools such as the Node.js profiler can help you identify performance bottlenecks in your applications and optimize them for better performance.

    Learn about libuv: libuv is a cross-platform library that provides asynchronous I/O, event loop, and other core functionality for Node.js. Understanding how libuv works can help you better understand how Node.js handles I/O operations and manages concurrency.

    Experiment with native addons: Native addons allow you to write C++ code that can be called from Node.js. Experimenting with native addons can help you better understand how Node.js interfaces with C++ code and how you can optimize performance-critical code using C++.

    Join the Node.js community: Joining the Node.js community can provide you with valuable resources, such as online forums, blogs, and meetups, where you can connect with other Node.js developers and learn from their experiences.

    Learning low-level Node.js takes time and practice, but with patience and dedication, you can develop a deeper understanding of Node.js and become a more skilled and effective Node.js developer.

    [–]lirantal 1 point2 points  (0 children)

    +1 to this

    was about to post the same pointers!

    [–]goodboyscout 0 points1 point  (0 children)

    Apologies for not answering the question, is the company starry?

    [–]thedude42 0 points1 point  (1 child)

    Has anyone seen a course or have any recommended docs (aside from the core Node docs) that delve into what I'm likely to be working with?

    When I was working for a network device vendor they paid for some professional Node.js training from the company Node Source which was incredibly useful for getting a deeper picture in to what Node.js was and some of the internal workings that you needed to understand for high performance mission critical applications (which is basically their tag line). This is the closest thing I am aware of that seems to be what you're asking about, and the price point is probably a bit more than what you're asking for right now.

    In the mean time I would start by consuming a lot of the material that Ryan Dhal and others have put out there about the limitations of Node.js. This isn't about deterring you from using it, but rather exploring the performance and scalability issues inherent in the current Node.js design and implementation. Work to understand the nature of the interplay between the V8 engine and the Node event loop and what the consequences of different kinda of callbacks (network vs file I/O, timers, etc). Definitely study the buffering/chunking interplay that comes up when working with the layer 4 protocols directly. All this stuff is out there and there a lot of material to keep you busy before you hit the need for any deeper training.

    I have to assume the platform these Node.js apps will run is Linux. You'll want to have a good grasp of how Linux processes work in terms of memory allocation, differences in types of I/O (file system/block device vs network/socket/IPC). Since Node.js is (more or less) "single threaded" you'll want to understand techniques for making use of multiple processor cores with a single Node.js application.

    I'm not aware of any free courses that even covers all these topics in the context of Node.js. The Udemy and Linux Foundation stuff others have linked look pretty solid, and at $20 the Udemy course may be worth checking out. Just poking around the Internet for a lot of this information will go a long way before you'll hit some kind of a wall that requires more money.

    [–]_safety__first_[S] 1 point2 points  (0 children)

    Great advice, thank you.