Talks
TDD For Your Soul: Virtue Through Software Development

Summarized using AI

TDD For Your Soul: Virtue Through Software Development

Abraham Sangh • April 12, 2016 • Earth

In the talk titled "TDD For Your Soul: Virtue Through Software Development" presented by Abraham Sangh at MountainWest RubyConf 2016, the speaker explores the intersection of software development and personal character development through the concept of Test-Driven Development (TDD). The primary theme revolves around the idea that developers can cultivate personal virtues alongside technical skills by applying TDD principles to their character.

Key points discussed include:
- Definition of TDD: TDD is summarized in three steps: Red (writing a failing test), Green (writing code to pass the test), and Refactor (improving the code without changing its behavior).
- Character Development Framework: Sangh connects TDD to personal growth, labeling it as "TDD for your soul", suggesting that just as developers iteratively improve their code, they can also improve themselves.
- Cardinal Virtues: The four cardinal virtues are outlined—self-control, courage, justice, and wisdom—each discussed in context with coding and personal development.
- Self-Control: Emphasizing the importance of regulating impulses and desires, the speaker shares how self-control is crucial in coding practices, illustrated with the Law of Demeter.
- Courage: Courage is defined as the ability to face fears, particularly in the face of failure or challenges in learning to code. Sharing examples from pair programming reinforces its importance.
- Justice: Sangh defines justice in software development as recognizing and fulfilling obligations to others, creating code that is maintainable and fair.
- Wisdom: Wisdom involves making informed choices and learning from experiences, with advice from notable figures like Confucius highlighting various pathways to understanding wisdom.
- Practical Application: Sangh encourages reflecting on personal virtues and setting concrete goals ("failing specs") to improve character, showcasing a method of integrating virtue development with daily routines.
- Overcoming Resistance: The talk addresses common feelings of shame and inadequacy that hinder personal growth, using anecdotes and cultural references to encourage embracing vulnerability and learning from failures.
- Call to Action: The speaker concludes by urging the audience to pursue self-improvement through the lens of TDD, thereby aspiring to be better developers and individuals, and fostering a community of support around these ideals.

Overall, Santagh’s illustrative and actionable approach provides a philosophical yet practical guide for software developers seeking to enhance both their technical and personal virtues through intentional self-reflection and development.

TDD For Your Soul: Virtue Through Software Development
Abraham Sangh • April 12, 2016 • Earth

TDD For Your Soul: Virtue Through Software Development by Abraham Sangh

Web development pushes us to our limits, not only of cognition, but, perhaps surprisingly, of character. Using the cardinal virtues as a framework, we can see that developers need courage to learn, temperance to prioritize goals, a sense of justice by which to discern obligations, and wisdom to choose our path. By being honest about where we lack virtue, and implementing steps to develop character, we can perform test-driven development on ourselves. This process can help us grow not only as developers, but as human beings.

Help us caption & translate this video!

http://amara.org/v/IMmw/

MountainWest RubyConf 2016

