Web App Framework vs. CMS vs. Website Builder
Ruby on Rails vs. Wordpress vs. Weebly - Code & Control
Say you want to create a website for your organization, community or small business. Or maybe you want to create a web application that will be the Facebook for X, the eBay for Y, or the Yahoo of Z. What tool should use to create your site?
The last post said that you should learn the highest level option that forms a complete abstraction layer:
Learn the highest level that can serve your purposes without requiring you to do dig beneath it.
I discussed using the Ruby language, the Ruby on Rails framework and the ActiveRecord ruby library. But there are website-builder tools and CMS's you can use to create websites without writing any code at all. If the highest-level tool is best, these tools would be better than custom-coding your app. When can you use such tools, and when do you need to code? How do you evaluate the tradeoff between an easy tool and a powerful one?
While higher-level tools let you build things more quickly and easily, you're always trading giving up some control or performance in exchange. In many cases, this doesn't make a real difference. For example, Ruby is a much better language than C for creating a standard web app, even though C runs much faster on a computer. These performance differences rarely matter, especially when you're starting out.
Languages vs. Frameworks
Now that you're using a high-level language, should you use a framework or code your app from scratch? Back in the 90's people often coded from scratch, but in the 2000's frameworks like Ruby on Rails were developed. In almost all cases, you should go with a framework like Rails. They provide a standard architecture for building web apps and provide useful libraries and re-usable components that make it easier to develop sites quickly and according to best practices. The more ready-built components you can use, the better.
Website builders make it easy to create sites quickly, but you lose control to do what you want. You get full control of the content of your site, and a fair amount of control of the look and layout, but you cannot control what your site does. You can pick from the provided options, such as wiki or blog, but you cannot develop your own features. If you're just creating a small standard site that fits into one of these checkboxes, you may as well use them. However, if you're creating a new type of application you'll need to develop it on your own. Large website will usually have custom needs, but you can still use website builders for a small site or to test out an idea.
(See What to Use to Create Your Own Website for more tools you can use.)
CMS's are in-between a website builder and a framework. They are used for managing content-based sites, such as for news or reference. The most popular one is Wordpress, which started as a blogging platform, but evolved into a platform for any type of content site. If you install Wordpress on your own web host, you will need to keep it up-to-date and secure, but you retain control over your application. There are a large number of plugins you can install on wordpress sites to add features without writing code, and you can develop your own plugins to add potentially anything. Wordpress is great if you're creating a site that fits with what it does.
However, if you need to develop a custom application, Wordpress is rarely the best choice. Instead of designing an architecture that fits your application, you will need to deal with a large existing codebase that was built for a different purpose.
In short, if you need a standard content site, a website builder or CMS are a good choice. Otherwise, go with a framework like Ruby on Rails, which gives you full control without requiring you to re-create common components from scratch.
The picture above shows the level of control that each category provides (the width of a brick)) and the amount of work or coding you need to create your site (the height of a brick). Note how a framework offers practically the same control (to create any kind of site) as coding from scratch, but requires much less actual code to do so. As you move up the tower, you give up control in exchange for using more pre-built parts.
The table below summarizes what each category can do:
|Category||Example||Use case||ready out-of-the-box||Control - What can you do?||Work - what you need to do|
|Language||Ruby||Build application with radically new architecture||Standard language libraries||Everything||Everything|
|Framework||Ruby on Rails||Practically any web application||Structure to follow and libraries to create site with||Almost anything||Create site using provided libraries and structure|
|CMS||Wordpress||Blog or news site||Actual website||Change look and structure of site, add plugins for new features||Customize, maintain and keep secure|
|Website Builder||Weebly||Company info site||'polished' website||Change style of site||Pay them (for full features)|