The Heroes of Java: Angelika Langer
|© Angelika Langer, All Rights Reserved|
She is the author of the Java Generics FAQ and co-author with Klaus Kreft of the books " C++ Standard IOStreams and Locales " (Addison Wesley, 2000) and " Java Core Programmierung " (Entwickler Press 2011). She is a Java Champion and enjoys speaking at conferences all over the world. Further on she is an observing member of the ISO/ANSI C++ standards committee and the Java Community Process JCP.
Who are you? (Describe yourself in max three sentences)
I'm a freelance trainer and author teaching Java and C++. I'm based in Munich, Germany, but teaching wherever there is demand.
Your official job title at your company?
Since I am self-employed there is no company that could provide me with a job title. If I wanted a job title I could simply invent one.
Do you care about it?
No, I couldn't care less. Does anybody care? It always baffles me when people demand that I provide a job title. Like, for instance, each time I open a bank account or file a tax report I must invent a job title. So, I'm usually saying "trainer", which at one bank was filed as a sports-related profession, like I were a soccer trainer or something. I doubt that the bank had any serious interest in my job title; it is just a silly formality.
Do you speak foreign languages? Which ones?
German is my native language and I am able to read, write, and talk in English, but beyond that ... nothing I would dare to use in a business context. Just some rudimentary knowledge of French and Italian.
How long is your daily "bootstrap" process? (Coffee, news, email)
It depends on where I am on a given morning.
When I'm in Munich I brew a cup of coffee, nestle myself into one corner of the couch in my home office, and enjoy the morning sun, if any. No further bootstrap. It takes half an hour at most.
There were times when I rushed to the computer first thing in the morning and started reading and answering email even before my coffee had been brewn. I don't do this any more; it's not healthy. These days I take care of email and news in the afternoon or evening. My prime time, i.e. the morning hours, are devoted to work that requires substantial amounts of concentration and creativity such as coding, developing concepts, working on course materials, writing articles, etc. The chores such as email, tax declarations, business correspondence, etc. is routine and done later in the day.
But, most of the time I wake up in a hotel room somewhere, take the usual hotel breakfast, grab my notebook, and walk to the customer site where I'll be running my seminar. No bootstrap at all. Email has to wait until evening hours - sometimes even until I return to the office if the seminar is exhausting.
You have a twitter handle? Why?
No, I don't use Twitter. Just the bare idea of reading and writing tweets in addition to what I'm already doing turns me off. I'm too busy and don't need any additional chores.
Also, I don't like the concept of Twitter. I studied their terms and conditions and learnt that Twitter claims full ownership of all tweets. Seemingly, I as the originator of a tweet would not have the right to modify or delete any of my tweets any time I desire to do so. It's an "interesting" concept that I personally do not feel comfortable with.
I guess, in general, I lack the exhibitionist gene that is needed for exposing one's private parts in social networks. I do maintain a webpage whose content I own and fully control. I did create profiles at Linkedin and Xing many years ago out of curiosity, but I haven't used them much. But nothing beyond that. No Twitter, no Facebook, no nothing.
What's your daily development setup? (OS/IDE/VC/other Tools)
Nothing fancy. Windows7-64, the latest versions of either Java or C++, an editor, a text processor, a presentation tool for the seminar materials, and that's basically it.
For teaching and writing purposes I'm interested in understanding and evaluating tools and deliberately do not restrict myself to anything in particular. In general, I prefer open source or free tools (e.g. Eclipse, gnu, OpenJDK, LibreOffice) over commercial tools. Whatever I present is more helpful to the audience if they can actually and easily use and apply it. Where is the point in talking about a commercial tool that only few people in the audience will ever get a chance to use? Also, there are very mundane and practical reasons for not tying myself to anything in particular: I need to stay flexible and must adapt to the customer's toolset, for instance, each time I bring programs for the hands-on part of an in-house workshop.
Which is the tool providing most productivity to your work?
The advent of IDEs was an immense productivity boost. I still remember the stone age of software development on mainframes when as a developer I had to generate a cross reference of my source code, kindly asked for a printout from the computer centre services, and then flipped pages in a pile of paper at least 20 cm thick in order to figure out which variable or method was used or defined where in the source code. Crazy! What a poor use of precious time ...
So, I do very much appreciate the tools we have available these days. IDEs, browsers, JavaDoc, profilers, monitors, etc.
And the internet, of course. The possibility to work remotely and easily share information with other people. The availability of information. Can anybody remember that entire teams had to share one hardcopy of a manual for information about protocols, APIs, and the like?
Your prefered way of interacting with co-workers?
Email. It's independent of time zones. I can read and write them whenever I see fit. I can archive them and search them if I can't remember their precise content. I can't keep all details in mind as I'm almost always handling a dozen threads in parallel. I need a means to remind myself what I discussed with whom.
Consequently, I hate phone calls; they interrupt my flow of thought and work. Plus, they are more work than an email, because I need to take notes of what was discussed on the phone so that I can later look it up.
What's your favorite way of managing your todo's?
A piece of paper and hand written notes that I can cross out when done or throw away when obsolete. I need a visual and physical manifestation of my chores. Same for my schedule. It's a calendar with color-coded entries sitting on my desk. Everything that I consider important must sit on my desk. I even explicitly print documents just for the purpose of putting them onto my desk to remind myself that I still must take care of it.
It's similar to the decision between a hardcopy of a book and an e-book. Both forms have their merit. I prefer the hardcopy for reading the book and the electronic version as a reference for subsequent lookup.
If you could make a wish for a job at your favourite company: What would that be?
I enjoy being self-employed and already have the job I desire.
You're programming in Java. Why?
Because it is a successful and popular programming language used by many companies and millions of developers. It would be difficult to make a living by teaching a programming language that hardly anybody is interested in.
What's least fun with Java?
Lack of diagnostics from compiler and virtual machine. I miss a convenient and systematic way of retrieving information regarding compilation, optimization, garbage collection, thread management, and further compiler/JVM internals. But then, it's a property of the respective virtual machine implementation and not of Java, the programming language, itself. Regarding a programming language such as Java I don't think in terms of "fun". A programming language is a tool; I simply use it.
If you could change one thing with Java, what would that be?
Let me quote Nick Cave: "I don't believe in an interventionist God." All decisions regarding Java were made for a reason that appeared good at the time when the decision was made. I respect that.
One could argue that Generics could have been added much earlier, e.g. in Java 1.2 instead of Java 5. No need for type erasure at that early point in time; generics were much easier to understand and use. However, given the circumstances, type erasure makes sense to me. That does not mean that I like type erasure or would suggest to change it.
What's your personal favorite in dynamic languages?
Dynamic language? I strongly prefer statically typed languages. I feel uncomfortable if both the compiler and the runtime system do lots of stuff for me without telling me what is going on.
Just as an anecdote: I gave a talk on lambda expressions in Java 8 recently and mentioned that variables from an enclosing context used inside a lambda expression are treated by the compiler as though they were declared final in the enclosing context - regardless of an explicit final declaration being present in the source code or not. These variables are "implicitly" final. How on earth would that be helpful? I would definitely prefer typing those five additional "final" characters to have a visible clue that the variable is final rather than
having the compiler making it final silently behind my back. It is much clearer and more understandable if the source says what it means. I'm not entirely against type inference; it definitely has its merits in many situations, but Java was deliberately designed as a verbose language and nowadays this concept is no longer appreciated.
Which programming technique has moved you forwards most and why?
Templates in C++. Eventually I could get rid of code replication by means of intelligent use of templates.
What was the biggest project you've ever worked on?
I'm not sure. I guess, the biggest one probably was the compiler family that included the C++ compiler to which I contributed. So, it was compiler construction, which explains my sustained interest in language and library evolution.
Which was the worst programming mistake you did?
Not testing my programs diligently enough in order to make sure that I detect the mistakes before the client does.