Coding in the Clink 9 in the Can, Part II

If you’re warping directly in here, you should know that this story has a Part I.

When I got to the prison on CITC morning, I was determined to be the first one there, so that I could greet the other attenders as they arrived.  I arranged to get there just under an hour early.

But it was not to be.  Joel Helbling from Indiana and I arrived at the same time and walked in together.  (Turns out he hadn’t driven all the way from Muncie that morning; he’d driven in the night before and stayed at a hotel in Marion.)

After that, the only bump in the road as people were coming in was that Officer Evans behind the counter in the A building had no gate pass for us.  I had been told that the gate pass had been prepared and signed, so Officer Evans began searching for it.  It occurred to me to call my boss, Jo Dee Davis, and see if she knew anything about it.  As it happened, yes she did: she had it in her hand, she was having coffee in Marion, and would show up at the prison a good ten minutes before we went through security.  So…not really much of a bump in the road after all, except for Officer Evans who had to do some fruitless searching.

By 9:00, we had everybody we were expecting (we all knew Alyssa Diaz had decided to stay home and keep her flu to herself) except Sherief Gharraph, Guy Royse, and Wes Tarpley.  I gave the folks who were there a short briefing on what to expect through security and inside the prison, and then we filed through the metal detector, signed in (except for a shall-remain-nameless few of us who forgot), got an invisible-ink hand stamp, and received a visitor-badge envelope with a clip into which we slipped our driver’s licenses so that our picture was showing through a cut-out corner.

We waited for awhile in a back room for Sherief, Guy, and Wes, but then decided to go on in without them to get things started, and have them escorted in later when they arrived.  However, just as we made that decision they showed up, so we got to go on in with them.

One addition since the last CITC was a new crash gate just outside the A building in the back. Now, when the door is buzzed open and you walk out the back of the A building, you’re in a big chain-link cage with another locked door on the other end, which won’t be buzzed open until the door in the A building locks shut.  We filed quickly out into the cold so that we could get the building door shut, and the inner door was immediately opened for us so that we could hustle out of the cage, across the wind-swept gap, and into the warm main building.

I had an interesting moment inside Control 1, which is another crash gate in the main building, this one between the region where the administrative staff has offices and prisoner country.

We had a large group of people coming in–sixteen strong–and the security folks in the A building had sent us all in on the strength of my escort, since I have a contractor badge. However, contractors are small fry in the prison when it comes to escort duties. Usually we escort groups of two or three; larger groups are escorted by correctional officers or even white-shirted sergeants or lieutenants.

The officer in Control 1 wasn’t ready immediately to accept a contractor escort with fifteen charges, so he gave me a grim look and got on the phone with somebody.  It took about three or four minutes, during which I figured we’d be sent back out of the crash gate to wait until a CO could be spared to escort us; but eventually he was satisfied and sent us on into the prison.

After that, a long walk back to the Lifeline complex where CITC is held, several minutes doing another round of sign-ins, and we were–among friends.

Mark and the guys had everything set up, with a cramped circle of chairs in the front room (31 participants is the most we’ve ever had, by at least half a dozen), and pairing stations in two of the other rooms, each with an installation of the development tools we’d need, a sheaf of scratch paper, a pen, and a stapled-together copy of the Evercraft kata from George Walters’ github page, compiled by George Walters and Guy Royse.

I had a sack containing a number of decks of story cards I had made from the kata, so I engaged Dean Preston to put a stack next to each machine.  At the time, I didn’t know the stations also had printouts from George’s github page, so the pairs ended up with both a deck of cards and a printout, which would prove confusing.

One thing I notice about CITC in general is that when the outside folks first come in and sit down in the circle, there’s a fair amount of self-segregation going on: long stretches of outsiders, then long stretches of insiders, then more outsiders, and not much interfacing between the two groups.  Usually that changes as the day wears on, but CITC9 started out right down the traditional path in that respect.

Once we had everyone seated, I talked for quite awhile about the kata and methods for addressing it.  I was aware of the fact that we had three women in the group (Amber Conville, Chelsey Baker, and Margaret Pearce), and I remember from high school that Dungeons & Dragons (on which the kata is based) wasn’t particularly popular with girls, so I was trying to be clear about the nature of the kata to avoid confusion.

Uncle Bob reassured me, though.  He said, “Don’t worry, I used to play with girls all the time in high school.”  Somebody clarified: “You mean play Dungeons & Dragons with girls?”  Yes, he did; but we all had a nice laugh anyway.

Finally, we got down to introductions, which were done in a way I had never experienced before.

Each person, before he introduced himself, had to repeat the introductions of everyone before him in the sequence.  This helped cement the memory of those introductions not only in the person introducing himself but in everyone who heard those introductions so many times.  Moreover, an introduction consisted not just of one’s name, but also of an accompanying noun that was connected to the name in some way–perhaps by rhyming, or by starting with the same first letter.

It took a long time, but I have to admit that it worked.  It’s possible that, a day later, I may even still remember not only the names of the people in the circle and their chosen nouns, but also the order in which we all sat.  Let me see:

Dean with Green
Micah with Machine
Will with Washboard
Gareth with Grapes
Ezra with Everything
Brian with Bike
Ron with Radio
Matt with Map
Mark with Ark
Will with Willpower
Rick with Ridiculous [not a noun, but we let it slide]
Nick with Noodles
Jason with Java
Dusty with Data
Guy with Try/Catch Block
Jesse with Juice
Ovi with Olives
Chelsey with Challenge
Margaret with Memory
Amber with All the Shortcuts [reference to her well-known goddesshood with Eclipse]
Bob with Uncle
Jeff with Jams
Joel with Jalapeños
Tim with Tomatoes
George with Goal
Wes with Mess
Sherief with Leaf
Mike with Mistake [perhaps a comment on the wisdom of the introduction method]
Ron with Red
George with Gooey Cheese
Dave with Dragons
Dan with Plan

