Inside JavaBlackBelt

The JavaBlackBelt team blog.

Wednesday, December 31, 2008

2008 review, 2009 hopes

posted by John Rizzo
Dear Java Belts,

I write this note to you shortly before midnight this December 31st 2008, GMT. As our East-Asia members are already waking up in 2009, our members on the American continent are just starting Sylvester Day 2008.

As we jump into a new year, it is time to think about our achievements in 2008 and what lies ahead.


JavaBlackBelt Platform

In 2008 our main platform development has been the new moderation process.
Together with this new process we designed a new UI for managing questions.
I'm happy it's up and running. As we are fine-tuning the process, adding your contributions will be easier and more efficient, with undoubtedly a positive impact on the overall content.

Making so many teams and individuals across the globe working together efficiently on-line, remains a major challenge of most 2.0 communities. Some recent JavaBlackBelt community numbers:
  • 250.000 contribution points earned by
  • 50.000+ registered users.
  • 2.000+ unique visitors / day
  • 4.000.000 answers given to technical questions.
On the corporate side, one of our main 2008 achievements has been to change the education culture of a large banking and insurance group with more than 100 Java developers. Learning in this company was organized with traditional courses in a conventional classroom-oriented fashion. Today the organization has adopted a dynamic and result-driven approach based on JavaBlackBelt exams. It does not mean that classroom learning has been replaced, but rather that they have defined targets and implemented measurable learning paths. Now classroom courses are just one possible mean to achieve individual and organizational education targets. In the past, just taking a course was a target/achievement by itself. Throughout the JavaBlackBelt implementation process, the reaction of developers has been very interesting. I will post an article about that in the upcoming weeks.

Conferences

In 2008, we've had the opportunity to meet and talk to hundreds of you (if not thousands) at many conferences. It's always very enjoyable to meet in the physical world and put faces to the members of an on-line community. Most of all, it is inspiring to hear your numerous stories about how JavaBlackBelt impacted your Java skills, sometimes even your life. For instance I recall meeting Lucasz, based in Poland, who explained us how he got his job in the UK thanks to JavaBlackBelt, or Eric in Denver who's career was boosted largely thanks to the recognition he got via our platform.

You'll find some pictures of our 2008 activities in our web album.

We apologize to the organizers of the conferences we had to decline, we just cannot physically be everywhere, sometime we have to work home ;-)


Goodbye 2008, hello 2009!

It's difficult to talk about 2008 without mentioning the financial crisis, the real-estate crisis, automotive crisis, and yes indeed the IT crisis, ... More particularly it is interesting to note the consequences of the crisis on developers and the relation to their skills. Imagine a pyramid with the best developers at the top, and mediocre developers at the bottom according to their ability. Horizontal bars represent the level you need to get a job as a developer. When the bar is high, there are fewer positions open and it's more difficult to be hired (or the rate is lower).



Let's go back to the Internet bubble at the beginning of the millennium. I remember how companies were hiring developers as if they were buying office supplies! I've seen so many self-proclaimed highly-skilled developers who could barely find the power button on their computer. At the same time, J2EE came out. It was incredibly hard to use (remember EJB v1, no Spring, no Hibernate, no Struts2,...). The perfect mix for most Java projects to fail. As of today I am still wondering how Java survived that stage.

The bubble bursted and in 2003 it was much harder to get a job as a developer. As you can see on the diagram, the ability bar was raised. The market has been purified someway. Fewer crazy projects. Fewer inefficient coworkers. More professional attitude adopted by recruiters. It has probably been unfair and unpleasant to many people, but globally, in the long run, I think it was better for the IT professionals and their customers.

Even with high growth rates and difficulties to find skilled good developers in 2008 (until the last few months), it seems the market remembered mistakes done during the internet bubble and recruiters further increased professionalism, although the ability bar was lower in 2007 than in 2003. A large number of companies hired junior developers fresh from school and took on the entire training.

I fear that the current crisis will make the bar very high again. This time I'm afraid some good developers will be looking for a job.

For illustration purpose, every year, since 2003, my team has been training 12 job-seeking developers as a government-run program. They usually have some experience or an IT degree when starting. After 6 months of intensive class training, they are able to develop a web-application with Spring and Hibernate. Near the end of their training, they start looking for a job. In June 2008, we started with a really outstanding group of above the average achievers. They've been just brilliant. Two months ago, they started looking for jobs. It has been much more difficult for them. Over the past 3 years, 90% of the group was hired before the end of the training. This year, only 50% were hired (note: my best wishes to the remaining 50%).

