Over the last two years or so, I’ve spent a lot of time learning both Rails and Django. The reason: I have a lot of potential web-based projects that could really benefit from my writing my own software from scratch. In the past, I had relied on things like WordPress, Drupal, Mambo/Joomla, or any of the long string of content management systems in the “nuke” family. What absolutely drove me crazy was when I wanted to launch a feature that did not exist in an existing plugin/module/addon for whatever software I was using and, although I consider myself a novice programmer, I never wanted to take the time to learn whatever software enough to be able to extend it myself. And I absolutely hate PHP.
Ruby: In my quest to learn a new language, I actually started with Python, got a bit confused, and went to Ruby. I love Ruby. I was able to learn programming concepts better than I ever did with my horror-filled PHP experience. Once I had that foundation, it was very easy for me to move onto learning Python. PHP seemed to make some more sense too. The Ruby language seemed to be more natural to me. I know quite a few programmers and this seems to be their main reason for preferring one language over another too. For me, that’s Ruby. For you, it might be completely different.
It makes a lot of sense to me that there are many “Learn to Program” books that focus on Ruby. It worked for me. It might work for you too.
Python: I’m sure the Python folks would argue with me, but coming from a small foundation in PHP and a newly-larger foundation in Ruby, the difference between methods and functions in Python was confusing. In my PHP experience, everything was a function. With Ruby, everything was a method. With Python, I was constantly guessing. The language itself seemed to do everything Ruby could do and, given its age (still relatively young, but older than Ruby), it also has a lot more pre-written code to use to extend your applications. That was surely a plus, but it also seemed that extra characters needed to be typed when you program (i.e., extra parenthesis). As I read other opinions regarding Python on the Internet, it seemed that one of the biggest criticisms is the indentation structure of the code. To me, this made a lot of sense and I easily picked it up. It was the method/function distinction (or lack thereof) and the requirement to have parentheses when they were not really necessary that turned me away.
Ruby on Rails: Let’s just say I really liked Rails and spent a lot of time writing the basics of a content management system to teach me the framework. I also like the existence of multiple podcasts and screencasts that really helped me to learn both the language, but the culture and community (yes, each open source project has both its own culture and community). As I started moving away since I didn’t have much time to learn anymore, new words began appearing in the podcasts covering new technologies (Rack, Merb merger, etc.) that were foreign to me. It started to seem like the framework was moving ahead faster than I could keep up with.
Django: I really liked Django too, perhaps more than Rails. I like creating URLs from regular expressions and really liked the admin interface. The thing I most disliked was that it was written in Python. What most annoyed me was that most of the books were written for earlier versions of the framework and most of the code examples no longer worked. Again, this project was moving ahead faster than I (or book authors) could keep up with. Newer books are current.
Note: I’m sure if I had more time to devote to keeping up, it wouldn’t be a problem for either language or framework, but I was attempting to learn as I worked a more-than-full-time job while keeping time aside to spend with my family
After spending all that time learning, I realized that, as much as I want to build my own applications from scratch, I’m a content developer first and my programming has to come second. I spent a lot of time learning how to program (which I don’t regret), but I need to spend my time writing content. That’s what I enjoy. That’s what I want to do. So, I began to look at some of the open source projects again that originally led me to want to write my own software: WordPress and Drupal.
Drupal: After spending time listening to the Lullabot podcast and reading some books, I realized that most of the more advanced site concept ideas I had could be achieved using Drupal. Are there some limitations that I could get past by writing my own applications? Of course. Is it worth working within Drupal’s boundaries (“boundaries” means “stuff other people smarter than me wrote that I’m not smart enough to contribute to….and I hate PHP”) to save me the development time and help me to launch a site quickly? YES!
WordPress: has a lot more plugins than it had a couple years ago and can accomplish anything I need for a basic site. This blog is powered by WordPress. This is the simplest way for anyone to launch a website.
So, my opinion seemed to come around full-circle. I wish that I had the time to write my own applications and I’m sure that, depending on the specific use case, either Rails or Django would do a great job. Until then, I’m happy with Drupal and WordPress.