Disclaimers and Apologies
I'm going to start this review with a disclaimer and an apology. The disclaimer is that the publisher of these two books also published my most recent one; the apology is that when Dave Thomas told me what Chad Fowler's book was going to be called, my reaction was far more negative than it had any right to be.
Despite its title, My Job Went to India (And All I Got Was This Lousy Book) isn't really about the perils of offshoring. It's about what programmers can do to keep themselves employable in a rapidly changing world. Having worked for a consulting firm in India, Fowler knows that being able to code isn't enough any more. If you want to be cost-effective, you have to be able to elicit requirements from customers and do high-level design. You have to be one jump ahead of the technology curve, keep your network of contacts fresh, and know enough about economics to understand the difference between "possible" and "profitable". It's all good advice, and Fowler presents it clearly and coherently.
So why was I initially so negative? Because the choice of title reminded me of a pamphlet I came across in a public library years ago. Written in the late 1950s, it was titled, "Will Your Daughter Marry a Negro?" Inside, it was actually a very liberal look at what desegregation would mean. If the front cover had reflected that, instead of trying to capitalize on the inflammatory rhetoric of the day, I would have felt very differently about it. Listening to the ever-louder chorus of protectionism in our industry (which used to take pride in creating a world without borders), I can't help but wish that Fowler, or his publisher, had chosen something like "All You Really Own Is Your Career". Despite that, this is a good book, and well worth reading.
A disclaimer, an apology, and a grudging admission that I might have backed the wrong horse... For those of you who haven't been paying attention, Ruby on Rails is a lightweight framework for building three-tier MVC web applications. It combines an HTML templating framework with an object/relational mapping layer, and (crucially) a set of conventions about what things are called, and where things are stored. The end result is that you can create, test, and deploy fairly sophisticated web applications with just a few lines of code.
No, really, this time I mean it---Rails really does let you focus on what's specific to your application, and leave all of the routine stuff to the framework. Elegant design is part of the reason; its reliance on a nimble scripting language instead of Java or C# is another.
"Elegance" and "nimbleness" are equally appropriate as descriptions of this book. It starts with a step-by-step tutorial that builds up a simple shopping site, then explains the things that make up Rails in depth. As with everything Thomas writes, the prose is transparent, the examples perfectly chosen, and the pacing exactly right. Other books on Rails are already on the market, but I doubt any will be able to match this one.
What? Oh yes, the grudging admission. As regular readers know, I'm a big fan of Python: having taught many languages to many people over many years, I think it strikes a better balance between readability and power than anything else invented to date. However, the Python community has a regretabble history of missing boats. Right now, for example, several Python-based frameworks are trying to be its answer to Rails. I don't know enough about them to argue their relative strengths and weaknesses; what I know for sure is that the fact that there are many, instead of one, makes Python less credible as a "bet your business on it" language. Two years ago, I was confident that as Perl crumbled under the weight of its own complexity, Python would pick up the refugees. Now? Thanks to tools like Rails, and books like Thomas and Hansson's, it looks like the future might well be shiny and red.
Chad Fowler: My Job Went to India (And All I Got Was This Lousy Book). Pragmatic Bookshelf, 2005, 0976694018, 232 pages.
Dave Thomas, David Heinemeier Hansson, and others: Agile Web Development with Rails. Pragmatic Bookshelf, 2005, 097669400X, 450 pages.