Well, I’m pretty sure I got everybody (there are 32 in that list because Matt “Map” Hutzler participated in the introductions but didn’t code with us), but I may have addled the order in a couple of places.  However, other participants who read this blog may well be able to correct those mistakes in the comments below, which is still a testament to the effectiveness of the method.  But it was after 10:00am by the time we finished, so perhaps it isn’t appropriate for all groups of 32 people.

But once we were duly introduced, the time came to pair up and get to work.  Since there were 31 people in the group, fifteen from the inside and sixteen from the outside, I was odd man out and took a facilitatory role.  I just wandered back and forth between the rooms and among the desks, looking for folks who, given the lack of Google in prison, might have questions about Java syntax or semantics.  Many of the inside folks were just starting into Java (one of them had programmed in nothing but line-number BASIC on a Commodore 64 before Tuesday of that week, when he joined the Java class), and many of the outside folks did not have Java as their first language.

I got a few simple questions, but mostly what I saw were pairs of developers hard at work on an interesting problem.  I was looking for body language telegraphing stress or discomfort, from all the outside folks but particularly from Chelsey and Margaret, since they were both A) women and B) new, but I didn’t see any.  Except for the women, and except for Uncle Bob, who will stand out in just about any crowd, it quickly became harder than I expected to distinguish the inside folks from the outside folks.

Since we were in a prison, and since I was largely responsible for the event, I spent a fair amount of time counting, just to make sure nobody had wandered off.  For several minutes during that first cycle, I became concerned because my counts weren’t coming out correctly.  Then I noticed–hopefully he won’t be offended–that I had been counting George Walters as a prisoner.  Once I corrected for that, everything was fine.

As it turned out, there were some video folks there who were interested in getting footage for an upcoming documentary on Coding in the Clink (perhaps along with other similar programs at MCI) to be shown in the prison.  They wanted to record people pairing, they wanted to record our retrospectives, and they wanted to pull various people aside at intervals to interview them in front of a green screen.  I asked them to let the first retrospective go completely unmolested, since most of the people there had never been to a CITC before and needed the experience of a whole cycle for context; but then they were welcome to anyone who agreed to be interviewed, as long as they didn’t take too long.

The first cycle ended all too soon, and we congregated back in the cramped circle of chairs for a retrospective. There was a little more mixing between insiders and outsiders this time, but the three women remained jammed together in a clump.  The contribution I remember most from that retrospective was a deferred discussion of why try/catch blocks are bad–I’ll have to explain to the guys later that they’re not intrinsically bad, but if abused they can lead to some really pernicious problems–and a comment from Uncle Bob that it seemed that most of what we were testing was getters and setters, because of the way the kata started.  He hoped that we’d eventually arrive at a point where we could refactor the design to get rid of the getters and setters.

Presently, we picked new pair partners and sat down at new machines and continued with somebody else’s code.  The rule was that, even though what we encountered was probably not much like what we had started with, we would try not to rip out the existing code and replace it, but rather do our best to be faithful to the original design intent of the pair before us, so far as we could divine it.

I say “we”–really I mean “they,” because once again I was relegated to wandering in and out and around and around and facilitating.

While answering a question, I discovered that there were some pairing stations that didn’t have decks of story cards at them.  Huh, I thought.  I went and found Dean and interrupted him and asked him where the missing decks were.  There aren’t any, he replied.  He had put a deck at every computer until he ran out of decks, and just left the stapled-together kata printouts at the others.

Well that didn’t compute: I had had the print shop print more than enough decks of cards.  I had taken the number of outside attenders–17–and rounded up to 20, and planned to order that many decks of cards.  Then I thought, whoa, we’ll be pairing, we only need a deck for each pair, not each individual.  So I ordered ten decks instead.

But of course I was forgetting that each outside attender (almost) did represent a pair: there would be fifteen pairs, not seven and a half.  So I printed ten decks when I should have printed at least fifteen.

Oh well–nothing for it now but to improvise.  So we (they) improvised.  I was really glad Mark had printed out the kata.

Once again I was watching for tension and discomfort in the pairs, and this time (at least I believe I remember that it was the second cycle) I saw something.  Margaret Pearce was pairing with Dave Travis.  They were talking together about something on the screen, and it happened that they both reached to point at the screen at the same time.  Their hands might have inadvertently touched, but Dave snatched his quickly away to avoid any contact.  That’s reflex: prisoners can sustain non-trivial punishment for initiating physical contact with just about anybody (but especially women) if it’s judged to be in the wrong context, so in general they just don’t, by habit.

As I continued, I noticed that Amber Conville was perching on her chair, rather than sitting in it.  I thought to myself, “What posture would a woman assume if she was subconsciously expecting at any moment to have to use her feet to shove herself back from the desk, jump up, and run away?  Probably she would not curl them up under her and sit on them.”  Of course, being Amber in general and a CITC veteran in particular, she’s not a very random sample, but it was still gratifying to see.  Later I saw Chelsey Baker playing idly with her long hair, as though it were an old habit, as she paired with her partner.  While I don’t know her at all, it at least seemed good that she was able to relax enough to fall into an old habit.

During our next retrospective, we discovered that some folks had taken the “be faithful to the direction of your predecessors” rule a bit too far, in that bad code–and even incorrect or dead code–had been allowed to stand and even built on, in order to avoid damaging the Vision of the Predecessors.

One of the other retrospective questions was, “For the outside folks, how do you find what’s happening here today to be different from what you experience pairing with people on the job?” The answers were a little surprising.  I expected to hear, “No different, really, it’s pretty much just the same.”  But no: the answers we got all contrasted CITC positively with work.  I believe it was Mike Cornell who said that he found that the engagement was much higher: that nobody seemed to have a pair partner who was constantly running off to the break room or the bathroom or finding other excuses to get away.  Somebody else said that the relationship between pair partners tended to be nicer and more considerate in prison than out.

