Why I chose Node.js for my hobby project?

If you know me, you can easily say I’m Java addict. I prefer to use Java wherever possible. But things change. JS MVC frameworks becomes hipster framework and I’ve already took a deep dive in AngularJS. After worked in AngularJS for past 5 months, I’m completely impressed with what they can do. Leaving all the bad things aside, it is a perfect RAD framework. If not for AngularJS, we wouldn’t have finished our project on time!

So it all started like that! So one day, my long term project, which is supposed to be my personal pet project, was started with Spring MVC + MySQL! It was left as it is because of me, not having enough time to spend it, and I’m incredibly lazy to write all those boilerplate codes! Anyways, fast forward to Feb, I decided to dust it off and start again. Since I’ve been studying/practicing Nodejs for more than a year, I thought I can give it a try. Well, whats wrong gonna happen and there is nothing to lose! So, meh!

It was nothing but simple yeoman like code generator for AngularJS!!(Don’t ask me why I want to do when it’s already there! It’s secret.) So I chose to go with Expressjs for it’s sheer simplicity in setting up and huge community support, better documentation. It was not more than a week and I’m almost at 50%! And I’m not even spending more than a hour a day! It was little tough at beginning, but once dice started rolling, things went smooth! I liked how the Nodejs community matured within such short time and npm is such a bad-ass! I’m not an pro in Nodejs and calling it THE BEST at this point will be over-doing it, but for now, it seems to best bet for all my pet projects, freelancing ones too! So the moment I put Angularjs with Nodejs, things never was this simpler.

But not all is well. Where it sucks is, when it comes to hosting the app.With PHP/Java, I will setup the server and get app running within an hour, but that’s not the case with Nodejs. It is just not noob-friendly. But once you understand the nuances and terminology, it just hits you right in the face.

So you might ask, what is this post about? It is about, things I liked/dis-liked in one the most touted buzz-word framework Node.js. So here for you!

Likes

  1. Ease of use and setup! Server configuration in local, just 2 secs! Yes, that easy.
  2. Huge community support. I mean huge. And Node.js have LTS now, which is a big relief when devs going in for critical applications where support is crucials.
  3. NPM! Enuff said. Nothing can beat this, not even close.
  4. Awesome plugins. Almost anything, you can find. Never have I felt so relaxed in my 7 years of developer life. Before doing something, I just check npm to see if a plugin already exists and so far it is the case!
  5. Simple, modular code structure.
  6. Very very very very less, learning curve.

Dis-likes

  1. Few plugins I want to use, is either not maintained properly or author simply left it there hanging. I can see many such one, with lot of PRs hanging around. I mean, I’m little concerned about using it. What if something breaks after some time, who I’m gonna ask for help?
  2. Infrastructure is big PITA! This thing is harder than setting up J2EE Server! This coming from Java guy. I mean, yes, heroku is great, but not as great as I thought. If a noob cant configure it, then it is indeed not great. It needs proper, setup guide for noob like us.
  3. Callback! Yeah I know it sounds dumb, because I know there was callback, but this is serious. For first few weeks, it’s fine. No, it’s great. But when code base is expanding, things get real ugly. But there are ways but still, I wish Node.js could have come up with some slick one instead of fat one!(Don’t tell me promise!)

So, it’s not bad at all as people claim. If planned and written properly, with some research on whether it suits you, this can be the best RAD framework, be it your pet project or anything.

 

Advertisements

Is AngularJS(1.x) ready for Enterprise Application Development?

Before I start, I know that we have tons and tons of posts on this topic, but this was based purely on my experience.

It all started with our new project kick start phase, where AngularJS was suggested out of blue to speed up the development due to the tight deadlines. I’m a J2EE guy, and I’m a not a big fan of JS Framework, but ever since words like Backbone.js, Node.js got around the web, it always fascinated me. Whenever a new one comes in the market, I will be start exploring the tech and get excited for couple of months, before the mainstream development get me involved! But this move, looked like I finally get a chance to use cutting edge, buzz word technology in a project at my workplace. Yay! This should be fun.

