Once again, the great Devoxx conference allowed ordinary developers
to express an opinion on the future of the Java language.
This time, the focus was on prioritising which changes should happen.
The figures given below are of course indicative only.
They are based on those Devoxx attendees who actually participated on the whiteboards.
Also, the figures are as recorded at the end of Thursday (Friday scores not included).
The whiteboard photos are available which provide additional information.
Bear in mind that my figures may disagree with the photos in some small way based on when I counted the results relative to when the photos were taken.
Given eight language changes, rank them according to priority
This year, rather than simple "do you like this yes/no" questions, we posed something tougher.
Prompted by Alex Buckley, we asked participants to rank eight language change proposals.
Voters had to mark the number one against their highest priority, two against their next highest
and so on until they had no more priorities.
Attendees could also vote against a proposal by marking an 'X'.
The voting system was not the simplest, and we know a few people didn't vote correctly.
However, we do believe that the vast majority did vote according to the rules making these results valid.
The total number of voters was around 220, so the results have good validity.
| Feature |
Properties |
Multi catch |
Null handling |
List/Map syntax |
Extension meths |
Method pointers |
Multiline Strs |
Infer generics |
| 1 |
33 |
47 |
70 |
10 |
6 |
8 |
9 |
61 |
| 2 |
21 |
56 |
38 |
16 |
8 |
10 |
12 |
49 |
| 3 |
30 |
35 |
27 |
35 |
10 |
15 |
21 |
35 |
| 4 |
25 |
26 |
15 |
42 |
17 |
13 |
28 |
19 |
| 5 |
10 |
20 |
15 |
29 |
13 |
25 |
29 |
19 |
| 6 |
14 |
15 |
8 |
17 |
23 |
21 |
27 |
15 |
| 7 |
14 |
9 |
2 |
18 |
24 |
25 |
24 |
11 |
| 8 |
26 |
19 |
2 |
9 |
19 |
23 |
32 |
8 |
| X |
29 |
1 |
12 |
8 |
28 |
24 |
15 |
0 |
| |
| Total Votes |
202 |
228 |
189 |
184 |
148 |
164 |
197 |
217 |
Total votes (excluding X) |
173 |
227 |
177 |
176 |
120 |
140 |
182 |
217 |
| Weighted average |
4.08 |
3.41 |
2.49 |
4.32 |
5.36 |
5.25 |
5.16 |
3.07 |
Here are the first preference votes:

Adding the second preference votes:

Adding the third preference votes:

Adding the fourth preference votes:

Adding the remaining votes:

So, what do these results tell us?
Well, they are in fact amazingly clear.
Null-handling was the first preference favourite by a small margin, ahead of Infering RHS generics and Multi-catch of exceptions.
However, if particpants had been given just three votes, then these three would have scored almost exactly equal (135/145/138)
and over double that of List/Map access (61).
Next in line (ignoring properties) was List/Map access using [], which can be seen by the big jump in third and fourth preference votes.
Fifth was Mult-line strings, which developers seem to not be that fussed about.
Finally, extension methods and method pointers (method references) performed poorly in the vote.
Properties was shown to be the most divisive, with both a large number of votes for and against, and fewer in the middle preferences.
For example, notice the high number of first preferences, but dropping back when adding second and third preferences.
In addition, properties has a high number of low preferences and votes against (coloured black).
Since properties isn't going to be included in JDK 7, the properties column is really just an interesting comparison data point.
Obviously in a free vote like this without any explanations, it is easy for people to not vote for items they don't understand.
This could explain some the lower scores for Extension methods and Method references (see the total number of votes cast to confirm this).
However, even taking this into account, these two don't seem to have as much support as the big three of
Null-handling, Infering RHS generics and Multi-catch exceptions
It should also be noted that the graphs and the weighted averages are in line with one another.
Other language changes
In addition to the ranking above, there were some other votes.
The vote on closures was split 50/50:
The vote on abstract enums showed a majority in favour:
The vote on ARM (resource management) showed a large majority in favour:
The vote on some form of delegation showed a majority in favour:
The vote on for each over a string showed a majority in favour:
Summary
Firstly, a big thank you to the Devoxx voters, and to Stephan and the Devoxx organisers.
I think this exercise was a huge success in participation.
I'm certainly not in favour of language design by democracy, but I am very much in favour of gathering large scale information
on what really causes developers pain.
Clearly, handling nulls, RHS generics and catching exceptions are three big issues.
I hope to repeat the exercise again soon.
And if any JUG (public or company internal) wants to do the same (maybe with different proposals) then I'd recommend it
(and I've even got an Open Office presentation if you want some material - just drop me a line).
Any feedback or thoughts are welcome!