I’ve decided to celebrate November 11th by reading about IT and CS, and a bit of philosophy of course. I’ve started with the great essay by Joseph Gentle about 3 tribes of programmers, which is a very nice summary of the key differences between groups of software engineers and where they come from.
Then, I’ve got back to Brian Goetz’s State of the Lambda and State of the Lambda: Libraries Edition, two discussions of new features of Java SE 8: lambdas, method references and streams. It’s a very good read and spreads some light on what’s so nice about streams and on the goals of this design.
My next reading item has been Java performance tutorial – How fast are the Java 8 streams? by Angelika Langer. This text is the exact opposite of Brian Goetz’s, because it’s far less precise and is based on some arbitrary choices. It starts with a remark that micro-benchmarking is hard, only to come to the conclusion that streams are slow after only measuring their performance on some min/max/average lookups.
Then we find the remark that:
The performance figures change substantially if the functionality applied to each element in the sequence is cpu intensive. You will find that there is no measurable difference any more between for-loop and sequential stream if the functionality is heavily cpu bound.
and that’s it! Streams are slow when applied to no-brainers like finding a minimum in an array of random integers. If I haven’t read the texts from the language architect working on the Project Lambda, perhaps I would even be discourage to use streams.
Next (and last) was Adrian Coyler’s overview of Snap, Google’s take at networking stack rework. Judging by the numbers – they’re succeeding. Judging by the design – they’ve really got the brainpower to approach any problem and solve it.