So the first few weeks has been excited, and I’m very eager to get the prototype up and running to showcase the team, that AngularJS is the right candidate for this project. The base code which we created for the project was so smooth, we felt that we can REALLY speed up the development, because it was so easy, where we spend 100s of lines of code, AngularJS did it in much fewer and simple way! But that excitement didn’t stay long with me.

Before I get any further, this is not another AngularJS Bashing post, but rather a post to clear the mythical air that surround the front-end JS MVC framework. Let me get into the topic.

  1. Documentation : Most part of the development time was spent trying to understand how certain things worked. Because when I try to find them in official documentation, it isn’t there. For a guy like me, who read official documentation for all my doubts in a framework, this was a big blow. The documentation to getting started with was good, but once you are past that honeymoon period, it will be a tough time to find and understand certain aspects. I strongly feel official documentation should be the main place to dig anything and find solution, or learn a framework. Not in some forums. Infact, SFO helped me a lot with AngularJS than the official documentation!
  2. Learning Curve : One funny thing I noticed about AngularJS was, as much easier as it is to learn the basic, it will get tougher when you get going. I’ve done some learning curve graph for easy understanding.ang-learn-curveIt was exactly what happened. Initial excitement levels gave confidence that we can achieve anything but as we are into middle of the project, things get tough and it becomes a swirl-wind about to destroy the city! But after a lot of digging, it get’s down but after certain point of time, it feels like a landmine hidden somewhere safe, but we don’t know where it is. It is mainly attributed to my first point about Documentation. If it was any easier, it could have saved us a lot of time!
  3. Performance : Hey, I am not complaining, but it isn’t what we believed. Since it is an JS framework, things get uglier if we can’t look under the hood(code!). It’s a like a kid left unnoticed with dangerous toys! Hello world can be snappy but when the code base gets big, headache gets bigger! Of course, it is a developer’s responsibility to make sure to tune up the performance, but kind of added more work for us. As a J2EE guy, we were more into server side tweaking and even after bringing skinny data to client side, it took ages to render them! Why, because bloody watchers infested all over the page. Then it hit us, that now we are not only going to tweak server, but the front end tools too! It took us a while to figure out, but in the end we figured out stuff and moved on.
  4. Browser Rendering Engine : Before this, all we cared about was not how our app will perform in different browsers, because all the stuff will happen at back-end. But now, we need to be cautious about this. It adds one more layer of work. In fact, plain Vanilla AngularJS performed just fine, but with all added plugins and modules, it is pretty tough to make it work across all browsers. It is mainly attributed to the fact that we are newbie at JS framework, but still we never thought of this, because we never had this issue before. Although this might sound silly for many, but when it comes to Enterprise Development, things aren’t as glamorous as it’s with other industry. Client browser restrictions, extreme pressure, unnatural deadlines were just a recipe for stress, and this will put more pressure to already squeezed developers!

Conclusion :

All the points I’ve mentioned are just a few to go with, but in the end, instead of speeding up the development, it did slowed us done after the initial surge. Th main reasons were

  1. Lack of proper R&D. If it’s new and shiny, just pick it up mentality was the big mistake. It would’ve saved us hell a lot of time.
  2. Poor documentation should’ve have been taken into consideration.
  3. People’s general belief. If it’s front-end JS framework, work should be done fast. This is what made some guys go with this new techs, but in the end, without proper understanding about the underlying technology, it is quite opposite.

And there are lot more to say, but I feel you get what I am about to say. If you want to use something, take your sweet time to understand the in and out of the framework before you start churning 100s of lines of code. And if you are seriously tight on deadline, please don’t go with this new shiny thing. Because it can backfire you, if you don’t have the skill and the person.

Finally, after looking at AngularJS 2.0, I am quite confident that it can solve a lot of issues of v1 and the documentation looks a lot better. It sounds quite exciting(see, again I fell for this!) and I hope it will help a lot in enterprise application development.

Thanks for reading!