00:00:06.359
Video equipment rental costs were paid for by PeepCode.
00:00:18.760
What have been your favorite sessions so far this weekend? Which ones did you enjoy? Oh, what was that session called? Hidden Gems?
00:00:32.520
Hidden Gems—excellent! What was the best gem?
00:00:38.280
What were some of the things that blew your mind? Anything that really challenged you? I remember the first couple of Ruby conferences where there was always something that stood out.
00:00:43.760
Last year, do you all remember the talk about how to hack any system using Ruby exploits? It was a bizarre talk—I felt like I had to take a shower after that one.
00:00:49.480
Is that speaker still alive? I don't know, maybe they're packing the CIA site or something like that.
00:01:00.559
Today, I’m going to share things from a different perspective. I haven’t been on the speaking circuit for about two years; instead, I've been writing for a company that builds nonprofit software.
00:01:14.400
The idea is that we take an important social problem and find a way to generate revenue by solving it. Last year, we worked on a system called Changing the Present. The concept involves the $6 billion spent on gifts, many of which are undesirable.
00:01:27.840
As one person mentioned returning from JavaOne, they received yet another backpack—really, how many of those can you have? We can only accumulate so many cheap pens or fuzzy slippers. The idea behind Changing the Present is that you can gift someone a donation option, like an hour of a cancer researcher's time.
00:01:42.640
We send a web service request to a Just in Time Printer, print a greeting card, and make a donation to Habitat for Humanity or any nonprofit that's important to you. That was last year. This year, we're working on a solution for teachers.
00:01:59.320
The typical teacher spends between $2,000 and $4,000 per year on supplies that their budget doesn't cover.
00:02:04.479
This application allows teachers to create a wish list from various vendors on the web. We'll take a portion of the affiliate fee to cover server costs, enabling teachers to ask parents and the community for support. This project has taken a lot of my time, so I haven't been doing as much writing and speaking recently. However, today I hope to give you a unique perspective as a Ruby user.
00:02:58.959
Throughout the talk, we will also be giving away copies of my most recent book. Dave is going to help me select some of the best questions you come up with during the session. We'll keep it interactive and gift a couple of books. Additionally, I'm working on a revision of 'Rails: Up and Running'. I also co-authored a book with Dave's company, the Pragmatic Press, 'From Java to Ruby', a couple of years ago.
00:03:30.519
Recently, I have been focused on coding. Today, I would like to share several themes and underlying concepts of the talk. We will explore frameworks that might challenge conventional wisdom, and I'll take you against the grain in some respects while keeping those themes in mind. Finally, I'll cover some quick thoughts—just one-word ideas reflecting what Ruby means to me.
00:04:09.640
The first question I want you to consider is: how do you see yourself? What do you aspire to be? Often, at these conferences, I start with a bio, stating I’m a kayaker, mountain biker, and a father of two. Those things define my ego and identity. Many of us can relate to being Mavericks—being different or aggressive. We aim to push the industry into areas where others might feel reluctant to venture. There is an element of interest and fun. How many of you picked up Ruby simply because it seemed more enjoyable than what you were using before?
00:05:02.000
That's a lot like how I feel when kayaking. Another thing I enjoy is being the captain of my own ship. I can steer it wherever desired, right or wrong; I’m either succeeding or learning. Many of us share that mentality. However, when many Mavericks come together, it can create a strange vibe—a gathering of independents who might align on certain thoughts.
00:05:57.479
What happens when a bunch of Mavericks get together? Perhaps one will build a round peg while others have square holes, trying to fit those together. It raises the question: when the opinions surrounding opinionated software fall flat, what do we do and what do we aspire to be? Are we Mavericks or are we Lemmings? In some ways, we might be one and the same. There's a necessary tension between the energy that new ideas provoke against the desire to conform.
00:06:31.800
I love this Wikipedia description paraphrased: Lemmings aren't truly foolish; they reproduce, and when the urge to migrate arises, they might find themselves on the edge of a cliff overlooking the sea. When the migration instinct strikes hard, they can jump—their leap can lead to exhaustion or worse. This forms an undercurrent in comparing Lemmings and Mavericks. Who do we aspire to be?
00:07:37.240
The second question is: what motivates you? Is it beauty? Many people at this conference enhance the beauty of our lives or our code. For instance, I hope to meet Mats, who created Ruby—a language that allows us to create code that can take on various forms. I believe that our code should tell a story, and when that story gets lost, it's likely not fulfilling its purpose.
00:08:37.600
What motivates you? Is it beauty, simplicity, or something else? Money is not a bad motivator either. When you code for a living, finding the balance in prioritizing beauty can be tough. It's difficult for a Maverick to hear, but beauty may need to take a backseat to financial need at times. Sometimes, beauty and money align, such as with Ruby on Rails, where the configurations vanish, allowing us to discover the story hidden within the code.
00:09:51.640
Yet, adopting a beautiful framework sometimes comes at a high price. Have any of you been in situations where you've had to adopt aggressive frameworks and wonder if the old methods sufficed? The essence is that money should generally serve as the primary motivator in our work, while beauty should assist in reaching our goals.
00:10:34.600
The third question is: who is the beholder? To illustrate, what's a dung beetle? Everyone in Texas knows, but in Norway, they wouldn’t recognize it and would be confused by why Texans appreciate dung beetles. These creatures contribute to the ecosystem by recycling waste. The perception of beauty varies based on the observer's perspective. In our community, we often don't spend enough time examining what we see, and that leads to decisions being made without full consideration.
00:11:09.160
So, the themes I want to talk about are: first, who do we aspire to be, reflecting on the tension between Mavericks and Lemmings. Sometimes, the community should prevail, while other times, Mavericks should lead. Secondly, what motivates you? In coding, when you work professionally, money should be your primary motivator, with beauty assisting you in reaching your goals. Finally, who's the beholder? I will now delve into some major developments related to Rails and discuss their implications.
00:12:38.760
Let's begin with REST and its influence on Rails. How many of you appreciate the new direction REST is leading Rails? How many of you dislike it? It seems that conventional wisdom asserts REST is the way to go, and I mostly agree. We get a lot of behavior for free; it's amazing how much can happen with so little code. However, I’d like to argue that while the initial advantages appear free, there’s an underlying cost.
00:13:49.240
I want to illustrate the impact REST has on our code, particularly with this line of code. Rather than writing out controller actions, routing generates an impressive number of active routes with minimal effort. This demonstrates REST's effectiveness in reducing the amount of repetitive coding we need. While it saves us typing, it also adds layers of meaning to HTTP verbs, whereas previously, several verbs served multiple purposes.
00:14:59.200
REST encourages the transition from single-purpose controllers to multi-purpose ones, thus unlocking significant functionality with minimal code. This lets us support various formats, such as HTML and XML, while refining user interfaces into a standard format. All of these elements are advantageous, but there's a trade-off.
00:16:25.040
The conveniences that REST introduces come with their complexities. Some of you may relate to the difficulty of explaining REST to newcomers. I remember discussing REST when revising a book from Rails version 1.0 to 2.1, and it was challenging for users to navigate numerous concepts without a solid foundation.
00:17:36.160
A common problem was that we introduced too much information too quickly, which hindered understanding. It’s crucial to address this challenge thoughtfully, mindful that changing core responsibilities in Rails can significantly impact new users.
00:18:54.720
We also need to consider how these decisions shape developers' approaches to Rails. Significant changes, like altering how controllers work—introducing multiple restful actions—can challenge long-standing practices when patience isn't prioritized. A pressing point is that new developers could easily feel lost navigating these shifts without proper guidance.
00:20:15.480
Practical implementations of REST might seem foreign or ill-fitting within Rails' traditional structure, particularly when logging users in. This tension raises the question: is trying to structure everything to fit REST an overly ambitious approach.
00:20:59.040
This desire for structure can lead to challenges for developers. The complexity of building user authentication can clash with the simplistic appeal of REST-driven design, creating layers of confusion and complexity where straightforward solutions might suffice.
00:22:11.760
Instead of forcing everything into a RESTful pattern, we could focus on what truly adds value to our applications. Finding a balance in flexibility vs. strict adherence to guidelines allows developers the space to make informed choices.
00:23:20.920
Now, let’s touch on testing, a topic generating significant debate, especially around fixtures. How many of you believe fixtures are evil? How many do not? The reality is that it can depend on the context.
00:24:23.360
We often encounter differing stances about testing practices in our development culture. While fixtures can simplify certain tasks, they become cumbersome within complex relational databases—leading to unexpected interdependencies that can further complicate the testing process.
00:25:27.720
A problematic experience arises when developers don't grasp why their fixtures behave as they do. Failure to effectively manage fixtures can lead to complicated bugs and difficulties maintaining tests. To navigate these issues appropriately, we must encourage a focused, straightforward approach to reading and comprehending testing strategies.
00:26:41.040
Difficulties with fixtures often stem from a misunderstanding of how relational data interconnects. Instead of generating complex fixtures, builders should prioritize creating easy-to-understand tests focusing exclusively on necessary parameters.
00:27:45.160
To mitigate the danger presented by extensive fixture lists, it's essential to proactively identify and mark test data comprehensively. Effective labeling and documentation can enhance understanding and help developers navigate more complex tests.
00:28:56.200
In summary, it's necessary to assess the purpose behind our software projects. When embarking on a new application, that's the time to consider product features and their value relative to solving a real problem. A successful project shouldn't overwhelm users with needless complexity.
00:29:56.920
Therefore, when building software that aims to provide meaningful features, prioritize simplicity while remaining economically viable. The goal is not merely to meet a checklist of features but also to enhance the user experience.
00:30:57.960
I urge you to expand your understanding of beauty in the code you write. Stories within your code foster better communication among developers. Sharing experiences encourages learning and growth within the programming community. It's through these stories and discussions we cultivate a thriving environment.
00:32:02.360
If we all take time to mentor newcomers, share our knowledge, and give back to the community, we will improve the entire development landscape, which ultimately shapes the future of our industry.
00:33:37.320
The final challenge is to find ways to use your programming skills to create positive change in the world around you. Be proactive about mentoring others, giving back to your community, and making a difference through your work.
00:34:06.440
Thank you all very much. I welcome any questions or comments you might have.
00:34:45.680
Indeed, as we've discussed today, many aspects of our industry hinge on how we approach our craft, how we share our knowledge, and the enduring impact each of us can make through our work. It's exciting and inspiring to be part of such a vibrant community ready to innovate and redefine what we build.
00:36:12.720
Please ask your questions!
00:36:16.720
And as the conversation unfolds on various topics, we find ourselves continually challenged to learn from one another. The exchange of insights and experiences illuminates our paths forward as much as the projects we build themselves.
00:37:59.120
Thank you for the heartfelt engagement and thought-provoking discussions. Enjoy the rest of the conference, and let’s continue exploring together as we navigate the Ruby landscape ahead.
00:40:12.560
I appreciate the questions we've had today, and the dialogue will surely extend beyond this session.
00:40:35.480
This workshop reminds us that while exploring technology, our journey is intertwined with every interaction we nurture. Thanks again for being here, and I hope you all find inspiration in the days to come.
00:41:50.560
Video equipment rental costs were paid for by PeepCode. Screencasts.