"Few things are impossible to diligence and skill. Great works are performed not by strength, but perseverance."
- Samuel Johnson (1709 - 1784)
Skills are acquired through training and hands-on experience. In a life as software engineer you never can stand still. You always try to perfect your skills. So what I state here is only a snapshot of my personal evolution, which is always in flux and will hopefully permanently change for the better.
As a Head of Development with Löwenfels Partner AG, Lucerne I am responsible for…
- helping the company to adopt a development process that all parties support and live (this is currently Scrum).
- serving as a contact to a key customer account.
- supporting the development teams by removing obstacles.
- making progress evident and problems immediately visible to upper management.
- leading as a living example for the values I share.
- facilitating the transition from a waterfall driven company to an agile one.
- driving out fears that are obstacles to change.
- co-defining the companies technical core architecture.
Prior to that I was working as a senior software engineer and project lead responsible for…
- Technical coordination of a 5 man team (including 2 external experts) and the planning of the new catalog management solution OpenMedia (All releases from 1.0 to 2.5).
- Requirements gatherung using Use Cases and release planning based on current project necessities.
- Priorization of features and development tasks together with product management.
- Project progress tracking comparing estimates with the actual time spend on tasks.
- Project documentation and status reports.
- Leading planning meetings and project post-mortem reviews.
Over the years I have seen a lot of approaches to software development come and go:
- No process at all
- Top-Down design
- Waterfall-like processes
- OOAD (RUP-like) with big upfront analysis and design using UML and Use Cases
- eXtreme Programming
- Currently my employer is adopting Agile practices (Scrum)…
- I personally tend heavily to the agile movement (and have also contributed a book)
- I try to go down the Test Driven Development lane, though this is not so easy, when you are refactoring an existing framework
- I am a Certified ScrumMaster Practicing and participated in the first ScrumGathering in 2004 in Vienna (Austria).
Programming Paradigms and Languages
I have seen many of them:
- Structured and procedural programming (Pascal, COBOL, Modula, C)
- 4th generation languages (Dataflex, Progress)
- Currently I do object-oriented programming (Java), now in the 8th year.
- Code Generation (having written a code generator myself).
The style of data storage has also changed over the years. I have worked with…
- Flat files
- ISAM files (KSAM on HP3000)
- Network databases (IMAGE on HP3000)
- Relational databases (non-SQL: Dataflex, Progress and SQL-based: Oracle, Progress, MS SQL-Server, MySQL).
- XML files
- Currently I use mainly Oracle, MS SQL Server and MySQL
- O/R Mapping Tools: Cocobase, TopLink, Hibernate
They come and go faster than you can blink with an eye!
- IDEs: from different editors (like EDIT/3000, IBM's PE2, vi, etc.) to full blown tools like Visual Studio, JBuilder, IBM VisualAge for Java to Eclipse and Altova XML Spy.
- Design: From Visio to Rational Rose to Select Component Architect to (currently) Sparx Enterprise Architect.
- Libraries and frameworks: XML parsers (Xerces, JDOM, dom4j, web frameworks (ASP, Servlets, Tapestry), RMI, Jini, JAI, Quest Software's JClass ServerChart, different JDBC-drivers, Swing
- Office software: MS Office products, OpenOffice.
There are some main areas I am interested in as software craftsman:
- Agile project management and processes (especially Scrum and eXtreme Programming)
- Distributed systems (Jini) and Service Oriented Architectures (SOA)
- Framework development and object-oriented system architecture
- Aspect Oriented Programming (AOP) and its impact on OO principles
Some other useful things…
- I am fluent in German, English, Italien, Czech and also know some French (though a bit rusty)
- For more than 10 years I gave once a week lessons in speaking in public
- I give talks at conferences and publish articles
- I have given several courses and workshops teaching software development skills, like an overview of the UML2 standard through introducing teams of software companies and students at the Lucerne University for Applied Sciences and Arts to Agile concepts and Scrum.
Traits you can observe, when you get to know me:
- Searching to see the big picture
- Always trying to look beyond my nose
- Highly self-motivated
- Love to work in a team
- Pass skills on to others (teaching)
- Able to take and give constructive criticism
- Do not run from responsibility
- Speak my mind
- Open-minded and accessible
- Pushing decisions to the people knowing most about a subject
- Unable to hide my thoughts (not always the best to do, when working with other people, especially managers)
- Strong direct communication (whether you like it or not)
- Sometimes pedantic when it comes to code quality (my own and of others)
- Not as punctual and orderly, as I would like to be
Beyond Professional Interests
Life does also consist of other pleasures…
- My caring wife Maria and my lovely twin daughters Michelle and Vanessa
- Reading (my wife says, whatever I get in my hands)
- Playing Basketball
- Italian (especially Sardinian) food and wine
- A good relationship with God
I am currently reading…
- Interventions - Noam Chomsky (for pleasure)
- Pragmatic Thinking & Learning: Refactor Your Wetware - Andy Hunt (for work and pleasure)
- The Corporate Culture Survival Guide - Edgar H. Schein (for work)
- Enterprise Integration Patterns: Designing, Building and Deploying Messaging Solutions - Gregor Hohpe & Bobby Woolf (for work)
- Refactoring To Patterns - Joshua Kerievsky (for work)
I am currently listening to…
- The Allman Brothers Band: Live at Fillmore East
- ulu: NERVE
- Jamie Lidell: Multiply
- Joe Strummer & The Mescaleros: Global a Go-Go
- Medeski Martin & Wood: Let's Go Everywhere