I want to hip all of you cool cats to one of my heroes: Peter Cooper. I’ve never met Peter in person, but I have met him online through his mighty Ruby blogs Rubyinside.com and Railsinside.com, his best of class book Beginning Ruby (which I use for my CCSF and CSM Ruby courses), and through his entertaining Tweets as @peterc.
One of the things I admire about Peter is that he fearlessly shares inside information about the business side of being a successful blogger and author. He reveals about how much money he makes for ads on RubyInside.com, and he writes about his his pain and gain as an Apress author. When you read this amazing post, be sure to check out the A-listers who added in their comments on the publishing business, including Geoffrey Grosenbach of Peepcode.com and Tim O’Reilly himself. This is priceless stuff.
Where many Rails developers have uncritically anointed DHH and 37Signals as prescient Royalty/Illuminati/Life Style Gurus, Peter Cooper matter-of-factly reveals that he’s lost his enthusiasm for Rails. He’s even donating his Railsinside.com blog (6,000+ subscribers) to the Rails community because he can’t muster the enthusiasm to keep it going. I find it refreshing to hear a clear voice say that the Emperor is no longer absolutely fascinating.
Since the introduction of the iPad a few weeks ago, Peter has learned Objective-C, gotten a strangle hold on the iPhone SDK, and hacked out an amusing arcade game in a matter of weeks. If you’ve been following his tweets as @peterc, you’ve been able to watch his game progress from concept to working code. This fun stuff.
This semester I’m going to have my Ruby and PHP classes build a form driven, AJAX-y web application as the final project. This is a bread-and-butter assignment that performs the basic task of storing form data in a database then displaying it. We’ll deal with the ever present Persistence Problem by using a SQLite3 database to store user input, and the AJAX/Javascript layer will be all JQuery.
A classroom project of this size can be completed in four to six weeks, depending on the programming and web skills a student brings to the class. More is always better.
The PHP course will be starting from scratch (no cakePHP, no Drupal, no Joomla), while my Ruby course will be using Rails. I’ll be doing the project in Seaside. When all is said and done, we will count the lines of PHP, Ruby, and Smalltalk to see who get bragging rights for writing the fewest lines of code.
If you want to work along wtih us, your project should have these features:
An HTML form.
JQuery form manipulation.
AJAX via JQuery.
Validated form input.
Form data stored in a SQLite database.
A Recaptcha form.
User data safely displayed (potentially harmful characters sanitized).
There are dozens of features we could hang on this skeleton: pagination, search, social features (Twitter, Facebook, Buzz, etc), as well as polls, voting, thumbs-up/down, email, XML export, RSS feeds, Section 508 compliance, and more. I’ll be satisfied if most of my students can achieve basic functionality before semester burnout sets in.
And about that Seaside course—there isn’t one yet. But it is on my TODO list for future courses at CCSF. For the time being, as part of my own Smalltalk education, I’ll take this opportunity to complete the class project using Seaside. Since Smalltalk and Seaside are new to me, I’ll be starting on the same page as my PHP and Ruby students. This will be fun. I’ll be doing this project with Cincom Visualworks Non-Commercial which is free for non-commercial use on Windows, Linux, and Mac OS X.
OK. I’d better get to work on the Ruby part of this project before the Rails team unleashes another new product release just to confuse me.
A reserved word in a programming language is a word that is off limits to the programmer. For example, in PHP print is a reserved word. This means that you, as the programmer, cannot create a function named print because PHP owns that word.
Most languages have reserved words, some a few, and some very, very many. Usually the fewer reserved words a language has, the more flexible it is. For example, in the list below, you will see that Lisp has no reserved words. We all know that Lisp is very flexible and powerful.
As you look at the table below, do not think unkind thoughts about PHP—it’s different from the other languages. It is not designed to be a general purpose programming language, though it can certainly do almost anything you want it to do. It is intended for web programming, which explains the existence of so many of the predefined functions and constants. Those are exactly the kinds of items that other languages must implement individually if they want to be as handy with web development as PHP. This is no small task, kids. Just take a look around try to find a web site implemented in C++.
Reserved Words
Language
Count
Reserved Words
Lisp
0
Lisp has no reserved words. Lisp is written in Lisp. Alan Kay, the creator of Smalltalk, said: “Lisp isn’t a language, it’s a building material.”
Smalltalk
5
self super nil true false
C
32
auto break case chart const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while
C++
~62
and and_eq asm auto bitand bitor bool break case catch char class compl const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new not not_eq operator or or_eq private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq
Ruby
38
alias and BEGIN begin break case class def defined? do else elsif END end ensure false for if in module next nil not or redo rescue retry return self super then true undef unless until when while yield
Python
31
and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try
Java
47
abstract do if package synchronized boolean double implements private this break else import protected throw byte extends instanceof public throws case false int return transient catch final interface short true char finally long static try class float native strictfp void const for new super volatile continue goto null switch while default assert
I spend most of my time with PHP and Ruby because I teach classes in these languages at CCSF and CSM. After years of teaching both beginning students and experienced professionals I have an accurate sense of what they need to get off to a good start. I’ve written a ton of content for these courses—screencasts, pdfs, projects, exercises, etc. I plan to use the PHP and Ruby blogs to share some of the material I’ve created for my courses.
Smalltalk is a different matter: I’m a complete newbie and I’m climbing the same learning curve that my PHP and Ruby students climb. As I learn Smalltalk I’ll use the blog to document the process. My plan is to turn my experience (blood, sweat, and tears) into a Smalltalk course. I’ve seen Smalltalk in action, and now I want to do it for myself, then show others how insanely great it is.
I’ll be adding content to the blogs as I as fast as I can proof read it and test the code. If you are on the front end of your PHP career, you will find some pearls of wisdom here. I suggest that you subscribe to these blogs to keep informed of new posts as I update these blogs.
It’s going to take time to fill in these pages, and I expect that I’ll make many errors along the way. I appreciate all feedback; if you see something that needs fixing—code errors, spelling errors, or something that’s just plain wrong—please let me know. Feedback is golden.
Keep hacking…
Respect
My good parts blogs are inspired by Javascript: The Good Parts by Douglas Crockford. His cogent little book has taught me to scrutinize programming languages with a pragmatic eye: embrace what works and find a way to deal with the rest.
Welcome to Ruby The Good Parts. This blog is part of the HackingtheValley.com empire of Good Parts blogs for PHP, Ruby, and Smalltalk. As we create Ruby content, we will post it here.
DHH has brilliantly coalesced the last 15 years of MVC web practices into a Perfect Storm (Rails). He dotted all the i’s and crossed all the t’s, mercifully allowing us to embalm the template-based MVC web design-strategy, put it into a glass coffin, and ship it off to the Smithsonian.
Here’s my Rails eulogy.
The first time I saw Rails—after doing Perl and PHP web development for a few years—my mind was blown: what would take me a week in Perl, or a day in PHP, could be done in 5 minutes with Rails. At the time I jokingly described Rails as crack for web developers. It’s so good, don’t even try it once!
Rails changed the way I do web development, and whenever I drop back down the evolutionary ladder to PHP, it’s like having dental surgery without anesthetics. Painful! All the repetitious tedium—building infrastructure, writing SQL, connecting to the database, the embedded language—was taken care by a the shiny Ruby black box. Rails is a web programmer’s deus ex machina.
“Don’t Repeat Yourself,” said DHH, and he lived up to his word. Rails nailed the door shut on Web 2.0.
Now that Rails has brought Web 2.0 to its end, can it do the same for Web 3.0? The answer is that Rails is no longer on the leading edge. Rails’ replacement has already dropped while you were trying to get a handle on Rails and Ruby. The new guy in town is Seaside.
Seaside arrived several years ago with little fanfare because it runs on Squeak, a relatively new version of Smalltalk. As you may know, Smalltalk is an “old” language that most of us have only heard the old-timers get sentimental about when they talk about the Good Old Days of the Computer Science Frontier.
The big news from the Rails world is that some major Ruby Masters of the Universe (including DHH, Rails Dictator for Life) feel that porn and erotic images are a cool way to present Ruby on Rails to the public. If you don’t agree with these Ruby Leaders, be prepared to hear “F. U. You’re just a dumb American prude. Get over it!”
CouchDB presenter Matt Aimonetti slapped the crowd in the face with some heartfelt sexism in his amateurish Gogaruco 15-minutes in the spotlight. When some observers had the temerity to be offended and dismayed, they were denounced as prudes because they didn’t get his “sense of humor.” Judge for yourself: http://tinyurl.com/cukfou and http://www.loudthinking.com/
The argument from Aimonetti and Emperor DHH is that there’s nothing wrong with glorifying the female form. We can all agree with that. And, they go on to state that it’s completely appropriate for Ruby Alpha Male Studs to inject erotic images into business presentations because it’s just a “natural” thing for an alpha male to do. Sure it is! How can we disagree with our Betters? We prudes have to understand that these big-brained, testosterone-driven programmer studs can’t help themselves.
I get shivers waiting for news from RailsConf (the next big Ruby Event). I just know that the CouchDB presenter will employ a smorgasbord of bodily functions to present his product. I’m hoping that he’ll do something “natural”, like urinate on his admirers in the front row, then take a big dump on the stage. Too bad I won’t be there to see it.
It must be great to have big balls like these guys. I wonder, where can I get some of that Ruby on Rails Master of the Universe Kool-Aid they’re drinking?
Doug Putnam has been teaching PHP at CCSF for almost a decade. He is currently teaching courses in PHP and Ruby at the City College of San Francisco and the College of San Mateo.