Monday, March 28, 2011

My First Code Prison (Coding in the Clink III)

This weekend, I had the privilege of being part of a Code Retreat in Prison. Being that I haven't been to a Code Retreat...period, it might seem odd that I would choose The Clink as the venue for my first Code Retreat.

Along those lines, one of the main questions I got from folks on the outside is why?  For me, this was a fairly simpler question, but the answer is a bit more complex than I let on.

The first reason is, I knew Dan from my time working at CheckFree.  I still remember, and tell stories, of Dan and I being in the same HR orientation together. Dan asked some very good questions surrounding code ownership, and inventions, and who owned inventions made at on our own time at home.  The poor HR staff hadn't a clue how to answer Dan's questions.  I suspect now they do, since they were excellent points.

The second reason is I had the pleasure of working with Joel, while at Nationwide.  Joel became involved in working in the program on Tuesday nights at MCI. I found the stories of his experience fascinating and inspiring.  The fact that Dan was involved, made it all the more interesting.  The third reason, however, is where it gets more complex.

Growing up, I attended mass on a weekly basis. When you attend mass on a weekly basis you get to experience different style homilies from different priests. Each one has their own preffered style. Our pastor tended to simplify things such that a 5 year old could understand it. Other priests essentially took the guidance provided by the church and recited it back such that it.felt like a lecture. The best homilies, like most good programming conference talks, were filled with stories that made the subject matter relevant to your life today.

My favorite homilies contained stories of when the father visited inmates in prison. There was nothing more inspiring than these stories of redemption and understanding.  In fact, it was very obvious, that some of these inmates had achieved a better understanding and faith than I had as a questioning teenager.  I found myself wishing I could do something like that for something I truly understood.  Fast forward twenty years, and I have that opportunity.  I couldn't teach an inmate about faith, but I could bring a skill that I had cultivated over time and maybe do my part.  How could I pass this up?

So on Sunday morning I took the drive up to Marion Correctional Institution.  Myself, and seven other "outsiders" went into the prison and walked to the Life Line center.  One thing that became very apparent during the walk was that you were in prison.  You weren't in a place off to the side of the prison, a visitors area or anything like that.  You walked right past the kitchen and dining hall.  Which was a very good thing actually. Kairos was also there this weekend.  There is nothing that will calm your nerves than hearing a hundred or so men, throatily singing gospel songs as part of that program in the dining hall.

Once we made it to Life Line, we were greeted by the inmates who were very cordial and polite. We had short introductions and offered our skill levels in Java.  We then decided to have each outsider sit at a workstation and have the prisoners pair or triple with each of us.  I had the opportunity to triple with a beginner and a more intermediate to senior level inmate on our first effort on a Tennis Game Kata.

We made a few obvious mistakes.  Trying to cram an enum into the problem wasn't ideal and sidetracked us. We probably should have ping ponged a bit more in our pairing style, as what ended up happening was our beginner programmer drove while myself and the more senior inmate acted in a coaching role.  Not that there's anything wrong with this approach, but we didn't make it very far in our effort to solve the problem.  This, of course, is OK, since you're going to toss the code and start over for round 2 with different pairs.

We then had the opportunity to have lunch, which meant eating with the population in the dining hall.  With four people to a table, we intemingled and chatted over a brunch.  Brunch consisted of sausage, a hashbrown, an english muffin with jelly, some sort of bran flakes, scrambled eggs, a salad and a banana.  Seems like a lot of food until you realize, you don't get to snack on the inside.  One of the more interesting experiences was having a random inmate come and ask me if I wanted my banana.  Once I discovered that was fine, I gave it to him.  It's apparently quite common.

During lunch, we had an interesting discussion about programming and its utility on the outside of being able to earn a living.  This was a popular refrain.  Could you get a job in programming?  I think some of these guys had seen internal programs go away due to foreign competition and they wanted to know if there was a future in it.  Yes, the furniture building program had been halted since the state could get product cheaper overseas.  I think the choice of the prison to shift resources into technology is a very good move, it will help the inmates upon release regardless of programming's place.