Today the experience level required to get a job is definitely higher than one year ago.

If you are at the bottom of the pyramid, don't even think about it. Unless you have a really strong potential, IT is no longer a gold mine.

If you are at the top, you'll never be in real trouble (just your salary/rate may drop).

But what if you are "stuck" in the middle? Are you just below or above the line?

This question is quite complex, because the ability (to make successful projects) is not only about hard technical skills. It's also about soft teaming and communication skills. I leave the soft skills to others. Let's talk about the technical skills.


Learning in 2009

Recently I was showing some stats about JavaBlackBelt exams (number of succeeded exams vs. number of failed exams over time), when someone asked a very disturbing question: "What do we propose to those numerous developers who failed their exams ?"

As you know, exam takers learn during the exam, and also after the exam when they see the correct answer of each question.

But it would be great if we could provide them the necessary support to succeed rapidly and efficiently. It is impossible to propose classroom training as there are simply too many candidates, and they are too dispersed. On the other hand, leaving them alone with the web and a book is not enough for most people. We are convinced there is a solution somewhere between these two alternatives (classroom and alone) that really helps programmers learn efficiently and faster.

We are currently working on it, and that will be one of our main projects in 2009: develop the best distant support we can for programmers to learn Java technologies.



On behalf of the JavaBlackBelt team, I am graetful to all 50.000 of you for your great and quality activity on JavaBlackBelt this year.

As a token of our appreciation, I have a New Year gift for you: $100 auction to spend your remaining 2008 points. Good luck !


I look forward to seeing you on the platform this new and challenging year,

John

Sunday, December 14, 2008

Devoxx 2008: Conference Day 1

