Friday, March 30, 2007

Checking the Pulse

One thing I enjoy about Java conferences is that I can measure the pulse of the industry: what are the current best-practices, what's not in vogue, and the wonderful tech gossip.

Aside from the obvious (Digg, Slashdot, etc), I'm always looking for new sites. Here are some favorites:

1. Cafe Au Lait / Cafe Con Leche These sites are well-known, but I have to mention them. The "Daily Quote" is a great hook for a website, esp. since ER Harold is a master at picking provocative, eye-catching quotes.

2. Java Ranch This is an excellent Java community with useful, moderated forums and a panoply of resources for Java certification.

3. Java Posse A colleague turned me on to this site. Lately, I listen to the podcast while shaving and hopefully soon while driving. With its weekly podcast, these guys are on the edge. Oh, and they work for Sun, Google, and other bigtime outfits. (There is one podcast, #108, that is a "30-minute group hug"/conference review, so don't start with that one.)

Additions are highly encouraged!

Sunday, March 25, 2007

Word to the Wise #3

I once knew a build-master on an IT project. He was a lot like a bartender: a quiet, older gent whose role was removed from the day-to-day chaos of the project. He didn't say much, but when he did, it was good stuff.

One day, he and I were talking about two senior developers on the team. Both had 30+ years of experience in comp sci, and yet one had a stellar reputation and strong output while the other, er, did not (high diplomacy here).

At one point in the conversation, the build-master looked me square in the eye and said, in his sage tone:

There is a difference between having 30 years of software experience and merely being in the industry for 30 years.

Indeed. Put another way, there is a difference between being active and being passive: may we all stay active and hone our skills...

Monday, March 19, 2007

NFJS Gateway Software Symposium

Background/Disclaimer: I have attended 5 NFJS's and received some nice schwag (a bomber jacket) this year for being a 5-timer. The first 4 years, I worked with a previous employer. This year, I attended while employed by an affiliate of a sponsor. Over 5 years, I have paid some of my own $ but for the most part I have been covered. My views are my solely mine (but you knew that).


I'm a fan of NFJS. In particular:

-- The speakers are irreverent, successful/talented, and sincere.

-- The sessions are relevant and may actually influence the industry. I'm not sure that Ruby would be as well-known if it weren't for Dave Thomas and Bruce Tate championing the cause.

-- There is a palpable energy from having 200+ geeks in such close contact. The enthusiasm and cross-pollenation of ideas is great.

There are downsides (but they are easily outweighed by the positives):

-- If you don't like to develop software, this may not be for you.

Take this test:
(a) "XYZ in 21 Days" are the best software books
(b) quick, Dave Thomas: software guru or fastfood founder?
(c) XML is a "mature rating" for video games

if you didn't smile at any of the questions, then you might not enjoy NFJS (or this blog).

-- If you expect a session on "agile development" to fix the political dysfunction of your workplace: nope.

-- Some sessions are a letdown. Sometimes, a speaker won't float your boat. Sometimes, the agenda is hijacked by inconsiderate attendees with inane questions. But this doesn't happen often.

The upshot: if your company will foot the bill, it is a no-brainer, IMHO. If not, it is a personal decision but I sincerely believe it is a good value.

The vibe from 2007

Against the other 4 years, the '07 edition was very good. The material was excellent and most of the speakers were "on". The primary themes this year:

-- The JVM may well be the platform of the future for more than just Java: Groovy and JRuby are great examples of technology leveraging Java and the JVM.

-- There are still plenty of web frameworks, each with their pros and cons. For garnering interest, Grails, Ruby on Rails, and the Google Web Toolkit are rock-stars.

-- Agile practices are catching on but a lot of shops have a long way to go (judging from the questions and anecdotes).

-- Mac OS X remains a favorite among the Geek Elite who make the big bucks.

The Keynote

Scott Davis, by his own admission, had big shoes to fill: the legendary Dave Thomas had given delightful keynotes for the past 4 years. But Scott brought the heat with a talk on choosing the right web-framework. Though a gross simplification, his thesis was essentially "analyze your situation versus the options"; he weaved in a strong metaphor to cellphones, and had a ton of eclectic references to interesting books, many of which you know but, like me, didn't get to yet. My guess is that, later that night, Border's thought it was a Christmas rush as 200+ geeks lined up to buy techie/pop-psychology books.

Scott's style is animated, unabashedly friendly, and sincere.

The talk was every bit as good as Dave T's.

The Sessions

This is pure opinion, but I was drawn to the sessions on Groovy, the Google Web Toolkit, some Agile warm-n-fuzzy stuff, and anything by Ted Neward and Stuart Halloway (in this case, "Debugging/Monitoring", "Using Rules Engines/JESS", and "Java Concurrency"). Many of my thoughts are in separate blog entries below.

One disappointment was a session on "Forgotten Web Algorithms". I was looking forward to it for weeks. It could have been a lot of fun, but seemed to be a quick gallop through slides as we tried to ensure that the speaker could catch a plane.

Some of the agile sessions weren't as fun as I would like, but often those warm-n-fuzzy sessions are like live music: it just depends on the day, and the audience.

The Speakers

My top 3 on the national tour are Scott Davis, Stuart Halloway, and Ted Neward. These are guys I want to chill with and just talk geek or philosophy.

Lots on Scott Davis above... I also like Stu Halloway. This guy is Energy Lite: all the enthusiasm, without the hyper aftertaste. He's animated, very bright, and runs a tight ship: his talks are very polished and yet don't feel rushed.

If NFJS is Narnia, then Ted Neward is Aslan with attitude. He's a big feline, literally pacing back and forth in front of the crowd, just waiting to growl about a former client site, a large vendor, or: your dumb question. But under the thunder, he's a softie. He doesn't always stay true to the material, but sometimes his extracurricular riffing is the best stuff. In fact, most of the speakers will share these little gems about any given technology that has me furiously scribbling it down.

Like a true rock-band tour, NFJS seems to pick up local talent for a given show. We had local speakers Mark Volkmann and Jeff Brown. Thankfully, I'm in a locale/position to see them throughout the year: check it out.

The Upshot

I enjoyed NFJS 2007: I have new ideas for my client site, new ideas about software (see below), and new material for jokes (stay tuned).

There will be no special schwag next year, and yet I'll very likely be back for year 6. It's good stuff.

Sunday, March 18, 2007

NFJS Day 3 : Grab-bag

(This weekend, I am attending NFJS here in StL. I'll post a full review later. For now, here are some random ideas from various sessions.)


1. Both the Java compiler (with respect to optimization) and the Java garbage-collector is smarter than you and I. We need to accept this and stop trying to outsmart them.

2. A great idea for monitoring an app in production: configure a log4j telnet appender along with the usual file appender. If nothing is connected to the telnet appender, then the overhead is zero. However, one can telnet to the remote app and watch log messages appear as they happen.

3. There is an argument that, with Groovy and JRuby, Java will become the assembler of our time. That is, most people will stay in the "Dynamic Language Layer" (how's that for giving a hated TLA a new lease on life?) and only systems/hardcore types will tweak Java.

3(b). With the Google Web Toolkit, the same argument might be applied: perhaps Javascript will become the assember of the browser platform??

4. One presenter commented that Groovy raises the application velocity of him and his team. (He is on a project with 100K lines of Groovy so this is not blowing smoke.) In my limited experience, Groovy also lowers the application inertia: I'm much more likely to write something if I have Groovy than just Java. (I find this to be true for all dynamic languages, but especially for Groovy once my client's classpath is extracted from the complicated Ant build.)

Saturday, March 17, 2007

NFJS Day 2 : Grab-bag

(This weekend, I am attending NFJS here in StL. I'll post a full review later. For now, here are some random ideas from various sessions.)


1. At NFJS, there are some amazing demos (hello Google Web Toolkit!), but I tend to remember good speakers, interactive sessions, and ideas (often from other attendees).

2. Watching someone do live hacking/demos is like watching 2 people make out. Sometimes I want to yell "get a room!" and go find my own computer.

3. On teams, individual drive leads to peer pressure, which leads to team culture, which leads to team chemistry. It all starts with you and me.

4. I attended a session on Seam, a framework by Gavin King which unifies Hibernate and JSF. It uses annotations so heavily that it is definitely "meta-programming": it is a 1980s programming language in its own right. An example:

// this is Java!
@Entity @Name("Employee")
@Table(name = "employees")
public class Employee {
@In @Out
private Address address;
private Supervisor supervisor;
// ...
@Id @NotNull @Length(min = 5, max = 10)
public String getName( return name; }

public void beginWebWizard() {

NFJS Day 1 : Teams and Software

(This weekend, I am attending NFJS here in StL. I'll post a full review later. For now, here are some random ideas from various sessions.)

Teams and Developing Software

1. In my experience, the best teams have a passionate domain expert: someone who truly cares about the customer base and the functionality of the product. This passion is often contagious and permeates the team -- the quality of the code, the tests, the doc, and so on is always better when the team has spirit.

2. Another factor that increases team spirit is individual responsibility. Rather than simply ordering a developer to implement a spec, if you give them a sense of ownership and responsibility (e.g. by requesting their design input), magic happens: s/he will be engaged, empowered, and happier. And will do much better work.

3. Having code reviews (or pairing) is important, but so too is calling on different people to review. This is because different reviewers have different flavours: over time, you will gain a broader perspective. If the team chemistry is right, it can be fun to role-play. e.g. "Now, you know if I were Kevin, then I would ask you about unit-tests... how many have you written?"

NFJS Day 1 : Groovy

(This weekend, I am attending the No Fluff Just Stuff 2007 Java conference. I'll post a full review later. For now, here are some random ideas from various sessions.)


1. No matter how often someone says "Groovy compiles to bytecode and runs in the JVM", the light may not come on until you actually use some of your projects' objects in a Groovy script. Then you will yell "ohhhh.... Groovy runs in the JVM!".

2. There are 2 levels of resistance when learning a new scripting language. The first is often new syntax. I don't mind this one at all; it's refreshing (though it is not an issue with Groovy). The second is project organization: how do you organize code in large projects? how do you package it? etc. This is where Groovy truly shines: just use the Java conventions and tools.

3. One of the most compelling things I saw was an Ant task which allows one to write pure Groovy. This effectively allows one to slip the surly bonds of XML as a declarative programming language! Rejoice!

Wednesday, March 14, 2007

Word to the Wise #2

With the 2007 edition soon to open, I've been reflecting on past NFJS conferences.

Here's a tidbit from Dave Thomas: ask yourself, frequently, the goal of your current activities. Something like "what is my objective?" and "is this advancing me towards said objective?".

He mentioned it briefly in a NFJS session. I didn't think much of it at first, but have tried it and it is indeed useful. Just today, in fact, I was staring slack-jawed at a "file copy" dialog that stated it was going to take 30 minutes. In the past, I probably would have gone for a walk/chat or something. Today, I just shut the thing down as it wasn't worth it.

Sunday, March 11, 2007

NFJS.... Java Junkies: Unite!

I'm looking forward to next weekend's No Fluff Just Stuff conference. For the uninitiated, it is a Java conference with the unique characteristic of hitting the road "on tour", and coming to a town near you. The speakers are often big names in the industry, and yet the tour has local speakers on the bill as well.

This will be my 5th year. I enjoy it because the sessions are generally excellent and relevant, and the style is very irreverent and down-to-earth.

My favorite speakers include Ted Neward, Stuart Halloway, and Dave Thomas, who has given the keynote speech for years now.

This year I'm looking forward to hearing Scott Davis, presenter and keynote. He's an excellent, animated speaker: he gave a cool presentation to the StL Java SIG awhile back.

The best part though, is the energy that emanates from such a high concentration of geeks! I swear, after one of these conferences, you just want to hole up for a month and play with new tools/ideas.

Stay tuned next weekend... I may blog each evening with highlights and insights.

Wednesday, March 7, 2007

Why Learn Those Scripting Languages?

All viable computer languages represent a Turing machine, so they are all the same, right? So, if I am comfortable with Java, that's all I need.


Wrong. Much like spoken languages, some computer languages can communicate ideas more easily than others. Learning a weird new language does more than "add a new tool to your toolbox": it can add a new idea to your mind. Learning Ruby/Lisp/Groovy/APL not only makes you a better developer in that language, it makes you a better developer in every language you know.

And now we turn it over to Joel...

Without understanding functional programming, you can't invent MapReduce, the algorithm that makes Google so massively scalable.

@ Can your programming language do... this?

Saturday, March 3, 2007

At the Corner of Project and Refactor

I thought I knew Eclipse, the popular Java IDE, pretty well -- until I recently attended a training class.

I now realize that IDEs, especially those with plugins, are so large and sophisticated that they are veritable cities on our desktops. Some comparisons:

Options. For a given interest (e.g. books, musical instruments, Thai restaurants), large cities provide a million outlets. You might think that you know your city pretty well, but invariably when 2 people find a common interest, they share cool places.

Hey, you like Thai right -- have you been to Thai Kitchen, over near the....
In the class, I discovered the same is true for IDEs. There are a million shortcuts, plugins, and time-savers. We think we know them all, but we don't. I learned this week that when 2 Java geeks start to talk IDEs:
A: Hey, do you know how to change the syntax colour for a compiler warning?

B: Sure, just go down to Preferences at the Corner of Project and Refactor.
Tip #1: Whether it be a class, a Java SIG, or a news group -- talk about your IDE with other people! Find your "peeps" and learn. You'll be amazed.

Eyes Wide Shut.
All too often we go about our daily lives and never look at anything. We don't see. I took a community college class in world religions, where the prof rattled off dozens of churches, temples, monasteries, etc. I was stunned at how many of them were on popular streets in St Louis. I had passed them many times but never paid attention.

It is the same way with Eclipse. There are so many buttons and menus that we tend to focus on the ones we know. And yet there might be a great, useful button on that toolbar that is just waiting to be found... Just like that outstanding Sushi bar downtown.

Tip #2: Take time to explore your IDE. Treat it like a city and take a tour. Wander off the beaten path of your daily routine.

ps. Here's a couple of Eclipse tips, on me... (a) Use Ctl-Shft-L in any perspective to get a list of shortcuts for that perspective (b) Ctl-Shft-T is a fast way to open a class and see its hierarchy