The web is built on three layers:
- Programming Languages (PHP, Java, Ruby, Python)
- Web Frameworks (Cake PHP, Grails, Ruby on Rails, Django)
- Content Management Systems(Drupal, Alfresco, Radiant CMS, Django-CMS)
Each layer has its time and place. Let's start with #1. Used to be that every site was built on JSP, ASP, and PHP. Now with web frameworks and CMS, using this layer to build a site is simply reinventing the wheel. As a result, this layer has been relegated to (1) non-web people trying to get started via a For Dummies book (aka, don't do it!), and (2) to-the-metal, scalability-intensive sites like Google and Yahoo, built on C or Java for per-line performance tweaking.
On the other side we have Content Management Systems. CMSs shine for sites that are common-place -- blogs, photo-galleries, shopping carts, google maps, etc. The reason for this is that a CMS is only as good as its extensibility framework, and the more common a feature the more likely a plugin has been built for the CMS. A CMS will get you an out-of-the-box, feature-rich, functional website in hours. 99% of websites should be built using a CMS, because its only 1% of the time you get something completely brand new -- like Yelp or Twitter in their time. When you do need something completely fresh, a CMS is limiting because of the restrictions its framework imposes. You end up using a lot of code, time, and xdebug to tweak a one-liner.