Lifeline Is Open Again!

For the past two or three months, the Lifeline complex inside the prison where all the computers are has been closed for remodeling–mostly having something to do with HVAC. Joel and Rob and I have been meeting our guys in classrooms and having mostly unstructured conversations with them.

This week, Lifeline was back open again, and we had to come up with something to do there.

I decided to toss Joel and Rob in at the deep end and pretty much abandoned them to their prisoners–Joel to the beginners and Rob to the intermediates–while I went in to help the advanced guys get Sprint Zero back up to where it was when the lab was torn down. (Apparently one of the fairly-important server machines didn’t come back up, so another machine had to be stood up to replace it.)

I should have brought in a fresh copy of the Project code, but it didn’t occur to me to do so, so we couldn’t accomplish much.

After standup, though, we spent most of the rest of the time talking about Saturday’s conference.

I was amazed to discover that on the inside, pretty much everything that could possibly have gone wrong had done so, just as on the outside over half of our presenters bailed out before the conference was held. Amazed, because even in the shadows of such insurmountable obstacles, the conference was a spectacular success.

To me, that’s the mark of the hand of God.

After the class was over, Joel and Rob and my wife and I went to Bob Evans for dinner/retrospective. Joel’s looking for a good way to address the great variety his students’ experience, and Rob is going to have to learn Tapestry and brush up on TDD.

One topic of conversation that came up was the interesting observation that, even with Joel and Rob being randomly self-selected from the folks who came in for Code Retreat 2, all three of us are Christians.

Christians are not exactly thick on the ground among the ranks of software developers, so we started looking for reasons for this other than random chance.

It led to an interesting discussion of the striking parallels that can be drawn between the Agile methodologies and religions. It’s an area I’ve explored before. Both Agile and Christianity, for example, stand under attack from polemicists who have all sorts of undisputable scientific evidence and reasoning proving that both of them are unredeemable bunk. None of the attacks are successful in proselytizing Agilists or Christians away from their faiths, because both Agilists and Christians have seen their lives changed for the better because of what they believe, and they know it works. Both camps could explain the theological reasons why the polemicists’ attacks fail, but no one would listen to either of them. Nobody is ever converted by arguing theology; folks are converted because they see their lives become better.

And so on and so forth. Daryl Kulak’s “Mechanical Agile” is simply the Agile equivalent of Christian Bible-thumping and proof-texting.

Strangely, though, when I start using religious language to speak of Agile, I start getting furtive throat-cutting gestures from folks with later admonishments that it isn’t the place for religion.

I’m not trying to convert anybody to Christianity; I’m only using Christianity for an example, because–being a Christian myself–it’s the major religion I understand the best.  But I guess the problem is that if I use Christianity and Bible references to explain Agile, only Christians will really get the point: and, as pointed out before, Christians are thin on the ground in the software development community.

It’s so apropos, though.  I wonder if perhaps people are afraid that if they do learn to think of Agile in terms of religion, and they see its tangible results, they may be forced by humble logic to revisit their certainty regarding the foolishness of religion?

At any rate, since Louis Pierce had to do the most work to get the conference to go, I’ve decided that I’m not going to even bring up the subject of the next conference until Louis broaches it himself.


PrizCon 2010: Possibly the World’s First One-Day Tech Conference in Prison

Today we had a technical conference in prison.

The conference, just like the code retreats, was originally Louis’s idea.  The guy is refreshingly intrepid.  Back in August or thereabouts, he apparently decided that the new industry tech resources that Code Retreats 1 and 2 had made available to MCI shouldn’t be wasted just on the JavaGuys, so he started us thinking about a one-day tech conference in prison entitled “Why Should I Learn a High-Tech Trade?” attended by 100-150 prisoners and presented by both inside and outside instructors.

So we started recruiting presenters.  Surprisingly, we found a lot of presenters willing to give a Saturday to present in prison.  Without much effort, we got presenters from six different organizations to commit to presentations: Pillar Technology, Lean Dog Software, Langr Software Solutions, Marion Correctional Institution, The Ohio State University, and the National Security Agency.

Given our relationship with Jeff Langr, the author of the book Agile Java that we’re using, it was pretty much instantaneously and unanimously agreed that we were going to ask him to fly in from Colorado Springs and keynote our conference.  I emailed him and asked him if he’d keynoted before; he said no.  So I asked him A) would he be interested in trying it, and B) if so, how much would he charge?  (We have that $1000 Chairman’s Award from Pillar, but no money other than that.)  He said yes, he’d be glad to keynote, and that he’d do it for nothing other than travel and expenses.

