Wednesday, May 31, 2006

Is it all coming back to Smalltalk and Lisp?

Read Glenn Vanderberg's excellent article from "No Fluff, Just Stuff Anthology" now. He makes a strong case for Smalltalk, Lisp, Ruby and dynamic languages in general. The revolution is coming. Are you ready? Go get your squeak on!

Pair Programming: Is All The Time Too Much?

I work in an eXtreme Programming shop and we pair on ever single line of code. But, too much pairing can be bad. Some pairing partners, while excited initially to try something new, grow complacent after the honeymoon wears off. It's hard to keep them engaged. Pairing all the time stifles creativity because developers are simply uncomfortable taking risks in front of others (we are mostly introverted). It creates a strange group think atmosphere where pairs do what is comfortable and familiar. Few branch out and try new things. The ones that do, do it at home without the fear of failure in public. Sad but true.

Pairing on every single line of code is the path to broken windows. eXtreme programming enthusiasts scoff and grumble at this notion. Why? To ignore that developers are mainly introverts is fighting an uphill battle against human nature. The very thing that eXtreme enthusiasts claims that they embrace. Agility to me is about thinking to solve problems, not adding stifling processes or pithy mantras.

If pairing all the time is bad, is it alright to go back to our lonely cubes? NO! There is immense value in pair programming. In a good session, there's an unparalleled exchange of ideas and an unbeatable code review process. I find the good things happen if the pairing is not constant. Always pairing can be tiring mentally and physically. We all need time to recharge our batteries and reflect. Extended breaks can give us the spark of inspiration to solve that complex puzzle in our design that's been plaguing us.

The key is balance. Doing anything to the eXtreme risks team burn-out. Balance should really be the point of being agile. Take the advice of your mother. Everything in moderation is a good thing. Otherwise, you risk off going off the edge. Constant pairing erodes the benefits of it. Of course, the opposite is also true. The lonely coder can be a dangerous tumbleweed in your codebase.

My proposal is simple: Pair during design and creation of unit tests, not coding. This is where collaboration is a must and the most fun. A test-first approach helps a pair to design the domain language for business. It boils away all unnecessary abstractions and allows the pair to get to the heart of the problem. It becomes the design while providing the harness to verify its validity. Pairs challenge each other to write tests that express the business the most succintly.

Allow pairs to break apart to write the code that satisfies the tests that they write together. This allows personal time for reflection and to try out new ideas. It gives the much needed time to reflect and the exhilaration of collaboration. The pair should come back together after the code is complete and review what each other has done. A refactoring of each other's code is good at this point. Allowing the sharing of information without one pair becoming disenfranchised with a dominant other. Of course, if pairs feel the need to discuss issues as they come up in the code, they should. Remember, it's all about balance!

I have seen first hand the pitfalls of pairing too much. The code and design eventually suffer. Spaghetti ensues and no one wants to work on the brittle system. Quality slips and the team descends into finger pointing and negativity. Pairing only amplifies the problem because developers have no way to get away and heal their wounds. Everyone needs some time alone. But, we also need interaction to stay fully engaged. Everything to the eXtreme is bad. Balance is the order of the day. I will not offer any cute quotes or clever acronyms, just simple advice.

If you're thinking of trying out pairing or are just a burnt out XPer, try out my advice. It offers the best of both worlds. It's a meeting in the middle and is good to try out a new way of working together. You can have your cake and eat it too. Just don't eat only cake. You need your vegetables too.

Friday, May 26, 2006

Thursday, May 25, 2006

Rails Is Coming To Omaha

June 6. Be There. Matt Secoske will be giving the Rails presentation that will leave everyone breathless. If you live in Omaha, you do not want to miss this. The Ruby onslaught is coming. Grab the nearest closure and hold on for dear life! Extreme productivity might just run over you.

The location for the Omaha Dynamic Language User Group has changed for just this presentation. Attendance expected to me in the millions. Come early with your appetite for technological wonders.

See everyone there!

Eclipse Thesaurus Plug-In

I have a new version (1.01) of my Thesaurus Eclipse Plug-In. I basically had a bout of inspiration while I was researching SWT. It now has back and forward buttons. I added the ability to get more entries without scrolling down the page. There's quite a few bug fixes too.

