When I was young, I spent part of my summers at camp. I hated canoeing, but I loved to kayak and actually became quite proficient. As far as watercraft go, a kayak is quick, agile, and makes you feel free. Never one for team activities, my kayak made me feel quietly superior to the kids in canoes while reinforcing my budding independence.
Kevin Kelly’s awesome Cool Tools mailing list recently contained excerpts from Kayaks You Can Build: An Illustrated Guide to Plywood Construction. The first think that struck me is how much it sounds like using Rails:
In order to achieve professional results, each stage of your work should be completed with the least number of steps as well as prepare you for the next stage. For example, if you apply the filler casually with a stick, before the next step can happen the excess will have to be sanded off. Professionals eliminate the cleanup step by placing just enough filler in the right place to do the job. When the masking tape is peeled off, the step is complete and ready for the next one. Keeping the filler under control saves time and minimizes exposure to the bad stuff. That’s a pretty fair payoff, but there’s also a bonus that comes with thinking lazy. That bonus is professional results. You cannot build a professional-quality boat when you are doing damage control between each step… We are all good at something; by combining an understanding of what needs to be done with what is already familiar, we find that practical solutions present themselves.
Translation: Embrace conventions and don’t reinvent the wheel. Your problems are rarely unique; read blogs and keep up on new patterns. Is there a gem or plugin that does what you need? Chances are that if you start from scratch, your code will have more bugs than if you use a mature, battle-tested mixin. Spend that time contributing patches to existing projects on GitHub!
The less epoxy you put on, the less you have to sand off. If the epoxy is kept under control when wet, expect about one day of sanding, preferably outside. Tidy glue application brings the additional benefits of less unhealthy dust produced and more efficient – and less costly – use of the epoxy.
Translation: Don’t Repeat Yourself! Writing the same code over and over again is a drag. Premature optimization is a waste of resources, but always be on the lookout for clever abstractions. However, don’t refactor something that isn’t broken unless you can truly see a long term benefit.
So, how to begin? One option, of course, is the free-form approach, in which the kayak is built right on the floor or, as one manufacturer suggests, on something flat like three cardboard boxes. Although this lets you get right to work, there are a number of drawbacks. One is the possibility of introduction funky eccentricities and variables to a process that requires precise control. The other is the questionable practicality of spending hours bent over, toiling on the floor. This is a pretty good sized “some assembly required” project, and at some point in the process either your knees or your back will start protesting.
Translation: The environment we work in is important. The tools we choose decide whether we will be happy in the long term. We owe it to ourselves to buy a good chair and get a large, crisp LCD. Make sure that you adjust both for distance and posture, or you’ll have arthritis after a few short years.
Another way to go is to build a worktable that will raise your assembly surface to a more civilized altitude. With some forethought the worktable also becomes a modification of the traditional boatbuilder’s strongback. A big advantage to the worktable is that you are, in effect, working from the same baseline that the designer used to draw the boat. With the addition of a centerline and station liners, the table becomes an accurate reference and a jig for many of the building steps… Being able to reach in and clamp along the edge of the worktable is convenient, and a step towards making tidy joints that require very little cleanup. This not only saves time but also reduces your exposure to the epoxy.
Translation: Rails is like an agreement between friends about how things should be done. The smartest minds in web development software are all taking their best ideas and creating a baseline standard that you can build just about anything on top of. Ruby and Rails give us freedom from the hostile conditions which threatened to steal away the joy and awe we felt when we had our first programming experiences. These tools are designed to be fun and make us happy. We don’t have to buy expensive proprietary IDEs and server licenses, or keep on top of bullshit payola moving-target certifications and “partner” programs.
Seriously, when was the last time you thanked Matz and David for their contributions to the long term quality of your life? Why not take some of that time you didn’t spend programming Java or C#, grab a pen and some nice paper, and write them a letter. Draw them a picture, or send a Polaroid of your family.
David Heinemeier Hansson
c/o 37signals
400 North May Street
Chicago, IL 60622
Yukihiro Matsumoto
Gakuen-minami 2-12-5
HOYO parkside Bldg 2F
Matsue-shi
shimane
690-0826 Japan
I double-dare you! Getting actual fan mail is like sex and Christmas at the same time.