What was also interesting was learning that some of the guys had already programmed in prison before. I heard a story of guys working for a client in Arizona.  They ran into issues, however, when the client's programmer had a complex of working with programmers in prison.  Sounds similar to folks having concerns with working with offshore developers, doesn't it? Probably the most interesting thing about this situation was that all communication about the code was done over telephone.  No email, no instant message, no internet.  Just telephone and books.  That's tough!

After lunch I had the opportunity to see a 90 second space battle video that an inmate rendered using Blender and some other graphics tools. It was darn impressive.  There was serious skill involved in making the video.

After the video we switched pairs, and I ended up with two fellows who I would classify as intermediate to advanced in programming skills.  We were able to solve the problem through rotational ping pong pairing.  Probably the most interesting thing about this was towards the end.  We believed we were done, until we read the final step of the kata which told us that the program should ignore all points after a game is won.  Writing tests for that feature drew up a bunch of tiny hidden bugs which gave me the opportunity to talk about self documenting code and extracting methods to handle those problems.  Which, one of my triple knew quite well...probably better than I did, but was a bit too modest.

One of the things that occurred to me after the second pairing was how skilled some of these programmers were.  I can honestly say that some of these guys had more skill than folks who I've been involved in interviews with on the outside.  I believe a lot of it has to do with rote memorization.  They have no Internet.  Only books, Eclipse and each other.  Any plugins and tools have to be brought in from the outside.  They don't have StackOverflow to ask questions.  Just each other, books, and whatever hints the IDE provides. So unlike most developers, who have adapted lazy instantiation of skills in order to adapt quickly to different technologies, these guys have had to battle harden the skills that they have. The other thing that surprised me, is how well they pair.  One thing you might not expect in a prison situation is the ability to share information, reduce your ego, and pass the keys back and forth.  Yet, they did it without concern.  Of the advanced programmers, I had the luxury of pairing with, I saw folks who would have no problem fitting in with an Agile team.  I know they could pass an audition, if they could get one on the outside.

So when I reflect on my experience, it makes me take a step back, and think about my own ego when I pair. Am I giving up the keyboard enough? Am I ping ponging enough?  Am I letting a junior developer work through their problems enough, or do they need to shoot themselves in the foot a few times first?  It was great reflection for me in handling my professional life.

One final note.  The guys in here have made mistakes. Some of these guys have made really big mistakes.  I didn't ask, but one of the inmates I paired with offered that he had been in the system for almost two decades.  You can draw your own conclusions from that information. He had serious questions on if learning Java could help him when he got to the outside.  I think it can, but as Dan put it at our retrospective dinner, the most important thing to learn is pairing and learning to work well with others. I believe the folks in this program were trying to do whatever they can to build skills that can help them later, be it on the inside or outside.

The most interesting thing about this experience, is how well it paralleled with the homilies given in my youth.  It became obvious to me the older I got, that the priest was trying to say that, these prisoners know more about faith that you understand due to their situation.  Similarly, these inmates knew more about programming than many folks I've encountered simply due to their faith that it's a skill that can help them later.  They practiced hard, and were better than they would ever care to admit.  Faith is something that isn't taught, but arrives, and it was inspiring to see.

I strongly encourage any programmer somewhere near Marion (any by near I mean 2.5 hour drive...we had folks from Ann Arbor show up), to try to make an effort to make it to a Code Retreat there.  If you aren't...maybe a prison near you has a programming program you can volunteer in.  It will be worth your time.


Anonymous said...

Oh my God, that's awesome! And hard core! Great post, thanks for sharing your experience.

Jeff Hoover said...

Great post Mike! We had quite a day, didn't we? It's great to read your perspective. I've been to several CodeRetreats "outside". Sure being in prison this time was different, but I'm struck how similar the coding sessions were to any other CodeRetreat.

I wrote about my two coding sessions that day here:

Anonymous said...

Thanks, Mike: worth waiting for.