After the retrospective was another cycle; toward the end of this cycle we definitely began to smell lunch, which worked out to be delivery pizza (fifteen of them, I believe) and soda–Mountain Dew, Coke, and Diet Coke in 2L bottles.  As soon as the cycle ended, I led an expedition to the bathroom (you’re not allowed to go to the bathroom individually, and even a group has to be escorted by somebody with escort authority), so when we got back almost everybody already had their food.

There was a lot of standing around and talking and not much sitting in the circle at first, but we gravitated eventually toward the circle, and I noticed that while Margaret and Chelsey (who were both CITC rookies this time) were still sitting right next to each other, Amber had broken off and was sitting on the other side of the circle with a prisoner on each side of her.  Outside of the women, we were beginning to get some fairly significant mixing.  Joel Helbling commented to me that instead of sitting with their group (insiders or outsiders) it seemed to him that people were mostly sitting with their pair partners from the previous cycle.

I noticed that the circle seemed less crowded than before, so I did a quick count and came up with some folks missing.  After a couple of questions, I found out that the Martins had been spirited away across the hall to be interviewed in front of the green screen.

Once they came back, we launched into our next cycle, and managed to get two in after lunch before the Martins had to leave at 3:00 to catch their plane.  They each got a T-shirt with a CITC9 logo on it, and they were shown a music video that Mark Roberts had made to a Katy Perry song.

For our next-to-last cycle, George Walters did something very nice for me and offered to facilitate, so that I could actually pair with somebody and get some coding done.  That was a lot of fun, although most of what we did was refactoring of tests to make them clearer–for example, if somebody wanted to prove that a Strength modifier of +1 was enough to make them able to hit even with an attack roll one less than an opponent’s armor class, by writing code like this:

attacker.setAbilityScore (Strength, 12);
attacker.attack (defender, 9)
assertEquals (4, defender.getHitPoints ());

we would refactor the code into something like this:

attacker.setAbilityScore (Strength, scoreThatProducesModifierOf (+1));
attacker.attack (defender, defender.getArmorClass () – 1);
assertDefenderHasBeenInjuredBy (defender, 1);

We didn’t get any progress made in the kata, but it was still fun.

For our last cycle, traditionally we go back to our original Cycle 1 pair partners, and our original Cycle 1 machine, and see what CITC has made of the code we wrote at the beginning.  For CITC9, though, Uncle Bob and Micah were gone, so Nick Cochran and George Gonzalez had no pair partners to return to.  Instead, I tripled with them on a handy machine and we at least had some fun for the final forty minutes.

During our final retrospective, we talked about–among other things–how things could be made better next time for CITC10.  The major thing we hit on was that when everybody constantly moved from machine to machine, pairs spent too much of a cycle figuring out what their predecessors had been doing.  So next time, we’ll have–say–the insiders stay at a machine between Cycle 1 and Cycle 2, and then have the outsiders stay at a machine between Cycle 2 and Cycle 3, and then the insiders between 3 and 4, and so on.  That way we’ll still be able to switch pair partners and work on other people’s code, but there will be some maintained context to speed up the acquisition of situational awareness.

Another thing that came up was a question for insiders: “How has your experience here at CITC today been different from your normal experiences pairing with other prisoners?” The answer was interesting: it seemed fairly uncontroversial among the prisoners that their pairing sessions with us were altogether nicer and more pleasant than the sessions where they pair with each other.

Part of this is due to the fact that software development in the prison is understood as something important that you sacrifice for, that you spend lots of time on, that you work very hard for, that you don’t get to do unless you’re dead serious and passionate about it, and that it’s a program you’re in to learn as much as you can as fast as you can before you’re released, rather than to have a good time and be all sunshine and butterflies.

However, Chelsey Baker and Amber Conville (who are coworkers) talked about one of their team rules, which is “Don’t Be A Jerk” and is posted on a big banner in their team room. According to them, pair partners who are less than nice are immediately called on it and shamed, and the practice produces a much more pleasant working environment.

It’ll be interesting to see whether that practice gets adopted in the prison. I can’t see it being introduced as a touchy-feely “be excellent to each other” measure, but I can imagine a philosophy like this: “Look, this is supposed to be difficult. It’s prison. If you don’t like it, that’s not my problem. But just because you’re having a bad day doesn’t mean that you get to take it out on the guy next to you, and if we catch you doing that you won’t last long.”  There’s already a perceptible “The Few, the Proud, the @gile fact || <E>” esprit de corps about the program; a “we don’t just pair, we pair well” slogan would go right along with the current “we don’t just write code, we write good code” spirit.  We’ll see.

After we spent some time saying our goodbyes, we went out in the hall for a group photo.   I don’t know whether the censors will allow that group photo out of the prison.  They did for CITC1 (for which we had not yet come up with the name “Coding in the Clink”); if they do for CITC9 I’ll update this post and add it.

Signing out and leaving was fairly uneventful, except that we discovered a few people who had not signed in in the A building.  The reason that’s important, of course, is that if there should be some sort of disturbance or riot or hostage situation while you’re in the prison, you definitely want the administration to know that you went in and that you haven’t come out yet. But once you are out, the fact that you didn’t sign in has approximately the same significance as the fact that you didn’t wear your seat belt does as you pull safely into your destination.

Since we had spent more time in the prison than I expected us to, and more time than we ever had before during a CITC event, I figured the attendance at the traditional Bob Evans retrospective would be light.  But as it happened, the Michigan contingent (Amber, Jeff, Chelsey, and Margaret) and the Indiana contingent (Joel) both came and participated, and the only ones that had more pressing business turned out to be the Martins and Tim Butterworth.

It was a good day.  I’m glad we did it.  Hopefully we can do it again in a few months, and the guys inside will be even better pair partners.

Coding in the Clink 9 in the Can, Part I

