The sixth part in my Java interview series: "The Heroes of Java".
Michael Hüttermann
is a developer and coach on Java/JEE, SCM/ALM, SDLC-Tooling and agile software development. A Java Champion, he is certified as SCJA, SCJP, SCJD and SCWCD, a member of the JCP and Agile Alliance, java.net JUGs Community Leader and founder of the Cologne Java User Group.
General part
Who are you?
I'm self-employed consultant on Java, Agile and build-, config-, deploy-,
requirements-, release-management, what I sum up with "ALM" (a bit simplified
here). In most of the projects I'm engaged as a developer, build/release
engineer, or coach. I also give seminars on these topics.
Your offical job title at your company?
I'm freelancer thus I implement all possible roles myself.
Do you care about it?
No. In projects though, it can be essential to define roles and shape
responsibilities. Many projects feel comfortable with driving an integrated
approach to roles, for example aligning the technical staff to be "the team",
coders and testers to be "developers" or developers and operation staff to
form "DevOps". This is a good approach to foster communication and improve
collaboration. Some situations require a more structured setting though.
Do you speak foreign languages? Which ones?
Besides English I speak Kölsch, although the latter is not foreign if you live
in Cologne. My lessons in French are too long ago unfortunately. I find it
crucial to learn and speak at least one foreign language: to express yourself in
other languages, and to keep busy with other countries and cultures, all that
helps you to develop yourself forward.
How long is your daily "bootstrap" process? (Coffee, news, email)
That depends on the situation. Reading the newspaper and having a coffee takes
some time, but actually, I don't have a "daily bootstrap process" in that sense.
Often I don’t read mails in the morning in order to focus on other activities
first, for example development. I try to find a smart and productive way to
start the day.
Twitter
You have a twitter handle? Why?
Yes, @huettermann. "Why" is a good question. Maybe the reason is that Twitter is
a convenient way to inform the world about something that it did not wait for or
already knows from other communication channels.
Whom are you following in general?
Basically, I follow people who add value to my Twitter timeline based on my
current interests and activities. I try to manage an individual value stream,
not a heavy loaded wave that I can only follow technically without following
the real content of its tweets. Thus maybe there are many people I should
follow, but in practice I don’t. Twitter can be a productivity killer if you
are watching a scrolling timeline all day long. It is so easy to just be “busy”
without focusing on effectivity and efficiency.
Do you have a personal "policy" for twitter?
General communication rules apply to Twitter too including "Don't tweet
something about others that you don't want them to tweet about you". Another
policy for me is "Don't bash other technologies or concepts" because that's
not constructive and is just boring. Regarding Twitter, in particular: "avoid
tweeting about your visible appearance in the early morning".
Does your company restricts or encourages you with your twitter ussage?
Nowadays it is more and more important to discuss with others and foster
knowledge transfer and knowledge sharing, on many different channels.
Work
What's your daily development setup? (OS/IDE/VC/other Tools)
The setup totally depends on the project context and individual requirements. I
like best-of-breed tools that allow to work in a productive way. You get a good
impression about what dev environment I personally prefer from having a look
into my recent book Agile ALM. There I cover version control systems like Subversion and Git, continuous
integration servers like Jenkins/Hudson, TeamCity, Bamboo, and many other handy
tools.
Which is the tool providing most productivity to your work?
Coffee.
Your prefered way of interacting with co-workers?
Face to face. I still believe in the value of direct and personal communication.
Other channels including mails and meetings are the more appropriate solution in
specific cases though. Many topics can be clarified asynchronously, thus a mail
is a good fit. Meetings should be avoided whenever possible. If a meeting is
really necessary, it should be well prepared including sending an agenda before
the meeting takes place. Otherwise, a meeting can result in just being “busy”
without focusing on concrete tasks and concrete results. By the way, just using
many different communication channels in parallel does not necessarily mean that
you work with your colleagues in a collaborative or somehow better way.
What's your favorite way of managing your todo's?
Personally I define goals for weeks, months and years. I assign priorities
and try to find out context parameters, restrictions, relations and so on. I
try to avoid adhoc activities, though there is a reserved slot for that too.
In projects, the favorite way of managing tasks depends on the situation and
the overall context: using a type of backlog is often an approriate solution.
Sometimes a WBS is most useful, sometimes a more heavy-weight project planning
vehicle.
If you could make a wish for a job at your favorite company: What would that be?
I'm already doing what I like most. No further room for improvement.
Java
You're programming in Java. Why?
Java is an all-purpose business language but also a platform and a set of APIs.
This makes up a great ecosystem and a great, mature infrastructure. The language
Java is powerful and innovative, and thanks to Oracle, it's developed further in
an attractive way.
What's least fun with Java?
Java is slow. Stop, that was a joke, sorry about that, although I still hear
this statement from time to time. Honestly: the bootstrapping process is
sometimes suboptimal meaning achieving first good solutions while starting from
scratch. Here I don't mean to hack together some HelloWorld classes to show that
an API works, rather to design and code enterprise-ready solutions in a real-
world project context.
If you could change one thing with Java, what would that be?
Java is moving forward, that's good. Instead of dreaming of new specific
features for next Java versions, I more prefer improvements in the process
itself that should result in transparent, collaborative and frequent new Java
versions. JCP.next/JSR348 is a very good step in this direction, and Oracle does
a great job in bringing Java to the next level. What I’d like to add regarding
specific new future Java features: as a matter of fact, having Java on the
market for so many years now, any new language feature can’t be that killer
feature that would save the world. Additionally, using other languages on the
JVM already enables us to use other features and other styles without using the
language Java itself.
What's your personal favorite in dynamic languages?
First answer is Groovy because of it's powerful adoption level and ecosystem,
for instance the build system Gradle. Abstracting away from the typing system,
also Scala is a "dynamic language" for me in its classic sense. That's the
reason why I cover these two languages, Groovy and Scala, in my book "Agile
ALM". I find it helpful to develop solutions in a collaborative, dynamic way,
and to set up a mash-up of tools and languages that best fit to a given task.
That's what makes up an Agile AlM.
Which programming technique has moved you forwards most and why?
It's more a zoo of many different complement techniques instead of the one
that rules them all. Many agile practices influenced me including TDD and pair
programming. On a meta level, the technique of "continuous improvement" adds
much value by reviewing what you and the team have done continuously. Of course
there are many other influencing aspects. One crucial aspect is experience.
What was the biggest project you've ever worked on?
The answer depends on how you define "big". I'd prefer to talk
about "challenging" instead of "big". Lucky enough I had the opportunity to
support many different projects that were challenging regarding team size or
team setting, challenging regarding the non-functional requirements, and so
on. Besides that, I'm not proud of any "biggest solution" or find that of any
special interest, rather it is more satisfying and interesting for me to help to
create solutions (not only some random increments) that provide a great mapping
from the problem domain to the solution domain. That also conists of providing
a simple solution with minimal accidental complexity and maximal value for all
stakeholders, especially for the person with the money (the customer) and the
person who is affected by or affects the solution (the user).
Which was the worst programming mistake you did?
Generally, the next one is always the most annoying. :-) Hopefully many of
the defects are identified early by the respective process, thus a mistake
should never become "the worst one", rather just a learning opportunity. You
should also keep in mind that a “mistake” is often just the result of a wrong
or incomplete understanding, of requirements for example, or a defect in the
development process. The worst case that can happen with mistakes is that you
and the team repeat them: repeating mistakes is really something that you should
avoid.