Over the past couple months, I’ve been doing more thinking and reading about what it means to be a software developer who works for the glory of Christ. One of my favorite sermons ever is by a preacher named John Piper entitled “Don’t Waste Your Life“. I have listened to that sermon on planes, before I speak at conferences, driving in the car and probably other activities as well. (In fact, I’m listening to it again as I type this.) It was originally given to college students, but it has resonated with me. There’s also a book that Piper wrote by the same name. In that sermon and book, Piper recounts a story about an old man who surrendered his life to Jesus very late in his life. As he surrendered, he was weeping saying over and over again “I’ve wasted it!” This man looked back on his life and saw he spent it on the wrong things.
I’ve been trying to think “What does it mean to not waste my life as a software developer?” As I’ve been processing that, I’ve had to ask myself some questions, such as “what am I doing to not waste my life?” or “am I making good use of my day?” And honestly, I didn’t like the answers that I was seeing. That doesn’t mean that I was sitting at my desk hanging out on Facebook or Reddit all day. I wasn’t confronted with the fact that I didn’t do anything good, but rather that there were things I was doing which weren’t God honoring, and I’m not talking about the type of work I do. I don’t have any moral reservations for any of the products I’ve written.
One thing that I was confronted with was something I’ve known for a while, I like to argue. In my family of origin we called that playing devil’s advocate. Among my wife & kids they more correctly label it arguing or fighting. My wife has told me numerous times that I needed to find people to debate with, because it wasn’t going to be her.
I’ve noticed over the past few years I’ve gotten grumpier and grumpier about things in software. Some of that is good. I’m tired of us, as engineers/developers/programmers compromising people’s data, livelihoods or life because we write bad software. But that’s not what I’m talking about.
There are things in software that I have started calling Coke/Pepsi or Ford/Chevy arguments. For example, should you use Java or C#? The real answer is, it probably doesn’t matter. Should you use Eclipse, InteliJ, Webstorm, Atom, Sublime, VS Code, vim or emacs? And there are people that have really strong opinions about them. But that’s all they are…opinions.
I’ve managed to get my career to a point over the past 7 years where I get to spend a lot of time on up-and-coming technologies. In 2011 we were experimenting with ReSTful APIs in .Net (this was a couple years before MS introduced WebAPI.) In 2014 we were writing an Angular application. Over the past few months we’ve been using the redux pattern. I know that people were doing these things before me, but in the industries and towns I’ve been in, they were bleeding edge at the time. What I noticed during this time was that people end up loving technologies. I did it. I fell in love with MongoDB. I still like it, but I also love the RDBMs of my childhood (ok, early career, not childhood.)
And people with strong opinions/loves combined with my desire to argue or play “devil’s advocate” aren’t a good mix. I have started arguments for the sole fact of starting arguments. Knowing with the posting of a link or comment that no constructive conclusion would be reached, but instead people would argue over the various sides.
This came to a head this past week for me. I had “stirred the pot” (read: started a pointless argument where everyone defended the position they already had.) As I thought about it over the weekend I thought that if I don’t stop, in a real way I was going to be like that man from pastor John’s sermon. I would only be able to say “I wasted it.” Because I have definitely wasted part of my life as a developer over fruitless arguments.
My response to this was to go unsubscribe from almost all of the channels that I was subscribed to on our company slack. I kept the teams that I was on, and a general “announcement” channel. There is nothing inherently wrong with those channels. They are beneficial to some people. But to me they represented a way to waste my energies and time. Even if I wasn’t commenting in them, I was likely thinking about them. Then I realized that my role as a software engineer is not to have fruitless arguments, or fight about opinions. My role as a software engineer is to deliver software.
To be honest, it’s a little embarrassing to be a few weeks away from turning 40 and realize that I’ve been acting more like a teenager than a software engineer. But it did give me some insight into how to be a software engineer for the glory of Christ. If by nothing else than a counter example of what I should be doing.
Piper answers the question “How do you make Christ look great in your life and thus not waste it?” with several examples, including:
Computers, toys, houses, lands, cars are given to you so that you might use them in such a way that it will be plain to the world these are not your treasure…Christ is!
And thinking about that, I had to honestly answer “Christ is not my treasure, my opinions are.” And an extension of that was that not only were my opinions my treasure, but convincing myself that my opinions are “right” was my treasure. And as long as I’m doing that, then I can’t write software in a way that glorifies Jesus. Because it meant I was hung up on secondary issues. I couldn’t invest in my coworkers, because I was too focused on convincing them to be on my side. I was too hung up on being “right” that I’m sure it impacted my ability to write quality software. And for that, I’ve been wrong.
Writing this does not mean I’ve got this all figured out, or that I won’t repeat old habits in the not-so-distant future. However, I feel like I’m at the trail head of a journey. I recognize the direction I need to go, and that it’s different than the direction I’ve gone over the past several years.