Well, CITC9 has in a number of ways been unlike any CITC that preceded it.

First, I was approached by Robert C. “Uncle Bob” Martin, of Agile Manifesto and Clean Code fame, about when our next Coding in the Clink and PrizCon events would be.  His schedule didn’t work with PrizCon 2014, but it did work out for CITC9.  He said he wanted to come see what we were doing.  (This didn’t come out of nowhere: the guys inside had already invited him to PrizCon 2013, although as it turned out he couldn’t make it then.)

Less than a month later, it was pretty definitely established that he and his son Micah were going to fly from Chicago IL to Marion OH in Micah’s Piper Archer (low-wing single-engine four-place light plane).

This presented a problem, of course.  How were we to conduct a serious CITC if it became known that Uncle Bob Martin was going to be there?  The place would  be swamped–not with people hoping to pair with prisoners, but with people hoping to pair with the Martins.  That’s not the way CITC is set up.  Outsiders pair with insiders; that’s just the way it is.

So I decided to keep Uncle Bob a secret until we had all the tickets “sold” on the EventBrite site.

This time, we had fifteen prisoners on the roster for CITC, so we needed fifteen outside developers to go in.  I figured I’d add two extra tickets, because we’ve never had too many folks from outside before and I figured probably at least two would cancel at the last minute.  So: seventeen tickets for CITC9.  Or rather, fifteen tickets available on the site, with two secret tickets already “sold” to the Martins.

I was a little surprised at how fast we sold out anyway.  There have been times when we’ve been able to scare up so few outside developers that we’ve had to have all triples instead of pairs: two insiders and one outsider.

But these were the folks who signed up to go.  (They may blog this event, the way I’m doing now. If they do, and I find out about it, I’ll make their names here links to their blog posts.)

  • Chelsey Baker *
  • Tim Butterworth *
  • Amber Conville
  • Michael Cornell
  • Jesse Cox
  • Alyssa Diaz
  • Sherief Gharraph
  • Joel Helbling
  • Jeff Kelley * 
  • Micah Martin
  • Robert Martin
  • Margaret Pearce *
  • Guy Royse
  • Ovi Sofariu
  • Wesley Tarpley
  • George Walters
  • Dan Wiebe

The names in blue are CITC veterans who have been to a number of events.  The name in red is a second-timer who had been to one CITC before.  And the names in orange are brand-new: as far as I knew, these people had never been deeper inside any prison than the visiting room before, and more than likely not even that far.  Names with stars are people I had never heard of before and whom I didn’t solicit, whose names just suddenly showed up on tickets.

As it turned out, three of those starred names–Chelsea, Jeff, and Margaret–were people who were invited by Amber to ride with her down from Michigan.  Tim was invited by Eric Wilson, a CITC veteran who couldn’t make it himself but thought it was worth recommending to one of his coworkers.  So…I invited Amber and Eric, and they invited Chelsea, Tim, Jeff, and Margaret. That makes me feel like some strange kind of a grandfather, or something.  (I’m the regular kind of a grandfather as well, so I know how to recognize the feeling.)

All was well as the day slowly approached, but all began to get a little more dramatic as the arrival became more imminent.

First, the federales decided to apply a federal law to the state of Ohio, which might have the consequence of making it illegal for one of the outside developers, who had himself in the past been a guest of the Governor (so to speak), to go back into prison with us.  Nobody knew for sure how the law was to be interpreted, but outlawing him was certainly one possible interpretation.

Second, Wes, who didn’t have a car, needed a ride to the prison and back, and lived in a part of town that was not geometrically convenient to anyone else who was coming.

Third, Alyssa got the flu and began to wonder whether she’d make it.

Fourth, Guy brought an acute ear infection back from CodeMash.

Fifth, the weather for the weekend of CITC9 began to look uncooperative.  Micah is a VFR pilot, which means that it’s illegal (and unwise and unsafe) for him to fly in clouds, and it was looking like there was a snowstorm shaping up to hit right around the night before (Friday) or the morning of.  The Martins might have to fly commercial instead of private.

And whether they came commercial or private, they’d need transportation, preferably from somebody coming to CITC anyway.  But Port Columbus is some forty miles south of Marion Municipal Airport, so whoever picked them up would need to be flexible.

But things began to work out.

First, the federal law was determined not to apply in this case, so there wasn’t a problem.

Second, Guy almost immediately volunteered to make the geometry work anyway and go get Wes on CITC morning.

Third, Alyssa decided she was getting over the flu and would be able to make an appearance.

Fourth…well, that problem didn’t work out.  The ear infection kept raging.  What if it took Guy out of the game?  Who would go get Wes then?

Fifth, Jesse agreed to sync up with the Martins and make sure they were transported wherever they needed to be transported.

The problems were fewer, but they hadn’t completely disappeared.  Time kept grinding on.

Third, Alyssa decided at the last moment that she wasn’t feeling well enough and didn’t want to infect anybody in a place where as many folks live as closely together as they do in a prison.

Fourth, Ovi agreed to pick Wes up for Guy if Guy’s ear infection kept him out.

Fifth, the Martins decided to take a commercial flight in on Friday night (the weather was horrible, with lots of wind and snow and overcast), and rent a car and drive to Marion to find a hotel rather than make Jesse pick them up, drive them all the way north to Marion, and drive back home again in the blowing snow.

The only fly in this ointment was that the Martins would need to leave the Clink early to be able to catch their return flight back to Chicago.

As things finally worked out, though, Guy defeated the ear infection long enough to bring Wes and come to CITC, Alyssa (hopefully) got enough rest to defeat her flu, and we managed to get the Martins out when they needed to leave, having them miss only one cycle of coding.

Saturday morning was pretty and still, and clear under a high (maybe 8000ft) overcast, and Micah was a little disappointed that he hadn’t waited out the storm in Chicago and flown himself and his father in early Saturday morning, but as it turned out we were beset by another storm as soon as we left the Clink, so his decision was for the best.

