Jazoon ‘08, international Java conference, has started in Zurich. This is second time that this conference is being organized and I must admit that conference program looks much better this year.
This morning we saw opening keynotes. I was very impressed by Martin Odersky appearance. He is the one who wrote javac compiler and Scala language as well. That guy is on a good road to become a living legend. Scala was in the news here and there for a while, but it seems that now it really picks up.
I was never really a ‘dynamic guy’ and all the hype around Ruby, JRuby, Groovy, Python, Jython etc. I tend to avoid. I believe in the story ‘use a right tool for a job’ but I also think that if you want to use a tool in correct way, you need to master that tool. And who can master all the tools/frameworks/languages that pop up every single day? That is why I stick to Java and try to master its ecosystem the best I can. The war in ‘dynamic languages’ world will probably be over in the near future, and I will celebrate the winner.
But on the other hand, Scala feels a bit different. First of all, it is written by a smart guy who is also a professor at Lausanne University. Secondly, it is fully compatible with Java bytecode. You can seamlessly integrate Scala in Java just as you can do it with Groovy. Unlike Groovy, Scala has comparable performance to Java. Groovy is still very slow, sometimes even 10 times slower then Java. And the main benefit of course is that Scala is fully dynamical, extensible and scalable language with support for type inference, closures and many other interesting things we miss in Java. With emerging tools coming out (Eclipse plugin, “lift” web framework), you should definitely put Scala on your to-do-list.
After Martin, Simon Phipps came out. He is a very nice guy who is also Chief Open Source Officer at Sun Microsystems. He is doing a great job of pushing all Sun’s product portfolio to open source community.
I am glad to see that people at Sun are happy when Java clones started to appear (like IcedTea). It shows that they became a serious player in OS market, ready to take up a competitive challenge.
Last keynote was held by Rod Johnson. Same old bullshit - “use Spring, everything else sucks".
After these keynotes, we had a “lunch". My God. For the ticket price of almost 2000 chf a man would expect to get something more then just a sausage with salad. Luckily I got a free ticket as JUG leader. Otherwise somebody would be forced to explain me this sausage thingy.
And then came other regular sessions. OpenID session was mega-cool. Unlike mega-complex SAML specification, OpenID is actually written by someone pragmatic. Check it out. If you have a web site that requires authentication, you need to support OpenID!
Hmm, then came the dinosaurs. Canoo guys. I used to like them because of their UltraLigthClient for creating RIA clients. But this time, 3 old guys where babbling one hour about some project where they converted Oracle Forms to equally ugly Web Forms. Everybody was dying and slapping themselves not to fall a sleep. We were all waiting for demo at the end of session. “Uhm, sorry. Demo doesn’t work. Hehe… you know.. these things happen… hehe". Hmmm, yes. It happens. Next please.
Neal Ford had an interesting session about internal and external domain-specific languages. He showed how you can use Java and Groovy to create domain specific constructs. Very nice.
Tomorrow is a second day. I will go with high hopes and full stomach. Nobody can survive sausages two times in a row.
Some time ago I came across very nice article about “why IT people change their work". Mostly I agreed with everything I read there, but there are some things I would like to add.
Today, more then ever, trying to retain employees in the IT became very difficult task. I hope decision-makers will read this article and draw some conclusions.
Here is my list of most important things IT guys expect from their companies. Give them that and they will stay in your company longer. Close your eye on some of them and say goodbye to your IT engineers…
1. Money - at the end of the day, we all work for money. Engineers are geeks, but they also have families they need to support. When I say money, I mean competitive salary + bonus. Bonus stimulates people to work hard and it gives them a feeling that a company appreciates their hard work. If they are doing a good job they are enabling your company to make money, so share the wealth.
2. 40 hour work weeks - there are always times when you will need to have staff available beyond the normal 40 hour work week but if it is consistent, you have a project management problem and possibly an employee morale problem. IT comes with enough stress by default. If stress level is high and longer then 40 hours per week, even biggest workaholics will crack.
3. Flexible work schedules - there is no need for IT people to be in the office all the time. With broadband access available almost anywhere, there is no reason not to give some “work from home” time (as long as their performance warrants it).
4. Overtime - make sure you compensate this either with money or time off. Worst thing is to do neither! If you ignore the fact that your employees burn themselves out, you are working against your company on a long term.
5. Listen to your employees - if employees gives relevant input on projects and are ignored, you might as well be telling them that they suck! Speak with your employees about everything and be transparent! Employees want to know what is happening in the company whether it is good or bad. Guessing is the worst thing. If you don’t speak with your employees they will start guessing. Employees might guess you are about to fire them, or sell a company, or something third, and will leave. Nobody wants to stay on a sinking ship, if they guess the ship is sinking. So, give them real input and be honest. IT guys are also humans, they appreciate a little honesty.
6. Perform annual reviews on time - this means on or before their anniversary date. Nothing makes an employee feel de-valued more than wondering what management thinks of their performance (and not getting a raise).
7. Use modern IT processes - this doesn’t necessarily mean the XP agile methodology but a process for IT projects that doesn’t suck the life out of people by putting too much red tape in place. Try to make a progress in your organization by staying on-the-edge with development tools and methodologies.
8. Provide company sponsored “outside” activities - employees love to be given time outside of work with the team to blow off steam. This can be as simple as playing tennis or bowling or just a visit to a beer garden.
9. Good hardware - don’t be cheap! Give your employees the latest and greatest when it comes to computer hardware. It makes the work more enjoyable to be using latest machines and it just might make them a bit more productive.
10. Cross training - don’t create silos in your work environment. Nothing will de-motivate an employee more than doing the same thing every single day. Let people move around a bit in the projects. If you have your project management done correctly, this should be pretty easy to do. This also is a huge advantage to your organization if you start to have turn-over. Spend some money on external training for your employees - conferences and courses. Give some budget to every employee and let him decide on which external training to spend it.
These 10 points listed cost some money. But it is nothing compared to lost you have when your highly skilled employee with lots of internal know-how leaves the company.
The bottom line here is that if you don’t show, with action, that you value your employees they are going to become unhappy at some point and leave (even the good ones). Your employees keep your business running so if they are not happy you have nothing to make your customers happy.
Somehow I was lucky that last couple of months stress level was on minimum so I decided to use it until new stress Cunami comes. No, I didn’t ride horses nor played golf nor went out to cheat on my wife nor other tempting things. Instead, I read books, geak books. Actually there were couple of books standing on my to-do-list-before-I-get-kids. Here is a short review of each…

