Unfortunately it's been a while since I posted something up here. I've been crazy busy, but haven't gotten around to noting it (or all the stuff I've been learning here). Like most excuses, it sounds hollow, I know, so you'll have to excuse me. So I thought I'd catch everyone up with a quick life update.
First off, Holly and I have moved to San Diego! We're in the process of selling our home in San Antonio, but our new place is gorgeous, and after the horrific drought-addled summer we had last year, I'm quite looking forward to San Diego's extremely mild one. Also, I've left the defense industry and have taken a position as an Associate Development Manager for ActiveNetwork. I'm leading a the rails team that creates Active Trainer.
I'm still plugging myself into the ruby community down here, as well as adjusting to the new company/position, but thus far, I'm truly enjoying all of it.
I'll have a post up soon about some of the side projects I've been doing in the interim.
My father is a skilled fisherman. That's really not even fully accurate, my father is a master fisherman. Some of my earliest memories with my father involve a rod and a reel, and even though I've never caught the fever for it that he did, I still enjoy bonding with him on a lake occasionally. As I spent this weekend doing just that, I found myself reflecting on my own passions as I watched the fire in his eyes as they scanned the lakes. While I never found that fever for fishing, I did find it for programming, and I found that many of the things that he was trying to impart to me about fishing had equal application in my own passion.
Have a Mentor, Be a Mentor. Out on the lake, my father is my mentor, and I'm not the only one. He seems to take a joy in teaching my sister, my cousins, his friends, whoever he can share his acquired knowledge with. What surprised me though was to hear him talk equally as passionately about the people who take him under their wings and teach him as well. Talking about the guides who he had worked with who taught him things about the lakes, guiding or fishing in general. As I reflected on this I realized that I've written some of my best code (and been the most fulfilled) when I had people to share my knowledge with, and others to learn from. Sharing your knowledge reinforces it in your mind. Your students will ask questions to force you to examine yourself and your understanding in ways that you never would have otherwise. And while self-study is always a virtue, having a mentor to guide you and teach you things that you may never have questioned otherwise is a GREAT thing. A mentor pushes you to be better in paths you may not have otherwise explored.
Collaborate with your Peers. My uncle Bobby is uncannily like my father. In many ways I almost feel that they are different flavors of the same dish, and yet like all Barnes men, they share a friendly rivalry. In the middle of a hard day of slow fishing (it was 105 degrees in Texas today), my father received a message from his brother. Uncle Bobby had caught a new kind of fish. Rather then get more frustrated with the slowness of our day, he smiled and studied the picture, then explained to me Uncle Bobby's accomplishment. Your peers are not your really rivals. Even if they may compete with you for promotions later, they are still not your rivals. If you want to be truly great, you have to work with them. Learn from them, and teach them too! In addition to the obvious benefits that most of community has realized by now (Pair Programming anyone?), the camaraderie of the relationship will help keep you dedicated and will provide you a form of emotional release for tense moments in your career for years to come.
Have Passion for your Craft. My father could talk for days about fishing. Continuously. While speaking of nothing else. After he visits, it's not unusual to find a dozen fishing show have appeared on my DVR, with a few more scheduled for regular recording. On the lake, he'll spend 15 minutes analyzing water temperature, lake level, windspeed, sonar data, depth graph, and gps of every spot we go to just to ensure that he's got it as close to perfect as he can. I'm half convinced he only learned to use the internet so that he could find a new group of fishermen to commiserate with. He loves his craft. Programming is no different. If anything, we should find this level of study easier. How many programming blogs do you think there are than fishing blogs on the internet? We pioneered this interactive medium, along with every other form of social networking, and yet, so many of the programmers I know only perform their craft to the minimum extent necessary. They enter the field because they feel it's a good place to make money and not have to do physical labor, and they never learn more than is absolutely necessary to do the job. That kind of passion is a joke to a fisherman. We should be able to do at least as much! Talk about programming to everyone, even to people who are not necessarily programmers! You'd be surprised how many of them would actually be astounded by the magic you do with your keyboard. Join a local users group and work with other programmers. Read about programming! Not just something for your next project at work, something just to expand you as a programmer! (Hint Start Here)
Expect the Best, Prepare for the Worst. No fisherman goes out on the lake expecting to catch nothing, but they're prepared for it. Worse yet, they'll be prepared for the motor to break, the trolling motor to fail, even for the hull itself to crack. It's really no different in your code. Code assertively, code confidently, especially in higher order languages like Ruby. Don't coax results from your methods, assert what they'll be and expect them to return what you tell them to. But don't forget to write the tests to ensure that will happen, and make sure that you have exception handling at the top of your stack to catch the weird exceptions that may bubble up!
It was a strange experience to reflect on code as I'm pulling fish from the water, but the longer I develop, and the deeper my passion for it grows, the more I find myself reflecting on the things that form really great code and really great coding experiences. Hopefully these lessons my father inadvertently taught me about programming will help improve the development experience for others too.