Dave Thomas Keynote
Always a great speaker, Dave came down from Dallas to help kick off the conference. Dave has been using for over 10 years, and he’s still using it. He shares his reflections with us as to why he still enjoys programming in Ruby.
Ruby is an interesting language. It can be described as a multi-paradaim language: object oriented, procedural, prototype-based, and functional (all at the same time). He also points out that Ruby thinks the way he does, which also means – like Dave (or anyone of us) – it’s imperfect.
We shouldn’t worry about perfection though and instead should be pragmatic. There isn’t only one way to do anything in Ruby, there is no “right way.” It’s this ambiguity that helps encourage participation. If Ruby were perfect there’d be no room for creativity, growth or adaptation. Ruby is adding stuff – not taking away.
Dave also talked about his experience with being publicly “slammed” by Zed Shaw. He said he realized at that point in time that Ruby is not a community. Ruby is a tool around which communities form.
Passionate people are messy, Ruby is messy.
Programming Intuition
A lot of people are programmers, very few are great programmers. The difference in productivity between a good programmer and a great programmer can be a factor of 10. Ruby rejects the idea that the world is simply two buckets of good and great.
- Do one thing
- DRY (Don’t Repeat Yourself)
- SLAP (Single Level of Abstraction Principle)
How do good programmers think? Does a good programmer simply boil down to command of the language and ability to recognize/use patterns? NO! Programming deals in abstractions and great programmers talk about code as if it were not abstract, but in tangible terms. Good programmers can “feel” code, there is an emotional reaction.
Our brains are made to adapt to our environment (which we perceive through our senses). Humans are wired to want physical attachments. What senses do programmers use?
- vision (why OO is “easier”)
- hearing
- kinesthesia (perception of movement, weight and position)
Code is not 2D, it’s not even 3D, it’s multi-dimensional. So diagrams are not always useful. Code sometimes has a “viscosity” and can be felt to push back or resist you.
What do we perceive as beauty? Elegance?
Cultivate a Sense of Code
- No specifications / think about it
- Use tools that help you
- Practice, use methods that provide immediate feedback
Experts operate on intuition, not on recipes or rules.
- Master Ruby’s method lookup (it’s worth knowing)
- Useful to limit scope of magic
- Can modify individual objects with modules
- Tr to replace inheritance with extends
Succeeding with Ruby on Rails
This talk was about the owner of Thoughtbot and how they got to where they are today. Below are some of the notes from the talk:
- Started in 2003 with 4 people
- Not everyone wants to run a company
- wanted to go into business to work the way they wanted to
- happiness is very important
- Perl was their “happy language” from Java, but Ruby and Rails ruined it
- Decided to only do Ruby on Rails, revenue skyrocketed afterwards
- Hiring is very important and hard
- hire only people who want to learn and teach (passionate)
- skilled
- right attitude
- salary (the best you can afford, not necessarily that money can buy)
- Don’t compromise on core principals
- Be nice
Identify what’s really important for you, don’t compromise on that decision, and be nice.
Hiring Process
When hiring people Thoughtbot first reviews a resume and code of the applicant, before they even do a phone interview. Then an initial phone call is done, followed by a second interview if there is interest. The 2nd interview is more technical in nature. If an application is considered, they have to participate in a week-long immersive pair-programming situation with a developer on staff. After this last step is then someone considered to be on the team permanently.
Core Principals
- sustainable development (40 hrs a week)
- all are technicians (even html/designers)
- no contracts or outsourcing
Clients
When it comes to client relationships the approach Thoughtbot takes is to “do the best you can.” This doesn’t always mean you succeed at every project, but you know that you did your best in trying. Set expectations, be proactive and above all nice.
Thoughtbot does not believe in subcontracting and they insist you should work on the way you want to work. If a client doesn’t want to work with you then you should ask them to find another team. In the long run it isn’t worth being unhappy and you’ll just be frustrated (as will likely the client), all around bad.
Client Management
- project planning form
- Highrise
- master services agreement
- project lead (SM/PM rolled into one)
Design and Development
Like 37Signals, Thoughtbot is a big believer in design first. They will figure out how a UI looks and works before coding. This helps flesh out details you might not realize until later, when it’s more expensive to fix. They practice pair-programming with an iterative, TDD development approach. Pivotal Tracker is used to manage their backlog.
They also believe strongly that people should do what they enjoy. Folks are encouraged to work on projects that interest them, there are not set roles or boundaries. If a designer wants to get more into Rails, he’s allowed to take on some Rail work in a project. There is always at least two developers per project. If one becomes bored or wants to work on a different project it makes it possible to swap people out without affecting the project to terribly.
Open Source
Part of the culture at Thoughtbot, they’ve made many open-source contributions to the Rails space. Abstractions don’t stay internal to the company. By releasing open-source software they get their ideas validated and legitimized. Payback includes recognition in the market space. They also have to support the software less, because the community itself supports the software (crowd-sourced support).
The one suggestion for other companies looking to do open-source contributions: keep quality high, incubate internally for a while before releasing, make sure it’s something you enjoy using yourself.
Products
The talk ended with the question about why and how do you keep Ruby relevant?
- consulting scales w/ people
- but we want a small company
- products can scale without people
- make products you use yourself
- make products you enjoy using
How long will Rails be around for (be popular)? How long will Ruby be around for? We have to take responsibility for Ruby and Ruby on Rails so it remains popular.