I’m fairly sure the leadup to this CITC has been the most dramatic ever, but hopefully we’ve learned some things that will be useful the next time a charter signatory of the Agile Manifesto decides to come.

Here’s Part II.

Want to Do a Favor for Mark?

Those of you who know Mark from Coding in the Clink–the small, wiry guy who is amazingly quick in the head and who creates great computer animations–will be interested in this: after serving 20 years of a 15-to-life sentence, he’s coming up for parole for the second time in December 2013.

That means that the Ohio Parole Board, as it makes its decision on whether to parole him or whether to give him another five years in prison, will be looking for letters from people who know him better than they do.

Nobody from Coding in the Clink knows Mark well enough to be able to tell the Parole Board whether he’s a good person or not, whether he’s truly remorseful for his crime, whether he should be released, or anything like that.  However, most of you know him well enough to say that if he’s evaluated to be a good person, if he’s evaluated to have been properly rehabilitated, if he turns out to be a good risk for release, then he has the skills to be employable on the outside as a software developer.  That does-he-have-marketable-skills question is an important one to the folks on the Parole Board, and if you’re of a mind to answer it in the affirmative, you could be a big help to Mark with comparatively little effort.

If you’re like me, though, you’ve never written a letter to the Parole Board and the concept is a little intimidating.  What should the letter look like, to whom should it be sent, and what are the consequences?

Here’s an entry on Yahoo Voices that explains the concepts and gives a generic example.  Here’s a forum thread explaining how somebody wrote an actual letter to the Ohio Parole Board.

Unfortunately, you can’t wait until December to send the letter.  There are various preparations that have to be made before the hearing, so if you decide to do this, the letter needs to be in the hands of the Parole Board before mid-November if it’s to have any effect on this upcoming hearing.

Of course, some folks who’ve never been part of Coding in the Clink really don’t understand what we do or why we do it, and I can imagine that some of those people might be of a mind to actively sabotage Mark’s quest for parole if they knew enough about him to write a letter of their own.  Therefore, I’ll withhold specifics like his last name, his DOC number, and the exact address where the letter should be sent from this blog post.  If you’re of a mind to write a letter for him, send me email at dnwiebe@gmail_com (replace the underscore with a dot), and if I remember you from Coding in the Clink I’ll send you back the specifics.  (If you’ve paired with him at CITC and you have something bad to say about him to the Parole Board, that’s fine with me, as long as you actually have some experience with him. I’m just trying to filter out the folks who just generally believe without experience that all prisoners are scum and should rot in a cage.)

PrizCon 2013 Comes Further Into Focus

I was talking to the JavaGuys last night, and they’re planning to split PrizCon 2013 into two tracks: one heavily software-oriented track, and one oriented toward what they call digital arts–that is, computers as applied to things like music, video, 2D and 3D modeling and animation, and so on.

Right now, it looks like the presenters on the digital-arts side of things will be mostly prisoners, and the presenters on the software side of things will be mostly outsiders.

We’ve got three ideas hammered out pretty well on the software side.

One of the things we definitely want to put together is a panel discussion with three or more people about How I Came To Agile.  I get the idea that this is intended to be an interactive version of what in church they call “testimonies.”  What were you like before?  How did Agile change that?  What are you like now?

Another thing we want to concentrate on this time is Perlis languages–specifically, Perlis languages for Java programmers.

Alan Perlis was one of the inventors of ALGOL and the originator of a number of pithy quotes about programming, the most relevant of which, in this context, is: “A language that doesn’t affect the way you think about programming, is not worth knowing.” A Perlis language, for you, is one that makes you look at software development in a different way.  So…for a Java programmer, the DEC PDP-8 instruction set would be a Perlis language; J would be a Perlis language; C could be, depending on how it was presented; but C# would not be.

So we’re looking for a series of presentations about far-from-Java programming languages that are intended not to teach people how to write in them, but to demonstrate new ways of thinking about software.  So far we’ve got Nilanjan Raychaudhuri presenting Scala, and it looks like I might get stuck with Clojure if we can’t find anybody better.  Bob Allen has pointed up a PDP-8 emulator that we could use if folks really really want to see a presentation on that instruction set.

I don’t know how long these talks will be, but a good starting estimate would be “short.”

The third thing they want to know about is mobile development, with primary emphasis on Android and secondary emphasis on iOS.  My guess is that the mobile talks that were really hot two years ago, appropriately updated, would be similarly hot now at PrizCon.  Mobile devices are fascinating to the guys inside because in general they don’t get to come anywhere near them.  Things with cell radios are in general unwelcome in prison; it’ll be interesting to see if and how we can get some tablets or cell phones in there for the conference presentations.

Speaking of getting things into the prison, my thoughts at the moment are that we probably won’t get permission to take in a dozen or so laptops.  Instead, I’m going to see if I can get permission to take in USB flash drives.  As a presenter, you’d put all the stuff you need on a thumb drive–including Eclipse, Grails, Sublime Text, whatever–and plug it into the communal laptop when it was time for you to present.  I’m pretty sure we can make Windows 7 and Ubuntu 12 available; MacOS might be an issue if we can’t put it in a VirtualBox VM.

Again, if you’d like to present, get in touch with me at @dnwiebe on Twitter or dn_wiebe@gmail.com (without the underscore) and let’s talk.  If you don’t, I’ll probably get in touch with you.

PrizCon 2013: Possibly the World’s Second One-Day Tech Conference in Prison

In 2010, a bunch of us both inside and outside got together and put on a technical conference inside the prison at Marion Correctional Institution in Marion, OH. You can read about it here.

It was a positive experience on the whole, but things did not go as planned, either on the inside or on the outside.  Many of our eagerly-anticipated outside speakers turned out not to be able to make it, and miscommunications in the prison led to a much smaller turnout than expected.