Putting together the prison end of things proved quite challenging.  This sort of thing doesn’t happen in prison very often–maybe at all–and people objected to everything from bringing in food for the attenders to closing the gym for a day.  But with the diligence and attention of Jo Dee Davis (of Win-Win, Inc.) and Louis Pierce (a guest of the Governor), those problems were surmounted, evaded, eliminated, or otherwise dealt with.

There were other challenges as well.  For example, we started out preparing for 100-150 prisoner attenders, but due to failures in promotion, many prisoners didn’t find out until too late exactly what was required to get a pass to the conference, so we ended up with something more like 60 attenders.  Also, more than half of the presenters that originally committed to participate in the conference chose to withdraw from it as it approached.

But we adjusted the schedule and managed to work stuff out anyway.

We held the conference in the prison gymnasium.  When I got there this morning, I was expecting to find a bunch of prisoners wandering around in a gymnasium; but that’s not what it looked like.  With some cardboard and paint, along with lots of chairs, little tables, and tablecloths, the prisoners managed to make up the gym to look very much like what you’d expect to see at a technical conference.  The touches were somewhat minimalist, but very effective: enough to radically change the whole feel of the place.

It worked out that there were ten of us from the outside this morning: seven presenters and three guests.  We meant to get through the A building at 8:00am, but there were about twenty visitors waiting to get through, and so they were sent ahead of us.  We got in by about 8:30am, which was when the keynote was supposed to begin, but we didn’t get started until about 8:45am.

Jeff Langr gave a talk about his history as a software developer, his bad experiences with MCI (the telephone company, not the prison), a “soul-sucking big corporation,” and a failed dot-com, and his enthusiasm for Agile development.  He left us with a heartfelt exhortation never to “settle (in).”

Then I got up and told the story of the JavaGuys again, preceded by my own story of how I got into Agile.  (Summary: kicking and screaming.)  I ended with an account of how unexpectedly popular the Java program at MCI is turning out to be in the outside world.

After that, Bob Myers was supposed to present “How to Get a Job From Any Employer,” but his 8-year-old daughter had gotten sick the night before, so he wasn’t able to attend.  During the keynote, though, Matt Van Vleet threw together a quick PowerPoint presentation covering Bob’s subject, and presented it in Bob’s place.  He did a great job, accompanied by some of the folks there whom he had either hired or contemplated hiring: Eric Wilson, Angela Harms, Tracy Harms, and Joel Helbling.

Interestingly, we were interrupted near the end of this talk by a correctional officer, who explained to us that two misplaced prisoner IDs had screwed up the 11:00am count, and so the prisoners had to be separated from the outside folks and gone over again, and then the whole count had to be reprocessed.

Lunch couldn’t be brought in until the count had cleared, so we had some time to socialize with the prisoners at the expense of having the afternoon sessions shortened somewhat–and, it turned out, the retrospective at the end eliminated.

Lunch was a submarine sandwich (ham, turkey, or ham and turkey), potato salad, two very nice chocolate-chunk cookies, and a bag of potato chips.

After lunch, we had two four-track sessions, for a total of eight presentations.  I don’t have a schedule with me, but as I remember they were:

  • How I Went from Zero to Professional Software Developer in 18 Months, by Eric Wilson of Pillar Technology
  • We Kicked Their Butts: A Case History of Agile Versus Waterfall, by Dan Wiebe of Pillar Technology
  • TDD: What It Is and Why It’s Important, by Jeff Langr of Langr Software Solutions
  • Some Really Cool Exercises That Will Make You Think in Ways You’ve Never Considered Before, by Matt Van Vleet of Pillar Technology
  • Why You Should Be a Computer Animator, by Mark Roberts of Marion Correctional Institution
  • How Digital Audio Production Has Changed the Music Industry, by Juan Martinez et al. of Marion Correctional Institution
  • Agile Means Community, and Community Means Success, by Joel Helbling of Lean Dog Software
  • Modern Communications Technology, by Dr. Patrick Flinn of the National Security Agency and Dr. Bill Davis of The Ohio State University

The only one of these talks I got to hear was Mark Roberts’ talk about computer animation. He gave an overview of what’s required for animation–quite a bit more than I expected–and then demonstrated creating a model of a gingerbread man, smoothing it, texturing it, lighting it, adding an armature consisting of several bones, and then bending the arms and the legs. He showed us how to record keyframes and have the computer interpolate between them to create an animation track, and he alluded to the time required for a render farm to render each frame of such an animation. It was very informative and fascinating, but unfortunately he ran over the time allotted and was interrupted shy of the end.