00:00:00.000 Hey.
00:00:22.740 Okay, so our last speaker is Abraham Sangha. He spoke last year or the year before.
00:00:30.579 Last year at Mountain West JavaScript, which was a sister conference to Mountain West Ruby, and he gave just as fantastic a talk.
00:00:38.379 So again, the question is, I really like to know where Abraham's head is at a year later.
00:00:44.379 I really like to leave something at the end of Mountain West. I love to leave something I can do, what Abraham said last year.
00:00:51.220 So I'm very, very pleased and grateful that Abraham agreed to come back and talk to us again.
00:00:58.830 I'm really looking forward to it, so thank you for coming.
00:01:15.310 Thanks for having me! My name is Abraham, as Mike mentioned. I'm talking about TDD for your soul.
00:01:21.170 If you're confused, I think that's appropriate. I'm going to explain exactly what I mean by that.
00:01:29.509 But you can tweet. I would love to hear your comments, critiques, whatever you have to say.
00:01:36.200 Let me know. As I would say to my friends, get at me. Just let me hear it.
00:01:42.439 So TDD for your soul means virtue through software development.
00:01:48.319 I'm assuming everyone here knows what TDD means, but just in case, let’s quickly review.
00:01:55.670 We can summarize it with three steps: red, green, and refactor.
00:02:01.970 Red is writing a test or a spec that fails. Green is writing the code to make that test or spec pass.
00:02:08.269 The third step is refactor. Refactor is changing the code to improve readability and elegance while maintaining its behavior.
00:02:14.870 That's the refactoring step, and then you start over again at step number one.
00:02:20.870 So that's TDD—test-driven development. Now, what's the "for your soul" piece?
00:02:28.579 I'm sorry, so how TDD helps me is when I'm at this stage in software development where the world is my oyster.
00:02:35.060 Every option in the universe is available to me, and I just don't know where to start.
00:02:40.160 Often, it helps for me to start with writing a spec.
00:02:47.269 I like how Davis put it in a blog post: it's about figuring out what you're trying to do before you run off half-cocked.
00:02:52.519 So there's some intentionality there. There's a purposeful step in writing a spec.
00:03:04.340 Now, I didn't explain the "for your soul" piece yet.
00:03:09.650 So what does TDD for your soul mean? Let me illustrate with an example from one of the greatest characters in modern TV, Walter White.
00:03:15.769 How many people know who this is? Okay, good, we're on the same page.
00:03:23.509 He can never be sure, you know. But so Walter White, he's a genius.
00:03:28.810 He uses his powers not for good, but for evil. He builds a meth empire.
00:03:35.120 I'm not giving away anything by letting you know that. Science is not a self-directing process.
00:03:41.600 It can be used for good or for evil. So as people involved in science and technology, we have the same opportunity.
00:03:48.970 We can use our powers for good or for evil, and what I propose is that we need a lot more good in this world.
00:03:54.199 If everyone in this room united under that vision, I think we could do a lot of good.
00:04:01.400 So that's the premise of my talk: TDD for your soul.
00:04:07.250 Now, let me just be clear. I didn't get into software development with these lofty thoughts in mind.
00:04:13.250 And if you work with me, you might say I don't even live up to them.
00:04:20.539 So glad I'm coming all the way out here to Salt Lake City to give this talk. I'm from Chicago.
00:04:28.610 I appreciate that. When I got into coding, I had much more base desires.
00:04:35.000 I had much less lofty goals. My goal was really simple: I got into coding to get paid.
00:04:40.880 You know what I mean. Someone else knows what I'm talking about.
00:04:45.970 I wanted to eat olives out of a goblet. That's where I was headed.
00:04:50.539 But what I found through the process of learning how to code, developing software, and working on a team was this:
00:04:56.030 the process of software development was not just a chance for me to grow my technical abilities.
00:05:04.340 It wasn't just an opportunity to feed my family. It was a chance for me to become the best Abraham that I could be.
00:05:10.640 So hopefully, at the end of this talk, you can see that same path, that same process, is available to you.
00:05:15.680 Now, in order to talk about what that means, I'll be using the four cardinal virtues.
00:05:23.169 For thousands of years, moral philosophers have discussed the cardinal virtues.
00:05:30.110 Everyone here looks pretty virtuous to me, but I saw some really shady people up in the top.
00:05:34.620 I don't know if you guys have been up there.
00:05:39.990 So for them, I'm going to explain what the four cardinal virtues are.
00:05:46.250 They are self-control, courage, justice, and wisdom—self-control, courage, justice, and wisdom.
00:05:55.370 The first one is courage. What does courage have to do with software development?
00:06:00.890 My lack of self-control came out quite a bit when I first started learning how to write code.
00:06:10.060 I would be staring at a screen, similar to this one, feeling defeated. I felt anger and frustration.
00:06:17.410 It was hard because I was often at Starbucks trying to learn how to code.
00:06:26.930 I don't know if anyone else has been in that situation, but it's difficult.
00:06:34.270 I didn't know how to read a stack trace. I didn't know it was actually giving me clues as to what was wrong.
00:06:40.990 It was very frustrating. My lack of self-control showed in these moments.
00:06:49.960 I want to see something starting to happen after this talk.
00:06:59.560 As developers, we need to think about how we can help each other with our lack of self-control.
00:07:05.590 We may use an example like the law of Demeter. The law of Demeter is summed up simply.
00:07:12.000 An object should only talk to itself or its neighbors.
00:07:18.310 In an object's method, it should talk to its parameters and that sort of thing.
00:07:25.400 But when you see code with a trail of dots, there’s a smell.
00:07:32.700 There’s something happening there where that there's overreach. We see data being accessed across multiple objects.
00:07:39.840 We know what we want, and we know how to access it. But reaching across three or four objects can cause issues.
00:07:47.180 So, the law of Demeter is a constraint we put on ourselves to write good code.
00:07:53.350 But it takes self-control to adhere to these constraints.
00:08:01.000 It’s hard to talk about self-control in our context.
00:08:07.330 This is the Platonic ideal of a workplace, and I don’t think I could explain to my dad.
00:08:13.240 Working the sewers in Chicago, what self-control means in coding.
00:08:17.000 You ever have moments where you’re struggling with self-control in programming?
00:08:23.590 As developers, we want to know what's right and true, and we need to tell everybody.
00:08:30.390 Self-control can be difficult, especially when we oscillate between despair and megalomania.
00:08:38.060 It's not a healthy way to live. How do we demonstrate self-control?
00:08:43.700 We have desires and impulses, and we need to control them. Are we controlling them or are they controlling us?
00:08:51.450 My dad taught me everything through action movies. He said a man’s gotta know his limitations.
00:09:01.179 Self-control is about knowing who you are and your limitations.
00:09:07.930 It’s about being honest about them and regulating them through good habits.
00:09:13.440 When we think about self-control in coding, we can think about what it means to live in a self-controlled way.
00:09:20.000 The next virtue is courage.
00:09:26.600 What does courage have to do with coding? Courage is the ability to overcome fear.
00:09:34.860 A lot of fears we have are centered around failure.
00:09:39.800 When thinking about coding, we often consider how to handle exceptions.
00:09:44.300 When writing a mixin, how do you handle exceptions?
00:09:51.950 If the action you're attempting doesn't happen, do you let anyone know?
00:09:59.610 Utilizing custom exceptions makes it easier to debug and find stack traces.
00:10:08.400 Transparency about your failures, or errors, is essential.
00:10:15.500 How can we look at courage from a broader perspective?
00:10:22.380 There's a lot of courage in engineering itself.
00:10:31.000 Facing challenges without the necessary context is often the case when developing.
00:10:38.580 We are sometimes given a story or a set of requirements without clues on how to dig in.
00:10:46.000 But that challenge is often what we look forward to, and that takes courage.
00:10:53.700 Richard Feynman said the excitement comes from making discoveries.
00:11:01.340 Similarly, pair programming requires vulnerability and courage.
00:11:06.610 It's exposing your thought process in real-time, which can be daunting.
00:11:13.540 Many developers struggle with this, especially if we feel confused or lost.
00:11:20.390 Sharing through pairing can lead to incredible learning opportunities.
00:11:32.000 But it still takes courage to jump in and show vulnerability.
00:11:40.030 This is one of the earliest pieces of code I wrote; it finds the mode of an array.
00:11:46.450 It's convoluted and horrible. Don't look at it too closely.
00:11:54.260 However, it worked at the time, and I was happy with it.
00:12:00.430 A more experienced friend sent me his solution, which was elegant and concise.
00:12:08.160 I thought, "Wow, what can I learn from this?" I learned a lot from his example.
00:12:14.110 Courage is about being open to learning and embracing the growth mindset.
00:12:20.600 Brené Brown said courage starts with showing up and allowing ourselves to be seen.
00:12:35.240 This brings up questions about our lives: are we living courageous lives?
00:12:45.810 Shame can prevent us from our goals. Are we letting fear control our lives?
00:12:53.870 Next, let's look at justice. What does justice have to do with writing code?
00:13:01.689 Justice is depicted as blind to symbolize an impartial process of weighing obligations.
00:13:09.090 Fulfilling one's obligations and giving to each what is owed is a simple definition of justice.
00:13:16.699 Justice in software development can mean recognizing unfulfilled obligations.
00:13:24.599 It’s about understanding our obligations to others when writing code.
00:13:34.570 The code that we write does not solely belong to us; it belongs to everyone.
00:13:43.460 Writing organized code and fulfilling obligations helps create better, maintainable code.
00:13:50.960 In this way, justice is about being flexible and adaptable in our coding to meet external demands.
00:13:58.840 Just as design is more about preserving changeability than achieving perfection.
00:14:07.999 This relates to justice because writing code that fulfills obligations is flexible.
00:14:15.240 Michael Sandel stated that thinking about justice compels us to consider how we should live.
00:14:20.390 Reflecting on our obligations can lead us to live more just lives.
00:14:27.610 Now, let's explore wisdom. What does wisdom have to do with coding?
00:14:35.360 Wisdom is about making good choices and navigating through complexities.
00:14:43.030 When Uncle Bob talks about design patterns, he highlights that they are proven solutions to common problems.
00:14:50.920 These patterns embody wisdom accumulated over years.
00:14:57.010 While coding, we learn from others’ experiences and wisdom by using established patterns.
00:15:04.000 Confucius shared three methods to learn wisdom: by reflection, imitation, and experience.
00:15:12.110 Reflection is the noblest path; imitation is the easiest, and experience is often the hardest.
00:15:20.080 Some developers gain wisdom by reflecting on problems they’re familiar with.
00:15:27.210 Others learn by imitation, while many find wisdom through hard experiences.
00:15:35.030 We all deal with inflexibility in code that we’ve written and come to regret.
00:15:41.800 We learn that some decisions need revising through painful lessons.
00:15:48.110 So, let's take wisdom and examine how it applies beyond coding to our lives.
00:15:55.660 Do we have time set aside to reflect and consider our own lives?
00:16:03.170 How many people have mentors or examples they wish to imitate?
00:16:10.890 Are you suffering through experiences to gain wisdom, or are you learning through others?
00:16:18.180 We've talked about the four cardinal virtues: self-control, courage, justice, and wisdom.
00:16:27.990 I like how Alasdair MacIntyre put it in his book, After Virtue.
00:16:35.270 We could define our self-improvement plans like TDD for our souls.
00:16:43.030 Ask yourself: Who am I? Who ought I to become? How do I get there?
00:16:50.660 For example, if I want to grow in self-control, I write a failing spec for it.
00:16:57.580 Let’s say my goal is to get up early, which means I need to go to bed early.
00:17:05.450 So, I set a concrete goal: I will close my laptop at 9 PM every night.
00:17:13.970 Then, I either pass or fail that test. I build up habits over time.
00:17:20.800 Once I can achieve this goal of closing my laptop at 9 PM, I pass that spec.
00:17:28.960 At that point, I can refactor that goal and consider how to maintain self-control.
00:17:34.150 TDD for your soul encourages writing tests against your life.
00:17:41.020 It’s about defining where you want to be and the virtues that can guide you.
00:17:47.810 As you establish goals that may initially fail, work towards becoming that virtuous person.
00:17:54.660 I could end it here and walk off stage, and everyone would applaud.
00:18:01.830 But I want to say a little bit more.
00:18:07.900 I think a lot of us might resist the process of TDD for your soul.”
00:18:15.740 This resistance often comes from shame—a sense of lacking worthiness.
00:18:23.230 We might question why we would write failing tests about our lives.
00:18:30.500 Why would we admit to a lack of courage or acknowledge our shortcomings?
00:18:38.800 Many may feel fine despite poor decisions, prompting resistance to changing.”
00:18:46.550 Shame can whisper that we’re not good enough.
00:18:53.020 However, those failures can lead us to a better place.
00:19:00.410 I want to share something important using a reference from the series Firefly.
00:19:07.520 Shepherd Book tells Mal, 'I don’t care what you believe; just believe it.'
00:19:12.280 In times of struggle, it’s vital to have something important to hold onto for improvement.
00:19:18.350 Similarly, my process of developing virtues stems from my beliefs.
00:19:26.550 For many Christians, this week evokes powerful reflections of overcoming shame with resurrection.
00:19:35.710 It forms the basis of how I combat shame and pursue virtue.
00:19:42.390 What is your basis for combating shame? How do you fight against it?
00:19:48.740 In Chicago, where I’m from, the blues serves as a metaphor for processing pain.
00:19:56.890 It captures the essence of keeping painful episodes alive while transcending them.
00:20:04.510 Similarly, our vulnerabilities don’t have to lead to shame that halts our growth.
00:20:09.960 Our failures can encourage us to create character and refine who we are.
00:20:17.420 The world needs individuals with self-control, courage, justice, and wisdom.
00:20:25.000 As we reach the end of my talk, I hope you see a clear path forward.
00:20:31.620 Together, we can become better programmers and better people.
00:20:38.360 So, let's work towards being the best versions of ourselves.
00:20:48.270 Thank you!
00:20:53.550 Yeah, that's a great question. Let me repeat it.
00:21:02.260 Basically, how do I incorporate the content of this talk at work?
00:21:08.000 I appreciate that. I think, to be honest, I’ve struggled with that a bit.
00:21:14.550 When I put it out there at work, it means I have to live up to it.
00:21:20.780 I want to do that, but I haven't given this talk at any workplace yet.
00:21:29.610 I think that I ought to, as you've given me something to think about.
00:21:37.850 Currently, my moments of reflection happen on the train to work.
00:21:42.970 I wear headphones to listen to lectures or music, and I’ve been journaling.
00:21:49.960 You have to carve out time for those moments.
00:21:56.950 The question was where do I find time for reflection?
00:22:02.810 The virtues are subjective, and we all define them in different ways.
00:22:09.900 How do I write these tests and get external validation?
00:22:16.040 That's a great question.
00:22:23.660 For me, I am part of a religious tradition, so I have guidance.
00:22:31.360 But for those who aren't part of such traditions, finding a shared meaning is crucial.
00:22:38.540 It is essential to have a community that helps define what wisdom or courage looks like.
00:22:47.220 I need the feedback from people who care about me; my wife is good at that.
00:22:54.940 Leading into the next part, what led me to this direction?
00:23:04.310 We live in a broken world, and I think about how we can be better.
00:23:10.900 Learning through analogy was natural for me while learning to code.
00:23:18.220 It started as a small lightning talk and grew from there.
00:23:24.450 I kept giving talks because people responded well to this concept.
00:23:30.800 The question was, what's my metric for measuring growth?
00:23:39.650 There's no simple answer; it depends on your context and who you are.
00:23:50.270 Growing virtue is a lifelong journey.
00:23:57.190 It will never be over until you die.
00:24:02.800 Thank you for your great questions.
Explore all talks recorded at MountainWest RubyConf 2016
+10