So Mark Roberts, perhaps the hardest-working prisoner I have ever met, has decided that we’re going to do it again and again until we get it right, or something like that.  Here’s what he had to say to me:

We are actively moving forward with planning for the Tech Conference. SuAnne [supervisor --Dan] is contacting The Columbus College of Art and Design to see if there is any interest. We have tentatively scheduled January 19th 2013 [this has changed, see below --Dan] in the chapel. You will have to tell me to “Slow Your Roll,” in your best gangsta voice, if you want me to slow this down. Strike while the iron is hot, but not in a rush.

So at the moment I guess we’re looking for outside presenters who would be willing to come in and give presentations on something tech.  The word is that we’re going to be concentrating harder on IT this year than we did in 2010, but a presentation on, say, how digital synthesizers or hard disks work would be welcome, as would something about the various obstacles confronting the union of tech employers and tech employees who are ex-felons and how to surmount them, or why computer programming will be obsolete in ten years.

It looks like I’ll be doing a presentation on test-driven development, and I’m being pushed pretty hard to do one on Arduino as well, although I’m not sure how easy it’s going to be to get a bunch of discrete electrical components into the prison.

The handy thing about presenting at a conference in prison is that you have a captive audience, and chances are good that anything you do is better than anything they’ve ever seen before, so the acceptance bar is pretty low.  Of course, you won’t get paid in money; but you’ll get some practice making presentations, which is never a bad thing, you’ll get some renown in the community, you’ll get to make completely outrageous statements with a straight face (“Joel Helbling?  Oh, yes, I know him well–I met him in prison!”) and back them up, and you may very well end up having significantly more fun than you’d expect.

Remember Sandra Bullock in The Net?  Remember Hugh Jackman in Swordfish?  Remember how true-to-life and faithful to the real-world experience of the software developer those movies were?  Well, prison movies are just about as accurate as they were.  Talk to veterans of Coding in the Clink for corroboration.

So if this sounds like something you’d like to take a swing at, contact me and let me know, and we’ll start putting a definite shape on this thing.  Once it has a definite shape, we’ll be able to be more specific about what we’re going to do.

The best way to get hold of me is as @dnwiebe on Twitter.  You can also try dn_wiebe@gmail.com without the underscore.

I hope to hear from you!

Update 10/17/2012: We decided last night that January 26th will be the day–two weeks after CodeMash.

Back Inside for Code

A friend of mine named Jesse Cox was one of the outside developers on Coding in the Clink VI.  I pestered him to blog about his experience.  He was willing, but something went haywire with his WordPress account and he was unable to post his experience.  So he sent it to me, and I’m publishing it here verbatim. —Dan Wiebe

Wow, what an adventure!  One I will not readily forget  .  I just happen to get the last ticket and I am glad I did.

To start with I have to explain that I have a different perspective from the other developers that had come to this very special event.  How so you might ask.  Well it doesn’t seem that long ago that I was on the other side of the fence looking out.  Yes, years back I was an inmate at that very same prison.  While the other developers were wondering what it was going to be like working with inmates, I was stressing out what it was going to be like working with other developers.  I would be working with names like “Dan Wiebe” and “DJ Daugherty”, both well-respected in their fields.  Even though I was just meeting some names that I had not heard of before, I’m sure that they are well-practiced as developers.  I am an amateur developer hobnobbing with ones who do it all day long.  I had no clue how I would add up.  On top of that, I’ve never been to a retreat before!  Even though I gleamed that this was only sorta like a retreat.  So now let’s start the adventure.

I met Dan Wiebe in the visiting room.  He introduced me to DJ Daugherty.  Nice guy (trying for brownie points).  The first thing I noticed that they were flesh and bone like me.  Go figure!  So feeling a little more at ease, I got to meet the rest of the group and then we headed into the prison…our destination, Life Line.  This is where the computers are kept for the prison population to learn specific programs (i.e. Microsoft Office, Photoshop).  It is also where Dan instructs TTD using java with the inmates.

To start the day out, Dan had us all rate where we felt our ability was using java.  Being well versed in C++ and only able in java, I rated myself around a 3.5 or 4.  I figured it was better to rate under than over and end up with egg on my face.  After hearing others also give themselves a lower rating, I felt pretty good.  But as I was basking in the warm rays of this pseudo-knowledge, that I was as good as the others if not better, Dan totally burst my bubble by saying he didn’t know why some where lying about their rating.  It was at that point I realized Dan was not the only one in the room that was quite adept at java.  Damn!

The project was an African game called Mancala.  We sat there and learned how it was played and what the rules were.  Dan and an inmate even played one game and Dan won, but I just know he cheated somehow (I got my eyes on you Dan!).  We agreed on 45 minutes for each iterate and 15 minutes retrospect afterwards.

In the first iterate, I was paired with Mark Roberts.  I have known him since the nineties and have even program with him before (i.e. video game).  So it was like old times sitting with him and working on the Mancala.  To start with we created a “Side” class.  Then we created a “Board” class that would create two instances of Side objects.  We figured that anything that happened to one side would be identical to what would happen on the other.  We would allow the Board object keep track of what side was up.  This is about as far as we got before time ran out.

The second iterate I paired up with Louis Pierce, who I also knew from my past stay at hotel MCI.  so now I’m pairing with someone new and sitting down at a different station where someone else started writing code.  Here is where I screwed up.  I was so stuck on my own vision as to how the problem should be addressed that I refused to submit to the code already written.  As an example, in the first iteration we used hash maps to keep track of the pits (7 per side).  The code I was looking at was using linked list…can you image that, what were they thinking! (yes I know linked list might have been a more eloquent way of handling it, but I was not going to succumb to someone Else’s evil code).  So like a jerk I removed the linked list, and had to figure out a way to make the code pass the tests without them.  So needless to say we didn’t progress the code before time ran out (if it was needless to say what did I say it anyhow? Huh).

