Introduction
Over the last few years, I've spent a fair amount of time on the same projects, using the same tools, in the same languages. By day, I'm a mild mannered .NET programmer. By night, I fly the Perl flag, and spend a lot of time using Catalyst, one of the Perl based MVC frameworks. While I'm not abandoning those technologies, I think it's time for something new.
They say you should learn a new programming language every year or so, and I'm long over due. Why not learn three languages at the same time to make up for lost time? :-)
The Challenge
The challenge is to build the same mvc application on all of the frameworks listed below. While I'm comfortable with Catalyst/Perl and ASP.NET, I'd like to be able to work on any project that comes along rather than simply answering "Sorry, I can't help. I don't program in that frameowork/language." I started my career as a Windows-only web programmer and over time, learned my way through FreeBSD, Apache, Perl and Catalyst.
Will I be an 'expert' in Ruby or Python when I'm done? Surely not. But 3 years ago, I couldn't program in Perl either and 10 years ago, I could't even begin to get a *nix OS installed and configured to run Apache.
The Frameworks
For this adventure, I've picked what might be considered the most popular mvc framework for each language. These frameworks will be:
ASP.NET MVC: Preview 3
While my day job includes programming in ASP.NET 2.0 WebForms and I have followed the MVC progress, I have not yet created an ASP.NET MVC app. Just to be a little more challenging, I will be doing this project in C# instead of the usual VB.NET that we use at work.
CakePHP: 1.2RC2
I've read as much of the manual as I can at this point. This will be my first CakePHP application and my first PHP programming since PHP4 was released.
Catalyst: 5.7
Catalyst is one of the many MVC frameworks written in Perl. I've been using Perl and Catalyst for about 3 years. While this could be my strongest framework, I'll be using none of my existing bag of tricks.
Django: 0.96
I've never written a single line of Python before. After looking at the Python and Ruby syntax on multiple occasions in the past, Python seems to be the language furthest from how my brain works now compared to Perl/C#.
Ruby on Rails: 2.1
Just like Django/Python, I've never written a line if Ruby in my life. I've been through the screen casts and sifted around a few articles and book excerpts. However, unlike Python, Ruby seems to fit how my brain works with Perl a littler cleaner.
The Application
I'm sick of the usual blog demo applications so I'm going to go with something a little closer to my heart. Those who know me know that I'm a big fan of hot food: If you don't sweat, it's not hot enough. So for this challenge, I'm going to build a site that tracks lists of restaurants and a list of menu items for each eatery hot dish.
The application will be built in stages. Each stage will be built in every framework before moving on to the next step. After completing each stage, I'll post a new blog entry covering what code needed to be created in each framework and the pros and cons each framework provides. You can follow the source code progress in my subversion repository:
http://svn.icantfocus.com/articles/mvc-marathon/
Step by Step
- Part 1. Creating a New Application
- Part 2. Creating/Configuring a Database
- Part 3. Creating Site HTML/CSS Templates
- Part 4. Creating the Restaurants Model
- Part 5. CRUD Restaurants w/Scaffolding
- Part 6. Adding Menu Items w/o Scaffolding
- Part 7. Adding AJAX
- Part 8. Adding Atom Feeds
- Part 9. Adding Unit Tests
- Part 10. Adding User Tests
- Part 11. Adding REST API
- Part 12. Adding User Authentication
- ...
