Rocky Mountain Ruby 2012

Enhance your code with rainbows!

Enhance your code with rainbows!

by Angela Harms

In Angela Harms' talk titled "Enhance your code with rainbows!" at the Rocky Mountain Ruby 2012, she explores the intersection of love and software development, challenging traditional views on coding grounded in fear and obligation. Rather than adhering to the belief that productivity is dictated by fear or strict guidelines, she advocates for an approach rooted in curiosity, collaboration, and genuine joy, importantly termed 'geek joy.' Harms delves into the discomfort often associated with discussing love in a technical space and expresses the relevance of so-called 'soft skills' in fostering a productive workplace. Here are the key points from her presentation:

  • Concept of Love in Coding: Harms discusses the discomfort surrounding the concept of love in the tech domain and highlights the importance of love in software development as a driver for creativity and joy.

  • Soft Skills as Strong Skills: She argues that soft skills are critical—sharing that speaking up in daunting situations takes immense courage and can lead to resilience and growth in a team environment.

  • Joy and Progress: Harms emphasizes the notion of 'geek joy' as essential to coding. She asks the audience to reflect on their initial programming experiences and the joy it brought them.

  • Impact of Fear on Code Quality: She critiques the belief that fear motivates clean coding practices, asserting that love for the craft should be the guiding principle, leading to better quality and more engaging software work.

  • Collaboration vs. Cooperation: The talk contrasts cooperation (doing separate tasks side by side) with collaboration (where new ideas emerge). Harms stresses how collaborative practices lead to enhanced creativity and joy in programming.

  • Confident Humility: Harms introduces the concept of confident humility—being ready to contribute while recognizing the value of others' input as essential in pair programming and collaborative environments.

  • Encouraging Engagement: She shares insights on fostering effective pair programming sessions, emphasizing the need for active engagement and advocacy for a culture of sharing both good and bad experiences in coding.

In conclusion, Harms posits that inviting collaboration through love and kindness in coding environments leads to better results, higher satisfaction, and a strengthened community of developers. She encourages participants to actively share both positive and negative experiences, supporting a culture of love and collaboration within the programming community.