posted by Moandji Ezana
One of the best things about conferences (if you're a consultant, at least), is catching up with a lot of former colleagues at once, even if it means missing the JavaFX/IBM keynote (the IBM part is widely deemed to have sucked). I also got the chance to talk to the guys at the Kaazing stand, following up on Nicolas's hype of a few weeks back. To complement his post, here's an impromptu, Scoble-style interview with John Fallows, Kaazing's CTO.



InfoQ also has an interview with Kaazing.
Of course, I was there for the sessions and saw a couple particularly good ones.

Brian Goetz outlined the evolution from concurrency to parallelism, reminding us that the free lunch is over. He took us on a tour of the fork-join API, discussed work stealing and the higher-level abstraction (in terms of parallelism) introduced by ParallelArray. He also stated that closures could have made the API a lot nicer, to which audience-member Joshua Bloch could not help but respond that they introduced a lot of overhead for relatively little gain.

Bill Venners gave an awesome talk entitled The Feel of Scala. Most Scala tutorials and examples I've read make the language seem really hard and concentrate on its functional aspects. Venners took a different approach, focusing on the wonderful DSL-ish syntax he relatively easily created for ScalaTest and augmentations to the type system such as type inferencing, structural types and traits.

Pete Muir's Introduction to Web Beans reassured me that Java web frameworks really are moving towards full-stack environments (UI, persistence and integration), but wasn't too exciting in itself. I wonder if we'll ever get to something like a Java version of Google App Engine.

How to Hack and Secure your Java Web Application is a great title, but things got off on the wrong foot when the presenter spent five minutes explaining the benefits of the wiki ("Everyone has the latest copy of the information!" - you don't say) and it kind of went downhill from there. The only benefit here was learning about the extensive security resources and tools OWASP has created.

I'm looking forward to the videos coming up on Parleys so I can catch up with some of the talks I missed. Were you at Devoxx? Let us know in the comments!

Some other Devoxx postings:
The Java Posse's live podcast
Stephen Colebourne's whiteboard polls
Jasha of Hippo CMS
Guido Kollerie
The Java Blog has an extensive report, starting with University Day 1.
And lots more...

Labels:

Monday, November 24, 2008

JavaBlackBelt @ Øredev08

posted by Nicolas Brasseur
Last week the other Nicolas and I were invited to the Øredev08 conference in Sweden to demonstrate our JavaBlackBelt platform and spread the word to the Swedish community. This was actually a double-first for me: first times at Øredev and in Sweden - and I sincerely hope not the last time for either! The experience was so worth it that I decided to share it with you.

The conference
Unlike most of the other conferences I attend, Øredev is cross-technology, mixing tracks such as classic Java, .NET, Agile and Mobile tracks with more exotic subjects such as Domain-Driven Design, Aspects of Leadership, PM in Practice, User Experience and more. I like conferences where you have the opportunity to meet people active outside Java: it's always enriching to share ideas and vision with someone from a different viewpoint. The conference was held in Malmö, a nice city in the southern part of Sweden 20 minutes away from Copenhagen.So, for a week the city streets were festooned with old style space invaders () indicating the way to the conference center.
The venue was nice but is being torn down soon, so next year the conference will be held elsewhere. I hope the organizing team manages to book the strange Turning Torso of Malmö.

Another unique characteristic is the conference's sense of social responsibility:
  • The exhibitor's fund-raising for the UNICEF collected 190.000 SEK, enough to build 2-3 schools in Malawi.
  • Plates, cups and cutlery were made of banana leaves, corn and other recyclable materials.
  • Fair-trade coffee
  • ...

The Talks I attended
I couldn't attend many sessions, as I was often at the booth with Nicolas, welcoming people and informing them about our community. The first day I managed to get away and see the following speeches:
  • Five Aspects You've Never Heard About : Alef Arendsen demonstrated uncommon uses of AOP. The talk was interesting but there was a lot of code and little time in which to read it, so we only reviewed 3 out of 5 of the planned aspects. He later confessed to me that the talk normally ran 90 minutes. He promised to post a blog entry about it on the SpringSource blog.
  • Qi4j - code, examples and demo : Qi4j is basically a framework that aims to make it easier to create applications using DDD. Not being not familiar with this technology I must admit I did not understand the whole thing but I met Niclas Hedhman on the last day and he explained more about this promising framework. Niclas is CEO of code dragons, a Malaysian company that seems to be highly skilled in OSGi and DDD.
  • Benchmarks Puzzlers - K.Pepperdine : Borrowing the Bloch/Gafter style (minus the overalls) to show some interesting examples of benchmarks that seem valid but aren't.
  • Real-time web development - J.Jacobi : Jonas (former Oracle employee) showed his new baby : the Kaazing Gateway explaining how it is possible, using the HTML 5 specification, to have full-duplex TCP connections between browsers and middleware. I must say this talk made me feel as I had years ago at TSSS Las Vegas when I saw my first Ajax demo by Dion Almaer : a revolution is coming. Kaazing's booth was next to our's so we chatted with them a lot (see below).
The Talks I heard about
I also heard a lot of good things about:
  • The groovy patterns talk : I'm really bummed I missed this one - I've wanted to use Groovy for years, but I've never convinced any customers, for lack of business examples. It seems that this talk had the answers to all my questions. I hope it will be available online soon. (By the way most the sessions were recorded so we can hope).
  • The DDD workshop on Thursday given by Eric Evans of course
  • And an excellent Agile workshop given by Diana Larsen, an active member of the agile alliance.
The neighbors
Jonas and Ric of Kaazing were giving away nice t-shirts promoting their new gateway technology. As I told them, I believe what they have done is the future of the web and I strongly advise anyone involved in RIA development to have a look at it. If you are currently using Comet or similar technologies, consider the Kaazing gateway as another solution. While the HTML 5 spec is not yet released (planned for 2022, joked Jonas), its 'communication' section, which introduces 2 new core features: Server-Sent Events and WebSockets, is already well-defined.

Quote from the Kaazing website:
Server-sent events standardizes and formalizes how a continuous stream of data can be sent from a server to a browser. Server-sent events is designed to enhance native, cross-browser streaming. Server-sent events introduces eventsource, a new HTML DOM element that connects to a server URL to receive an event stream. The HTML 5 Web sockets specification introduces the WebSocket interface, which defines a full-duplex communications channel that operates over a single socket. WebSocket:
  • Traverses firewalls and routers seamlessly
  • Allows authorized cross-domain communication
  • Integrates with cookie-based authentication
  • Integrates with existing HTTP load balancers
A WebSocket connection is established by upgrading from the HTTP protocol to the WebSocket protocol during the initial handshake between the client and the server. Once established, WebSocket data frames can be sent back and forth between the client and the server in full-duplex mode.

What the Kaazing team provides is
  • a client library for the browser to simplify client-side development of full-duplex applications.
  • a gateway implementation that transfers the TCP/HTTP full duplex to middleware protocols.
See Kaazing.org for more info.

The Oracle booth was serving strong expressos and cappuccinos. One friendly Oracle guy named Olaf Heimburger took the JBB contest and complained about a question, but I wasn't at the booth at the time to argue about it. I was happy to see him come back later to admit that actually the question was correct and that JavaBlackBelt had taught him something, which is exactly our aim. That's a mantra you must all have in mind when writing questions/explanations on JavaBlackBelt: What am I teaching the guy reading this?
We decided to do t-shirt cross-referencing so he now wears a JavaBlackBelt polo and I am the proud owner of an Oracle red t-shirt.

The community
Talking about you guys, the community was well represented at Øredev. I met auction-winner Mateusz Kwasniewski and Dejan Vukmirovic who helped us on the booth. We had nice chats about the community and the future of the website and even interviewed Mateusz (article coming soon). There were also a lot of members from JetWay, one of the organizing partners. Lots of them took the JavaBlackBelt contest, so I guess that this week their offices are full of people proudly wearing their hard-earned JavaBlackBelt t-shirts.
Pictures can be found at http://picasaweb.google.com/JavaBlackBelt.Admin/Oredev2008 and embedded at the end of this post.

The Organizing Team
I can't end this article without warmly thanking Emilie and Michael, the core organizers, for the amazing event they have successfully set up. Thank you very much and I hope to see you next year at Øredev09.

Parting Advice
One last piece of advice: next year bid on the auction to win the free entrance and join us at Øredev09!

Labels: , ,

Monday, June 23, 2008

Use extension to avoid utility class proliferation

posted by Moandji Ezana
Neal Ford claims that "Lots of 'Helper' or 'Util' classes indicates a poor design" and suggests trying to "incorporate your helpers into an intelligent domain object." If the projects I've been on are any indication, his advice hasn't been heard, and people end up with, for example, a DateUtil class that provides calculations, formatting and all that other stuff that the JSE libraries are so terribly unwieldy for. I'm sure you've come across code like:

long DateUtil.calculateTimeBetweenDatesInSeconds(Date, Date)

and

String DateUtil.formatyyyyMMdd(Date)

or even (gulp):

date1.getTime() >= date2.getTime()

This kind of code is extremely common, but, let's face it, pretty ugly, not really object-oriented and, most importantly, difficult to read and error-prone. I'd be much happier writing:

boolean Date.isBefore(Date) [No more "Which date goes first, again?"]

String Date.formatyyyyMMdd()

long getIntervalInSeconds(Date)

So, here's an attempt to apply Ford's advice.

Begin by extending java.util.Date and copy the truly necessary DateUtil methods (I've found that utility classes have a tendency towards bloat) to it. That's pretty easy, but it's when you try to integrate your fancy new MyExtendedDate with clients and frameworks that things get a little trickier.

You could simply change the type of the domain object's field and modify the getters and setters [1]. However, if you're using an ORM framework, it might not be too happy about that, as it doesn't know MyExtendedDate. You'd have to teach it about your class. For example, with Hibernate you'd use a custom type converter. If you're using Struts2 and navigating your object graph with OGNL [2], you may have a similar problem, which you'd resolve in a similar way.

If you're mapping getters and setters directly onto your fields [3], your new setter will break clients. You could simply change setDate(MyExtendedDate) back to setDate(Date), because the subclass doesn't add any state, only behaviour, then create a new MyExtendedDate instance based on the date passed in. Or, if possible, keep setDate(MyExtendedDate) and change all its clients. Or have both and mark the former deprecated. The ideal solution, of course, would be getting rid of the setter altogether [3].

If you can't change the type of the field, you could change getDate() to return MyExtendedDate, which has the advantage of not breaking clients. If you can't change the field's type, you probably can't get rid of setDate(Date), either, but clients can give it a MyExtendedDate anyway, so it's not too much of an issue ([3] notwithstanding).

All that now remains is to find all the calls to DateUtils, replace them with MyExtendedDate's methods and eventually get rid of DateUtils. If you can't remove DateUtils right away, you could at least deprecate it and reimplement its methods to call the corresponding ones on MyExtendedDate.

Voilà: nice, smart and object-oriented Dates, at your service! If you're interested in more ways to improve your code without breaking everything, I highly recommend Michael Feathers' book Working Effectively With Legacy Code. It's like an extension to Martin Fowler's Refactoring that deals with all those real-world situations that make your eyes bleed.

[1] Getters and setters are evil, of course, but that's another topic, see Peter Gillard-Moss for a possible alternative. The last line, paraphrased, sums it all up nicely: "The trick with maintaining your encapsulation as neatly as possible is to try and ensure that [you] deal with the concepts of [the] domain (for example IStatistic) and not the structure of the data (e.g. int speed)."

[2] If you have a big domain model, I highly discourage this, as it leads to unrefactorable and tightly-coupled code. Another topic for another time.

[3] Remember: getters and setters are evil! :)

Labels:

Friday, June 6, 2008

Is JavaBlackBelt among your favourite Java resources?

posted by Moandji Ezana
Ted Neward recently asked what people's favourite Java resources were and I'll try to get some recommendations from everyone at JBB.

Alex Miller listed some of his, including JavaBlackBelt! Thanks, Alex. As it happens, we agree with his list: his three books are on our shelves, we all read the Java Specialists newsletter and I saw an eye-opening talk by Angelika Langer on annotations at JSpring.

Definitely check out the rest of Alex's blog. You might want to start with his most popular posts.

Labels:

Thursday, May 22, 2008

Is it important that JavaBlackBelt runs on Java?

posted by Moandji Ezana
Have you seen the massive debate on The Server Side about companies not using their own products? The examples given were the Spring and JavaLobby websites using Drupal rather than a Spring- or Java-based CMS and TSS.NET itself not actually running on .NET.

How important is it to eat your own dog food? From the discussion on TSS, I gathered that there were three elements concerning technology choice: how it affects the user experience, how it affects your own work and how it reflects on your company (ie. image).

For the most part, the JavaBlackBelt user experience is language-agnostic. The obvious exceptions are the programming exams, which rely on the Java compiler. Those aside, as a site member passing exams and contributing to them, objectively it wouldn't make a difference if JavaBlackBelt were written in PHP or Ruby or C# or .

However, our use of Java technologies extends beyond JBB and into the classroom, when we teach. In that situation, developing in Java is a great advantage, as we have years of real-world experience (with JBB and as consultants on other projects) to draw on.

Finally, in terms of image, it makes sense for a platform that encourages the use and better understanding of Java technology (rather than simply reports news and information about it) to live by its own slogans (and it seems that Grails feels the same way).

Of course, this logic applies only to our core domain. Blogging, for example, is not our core domain, so we just use Blogger's platform without wondering if it runs on Java or not. As ever, one must pick and choose battles wisely.

Labels:

Tuesday, May 20, 2008

JavaOne 2008 - part 1: small booths

posted by John Rizzo

This month, I really enjoyed going to JavaOne.


I must admit that I spent more time talking to people than attending technical sessions. That's probably the thing I like best about JavaOne: soooo many people to meet. It's huge. And they are all interesting, experienced folks.


The pavilion is a great place to meet them. Imagine a huge room, probably the size of a football (soccer) field, filled to the brim with sponsors, meeting tables and VIP lounges.


I'll refrain from telling you which was the worst company with the worst product. But I'm willing to tell you about one of the best: JavaRebel.


Jevgeni Kabanov proposes a product with a very narrow purpose, but that could save most of my customers a huge amount of man days and frustration. His tool frees the developer from waiting on the build.


Of course, you'll argue that IDEs like Eclipse compile as we type the code and there is no need to wait for them to compile. But as you know, Java EE introduces a productivity-killing concept: deployment. Large projects have an Ant build that takes a significant amount of time to execute. Significant enough to make you start doing something else and forget what you were doing originally. It interrupts your development process and context switching kills a developer's productivity.


Jevgeni didn't want to tell me the inner details/secrets, but basically, you can add methods to existing classes, add new classes and so on, save the source file from your IDE, and the change is instantly deployed.


JavaRebel small team developed a funny video to convince your boss:

JavaRebel cartoon (click to play)


I also made an interesting stop at the Jetty booth.

As you know, Jetty is a free web application server competing with Tomcat and others. For running JavaBlackBelt.com, we use Tomcat. So, I naturally asked the question: "Why should I move from Tomcat to Jetty ?"


The first answer was funny: "Because it's not Apache". Maybe some of you have non-funny experiences with Apache people/culture and want to debate it on our forum.


He also was convincing, giving me technical reasons which we could summarize as: smaller, embedded, faster.




Webtide (Jetty) booth, with on the right, Greg Wilkins, Webtide's CTO


My next question was obvious: I asked why Tomcat was such a success. Tomcat, he said, was the reference Servlet/JSP implementation. That fact alone draws many downloads, but currently, Tomcat is losing significant market share to ... Jetty.


Later in the evening, I dined with a few high-end technicians from various horizons. After a beer of two, I asked the question: "What's the best web application server, according to you ?"

The guys were quite unanimous that it was definitely not Tomcat, and they saw Jetty as a good choice.


In the part 2 of this article, we'll visit some large booths.


John.