During the retrospect, I guess I wasn’t the only one who tried to bend the code base they found to their own will.  It didn’t make me feel any better, but misery likes company.  Dan requested that we not do that and instead try to figure out the vision that the previously developer had and try to follow suit.

So now I paired up with Gene Lynn (I remembered him from another prison, where he was this math wizard.  Every time someone would say “Go figure” He would).  Taking the time out to study the code base and trying to follow suit did go better.  We were actually able to progress the problem and reach some objectives.  We even left the code testing green!

Lunch!  It was cold cuts and some chips.  They had coffee for us all day long, and lord knows I love my coffee!

The fourth iterate I was paired with was Darrin Pordash.  He had only been at learning java for 8 months, but I think he did well.  Again spent time to see the vision of the previously coders, and follow it.  What I liked about Darrin was that he listened very intently when I would explain why I did what I did and how it worked.

I own someone an apology, because I don’t remember who I paired up with during the fifth iterate (but I’m sure he was great).

The sixth iterate we paired up with the person we originally paired with in the first iterate.  We got to sit at the original station and see what our started code had turned out to be.  Well it definitely altered our vision, but yet it still had some enduring qualities.  What I had noticed though was that I had wrote a IfMoveIsACapture method, and someone commented it out.  I don’t know why someone would do that!? It passed all tests and was marvelously done .  Why, why why!? What kind of sick person would do that to me!?  I’ve had a lot of sleepless nights because of it.  Actually, after what I’ve done to some of the other developer’s code, I guess this was my comeuppance.

So now in summary, it was a great day.  It felt good to spend a day in a world of developers, and yes I mean both inmates and outsiders.  I remember when I was doing time it was next to impossible to find someone who even know what a IDE was yet alone be able to talk to someone about a coding problem.  Mark Roberts had some kind of understanding, which is why we hit it off when I was inside.  Now I see a group of guys that are learning java and a few that could give any outsiders a run for their money (Nice instructing Dan).

We went to Bob Evans afterwards, and I remember DJ saying “After awhile, I simply forgot I was in prison.”  My remark, given my different perspective, was to this “I’m sure the guys inside forgot for a while that they were in prison also.”

Coding in the Clink VI is over!

Coding in the Clink V was quite some time ago.  We had a fairly long hiatus this time first because CITC6 should have happened right around Christmas, but it was tough to find folks who could make it then, and second because there was kind of an administration shakeup that affected the JavaGuys.

But we got that all taken care of and held CITC6 yesterday.

For the first time, I “sold” more tickets on Eventbrite (they’re free) than there were prisoners available to attend, because in the past there have almost always been a few dropouts.  It worked out perfectly.  Nine prisoners were available; I “sold” 11 tickets.  Three outside developers and one prisoner dropped out, so we had eight on each side.

Actually, one of the prisoners was delayed getting to the event and wasn’t able to participate in the first round, so another prisoner tripled with two outside developers, both of whom just happened to be female.

I’ll bet he enjoyed that.

Speaking of female developers, we had three this time, which is more than we’ve ever had in the past.  Amber Conville is a regular, but we attracted Gabbie Gibson and Kelsey Shannahan this time too.  Angela Harms was planning to show up too, but she and her husband Tracy had to drop out at the last moment because of a family emergency.

Here is the list of outside attendees; click the links to read their own blogs about CITC6.

From the inside, we had

  • Steve Crotts
  • Lee Leonard
  • Gene Lynn
  • Louis Pierce
  • Darrin Pordash
  • Mark Roberts
  • Ron Tracy
  • David Travis

(Sorry, I won’t be able to link directly to any of their blogs.)

Up until now, each of the CITC events has been very close to Corey Haines’ Code Retreat concept, with a couple of minor modifications—namely, we’ve always used Java exclusively, we’ve usually used problems other than Conway’s Game of Life, and, as Jeff pointed out, our culinary options in prison are somewhat more limited than they are outside.

But after each CITC, and especially after CITC5, there has been a growing desire among the prisoners to try a CITC where we don’t throw the code away at the end of each cycle, but leave it for the next pair to work on.  Continually coming up with new approaches to the problem is not bad, but extending somebody else’s solution is a lot closer to what these fellows are going to encounter in the real world of work.

(Of course, the reason you go to a real Corey Haines-style Code Retreat is not to simulate the real world as closely as possible, but to escape from it as far as possible.  That’s why it’s called a Retreat.)

So we tried it to see what it would be like, provisionally, with the understanding that if after the second cycle we hated it, we’d go back to starting over each cycle.

I figured we needed a problem a little bigger than Conway if we were going to spend several cycles on it, so I chose a form of the African children’s game of Mancala.  (You can play it here if you like, except that our game started with three markers in each pit instead of four.)  The specific problem was to accept a representation of a Mancala board at some mid-game point, and the specification of a move to be made, and determine what the Mancala board would look like after the move had been made.  (Since I didn’t know how far we’d get on the problem, I also wanted to know whether that move ended the game and, if not, which player had the next move.)

It turns out that Mancala is an excellent problem for emergent design, because you can start out with an extremely simple concept, but exceptions are continually creeping in and causing you to refactor your design, so that you have to keep it lightweight and bouncy or else you’ll either A) spend all your time providing for the exception-ridden future and never get any real work done, or B) find yourself with no way that you can possibly hack the next exception into the horrible mess you’re working on in a 45-minute cycle.

For example:

  • The board is just a circular buffer of pits—except that two of them (the mancalas) are special.
  • A move is just a dead-simple sowing process—except when you turn a corner onto the other side.
  • Turning a corner onto the other side isn’t that complicated—except when you turn the corner back onto your side and have to skip the opponent’s mancala.
  • Remembering the last pit of a move is easy—except that the fact that you don’t sow stones in the opponent’s mancala can screw it up.
  • Determining the next player to move is easy—except that a bonus move lets the same player move again.