Afterwards, Jo Dee Davis arranged us all in a circle with the outside folks in the middle, and had several prisoners step forward and tell what they had learned that day.  The results were pretty heartening, I must say.

Getting out of the prison was much more straightforward than getting in (at least for us outsiders; probably the prisoners wouldn’t agree), and then five of us met at Bob Evans for a retrospective of sorts.  I was pleasantly surprised by Matt Van Vleet’s enthusiasm.  The experience had given him a number of interesting ideas, among which were the establishment of a halfway house that specializes in digithead ex-offenders and contains a team room where an Agile development team churns out high-quality, high-velocity software to support both the residents and the house.

All in all, everything worked quite well, even with the reduced complements of presenters and attenders.  Everybody seemed to assume that of course this is going to happen again next year.  My guess is that it’ll be even better.

PS – Because of Joel Helbling, it has come to my attention that far better name for this blog than “JavaGuys” would be “Prose and Cons.”


Tonight was interesting.

I’m not sure whether I’ve mentioned this in foregoing posts, but for the last two months or so, the Lifeline complex where all the computers are has been closed for remodeling; I guess they were putting in central air conditioning.  Therefore, instead of meeting in the computer room, we’ve been meeting in a classroom, without any computers (except mine, used mostly for presentations).

We’ve been heartily looking forward to the day when we could go back to meet in the Lifeline lab, and last week it was opined that the lab might be ready this week.

So when I got to the A building, I asked the duty officer whether Lifeline was open yet.

“Oh, sure,” he said.  “There’ve been folks back there all day.”  Cool, I thought; so when I called Control 2 to ask for the Java passes to be called, I asked the guy to call them to Lifeline.

When I got to Lifeline, though, I discovered that while the door was unlocked, and the lights were on, and there were people inside, it wasn’t really open.  None of the computers were set up, and the prisoners there were busy cleaning the place and hooking things back up.

The Lifeline duty officer was a little perplexed, since his cap sheet said that he’d have only nine prisoners in Lifeline, and they would be busy cleaning; now he had a contractor and between fifteen and twenty prisoners in there.  But he and I know each other slightly, and he was inclined to let it slide and hope nothing bad would come of it.

Now we have to go back in time a little.

Last week, the duty officer in the A building discovered that the gate pass allowing Joel and Rob in had turned up missing.  (I don’t need a gate pass, since I have a contractor’s badge, but they do, since so far they’re “mere” volunteers.)  We made several calls looking for it, but eventually the duty officer called the captain and persuaded him to allow Joel and Rob in. We were late, but they did finally get in.

This week, we were expecting that the missing gate pass would have been produced; but it was missing again.  I called the lady responsible for getting it set up, and she said she’d plain forgot: she answered the phone beside the bed of her daughter, who had just gotten out of surgery.

So the duty officer in the A building performed his magic again, and Joel and Rob were allowed to sign in.

However, since they’re volunteers, whenever they move in the prison they require an escort, who has to be a prison employee.  (Not me, in other words: I’m just a contractor.)  So the duty officer asked the captain to dispatch an officer to escort, and he agreed.  Joel and Rob went into the lobby of the main prison to wait for the escort, while I went on in.

Half an hour later, the JavaGuys suggested to me that since Joel and Rob had still not arrived, the captain might have forgotten about him, and I should call and remind him.

That was a little scary, but I did it, and a few minutes later somebody came to the door saying, “They’re here!  They’re here!”  Turns out they were out with the Lifeline duty officer, and he was up in arms.  Apparently it’s one thing to fudge the cap sheet a little bit to keep track of a contractor and a gaggle of prisoners, but when there are outside guest volunteers involved, it’s a whole different story.

So he made a call to the captain, and eventually kicked us all out back up to the classroom.

So we went, and that’s where we met Joel and Rob.

We had a great discussion about the upcoming conference and about a number of other things, but perhaps that’s fodder for a different post.

We began to understand what juggling balls feel; but it was still marvelous.

No Significant Threat After All, and an Argument

Turns out there isn’t a threat to the program after all.  Mark and Louis are in no real danger of being flopped by the parole board as a result of anything the force working against them can do to them.  It’s even fallen into doubt as to whether that force is actually working against them, or simply wounding their egos.  They have decided to stay rather than leave.  And if Mark and Louis aren’t threatened, the program isn’t either.

Tonight we started off with an interesting argument and finished with a list of definitions.