1. Java Concurrency in Practice by Brian Goetz
Just simple - astonishing! I was amazed how low my knowledge of concurrency is. WIth new multi-core processors showing up every day, concurrency issues are becoming extremely important. Somehow I was always thinking that JVM will take care of that. I still think that low level concurrency issues should be handled by JVM. We have to think about concurrent users executing our code, but code executing on underlying processor forest should be handled by JVM. On the contrary, JVM specification clearly states: “if some code can be distributed on more processors, JVM will do it without taking care of synchronization issues. Developers need to care about synchronizing their code". This can lead to some very weird execution path of non-atomic operations like for example increment operation. Variable increment is actually consisted of 3 steps - read variable, increment, write back. Two threads in some unlucky timing can get completely different values of incrementation. Brian’s explanations are in plain and simple language easily understandable to everyone.
Highly recommended to ALL Java developers!

2. Enterprise Service Bus by David Chappell
Very good introduction into ESB world. If you are a beginner in this area, this is a must book for you. Explanations are very clear and it gives good guide lines where to go in case you are faced with enterprise architecture and integration issues. Even tough David works for Sonic company, which has its own proprietary ESB solution, he didn’t market it. I liked that. He stayed independent and gave a glance of concepts and technologies, without going into any specific solution.
Recommended to IT Architects.

