Few of my favourite themes this month - TDD, performance, build tools/Maven. Plus a usefel JS library, news from the Java community x Oracle world etc.
- About dying JCP and too silent Oracle (or mostly silent) - a summary of the latest issues and hot topics in the Java community that cause lot of rumor but still no reaction from Oracle including the criticism of JCP and its proclaimed decline. Update 11/1: The article about IBM, Oracle and OpenJDK has links to many related resources and a section on JCP future.
- A fair evaluation of TDD - Test driven development at Transloadit ("honest assessment of the beauty and pain of tdd" - Kent Beck) - according to the author, TDD requires a lot of discipline and is a pain to do but it really pays off if your risks are high, basically it's something like an insurance - there are people living without it but to some it can save life. I miss there a thing I find essential about good test coverage - namely that it forces you to write a better code (more modular, following the single responsibility principle etc.).
- Why Hibernate 4 switches to Gradle instead of Maven 3 - "a means to describe the issues and frustrations I have seen in my 2.5+ years of using Maven for Hibernate builds; in many cases the cause is simply an assumption or concept in Maven itself which did not line up cleanly with how I wanted to do build stuff in Hibernate." The main issues were that Hibernate is a very specific project, which doesn't line up very well with the Maven philosophy and, at the same time, Maven is very strict at forcing it and not really flexible to accommodate to unusual needs (and if Maven is, its plugin often aren't). For example Hibernate is composed of modules that depend on each other while Maven really supports only an aggregation of independent projects. Also, "the release plugin is completely worthless". On the other hand, Gradle is very flexible and - among others - offers powerful scripting, doesn't enforce its way of doing things at all cost (i.e. directory structure), let you also define dependencies on tasks, modules, directories, etc.
- String Concatenation Performance vs. String Builder/Buffer and how Liferay 6 achieved a speedup by not using S.B. [that much] - StringBuilder/Buffer has lot of overhead and thus String.concat or custom code can be faster sometimes. Also see the linked ticket, esp. the comment 'most javac will try to translate "+" to StringBuilder whenever possible. So if you do need to use String.concate(), you'd better use it explicitly.'
- Paul Graham - Beating the Averages - why it's good to learn Lisp. (Because it makes you able to see the limitations of you current language as it's most likely superior to it - among others thanks to Lisp macros.) A really good essay on the power of programming languages, which has persuaded me about some year ago, when I've originally read it, to learn Clojure (a modern Lisp dialect running on the JVM).