Learning Rails/Ruby or Node.js?

It's a while that I'm trying to learn Rails/Ruby. As I'm a .Net developer by day, I didn't have enough time to learn/master Rails/Ruby. So learning it happened very slowly for me. During this long time I have more time to think about it twice.

For many reasons I'm getting in doubt that if it is better to learn js (or front end development or even Node.js) instead of Rails/Ruby? By now I have a live project mainly developing in js. This project tell me to learn js because it has immediate benefit for it. As a long term ASP.NET developer I've always feeling that I need to know more about front end development. Knowing just server side is not a good idea for today's software development. Single page applications is on trend for some years now. Even mobile software development is easier if knowing js/HTML5. A mainly js application using HTML5 could do many tasks like a native app.

And the last reason is that in Country's current market trend, Rails/Ruby development has no many fans. Teams and companies prefer to use .Net, Java, PHP and JavaScript. I think being a Rails/Ruby developer is less wanted that being a front end developer, a JavaScript developer or even being a Node.js developer.

Learning Node.js instead of Rails/Ruby has the chance that you can do something in the market with JavaScript while Ruby is a rare wanted skill. Consider that Node.js is more speedy that Rails/Ruby and like Rials is in trend for a few years.

Update: Read article Why The Hell Would I Use Node.js? for getting more information about Node.js.

Books/Resource for learning Ruby/Rails

There is a well known book on Ruby and another one for Rails. Both of them authored/co-authored by Dave Thomas. I thought they are good points to start. I started from “Agile Web Development with Rails 4th edition”. But I found it is a little bit simple for an experienced ASP.NET MVC developer. The book started near everything from base. For example it describes what html.erb files are and how they work. It also describes from scratch what is meaning of MVC and how directory structure is in a Rails projects. While all these information are very helpful but if you have been an ASP.NET MVC developer in past then this book is not suitable for you. Because already you know many of them.

 

Haven't read “Programming Ruby 4th” yet but I think this would more useful especially if you have no prior experience with Ruby. I believe it's better to start with Rails then when you need more info on Ruby go back and read more on Ruby.

 

A good resource for learning Ruby/Rails is Rails's official guide. It is more fascinating for web developers with some previous expreinces. Learning by this site is a bit quicker and needs a bit lesser time. It does not start with trivial subjects. It is like a concise reference. One lovely thing about this guide is that it starts database access very soon and has less things about Ruby itself.

Proper open source project to contribute and learn Ruby/Rails

One of approaches to learn a new programming language is learning by doing. When the target language is Ruby/Rails then there are many open source Ruby/Rails projects that may need contributions. As a long time ASP.NET MVC developer, diving into a Ruby/Rails project must not be a very hard work. One of good resources to find active open source projects that needs contribution is Github but a faster way is CodeTriage. It helps finding projects simpler and faster.

For a person like me there is some considerations to select a project for more investigating:

  • Prior familiarity with the field. I have backgrounds in developing software in categories of ERP, CRM, MIS, Accounting, CMS and Trouble Ticket systems.
  • Being a user of the software. For example Redmine is a plus for me because I’m currently using it as an issue tracking system.
  • Possibility of making money from the project. It include consulting services, localizations, custom developments, etc.
  • More people will benefit it. No doubt a music playing or photographing software is good for people too. But I think there are some other areas that have better impact on people. For example if a software or system can reduce traffic jam in cities or helps NGOs fighting poverty that will be more desirable.
  • Project characteristics. A project with high technical standards and welcoming people is always a good project to deal with.

With these consideration in mind I picked 4 primary projects from CodeTriage.

  • Ekylibre, Simple ERP for little enterprises. Developing mainly by European folks.
  • Fat Free CRM, Ruby on Rails CRM platform for Web 2.0 and beyond
  • Loomio, an open-source web application that helps groups make better decisions together. Developing mainly by New Zealander folks.
  • Grow Stuff, Open data project for small-scale food growers.

Among them, FatFreeCRM is most popular and active project. It has 2636 stars, total number of 183 pull request and 83 contributors. It also has 988 forks. Contribution in FatFreeCRM in addition to learning Ruby/Rails can help making money as it is a demand software in business. GrowStuff seems as a suitable project too. Despite it is not used in businesses as much as FatFreeCRM, it has a welcoming community. 635 total pull requests, 52 contributors and 201 total issues shows its diverse community of contributors.

Trying new programming languages and platforms

With about 10 years of developing software in Microsoft .Net platform since 2005, I decided to try something new. Microsoft .Net, C# and ASP.NET are my good friend but I think they are not very fast in agile world and in fast growing startup demands. Also Microsoft .Net essentially require Windows eco system that is not free to use that can be problematic specially in countries that are sanctioned to buy legal licenses and is not rich enough to pay the prices.

As a mainly web developer I decided to gather more information on Ruby, Python and Node.js. They all have rich library of components and reusable components and batteries and also can be developed and hosted in a Linux machine. A good decision needed to me to get hands dirty and try them practical. My first try was Ruby/Rails. A small database driven web project was offered to me to evaluate and estimating the price. It was good situation to do it in Ruby/Rails especially I am an ASP.NET MVC developer and I was not un-familiar with MVC pattern. Finding good tutorials I started installing Sublime Text and Rails on my Ubuntu machine and exploring Ruby/Rails. The project I were offered to evaluate go cancelled finally but I learnt good thing about Ruby/Rails. Rails itself id pretty much similar to ASP.NET MVC. Controllers and Views (erb files) were pretty similar to ASP.NET MVC Controllers and Razor views (cshtml). Previously in an ASP.NET WebForms project, our team were using Castle ActiveRecord over NHibernate for data access. So Rails’ ActiveRecord pattern was also very similar.

Never had situations to try Python yet. Even I may remove it from my to-try-list. Because I see no business opportunity on it yet. In the other side I have a chance to install and use some portions of Node.js (npm) on my machine while trying AngularJs that will describe it later in this text. BTW as times go on I’m thinking that it’s better to wait for a new project or job position that needs or fits into a certain language/technology then try to learn and master it. This is mainly because my job position is not very stable now and may have changes soon.

As I’m deciding it’s better to learn a new language/tools when a new project arrived or a new job position is offered I started to try AngularJS as I’m offered to do sections of a web project in SPA style. First decision was selecting a good framework. Mine was AngularJs. Though Angular 2 is not finalized yet I decided to use it because our product is not very large and sensitive and will not be in production very soon. Using TypeScript over CoffeeScript was my second decision as it tied with Angular 2 and is very similar to C#. I guess I will use a little Angular 2/TypeScript in this project because main requirements of the project are satisfied with use of Angular routing module.

My journey is not finished here. I may try Perl too as my favorite help desk software, OTRS is written with Perl and a time in future I may develop some plugins for it.