Red Squirrel Reflections
Dave Hoover explores the psychology of software development
I'm spending the week up in Vernon Hills in Java/TDD training at Object Mentor. Bob Martin's son is the instructor and I am the lone student. We're filling in a lot of the gaps in my Java knowledge.
Posted by Dave [Link]The Beginning
After an excellent meeting with Wyatt, I am beginning the preparation for my XP presentation in earnest. My initial idea was to give a concise overview of the XP process, with a more in-depth description of a few foundational practices that we could implement immediately: test-driven development, pair programming, refactoring, coding standards, and iterative development. But after meeting with Wyatt, I have a different direction.
It's all about providing business value. My goal for this presentation should be to convince my audience that I want to increase productivity, increase quality and reduce costs, and that I want that passionately. I need to show a high level description of how agile thinking informs the software development process with regard to iterative development and customer collaboration.
Only after I have driven home the business value will the how of it come to the surface: the practices.
It was an excellent meeting with Wyatt, I learned a lot. I look forward to our next one.
Posted by Dave [Link]16 Days
My boss at work came to me yesterday to encourage me to finish my project as soon as possible. Another project is launching and he wants me to be a part of it. It's a large e-commerce project using ATG Dynamo. The BDUF phase has begun, so I still have some time while the managers and architects spin their wheels. My goal is to finish the project within the next 16 business days, which is the number of business days I will work until December. I see a Saturday or two in my future.
I successfully convinced my boss to attend a Planning Game workshop at DePaul that Wyatt and Ron Jeffries will be putting on. Although it's too late to implement XP on the upcoming e-commerce project, this bodes well for future projects.
I've picked up The Secrets of Consulting again, starting where I left off in the middle. Weinberg makes a good point: most of the principles in the book are common sense, but it's triggering yourself to remember them at the critical moment that is key.
Another attempt to meet with Wyatt today...
Posted by Dave [Link]OO Power
I had an excellent morning. I finished Extreme Programming Installed on the train. It was an excellent book, and other than Extreme Programming Explained, my favorite XP book. Although it is not related to XP, my favorite quote from the book was...
"To become truly good at programming is a life's work, an ongoing enterprise of learning and practicing."
Yet another reassurance that my utterly compulsive desire to learn as much as I can about software development can be a good thing and not a curse (as it sometimes feels).
I got to work early. After cleaning up some tests, I did some refactoring to address a code smell that I had started smelling yesterday. There were two Struts ActionForm classes that were doing something very similar, and both had behaviors and properties that the other needed. I parentified the shared behavior into an abstract class and voila! I had the pleasure of chopping most of the code out of the child classes. I was able to use an interface to provide a way to pull up a method, making it more generic. It was a beautiful thing. I got chills.
When applied correctly, OO concepts are subtly powerful, and a lot of fun.
Posted by Dave [Link]Deadline
My boss at work is putting the pressure on to finish this project by the end of next month. With a week off for training next week, and a week off for Thanksgiving next month, it should be tough. He also wants to get two other developers involved, but I told him that would slow the project down. I'm going in early today, and probably will continue to do so until the project is finished. Better to get there early than to stay late.
Posted by Dave [Link]Progress
We're making progress at work, and it feels good to say the word we. My lone teammate (the other one is out this week) had seemed quite frustrated with her speed up until today's big push forward. This morning we were finally able to pull down our Vector of HashMaps from an EJB and use nested logic:iterate tags in Struts to display the data. We celebrated with snacks in the cafeteria.
Since that point morale has been high, even when we hit some setbacks this afternoon. Fortunately, I was able to work out some of the kinks in EAServer (or at least my understanding of it) and get myself a bit more acquainted with the java.io.Serializable marker interface and we're both looking forward to tomorrow's work.
In classic emergent design style, we ended up ditching the HashMaps in favor of some custom JavaBeans, giving us more control over the presentation in our JSP's. I'm finally up to my neck in a full-fledged Java project and loving every moment.
Posted by Dave [Link]Test Dependency
The development cycle at work feels slow, but the Cactus Unit Tests are building up and my confidence in the code is growing. It's amazing how quickly I have grown dependant on running the Cactus tests on a regular basis to give me that reassurance. And when it comes time to implement the next feature, I now head for the tests first. Focusing on getting that next test passing also helps me to keep the coding cycles short, usually just a few minutes, which also keeps me focused on doing the simplest thing that will possibly work. I feel good habits starting to form.
It's the same with the Ruby Refactoring project with Roman. RubyUnit has become our driver as we continue the devlelopment of our Railroad classes at Giordano's.
Still trying to find a time that Wyatt and I can get together...
Posted by Dave [Link]Frenzy
Lots of things going on. Trying to get more familiar with JBoss on my PowerBook, creating my first Entity Bean from PostgreSQL, while reading Enterprise JavaBeans. Working hard to stay disciplined in the J2EE project at work, Cactus continues to be an excellent TDD resource. Hopefully meeting with Wyatt tomorrow night about the XP presentation at work. Trying to get the J2EE project underway with the logistics company. Need to keep reading Extreme Programming Installed, start Java Tools for Extreme Programming, and, of course, continue with Secrets of Consulting along with a new purchase: The Pragmatic Programmer. Wyatt is encouraging me to talk my boss at work into coming to an XP workshop at DePaul next month. Roman and I are meeting twice a week now and the Refactoring in Ruby project continues. The code is now available on SourceForge.
Whew! Back to work...
Posted by Dave [Link]A Project Launches
Yesterday we began programming in earnest the J2EE project at work. To help us all start on the same page, three of us programmed together for the entire day. Would that be called tri-programming, or just team programming? I haven't pair programmed for an entire day in a while. It was exhausting, but we made excellent progress. All of us experienced the Test-Driven Development cycle using Cactus. By working together, I was also able to implicitly introduce them to Simple Design. Next I want to introduce Refactoring.
So far the Enterprise JavaBeans book has been excellent.
Posted by Dave [Link]Encouraging Meeting
The meeting with the developers for my project at work went well. I gave them an overview of Struts, using the small amount of work I have done to illustrate its features. People caught on quickly, apparently because of their previous experience with ATG Dynamo. Once I was sure the Struts info had sunk in, I introduced Cactus and the concept of Unit Testing. Because they hadn't Unit Tested before, this took a little more effort to explain, but again, the small examples I had already done provided a good start. Because of everyone's unfamiliarity with Struts and Cactus, I will be able to introduce Pair Programming covertly.
Now that I have the View and Control pieces in place, it's time to throw in the Model. I started reading the third edition of Enterprise JavaBeans yesterday. I am setting up JBoss on my PowerBook and learning about XDoclet.
Posted by Dave [Link]Hubris, Episode 1
I am so excited about a few things right now, I could barely sleep last night.
I got Cactus and Struts setup via CactusStrutsTestCase at work on EAServer and on my PowerBook on Tomcat. What an incredibly powerful combination for Java web development. On Monday I am giving an overview of Struts and Cactus to the development team for my project. I am also going to introduce them to Test-Driven Development and Pair Programming.
The prospect of writing a paper with Roman has captured my imagination, and hubris. Our brief collaboration on the wiki has been productive and I'm wondering if we should add another meeting per week. [ Warning: excessive hubris ahead ] I see this paper as just the beginning, and definitely not the topic I will focus on in the long run. It gives me a warm, fuzzy feeling to already have a niche to focus on: The Psychology of Agile Software Development.
Posted by Dave [Link]XP Evangelism, Preparation
To continue preparing for my XP presentation at work, I started Extreme Programming Installed. I've enjoyed the pieces on Customer/Programmer collaboration so far:
"When customers and programmers recognize that they depend on each other, the team can steer the project so that there's always the most business value implemented at any given moment."
Wyatt Sutherland and I are meeting in the next couple weeks to work on the presentation. I am very excited about that.
The learning continues...
Posted by Dave [Link]Struts, Ruby, Progress
I've been playing with Jakarta Struts for the last few days. I've got it running on my PowerBook (Tomcat) and my Windows NT box at work (Tomcat, EAServer). So far it looks like an excellent framework.
Roman liked the idea of writing up a "Refactoring in Ruby" paper for our Train module refactoring exercise. We have a wiki setup to collaborate. That could be a lot of fun.
Posted by Dave [Link]Refactoring my Refactoring
Today's lunchtime meeting with Roman provided more insight. My original refactoring went a bit too far by removing the exception raising behavior from the Train class and fully trusting the client class to not add Cars while the Train was moving. We looked in the Refactoring book and saw that the refactoring applied only to clients.
It was a good meeting. We are learning Ruby, experiencing pair programming, and improving our refactoring and pattern skills. It feels like the Train module will be a good starting point for us. We'll probably spend a few more meetings on it before we get into something a bit more serious.
It occured to me that the Train module might be a good framework to use for a Ruby refactoring article...
Posted by Dave [Link]Refactoring Train
I am studying Martin Fowler's Refactoring for the Chicago Agile Lunchtime Study Group. Roman and I are learning Ruby together and I have been playing with a little toy Train module. This morning as I was riding to work (on the train), I was playing with the Train module, using RubyUnit, and developing a sample client (UnionPacific.rb). I had the Refactoring book open next to me and was switching back and forth between coding and reading. As the train pulled into Chicago, I was pleased to have implemented a new refactoring: Replace Exception with Test.
Rather than have Train raise an exception when clients added Cars while the Train was moving, I pushed that responsibility onto the client. Clients can easily check the Train's speed through the speed method before they attempt to add Cars.
This shortened Train's addCar method to one line and kept the client code the same length. Through this simple example I caught a glimpse of how repeated microscopic refactorings can have a macroscopic effect.
Posted by Dave [Link]
[Archive Index] [Main Index]
Powered by Greymatter