The second part in my recent interview series: "The Heroes of Java".
Charles Oliver Nutter
...has been programming most of his life, as a Java developer for the past decade and as a JRuby developer for over four years. He co-leads the JRuby project, an effort to bring Ruby and the power of the JVM together. Charles efforts on JRuby will ensure the JVM remains the preferred managed runtime for many years to come. He's giving the HotSpot Team a hard and good time.
Who are you?
I'm Charles Oliver Nutter, co-lead of JRuby and JVM enthusiast. I work every day to make JRuby the best JVM-based Ruby possible while pushing JVM folks and other language authors to keep improving the platform.
Your offical job title at your company?
"I think it's JRuby Architect. As far as the world is concerned, though, I'm one of the "JRuby guys"."
Do you care about it?
"Not really. I tell most people I'm just a "programmer"."
Do you speak foreign languages? Which ones?
"I studied Spanish in highschool, and can fumble my way through it. Studied Mandarin Chinese at university, but most of it has faded away now. I feel good that I at least made an effort to learn a foreign language, but living in the US it's very hard to maintain anything but English."
How long is your daily "bootstrap" process? (Coffee, news, email)
"Most days, I wake up and grab my laptop from beside the bed. I'm trying to improve that though, since I get grouchy when hungry and stressed if I don't tear myself away from work often enough."
You have a twitter handle? Why?
"Because I'm a shameless self-promoter. Your "personal brand" is as important as your career decisions and education, and I try to cultivate all three. I also have Twitter hooked up to Facebook (which I never use) so that non-tweeting friends and family can keep track of what I'm up to."
Whom are you following in general?
"I rarely pay attention to my followees' tweets anymore...there's too much traffic and too much noise. I have enough trouble keeping up with email, "JRuby" tweets, and twitter replies."
Do you have a personal "policy" for twitter?
"Not really. I share what I'm doing, what I believe, how I feel, and use Twitter to monitor people tweeting about JRuby and other facets of the Ruby world."
Does your company restricts or encourages you with your twitter usage?
"Most definitely encourages Twitter usage. Engine Yard is one of those rare companies that understands OSS funding is as much about giving back and maintaining thought leadership as it is about building useful tools. Maintaining a public presence is a big part of that. And luckily, JRuby is both good project and useful project, so we're not 100% overhead either."
What's your daily development setup? (OS/IDE/VC/other Tools)
"I spend most of my time in OS X, at command-line or using NetBeans for JRuby development. My choice of IDE is mostly arbitrary; I used Eclipse before joining Sun Microsystems, NetBeans since then, and frequently I find myself in the Redcar editor (JRuby-based clone of Textmate) more and more.
I use git for all source control, but I find mercurial works well too when I need to use it to interact with e.g. OpenJDK.
When debugging, I use NetBeans for both Java and Ruby debugging. I use VisualVM and other JVM-related tools for investigating performance."
Which is the tool providing most productivity to your work?
"Probably NetBeans. Say what you will about IDEs in general or NetBeans specifically...it has really become a slick environment for developing JVM-based apps and libraries.
Of course NetBeans, JRuby, and most other things I deal with on a daily basis are all possible because of the JVM, so perhaps that's the most important tool of all. I know I could migrate my development environment en masse to pretty much any platform and the whole thing would work exactly as it does on OS X."
Your prefered way of interacting with co-workers?
"I never thought I'd say this, but I really do like being in-person more than being remote. However, I think a mix of remote and in-person is better than 100% of either. The work I do frequently requires me to lock myself in a dark room with no interruptions; that's difficult to get in an office environment. The schedule flexibility afforded a remote worker is also of tremendous help when you just plain need to work on some problem for 12 hours straight. Some things can't be solved in a day's work and can't easily be split across days."
What's your favorite way of managing your todo's?
"I wish I had a better system. The only system in place right now is "hope people I've forgotten about will ping me again" and then try to finish up those tasks before more arrive. I receive hundreds of emails per day, and probably 50-100 end up in the "important" inbox. It's a no-win situation at present...I either need an assistant or I need to reduce how many hats I wear."
If you could make a wish for a job at your favorite company: What would that be?
"I'm pretty happy at Engine Yard, and have no plans to make a move. That said, I feel like the work I've done on JRuby could help other JVM languages, and I've always wanted to be in a role where I could continue "research" on JVM language challenges while also helping the JVM language community coordinate and improve. If all that ever comes out of my work is JRuby, I'll be disappointed (but not *too* disappointed)."
You're programming in Java? Why?
"Java is the best language for the work I'm doing. I define the work I'm doing as "bending the JVM to Ruby's whim's." I also freqently write in Ruby, and we have started transitioning more JRuby code from Java to Ruby recently."
What's least fun with Java?
"The amount of typing required to do pretty much everything. It could certainly be worse, though...it could be C/++."
If you could change one thing with Java, what would that be? "My two top features for the Java language would be closures and type inference. We should get the former in Java 8, but for the latter I will probably need a different language (like Mirah, my other language project)."
You might say that I want C# but with a Java sensibility (virtual-by-default, for example).
What's your personal favorite in dynamic languages?
"Ruby is my favorite dynamic langage. I also like Clojure from a design perspective, but I find the language itself (mostly the syntax) to be uglier than I would like."
Which programming technique has moved you forwards most and why?
"If I had to pick one I'd say "refactoring." Few problems I run into can't be solved by doing an in-place refactoring. That's one reason I use less Ruby than Java...all but the most trivial refactorings in Ruby are very difficult to do safely...or at least very difficult compared to pressing a button in a Java IDE."
What was the biggest project you've ever worked on?
"JRuby is the project I've put the most effort into...5 years full time now, and about a year part-time before that. Other than JRuby, the largest would be a migration of the Food and Nutrition Service's (division of the USDA) food stamp program from an old mainframe to a Java EE application. I oversaw three years of development on that project, and we managed to deliver it on time with nary a glitch. Something like 1M lines of code, not including generated code."
Which was the worst programming mistake you did?
"For a short time I was the lead developer of LiteStep (desktop replacement for Windows' "Explorer" environment), and helped orchestrate a large-scale refactoring and rewrite of its C codebase to be more modular and easier to extend. I made a good decision in pushing toward a set of pure-virtual C++ interfaces for key pluggable aspects, but I was wrong to try to go all the way to a COM-based solution with a team that barely understood C++ in the first place. Subsequent leads backed down that bad decision, but kept the overall structure...so I'm satisfied it worked out ok."