3. Patterns of Enterprise Application Architecture by Martin Fowler
Huh, hard to tell. Mixed feelings. We all know who is Martin Fowler and he wrote all of his valuable experience here. But it was written in 2003.
Unfortunately for Martin, most of chapters in his book are deprecated. He dedicated more then 100 pages to ORM patterns which I am sure nobody uses now because you have tools for that. He also mentions heavily EJB 2.0 and how to avoid known problems with it. In 2003 this was for sure very valuable. Nevertheless I read the whole book, from cover to cover. Martin is a great expert and every word from him is highly appreciable.
I can’t really recommend it anymore.
Well, stress level is still on acceptable level so I am continuing with my geek books. There are only 3 more great books to go - “Beyond Software Architecture", “Enterprise Integration Patterns” and still in printing new release of “Effective Java” by Joshua Bloch.
Mmmm… so many sleepless nights… so much knowledge… my wife will hate me so much… she will not speak with me and that will give me more time to read… mmm… I should order more books…
I had an interesting discussion with a couple of developers from one major insurance company where I was working as an external consultant.
Discussion was about Maven usage. They have by-the-book maven development environment - Archiva maven repository, Continuum continuous build and Maven plugin for Eclipse. It all works pretty well.
Until… you want to add a new library.
A guy who likes Maven comes and says: “Maven is much better then Ant, because it gives you better control over libraries". But when it comes to adding a new library, then he spends half an hour configuring Archiva, Continuum, calling other colleague to help him with deployment etc…
There is another guy who dislikes Maven because he cannot convert web project to Eclipse WTP so he could debug in Tomcat instead of deploying everything to WebSphere. But he said he found a tool in Google Code called m2wtp which you can use exactly for this purpose.
Hmm… I am not an expert on Maven, but what is wrong with using plain old Ant?
There are so many tools/frameworks today that we developers need to learn, last thing we want to waste our time on is with build tool. And they did waste quite a lot of time in deploying just one jar file. Even if you master that and include new library in Maven quite quickly, I see another bigger problem. Often in projects I like to experiment with different libraries to try to find a tool that best fit my needs. If I have to deploy every test library to Maven repository just to be able to see how it works and then remove it again, I am sure I would eventually end up in a mental hospital. Plus, I don’t want everybody else to see how I experiment with different libraries. With Maven, they see it.
I am an old fashioned Ant fan and quite frankly I don’t see anything wrong with that. My machine is my space. I can include what ever I want and play around with it. When I see that code works fine, I can send it to SVN repository. One of my preferred working environments is like this:
local machine -> test server -> preproduction server -> production server.
Every developer works on his local machine and plays with the code. Tester checks out code from SVN and deploys it to test server where testing team does their part. Integrator deploys code from test server to preproduction server where final functional/performance/integration tests are performed. If all is well, we go live…
For me this is all the control in the world that we need. Controlling jars (what Maven is doing) is just a small and first step that is actually hurting developers because it influences their everyday work.
Again, I must say that I am not Maven expert and maybe all these things can be done differently. I just wrote what I saw in that company which has quite a large IT department and I guess people who know how to configure Maven. Even then, build should be easy and straightforward process not blocker and time waster. There are other places were we should waste our time and loose our hair…
Job of a software developer is to solve problems. On a daily basis we confront us with different problems and seek solutions. Sometimes we have some very good ideas about solving those problems.
But, it’s not all about good ideas! If you are not able to successfully realize your idea, then idea itself is worth nothing.
Thanks to globalism, information flow today is getting bigger and faster. Different people in different parts of the world are faced with similar problems. All of them are using Internet or some other media to get answers and solutions to these problems.
World has became such a small village that it’s no wonder that people often have some idea how to solve a similar problem. It’s like neighbors looking over each other’s fences.
“Look Marge, our neighbor Neil bought fountain. Why don’t we buy one, but only bigger and fancier?”
This effect of “global idea” had happened to me too often. I had a problem, I found a solution to the problem, I started implementing it, and somewhere in the middle of the implementation I found out that there is some Chen Lee Wong from China or Douglas Whiterspon from California who had same problem and made exactly the same thing as I did!
The only catchy thing is that Chen and Douglas have potential to push their solution and me, myself and I usually end up in abandoning our solution.
It wouldn’t bother me if I came to the idea much later then Chen or Douglas. What bothers me is that at the time I had idea, nothing similar was on the market! So, idea was original.
Here is a list of products for which I believe I had idea before well-known implementations of it appeared on the market:
1. BugBase - this was distributed bug tracking system. Like CVS/SVN but unlike them, there was a local copy of entire project on each developer’s machine. By entire project I mean all revisions, tags and branches of every file.
I could make some changes while being offline. Next time I go online, I could synchronize my local repository with centralized repository on the server. The advantage is that you don’t need to be connected to source control server in order to work. You can delete files locally, rename them, move, change etc. All these changes would be remembered and next time you go online these changes would be synchronized with centralized server. That means, merges would be done on files that were changed by different developers etc.
BugBase was my graduation project at University of Electrical Engineering in Belgrade, 8 years ago. Guess what? There is Mercurial project, which came up 2 years ago. It is still not very mature, but uses exactly the same logic.
2. AspectCMS - for more then 5 years I’ve been working with content management systems - Web Content Management Systems, Digital Assets Management Systems and Document Management Systems. What I have noticed is that a lot of common CMS operations are repetitive. There is always a storage of content, search, versioning, categorization, user management and a whole bunch of modules (custom applications) that are build around these basic building blocks. Also, I’ve noticed that the biggest problem with CMS’s is their proprietary nature. They do well what they are designed to do, but as soon as you want them to do something else - not possible without serious redesign.
Therefore I made AspectCMS. It is a CMS system that stores all data in hierarchical structure. Something like file system organization. AspectCMS doesn’t know anything about content nature. Every content is described with meta-data and that allows AspectCMS to perform different operation on them. Part ‘Aspect’ in the name comes from using Aspect Oriented Programming methodology in implementation of CMS. Aspects were deep in core of CMS, not used just for trivial logging and transaction handling. But used for modifying execution paths, depending on set of modules that were installed in the system.
I wrote AspectCMS about 4 years ago. Guess what? Content Repository from Day Software (JSR170) does the same thing and came also about 4 years ago.
3. WebAspect - Web CMS based on AspectCMS. Logic is that every piece of web site is one aspect. Guess what? Rikard Öberg (famous AOP guru) created SiteVision WebCMS with the same logic. Again, date of creation was almost the same.
4. PeopleCapsule - Social networking system that creates connection paths between people. It is based on “6 degree of separation myth” and shows how completely unrelated people can be connected over the people they know. Guess what? Xing is doing exactly the same. PeopleCapsule idea was way before Xing (formerly OpenBC) ever existed.
5. Avalanche - coding-by-convention web framework. I made it one year ago.
Guess what? There is RIFE. The same concept, but I must admit it is couple of years older. I didn’t know about RIFE, but it is interesting to see how these two projects were very similar.
6. Cyclone - search engine middleware. Came 2 years ago as an idea. In the same time, Google Search Appliance and Apache Solr appear.
Conclusion: if you have a good idea, go for it! And do it fast! Because if you don’t, there is a well chance someone will come up to the same idea soon…