(company name) Code Genome, based in (city name) Montreal, the world leading (whatever it is you do) Ruby On Rails consulting firm, is looking to hire (position name) a Ruby On Rails developer for its (adjective) star team.
(Mad Libs are are the ultimate tool to create a job posting.)
Ruby on Rails Guru
We are looking for a Ruby on Rails guru. You have a couple of projects under your belt (a black one). Everything you ever wrote ended up in a plugin. You’re just that good. You should be the one writing this job description and telling us what a real Rails guru is all about.
Ruby on Rails Refugee
We are looking for a Ruby on Rails refugee. You have a couple of years of experience in web development in Java or .Net. One night, you built a small project in Rails, wanting to know what the hype was all about. It was love at first sight. Now, you loathe your day-time job and all the unnecessary complexity involved. It’s time for a change.
Ruby on Rails Guru-to-be
We are looking for a Ruby on Rails guru-to-be. You have built at least one small project in your spare time using Rails and fell in love. You are now aspiring to have an international career as the next rock star of ruby development. But you need someone to give you a chance.
For more information, visit http://jobs.codegenome.com
One more thing. The best part of this job is that you get to work with me, the only ruby witch doctor in Montreal. Oh, and if you feel guru is overused, you get to call yourself whatever you want: ninja, kung fu master, sith lord, drunken monkey cowboy of hell, papa smurf, or the ultimate, zombie ninja pirate. Nothing beats a zombie ninja pirate.
Popularity: 17% [?]
I’m beginning to wonder if I wasn’t a bit pessimistic when I said 80% of rails developper to switch to git before christmas ’08. My own unscientific measurement for January show more than 50% of new projects are using git. If you still haven’t installed git and are looking for a reason, here’s one: Dr Nic is the new maintainer of the Rails Textmate Bundle and you’ll need git to get it. It includes new helpers specific to Rails 2.0. Speaking of Textmate, it looks like someone picked up the development of the git bundle. January also saw the release of thin and the next version of merb is now also on git. Seriously, I don’t think I need to keep pushing people to git anymore. The momentum is too strong and you will have to use git in the very near future. If you still need more convincing, here are a couple of very interesting links:
- James Golick explains why distributed version control matters to you. James writes very well and it should make you understand why you should release your next rails plugin with git.
- This guy is confused about why distributed version rocks so much. He first needs to read James’ article. Then you guys with the same feelings toward git need to read the comments.
- Dr Nic tries to explain git, if you want to understand how to contibute to an open source project.
Hopefully all the links provided should help you understand git from different perspectives. One last goodie for the week: Carl Mercier released a small script to help work with remote branches. If you want to script common git tasks in ruby, take a look at Ruby/Git.
Popularity: 23% [?]
One of the best books I’ve read about design is Domain Driven Design: Tackling Complexity in the Heart of Software, by Eric Evans. InfoQ has a small ebook called Domain Driven Design Quickly that provides a nice summary of the book. It was a good refresher for me as I read DDD about three years ago.
So What is Domain Driven Design? Read the link to have a good overview. Here are the two most important points:
- Focus on modeling the domain and domain logic of your application.
- Build a “Ubiquitous Language” that is used by all the team (from domain experts to analysts to developpers).
The most interesting part of the book for me was the patterns presented as the basic building blocks of a model-driven design: Layered Architecture, Entities, Value Objects, Services, Modules, Aggregates, Factories, Repositories. These are all very simple but fundamental patterns in software development. These are types of objects that are present in all designs. Understanding the difference between a value object and an entity is crucial and can help simplify a design.
The book also discusses the importance of iterative design, the importance of incorporating back what you learned about the domain in the model as you iterate and how to preserve the integrity of the model. There is a good discussion of ways of separating the model as the team gets bigger.
The value of this book for a Rails developer
Ever heard about skinny controller, fat model? This is THE book about building a rich model.
However, it really depends on the type of application you’re building. Most Rails application are mostly concerned about CRUD operations without too much logic behind. You won’t get out much from this book.
But if you’re working on a business app with a lot of business logic, then this is a must-read.
The ebook also has a small interview with the author. He highlights the expressiveness of ruby and mentions that DSLs are probably the next big step in Domain Driven Design.
Popularity: 33% [?]
The Rails Edge: Quotes and Notes is a very interesting collection of quotes from the rails edge conference. Two in particular caught my attention:
“Metaprogramming + DSLs is the Ruby equivalent of Design Patterns in the Java world”
— Chad Fowler. Fowler’s point here was more about the buzz and hype, just like there was a time in the early 2000s when every Java programmer wanted Design Patterns whether or not they were needed, Fowler sees a similar rush to add DSLs to Ruby programs.
“If programmers, on average, were able to write parsers and compilers, Ruby on Rails would not have taken off”
— Stuart Halloway
This is something I’ve noticed a lot recently: every plugin that gets released is a DSL! or it uses a cool metaprogramming trick! That’s nice, but was it really needed? And can we really talk about a ‘language’ when your plugin adds two simple commands to a controller?
I guess it’s a rite passage when learning ruby to write something using metaprogramming. The problem is when you start using it for everything, just like when you add patterns after patterns to your code, just because.
Again, this is a case of using the right tool for the right job. Metaprogramming is a power tool that is useful some time.
Here are other quotes that I like, as they echo the discussion I had with Fred Brunel at the last book club about process:
“The right process is always ‘not quite enough process’”
— Stuart Halloway
“Do the dumbest, simplest thing that almost works”
— Stuart Halloway, on process
“The traditional view, with sixteen pounds of documentation, introduces a single point of failure in the process, understanding the problem domain”
— Dave Thomas
“Getting a specification involves bullying the customer”
— Dave Thomas
Popularity: 15% [?]
Capistrano is a framework for deploying Rails application (you can do more with it, but it comes with built-in tasks for rails). How does it work? It connects to the server through SSH, checks out the last version of your app from your subversion repository in a new directory (releases/{date}), runs migration (optional), symlinks the directory to /current. You’re up and running after simply running “cap deploy”.
It supports rollback when something goes wrong. Setup is really simple (for dreamhost, you can find info in the wiki). It supports more complex deployment scenarios to multiple machines (multiple app servers with one db server for example). It’s easily extensible if you need to add custom steps to your deployment procedure. Let’s say you have a directory for uploads, you can create a task to properly link to the new version.
It was my first time with Capistrano because I was working on Windows before. It is such a time-saver to have a great and powerful tool like this for deployment (compared to writing your own scripts). I think I’m in love.
Popularity: 13% [?]
CUSEC opened on thursday morning with a very interesting keynote from Chad Fowler, author of “My Job Went To India”, titled “Fight the Traffic”. He first went through his career from computer support to CTO for a year and half in India. Doom is responsible for his passion for computer. He recently decided he wanted to be a ruby programmer and seems to be hapy with his decision, doing what he loves.
He then explained his view on software development, how he views it as a craft (he doesn’t like the term engineer). But no matter if you define it as art, science or else, software development is a business. But if you see things that way, your job will go to India. Business people see software development as a commodity. Chad however doesn’t feel it’s a bad thing, as only the boring jobs are moving, the ones you wouldn’t want anyway.
There are a lot of opportunities if you are passionate about software, if you want to craft something. He then gave suggestions on how to enhance your career: practice, know your audience, blog (to improve your writing skills), start a project. He also mentioned the long tail, how there are many opportunities for applications that target a specific audience. He finished by saying that the path is greater than the destination
This talk has given me a lot of food for thoughts. I cringed when I first heard him talk of software development as an art, a craft. I still have fundamental issues with that view, but he made a strong argument against the engineering view. The problem with it is that it makes it easy to outsource your job. However, as a crafstman, there are still a lot of opportunities for me to develop something cool, have fun and make a decent living.
Popularity: 8% [?]
I discovered that in the presence of SelfTestingCode, most bugs that static types would have were found just as easily by the tests.
Last night I was playing with rails trying to understand some of the features. Old habits kicked in. I did not write some tests and got bitten once again. Lost almost an hour on a few stupid typos. As Martin Fowler explains, tests are more important in a dynamic typed language as the compiler won’t catch some errors for you. Fortunately, rails supports testing right out of the box.
Popularity: 9% [?]
Ruby on Rails is a web development framework. It is surprisingly easy to create a web application with it. It takes care of the mapping to the database. You can find a sample video that will setup rails and create a simple blog in under ten minutes. In the coming weeks, I will document my experiences with rails on this blog. Stay tuned.
Popularity: 8% [?]