In fact, I may lobby to see if I can get the guys to agree to using Mancala for CITC7 as well.  (Especially, come to think of it, since I have a voice commitment for CITC7 from a real African, Frank Gbenah of Pillar Technology.)

We agreed to the following rules: Pick a different pair partner for every cycle but the last.  Every cycle, pick a computer that neither of you worked on during the immediately previous cycle (but going back to a machine you were on cycle before last or earlier is okay).  For the final cycle, return to the pair partner and the machine you had for the first cycle, just to see what happened to the design you started.  (This last rule cropped up out of nowhere just before the last cycle, but I thought it proved to be a good idea.)

So for the first cycle, I paired with Louis Pierce, and convinced him to try to come up with a functional approach to the problem: you know, an immutable Board class, composed of immutable Sections—two of them, one for each player—consisting of six immutable Pits and an immutable Mancala.  The top-level function would take a Board, a player number, and a pit number, and would return a MoveResult object containing a new Board, a flag saying whether the game was over, and the number of the next player to move.

We weren’t really FP wizards, though, and Java isn’t a particularly functional language, so we managed to get something with only some mutable state started.  (If I remember, the Board was immutable, and you couldn’t get at the Sections to mutate them once they were in the Board, but you created the Sections empty and mutated them until they had the numbers of stones you wanted where you wanted them, then created a Board from them.)  But it wasn’t that bad, because from the outside you couldn’t see the mutable state.

Right?

Our story test drove us to write a Mancala class with two static methods: startGame(), which returned an initialized Board (three stones in each pit), and move(board, player, pit), which returned a MoveResult.

Then came the all-important second cycle.  This was the first one where we would encounter somebody else’s code.  Would we decide to keep the code again for the third cycle, or would we recoil in horror and decide to throw it out?

I might be misremembering, but I think my second cycle was paired with Steve Crotts on a codebase where the authors had decided to represent the board as a 14-element List<Integer>, where elements 7 and 14 were treated specially, and it appeared that you were supposed to be able to address pits like “Player 2, pit 10,000″ and have that translated into the index of the list element Player 2 would encounter if he started with his first pit and went around and around the board for 9,999 pits.

Interesting.

Unfortunately, a 14-element list doesn’t have any element 14 to treat specially, so we had to figure out how the tests could possibly be passing for code like that (it wound up looking an awful lot like the test had been substantially copied from the code, so both had the same defect), and the code to translate virtual pit 10,000 to real pit whatever was fiendishly complicated and broken.

So we spent the entire cycle writing tests to expose the problems and fixing them, and so didn’t get any actual additional functionality added that cycle.  Even at the end of the cycle, we hadn’t addressed the skip-your-opponent’s-mancala issue.

The cycle retrospective was interesting.  If I remember correctly, there was only one positive remark about the code encountered: DJ Daugherty said he’d been really impressed by the code left behind by Mark Roberts and Jesse Cox.  Everybody else seemed to have spent the cycle improving the code they found.  Only one pair admitted to completely horsing the encountered design around to something they found more palatable.  However, perhaps because everybody thought they had been able to make things better, there were no objections to continuing to extend existing code, so we decided to keep the code for the third cycle as well.

And so it went, through a total of six cycles.  That means everybody had five pair partners, because the first and last were the same.  Let’s see if I can remember mine: Louis Pierce, Steve Crotts, Darrin Pordash, Ron Tracy, and David Travis.  Yup.

We discovered that the code quality, in all our opinions, was nearly monotonically increasing over the whole day from the second cycle to the sixth.  (Of course, almost everybody thought the code they encountered on the second cycle was worse than the code they wrote on the first cycle, probably because it looked nothing like the solution they’d had in mind.)  This flies in the face of the accepted maxim that the quality of a piece of code is inversely proportional to the number of hands that have touched it.

At the beginning of one cycle, we encountered a badly-broken suite of tests and a comment:  “GOOD LUCK :) We were in the middle of refactoring all this into the Game class when time ran out.”  I was disheartened; but then I was surprised to discover how easy it was for us to figure out what the previous pair had been doing and complete it.  I wish I had saved that code to look at later: I’m pretty sure that if I were interrupted in the middle of a sizable refactoring myself, my successor wouldn’t have nearly as easy a time as that figuring out what had been in my head, and a cheerful smiley comment wouldn’t have helped.

For the last cycle, I rejoined Louis and we went back to the partially-functional code we’d started, hoping that somebody had been able to rescue it.

Well, no, not so much, as it happened.  It was now completely imperative from top to bottom.  The Mancala class was still there, and it still had the startGame() method in it, but the move() method was now on Board, where all the state was now mutable, and Mancala had been filled with a bunch of static utility methods.  The StoryTest class had a number of unit tests in it.

The moral of this story, I guess, is that if you want code to be functional, you’d better dang well make it functional, because nobody else is going to.

That last cycle both Louis and I were really beginning to fade after a day of hard programming, so we didn’t get much done except mostly implementing the capture move.  We wrote a test for the implementation, and then wrote the implementation using a getOpposingPit() method that didn’t exist.  We didn’t have time to drive out the getOpposingPit() method before the end of the cycle, but other than that, our suspicion was that the problem was pretty much complete.

Consensus after the last cycle was that everybody had great fun, and it was definitely something that everybody wanted to do again.  Given that there were five brand-new outside developers this time, and at least two more brand-new folks who said they’d really like to be on 7, we might have the first real race for tickets on CITC7.  We’ll see.

Afterwards, Ravi had to head home for a family celebration, but the rest of us ended up at Bob Evans in Marion, where we closed out the day with a lot of good discussion, good food, and good service from Jess the waitress.

It’s a terrific experience, and one I’d highly recommend to any developer in the greater central Ohio area (Amber and Jeff come down from Michigan, even).  As DJ Daugherty said, “After awhile, I simply forgot I was in prison.”

Follow

Get every new post delivered to your Inbox.