on oracle requiring course for Java hands on exams

I learned that Oracle is adding a course requirement to the developer and architect certifications. thanks to this CodeRanch thread.  I’m glad I already completed the SCEA/OCMJEA. For facts and updates see the CodeRanch thread.  The first post is being updated as we learn more about the details.  This blog post is my thoughts on it along with a comparison to other certs.

What does Oracle hope to gain by the change?

The official statement/FAQ says,

Many Oracle certifications require hands-on course attendance as a part of the certification path. The course requirement is being added to these certification paths to bring them in line with Oracle Certification Program’s standards for the levels of certification under which they fall.

Oracle blogged about this for their Oracle exams.  The gist of the blog is that less people take the test with a required course but it cuts out cheaters.

Other possibilities:

  1. It’s a way for Oracle to make more money. (Oracle denies this in the blog)
  2. It makes the certification rarer and more valuable.  (This didn’t work out for Spring – see section below)
  3. It’s a way for Oracle to quietly retire those certifications from “lack of demand” or reinvent them into something else.

Things I find odd:

  1. They aren’t the right courses!  For the architect exam, you can take Intro to Java, Intro to Modeling, JEE development or JEE architecture.  I’ve paraphrased the names to make it easy to see that only one or two are things that apply to an architect.  And all of them are something someone should know before taking the exam.  I wouldn’t have been interested in going to any of those classes as I already know that material and it would have been a waste of time/money.
  2. Oracle doesn’t require a mandatory course for their developer exams.
  3. The Oracle 11g Master exam requires a two day hands on course to pass.  I think this is what discourages cheaters, not the class.  In our world, the equivalent would be a longer exam that has you develop or design something new in person.  Incidentally, the SCJP Plus that Sun didn’t proceed with would have gone in that direction.  (alebeit not at a master level)
  4. On the Oracle side, Oracle has declared that developer exams don’t go in the master category.  The table shows they are all that professional or specialization/expert level.  And no, most of them don’t require training.  So I can be a Peoplesoft Expert without training but not a developer?
  5. An official course makes more sense for a product than development.  (Oracle knows their database better than anyone.)

But Spring requires a course

The SpringSource developer exam (see my comments) has “required” completion of their course since the exam’s inception in 2008.  Then they got rid of the grandfather option and everyone is required to take the course.  Which of course means the exam serves as a final exam for the course and is of significantly less value.  Not the best analogy.

a sql quiz + is a lower hourly rate cheaper?

Suppose you have a task to write some JDBC code and you need to do so in the cheapest way possible.  Having your people grow should not be considered here, just the rate.

Person A

Charges 3X per hour and can write working code on the first shot, test it and complete it within an hour

Person B

Charges X per hour, but needs to multiple cycles to fix once the code is typed.  (This includes the time to identify what the problem is for each, build cycles and fix time.) For the SQL quiz , see how many errors you can find in the following code. I’ll post the answers as a comment. See if you can spot any I didn’t insert on purpose.

PreparedStatement stmt = null;
ResultSet rs = null;
try {
  String sql = "select count(*) from table" + "where column = ?";
  stmt = conn.prepareStatement(sql);
  stmt.setString(1, "test");
  rs = stmt.executeQuery();
  System.out.println(rs.getInt(1));
  sql = "select count(*) from table2" + "where column = ?";
  stmt = conn.prepareStatement(sql2);
  stmt.setString(1, "test");
  rs = stmt.executeQuery();
  System.out.println(rs.getInt(1));
} finally {
  stmt.close();
  rs.close();
}

Which is better

In today’s economy, driving down costs is a hot topic.  One phrase service providers consider is “how can we lower the rate.”  This is the wrong question.  The question should be how to lower costs overall.  Person A is going to be cheaper overall even though the hourly rate is three times as high.  We’ve all heard the comment that a good developer is many times more productive than an average one.

Granted, my example is extreme.  It shows the difference between an experienced person and an someone new to JDBC.  The point is to use the extreme to emphasize that it’s not all about the hourly rate.  In the real world, training the entry level person has value too of course.

Another view

This reminds me of the methodologies that ask you to estimate how many hours/days/weeks a task will take without saying who will do the work.  Well, if I do it, the work will take a week.  If an entry level person is doing it, it may take four.  If someone experienced is doing it who doesn’t know the system, it may take two.  How do we balance the differences in people when estimating?

Google Releases GWT Designer

Last week, Google released the GWT 2.2 update. While this was a relatively minor update, at least compared to previous version updates, there was one new feature mentioned in the release notes that was much needed: GWT Designer.

UiBinder’s Missing Cousin

The GWT 2.0 version saw the release of the UiBinder framework, a technique for creating GWT components in HTML, analogous to building applications in MXML over ActionScript in Flash/Flex. For example, the following UiBinder snippet creates a GWT panel and list box in an HTML-based template:

<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'    xmlns:g='urn:import:com.google.gwt.user.client.ui'>
       <g:HTMLPanel>
              Hello, <g:ListBox ui:field='listBox' visibleItemCount='1'/>.
       </g:HTMLPanel>
</ui:UiBinder>

What was severely lacking in the GWT 2.0, though, was the ability to edit this layout using a visual tool. There was really no compelling reason to switch to UiBinder, since it required learning a new syntax with limited benefits over writing it directly in Java.

Enter GWT Designer, now included in the Eclipse GWT 2.2 plugin, which allows you to create UiBinder components directly using a visual editor! Below is a sample screen-shot from a UiBinder class created in GWT Designer:

GWT Designer

But wait, there’s more!

GWT Designer is actually part of the WindowBuilder Pro family of graphical editors that includes SWT Designer and Swing Designer. Google offers the option of downloading the full stand-alone application, which includes support for 3rd party GWT add-ons such as GWT-Ext, GXT and SmartGWT.

With the GWT 2.2 release, Google also added support for HTML5, although it is marked as experimental/beta for the time being. To some surprise, they also deprecated support for Java 1.5 so if you have not upgraded to Java 1.6 yet, you will now get warnings in your application. Overall, the GWT 2.2 release helps to round out the GWT feature set leading to more powerful and easier to use tools.

I'm Speaking at TheServerSide Java Symposium Reminder: Jeanne and I are both presenting at TheServerSide Java Symposium next month. My lecture is entitled “GWT Roundup: An Overview of Google’s Web Toolkit and Hybrid Integration” and Jeanne’s presentation is called “Throw Away All The Rules. Now What Process Do You Follow?“. The conference is being held in Las Vegas and it’s not too late to register to attend!