The source is included. The model has been tightened up. I moved responsibilities to where they should have been in the front place. Hind sight is a wonderful thing. I'm still having fun with SWT and amazed that it does exactly what you tell it to. It's a nice framework to deal with. It all makes sense and looks wonderful!

Devil Horns

I have a confession. Metal did not originate the devil horns hand thingy. I have a second confession. I don't know who did. I have a third confession. The same hand gesture is used at P-Funk shows and has been like that for years. Ronnie James Dio is attributed as the originator in metal circles, but I think P-Funk has been using the symbol for years before him.

It's funny how similar early funk and metal truly are. Both are extensions to a group of people disenfranchised by the establishment. Funk in my book will always be a more organic, yet still loud form of rock'n'roll. Same thing with metal. It's just funny that two of my favorite forms of music use the same symbol to show respect.

I'm sorry I just had to post on this topic. I couldn't be quiet any longer. It's just not right for metal to take all of the glory and not acknowledge our alter egos in the funk world. I hope everyone understands. I got to go put on a "Motor Booty Affair" followed by "Holy Diver"! Funk and Metal on!

Back on Planet Statika

At work, I've been doing Java work again. It's weird going from Smalltalk to Java to Smalltalk and now back to Java. I've kept up to speed on my Java skills, so it's not like I'm starting from ground zero. We've been using Java5 and the generics are not as bad as I thought. They are actually quite handy to catch those pesky cast problems. But, they can get hairy if you don't have a proper object model.

Java is a different way of thought and there's advantages and disadvantages. The advantages are the sheer number of frameworks to pick from. It can be overwhelming. We decided to go with simply Hibernate/Tomcat/Axis for a simple SOAP web service. It's strange going back to a compile/wait cycle, but it's not bad. As for the disadvantages, it's a lot of configuration files with awful error messages if you happen to miss type your class name.

It's an interesting journey. I'm curious as to how Groovy makes the Java experience easier since it gives me my beloved "cheap" closures. It integrates tightly with Java (similiar syntax) and accepts the fact you are running on the JVM. Hopefully, I'll get a chance to try it out on a small piece.

Don't worry I still love Dynamica and will travel there in the evenings to dream. I will never give up my Smalltalk, Lisp, or Ruby, my brothers!

Monday, May 22, 2006


Just to a note to anyone that sees me being negative. Quickly remind me to:
Stop Complaining and take action. Return to positive form.

I've been trying to be a lot more positive these days. I was stressed at Smalltalk Solutions (not the conference, but other things in my life) and it showed. I took action when I came back and I've been in the best mood. My new mantra is to take action whenever something is making me unhappy and negative. Work toward eliminating the negative situation.

I quit smoking. I quit over-eating. I can quit being negative too.

Rock on!

Saturday, May 13, 2006

The Power of Blocks in DSLs

Charles Nutter has a great blog entry on a Bytecode DSL written in JRuby. If you look closely at the code, he's making great use of Ruby's blocks. It makes the code succint and powerful. Oh yeah, it's fun, too! The example could be done in any dynamic language with closures (Groovy for example).

I'm loving the examples of DSLs coming out of the Ruby community right now. They show off the expressive power of method_missing and blocks (or doesNotUnderstand: in Smalltalk). There's a lot of power in those two simple features that allow you to express higher level concepts easily.

Tuesday, May 09, 2006

My First Eclipse Plug-In

I got my first Eclipse plug-in working! I'm so excited! It works in Eclipse 3.1, Windows XP, and Java 1.5. I'm so proud of myself. It was a lot of fun to program. You might ask yourself, what is it? Well, it's a Thesaurus that accesses and reformats the output to make all words clickable. It still needs more work like keyboard shortcuts, the ability to click on a word in the editors, and back/forward buttons.

SWT was a complete pleasure. It's an elegant design and far better than Swing (I could write a book about all of the bad design decisions in it). So now, I have one of my favorite tools in Eclipse as well. ROCK! My next project is the ability to give presentations in Eclipse. I'm thinking Groovy might be the perfect vehicle.