00:00:08.549 So I just got here because I've had a cold, and I still have a cold. I'm feeling half groggy from the cold and half from the drugs I took so I could do this. Luckily, I'm talking about vulnerability and related topics, so it's probably appropriate. I didn't expect to be sick, and I'm not allowed to cover the mic or turn it off when I cough, so be warned.
00:00:21.689 So what shall we talk about? Rainbows, unicorns, farting rainbows? That's what people expect me to talk about most of the time. Marty suggested that I come and discuss love and software, and I thought, 'Can you even do that? Is that allowed?' But I will tell you there's a presentation later on with a little bit of code.
00:01:01.980 The topic is love, and to me, it's kind of uncomfortable to talk about. I talk about it all the time—that's what I do. I imagine you all find it even more uncomfortable, but it feels a bit presumptuous for me to state what love is or what kind of love software needs. I don't want to dictate what love means for you, so take what resonates and leave what doesn’t.
00:01:39.869 Soft skills—there's one conference that says, 'No fluff, no soft skills.' And I wonder, why are you scared when the quietest person on the team speaks up, even though they're terrified and trembling because they know something bad will happen if they don’t? That doesn’t feel soft; it feels kind of badass actually. How many of us avoid speaking up during scary moments? For instance, when a parent holds their child's hand during a painful medical treatment—that’s not soft. It’s tough stuff, and it takes courage to face.
00:02:22.660 So I'm going to talk about what they call soft skills and hopefully won't make them seem too soft. When I talk about love, I'm referring to something that's almost a technical term for me. If you think of someone you care about—a child or a pet—take a moment to picture them in your mind. You feel something in your heart, right? That's a spark, and it’s a clue about what brings us joy.
00:03:01.530 When I discuss 'heart smile,' I'm referring to that feeling you have about what brings you joy. Different psychologists have discussed universal human needs, like Maslow’s hierarchy. They have explored what people need to thrive, which can illuminate our sense of love. Some of those elements include creativity, care for others, and learning. When I think about learning—like discovering quantum physics—it sparks joy in me. We all like having choice as it signifies what it means to be human.
00:03:40.560 There’s also a concept called progress toward a goal, which I learned from my friend and mentor, Cheapo Hill. It's about forward movement. The opposite occurs when a project isn't going anywhere, you don't know which features are valuable, or your code never gets implemented or deployed. When we make progress, we are moving forward with what matters to us, and all these aspects lead to what I refer to as 'geek joy.' Think about what made you become a programmer. I imagine everyone here remembers their first program.
00:05:02.050 I think this might have been my first program. You recognize this? I can't really see. It was just the first line that was my program, and more lines came later. It got better. When I wrote that first line, it blew me away to see the computer respond to my input. That’s amazing! It raises the question of how we became programmers. You don’t usually become a programmer just because someone says it’s a good career choice; you have to love it.
00:06:37.600 However, we often end up in complex systems filled with legacy code at companies that dictate what we write. As a result, geek joy starts to diminish, and we wonder why we're doing this. Everyone probably recognizes this quote: Uncle Bob—bless him—loves beautiful code as much as I do. The difference lies in his belief that it's driven by fear, which really breaks my heart. I don't think fear works.
00:07:44.930 Fear is what prevents us from refactoring or from writing clean code. As much as I respect him, I wish he would retire that idea. For me, clean code is about progress. It's about not living in a hell of legacy code and ensuring that I deserve joy in my work. My reasoning includes understanding that being professional or responsible doesn't stem from fear; it emerges from love for the craft.
00:08:09.690 For example, I often wonder, why are there shoes in the refrigerator? I recall learning to code after taking a long break. I was confused by some object's setup, and after multiple questions, I realized some code didn't make sense. It turned out that the code was written out of fear instead of crafting something beautiful and coherent, which we are fully capable of.
00:09:06.840 Nature knows how to deal with complexity, and as we model nature, we learn to embrace emergence. When we adopt test-driven development (TDD), we teach our code tiny bits of knowledge that we want it to learn, allowing it to direct us as we refactor. One of my favorite coaches, JB Rainsberger, emphasizes that if you remove duplication and fix bad names, you'll achieve simpler, cleaner code. This doesn’t come easy; it takes effort.
00:10:22.510 Trying to hold everything in your head often leads to messy results. Our hearts don't smile, and we settle for the first solution that comes to mind, but emergence shows us we can do better than that. It’s crucial to acknowledge the beauty that comes from collaboration and cooperation.
00:11:00.720 Emergence is when something greater than the sum of its parts appears. In pair programming, for instance, when two developers work together, they contribute and communicate until something entirely new emerges—something neither could foresee on their own. If you haven’t pair programmed, I highly encourage you to try it with someone who has had a good experience. It’s transformative.
00:12:25.020 Cooperation involves two people doing their own thing, but collaboration leads to something new. This notion brings us back to geek joy and reinforces that collaboration is an aspect of love. Holding a newborn or standing on a mountain—those moments are also forms of joy, but collaboration fuels the creative spark.
00:12:51.970 Reaching collaboration requires letting go of the need to keep everything in your head. Knowledge grows when it has space to bounce against ideas and change. It’s important to let go of needing to be right and being able to change your mind, especially in pair programming. It involves bringing your own curiosities, confusions, and questions; if you hold back fearing conflict, we won’t achieve those beautiful moments in code.
00:14:41.160 Confident humility is another aspect I discuss, especially in relation to pair programming. This concept means coming in knowing you have something to contribute and being willing to fully engage in the process. It’s crucial to realize that emergence doesn’t occur without your active participation. Many of us feel like noobs at some point, but remember that confidence is about being fully present.
00:15:48.350 Sitting in a corner won’t benefit anyone; instead, you need to contribute your original thoughts and insights. This synergy leads to joyful geekery, which infuses our code with love. And while I apologize for my cold, I'm grateful I showed up. Do you have any comments or questions?
00:17:42.970 I appreciate your stories. It’s essential that we share both our positive and negative experiences in programming. I recall a time when I cried after a difficult encounter while pair programming; I didn’t understand the approach taken. Good experiences matter, and they shape how we adopt pair programming as a norm.
00:18:25.570 I've had both excellent and painful pair programming experiences, leading me to believe that positive sharing is vital. The first time I observed a programming team, I saw participants not genuinely engaging in pairing—just side-by-side coding. That experience taught me that collaboration should mean both partners actively contribute rather than one dominating the process.
00:19:10.710 When you pair with a junior, it’s critical to encourage them and create a balanced dialog. The senior must listen actively to propel the development forward and vice versa. The best outcomes arise from both parties engaging deeply. If you've witnessed positive pair programming experiences, it's crucial to spread that knowledge and advocate for collaborative practices.
00:21:02.120 In summary, confident humility leads us to joyful collaborative practices. Everyone can contribute, and this shared engagement fosters an environment infused with love. Make sure to discuss collaboration and its beauty with those around you.
00:21:40.540 This leads to better experiences in coding and strengthens the community overall. Thank you for all your thoughts and questions today. It’s been great to discuss how we can embrace love and collaboration in our coding practices.