The argument was about testing only through the front door: that is, working under the self-assumed constraint that your tests must only ever call public methods of the class under test.  We examined both the pro position and the con positions:

Pro: No package-private production methods.  Tests call only public methods.  All non-public methods are private.  Class is a black box from the tests’ perspective.

Con: Maybe a few private methods, but mostly either public or package-private.  Tests have near-total access to the class under test.  Class is a white box from the tests’ perspective.

Arguments for the pro side were:

1. Tests may be more understandable because there’s less mocking involved and the class is being called through its public interface.

2. Changes to the implementation (but not interface) of a class don’t require test changes; also, since they don’t require test changes, the original intent of the class is clear and preserved.

Arguments for the con side were:

1. Tests for indivdual “private” methods are much shorter because they must contain significantly less setup code.

2. There will probably be fewer tests, because to test every code path through the front door means that if the code makes n independent binary decisions, you have to have at least 2^n tests to cover each possible path, while if you’re allowed to test private methods you can do it in 2n tests.

3. Spending extra time writing more numerous and more complex tests so that you can change the implementation more easily in the future qualifies as goldplating, because chances are best that you won’t need to change the implementation in the future.

4. If you do need to change the implementation in the future, you can write characterization tests then, before you change any code.

With some abstentions, the count at the end of the argument was Pros 4, Cons 3.5.

(Yes, yes, there were more than 3.5 cons there because it was a  blinkin’ prison. I get it.  Ha ha.  Shut up.)

I’m going to see if I can get that argument started on Pillar’s Socialcast site.

The list of definitions was of types of tests.  We listed integration tests, unit tests, system tests, functional tests, smoke tests, and various other forms, and discussed what each term meant.  Sometimes the meanings were different for different folks.

Great discussion.  Hope to do it again next week.

Soon, though, the Lifeline lab should be back open, and we’ll be able to actually sit at machines and code again.

Word of a Threat to the Program

Joel and I went in for our regular Tuesday-night session tonight (Rob can’t come back in until he goes through his security-training session day after tomorrow) and had a reasonably productive time with the guys, even though we couldn’t actually demonstrate any code because the available CO didn’t have a key to the place where they kept the projector.

But after the other guys in the class left, two of the three top students in the class stayed to talk to us in private.  These are the guys who are the driving force behind Sprint Zero of the Project.

They let us know that they’re trying to find a graceful way to quit–not just JavaGuys, but the entire Lifeline program that involves all sorts of computer-related training.


Because in prison, apparently, if you see somebody successfully bettering himself, especially if it takes effort or talent or skill you can’t or don’t want to apply, you resolve that situation by shooting him down.

These two guys are coming under increasing pressure because of their spectacular success in the program, and they’re afraid that if they continue, an incident of some sort will occur, they’ll be written up and sent to the Hole, and that in a few years when they come up next for parole, the Parole Board will see that ticket and flop them for four or five more years.

I love these two guys, and have been consistently amazed by their energy and inventiveness in overcoming the many obstacles that have stood in their way.  It would be a real shame to lose them; but if it were just them, I’d be forced to accept whatever decision they made.  Treating them as adults means that it’s not my job to fight their battles for them.

But this isn’t just about them.  If the forces that intimidate them succeed in making them leave the Project, a precedent will have been set.  When the next couple of pairs make it to the Project, the same forces will intimidate them as well–possibly also into leaving.

The whole point of the program–well, one of the whole points, anyway–is to give them professional-level experience on a Project that they can put on their resume.  If nobody can make it to the Project because he’s afraid he’ll get screwed, that severely cripples the program.

And it is my job to fight for the program.

So I gotta figure out what I’m gonna do.

Why Java?

Java’s a dying language, right?  Why not teach something more modern?  Even if you keep the JVM, there’s JRuby, Groovy, Scala, Clojure, and many others.  Outside the JVM, there’s C#, Ruby, Erlang, Haskell, all sorts of programming languages that A) are better than Java, and B) would teach the principles of programming in a much purer form.  Why not one of them?

First, if you’re talking about “principles of programming in a much purer form,” then get C# the heck off that list.  There is nothing at all pure about C#, especially in version 3.0 and later.  Scala either, for that matter.

But yes, Java is certainly the new COBOL.  Along every dimension by which programming languages can be measured, there are now other languages that soundly beat Java…except one.

I can say with confidence that Java’s going to be around, and Java jobs available, for another twenty years.  I can’t say that about any of those other languages.  When the JavaGuys are released from prison, they will (assuming they’re good enough) be able to get jobs writing code in Java.  If they then want to improve themselves by learning another, more lucrative language in their spare time, they can do that.

