Which Framework is Better?
This question is often asked by startup founders or novice programmers. The former want a project powered by the most suitable, trending and performing framework. The later want to progress with coding and apply their knowledge to a real project. This can be achieved by getting familiar with a web framework.
If you wish you can start google searching: “what frameworks power my favorite apps”. However, from a user standpoint the application is identical no matter what framework has been used. Just imagine if Instagram, that is built on Django, has been developed using Ruby on Rails. It would be the same app we all used to. The real difference is behind the scenes.
Serpent vs Gemstone
The truth is that the main difference between the frameworks is the programming languages they use, languages approach and philosophy. Python's “There should be one obvious way to do things” contradicts Ruby’s flexibility, freedom, and power of choice.
Fortunately, the majority of beginners start coding with Python. The very first glimpse on the Python code lures those unfamiliar with the language. Its syntax is simply perfect. There are no redundant elements, semicolons, weird special character or unnecessary keywords. If you still haven’t got a chance to program with Python — do it, you won’t be disappointed.
>>> django_apps = ['Pinterest', 'Instagram', 'Mozilla Firefox', 'National Geographic', 'The Washington Post'] >>> >>> for app in django_apps: ... print(app)
It’s Python syntax that makes it suitable for the vast majority of long-term projects. The readability of code also makes it easier to integrate newcomers in the developers' team.
Python is also very good for prototyping. You can implement a new idea using Python. If the idea is viable and, let’s say your app demands high performance, the idea may be re-implemented in a compiled high-performance programming language like C++.
Ruby is special. I would name it exotic and elegant. No surprise the language was invented by Japanese. There is something unique about those rows, that invokes the interest. Although the code is not as readable as Python’s, the syntax is still very easy to understand and learn. There is no programming language like Ruby.
ror_apps = ['Twitter', 'GitHub', 'Airbnb', 'Groupon', 'Shopify', 'SoundCloud'] for app in ror_apps if app == 'Twitter' || app == 'SoundCloud' next end puts app end
In Ruby everything is an object. Each type of data belongs to a certain class with built in methods. Same applies to Python, however there are some programming languages where basic types of data are not presented by objects.
Another popular feature of Ruby is called “blocks”. Using blocks you can alter any method(even built-in) with a custom closure.
If you are interested in learning a new programming language, either Python or Ruby will be an excellent choice. Start from a simple Facebook or Yelp search to find a coding bootcamp.
Both Ruby on Rails and Django are Model-View-Controller web frameworks. This pattern separates the development concerns in three blocks. Here is, how it works:
In a nutshell, all three components of MVC pattern are simply classes with methods. Let’s say we build a simple web blog:
- Model represents data of the database - user profiles, comments, posts, etc.
- View wraps the data in HTML template and sends it to the Controller.
- Controller connects Model and View, handles user requests and sends responses back to the web browser.
In Django - the pattern name is slightly different and may confuse at first. It is the same MVC, but View is called Template while Controller is called View. So we get MTV.
Ruby on Rails and Django organize the files inside the project in a different way. Imagine we have Rails web app named my_taxi. When a developer adds the new component like “accounts” or “payments”, it should go to the predefined place.
Django makes use of separate apps for every single component. Each app contains its own model, view and template classes. This can be handy when a project increases in size.
Both Ruby on Rails and Django frameworks feature so-called “magic” or out-of-the-box solutions. However RoR magic is by far overwhelming.
When rails developer creates a controller, its methods can automatically access variables and inherit methods of other class. Neither of these classes nor variables are defined explicitly. Ruby on Rails simply adds them automatically. It also automatically sets up routes inside MVC.
Django/Python developer, on the contrary should explicitly define variables and import classes. They have to use regular expressions (something like this “^[A-Z]+[a-z\g]$”) to define routes and URLs. Django developers should completely understand how everything works behind the scenes to organize the code.
It’s nice to rely on magic when you want to start running your web app asap. For novice programmers, it will be the easiest way to get a clue how web frameworks work. On the other hand, this will only show the picture in general. Deploying a web app on Django will help to understand how it all works in details.
Both frameworks are based on interpreted scripting languages. This results in nearly the same performance. Early versions of Ruby, like 1.8 or 1.9.x, were notorious for their poor performance. Back in the days, Twitter switched from Ruby on Rails to Scala saying that “Twitter Search is Now 3x Faster”. Keep in mind that most of the businesses will unlikely reach the same amount of traffic as Twitter.
Traditionally Python is considered slightly faster than Ruby. Some people may argue and refer to benchmark runtime comparison. Those tests show nearly identical results performance-wise. However, even Ruby adepts confess that language is slow. There are tons of variables involved in a performance. You can think about hardware, quality of code and scale of the project. The good news is that each new version of programming languages brings performance improvements.
Documentation and Community
The documentation is a matter of personal preference. Both frameworks are well documented and well organized. Django Software Foundation and Rails core team have done a great job to keep the documentation structured and user-friendly. Both https://docs.djangoproject.com/ and http://guides.rubyonrails.org/ resemble plain books that are pleasure to read. It is all about whether you prefer green over the red.
Thanks to the community we can open google and simply find the needed code. The idea that will come to your mind tomorrow, already has a ready solution today. There are lots of packages developed by the community. The plugins can help to cope with most of the tasks. Strong communities on Stackoverflow and Github stand behind both frameworks.
However the communities are different. Originally Ruby is a general-purpose programming language. Although there are other Ruby frameworks like Sinatra or Lotus, most of the Ruby is about Rails. And Rails is a web oriented framework.
Python, on the contrary, goes far beyond the web development. There are lots of guys who use Python to create geographic information systems, scientific oriented projects, automation testing systems and much more.
Django and Python
- If you know what you’re doing.
- If you are a perfectionist with deadlines.
- If you think that documentation is a programmer’s best friend.
Ruby on Rails
- If you expect a backup from a web-oriented community.
- If you’re happy with lots of plugins.
- If you're looking for a framework that will do the work for you.
Python’s Django and Ruby on Rails appears like twins from different parents. They have different personality and philosophy, but when it comes to get the job done they act alike. Both are excellent frameworks that can handle the similar tasks using their unique approaches.