There are plenty comparison of web frameworks on the Internet. Many of them compare web frameworks in general, some of them compare web frameworks with performance measure. Some are comparing in learning curve, popularity, architecture, speed of development, etc.
But I am interested to focus on reusability and pluggability of components. In a web development team it is good to be able to use previously developed portions of project in new projects. For example many projects have membership or accounting section. They can be developed once and used more than once in different projects. You can even think of ticketing or organizational structure management across different separate web projects. Goal is reduce development effort during development mid level web projects.
Django is introducing itself as to be so, but how about Rails, ASP.NET, MEAN or other common web frameworks?
Django has administrative CRUD interface that can save much time during development. Dhango's moto is “the web framework for perfectionists with deadlines”. Every application in Django is consisted of apps. Each app can implement an independent field of business. Django claims that you can join different apps to to create a complete web application.
Django has good documentations but its learning curve is high. It seems efficient for database based applications.
Django is not fully object oriented. It is not as fast as Node.js but does not force you to build everything from scratch. It also seem to have less batteries than Node.js and Rails. Its job market is even smaller than Rails and ASP.NET.
Rails is opinionated, so many settings and conventions are set by default. Rails developers can learn it faster and develop with more rapidly. It is not very good at performance but have strong community. Rails is popular in Mac users while. It also is easier while deploying as cloud solutions have better support of it. Its rapid development can compete with reusablity feature that Django claims.
Previously I wrote about the subject here, here, here and here.
What is your opinions and experiences?
I'm evaluating some programming languages to learn instead of Microsoft .Net. I'm a software developer with more than 10 years of commercial software development experiences mainly in Microsoft .Net platform. I have worked both as employee and as freelancer. Now for some reasons I'm interested to learn something new other than Microsoft .Net. Some of reasons are:
Moving to a new company may need knowing new programming languages and development platforms
Getting a remote job or project will potentially lead me to learn something other than Microsoft .Net
My own start-up projects and custom software development projects may be done easier and more agiler with help of technologies like Node.js or Rails/Ruby.
I have a passion on Linux and .Net is not fully available on it yet by Jan. 2016.
Moving to a new city or to a new country needs me to have a broadest skill sets.
I need to do something new!
It's near a year that I'm trying to switch to Ubuntu and finding a good alternative to .Net. First thing first I liked to have .Net in Ubuntu but it is not complete yet and it may need few years to be fully available and adopted by the community. I did a technical comparison between Ruby, Python and Node.js but in realty I need to make attention to job market too. A good software development platform is a platform that has good community adoption and good salary too.
Along this journey I tried to get my hands dirty with my favorite platforms with help of quick starts. Quick starts are good points to learn programming languages. A typical quick start learns you how to setup the platform from scratch, how to develop a basic application with it and lets you get acquainted with concepts and tools. I started with my most loved technology Rails/Ruby. Tried to get a bit deeper on Rails but after a while suspected is it a better to learn something that already can be used in my projects? So tested Node.js a bit.
Last week I thought twice about priority number 1, moving to a new company. Major IT companies in the country that mostly are in banking, financial and government field prefer Java for their projects. Many of their projects are enterprise level and no surprise they prefer Java over other platform. So after getting hands dirty with Rails and Node.js I got Java installed in my machine and built a simple basic hello world with Java, Eclipse, Hibernate and Play. Play felt very similar to Rails which Rails itself felt similar to ASP.NET MVC.
Playing with Java showed me that Java is not very strange for a long term C# developer. This sense was common when trying Rails and Node.js specially when regarding with Web development. Rails, Play and ASP.NET MVC are very similar to each other as they are base on MVC pattern. In other hand C# and Java are very similar languages with similar internal structures. Also Node.js is not very un-familiar for developers with front-end development experiences. IDEs of all this platforms are not very different at root. Batteries and equivalent components exists.
After all I concluded that switching to platforms like Rails, Node.js, Java, Python and PHP is not a hard or time consuming task for .Net developers that have enough software development experiences. It may be reasonable to wait for a job position or a development project then getting more deeper with desired platform.
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.
Update: Read article Why The Hell Would I Use Node.js? for getting more information about Node.js.
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.
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.