But if I teach them a really cool programming language that employers aren’t going to need when they get out of prison, then I’m no better than the college professors who are crippling their students by teaching them mainly C and C++, with historical perspectives on FORTRAN, Ada, and Lisp.  (All I can think is that C++ was the latest thing back when those professors got tenure, and now that nobody can fire them, they see no reason to take the trouble to learn even Java, much less anything “exotic.”  Cynical?  Perhaps; but then I’m a consultant who has to constantly work to keep myself marketable, lest I roll off an assignment and find nothing else waiting for me.  Tenure is a trap, sez I.)

Here’s the mission statement we came up with for the JavaGuys, in increasing order of importance:

3. Treat them like adults, not like children.  I assume they know better than anyone else what life decisions are best for them.  I give them advice where appropriate, but there’s never any “you must” or “you must not.”  (There is, of course, a waiting list of people to get into JavaGuys, and every seat in the class is vulnerable to somebody on that list who might fill it more productively than its current occupant.)

2. Set the course’s trajectory on a path that makes outside support as unimportant as possible.  I’m a consultant; my schedule is not dependable.  At any time I could be jerked away from them.  If I have to leave, I want the JavaGuys to endure under their own power–perhaps with guidance a little less accurate than before, but with undiminished horsepower or enthusiasm.

1. Teach only things that will definitely help in getting a job upon release.  Practice over theory–as a matter of fact, practice instead of theory except when theory is absolutely necessary to make practice understandable.  These guys probably won’t learn big-O notation, but they’ll understand that an algorithm is slower the more nested loops it has.  They won’t learn to write a mergesort, but they’ll learn how to write a Comparator-based anonymous inner class to do custom sorting with Java’s Collections.sort () method.

So…that’s why Java.

First MCI Code Retreat

The Pillar client where I was working had occasion to hire a number of developers.  Since we were particularly interested in smart Agile developers, we decided to hold a Code Retreat at the client site, and then troll through the participants we attracted to see if we could find any worth hiring.

The problem was that even though we advertised it far and wide, nobody but Pillar developers signed up for the Code Retreat–not even client developers.  Therefore, the decision was made to cancel the Retreat.

I told the JavaGuys about this the next time I went to see them, and one of them, Louis, said, “Well, do you think we could have a Code Retreat here in prison?”

It was an interesting idea: a day given over to pairing, preferably with the more experienced prisoners pairing with the less experienced prisoners.

I said sure, no problem: I thought that was a great idea.

“Can you come in to be with us during the Code Retreat?” Louis asked.  “We can’t be in the computer room without somebody from the outside to supervise us.”

“Only on the condition that I get to play too,” I said.  “If I can be part of the Code Retreat, then I’d love to be here with you guys all day.”

“And how many guests will you be bringing with you?” Louis asked innocently.

Guests?  Never occurred to me to bring guests.  But I was instantly captivated by the idea, because earlier I had had to deal with word that, as part of an argument between two of them, one of the JavaGuys had called me their “sensei.”  Allegorically, of course.  That frightened me.  I’m not a particularly accomplished software developer; I’m just a guy.  The thing that makes me a little different from the norm is not that I’m brilliant, but that I have no fear of prison or prisoners.  I didn’t want these fellows slavishly following my ideas simply because they were mine.  I had for some time been trying to get another developer to come in some Tuesday night and speak to them for purposes of cross-pollination anyway.

So I told Louis I’d see how many guests I could attract.

Two or three, maybe, I thought.

Boy, was I surprised.  Nine developers–all from Pillar–decided to participate in the Code Retreat.  A carload of them even came down from southeastern Michigan to participate.

From central Ohio, we had Rob Conaway, Tracy Harms, Ronak Patel, Nilanjan Raychaudhuri, and me.  From Michigan, we had Sean McMillan, Matt LaForest, Zachary Spencer, and Kevin Baribeau.  The Michigan guys apparently stayed at Matt Van Vleet’s house overnight so as not to incur hotel bills.

And guess how many JavaGuys we had in the class during the first Code Retreat?

That’s right: nine.  Almost enough to make a fellow believe in God.

Everything went amazingly well. Even the correctional officers seemed to be happy to have us.  The prisoners learned all sorts of stuff from the three professional developers each of them was paired with, and a couple of the outside folks were brand-new Pillar developers who weren’t really comfortable with pairing yet, so the prisoners were able to give them some experience with and instruction in that.

We decided that we definitely wanted to do this again.


Group Photo from the First Code Retreat

Group Photo from the First Code Retreat