Every Friday, we’re showing you a couple of nice new tutorial-style Java 8 features, which take advantage of lambda expressions, method references, default methods, the Streams API, and other great stuff. You’ll find the source code on GitHub.
The Best Java 8 Resources – Your Weekend is Booked
We’re obviously not the only ones writing about Java 8. Ever since this great language update’s go live, there had been blogs all around the world appearing with great content and different perspectives on the subject. In this edition of the Java 8 Friday series, we’d like to summarise some of the best content that has been going on on that subject.
1. Brian Goetz’s Answers on Stack Overflow
Brian Goetz was the spec lead for JSR 335. Together with his Expert Group team, he has worked very hard to help Java 8 succeed. However, now that JSR 335 has shipped, his work is far from being over. Brian has had the courtesy of giving authoritative answers to questions from the Java community on Stack Overflow. Here are some of the most interesting questions:
- What is the reason why “synchronized” is not allowed in Java 8 interface methods? – Answer
- Why is “final” not allowed in Java 8 interface methods? – Answer
- Is “Java Concurrency In Practice” still valid? – Answer
- How to correctly determine that an object is a lambda? – Answer
- Why does Iterable not provide stream() and parallelStream() methods? – Answer
- Using a semaphore inside a nested Java 8 parallel stream action may DEADLOCK. Is this a bug? – Answer
- Java8: Why is it forbidden to define a default method for a method from java.lang.Object – Answer
- Is there a way to compare closures? – Answer
- Java 8 streams serial vs parallel performance – Answer
- Convert Iterable to Stream using Java 8 JDK – Answer
Thumbs up to this great community effort. It cannot get any better than hearing authoritative answers from the spec lead himself.
2. Baeldung.com’s Collection of Java 8 Resources
This list of resources wouldn’t be complete without the very useful list of Java 8 resources (mostly authoritative links to specifications) from the guys over at Baeldung.com. Here is:
3. The jOOQ Blog’s Java 8 Friday Series
Yay, that’s us! :-)
Yes, we’ve worked hard to bring you the latest from our experience when integrating jOOQ with Java 8. Here are some of our most popular articles from the recent months:
- 10 Subtle Mistakes When Using the Streams API
- Language Design is Subtle
- No More Need for ORMs
- Let’s Deprecate Those Legacy Libs
- Lean Concurrency
- Map Enhancements
- SQL ResultSet Streams
- A Lesser-Known Java 8 Feature: Generalized Target-Type Inference
- Does Java 8 Still Need LINQ? Or is it Better than LINQ?
4. ZeroTurnaround’s RebelLabs Blog
As part of the ZeroTurnaround content marketing strategy, ZeroTurnaround has launched RebelLabs quite a while ago where various writers publish interesting articles around the topic of Java, which aren’t necessarily related to JRebel and other ZT products. There is some great Java 8 related content having been published over there. Here are our favourite gems:
- How your addiction to Java 8 default methods may make pandas sad and your teammates angry!
- Is Java 8 the fastest JVM ever? Performance benchmarking of Fork-Join
- How to avoid ruining your world with lambdas in Java 8
- Monadic futures in Java 8: How to organize your data flow and avoid callback hell
- How your addiction to Java 8 default methods may make pandas sad and your teammates angry!
5. The Takipi Blog
- Java 8 StampedLocks vs. ReadWriteLocks and Synchronized
- 10 Features in Java 8 You Haven’t Heard Of
- 15 Must Read Java 8 Tutorials
- New Parallelism APIs in Java 8: Behind The Glitz and Glamour
- The Dark Side Of Lambda Expressions in Java 8
6. Benji Weber’s Fun Experiments with Java 8
This blog series we found particularly fun to read. Benji Weber really thinks outside of the box and does some crazy things with default methods, method references and all that. Things that Java developers could only dream of, so far. Here are:
- JSON to Java Interfaces with Nashorn
- Pattern Matching in Java
- Java Value Objects
- Java Forwarding-Interface Pattern
- Joins in pure-java database queries
- Checked Exceptions and Streams
- Typesafe database interaction with Java 8
7. The Geeks from Paradise Blog’s Java 8 Musings
Edwin Dalorzo from Informatech has been treating us with a variety of well-founded comparisons between Java 8 and .NET. This is particularly interesting when comparing Streams with LINQ. Here are some of his best writings:
- Why There Is Interface Pollution in Java 8
- Memoized Fibonacci Numbers with Java 8
- Java 8 Optional Objects
- Java Streams API Preview
- Java Streams Preview vs .Net High-Order Programming with LINQ
Is this list complete?
No, it is missing many other, very interesting blog series. Do you have a series to share? We’re more than happy to update this post, just let us know (in the comments section)
Bloggers are a different breed. They’re spending a lot of time investigating issues in a systematic way that is presentable to others. And then they share – mostly just for the fun of it and for the rewarding feeling sharing gives them. Whenever we google for a technical issue, chances are high that we stumble upon such a blog post.
One of the best blogs out there is Petri Kainulainen’s Do You Want to be a Better Software Developer? Petri has also written a book about Spring Data, which is available from Amazon, O’Reilly and Packt Publishing.
Most recently, I have found his two Maven-related tutorials very useful and well-written:
- FindBugs Maven Plugin Tutorial
- Integration Testing with Maven
- Creating Profile Specific Configuration Files With Maven
Also, in 2013, he has written an extensive series of blog posts titled “What I Learned This Week”. Some examples:
Petri’s blog is certainly one that you should follow. His posts are very well structured and quite complete. Currently, he’s also writing an extensive series about jOOQ, which is a very useful additional resource for new jOOQ users.
Thanks for all this great content, Petri!
Our recent article about Code That Made Me Cry was really well received and had quite a few readers, both on our blog and on our syndication partners:
In each of us programmers is a little geek with a little geek humour. This is reflected by funny comics like the one about
Other platforms ridiculing bad code include
- Stack Overflow with questions like the best comment in source code, ever.
To promote this hashtag, we have created a website, where we will list our collective programmer pain. Behold:
I’ve just replaced 4 halogen bulbs in my appartment. When I threw the old ones into our recycling bin, I’ve noticed that there were already around 8 bulbs in there. From the last 5-6 months, only! This made me sad, as it shows how our consumer society works. Read on to learn how jOOQ strives to be different with respect to endurability and long-lasting quality.
More stuff I’m made to buy because it falls apart
I’ve just bought a new mobile phone, because the old one didn’t really work anymore, after only 2 years!
I’ll be buying a new hard drive next week, because the one I’ve bought recently (to replace a broken, 3 year old one) heats up too quickly and doesn’t give me the throughput I want!
I buy 2 pairs of new Adidas a year, because they don’t last as long as my leather shoes!
I buy about 5 mini-umbrellas a year, because apparently, they’re made to last a mere 10 days of rainfall!
I buy about 2 new city bikes a year, because mending them is more expensive than buying new ones. It’s not that I’d just have to replace tires, they’re actually quite broken after 1/2 year!
I bought a Windows Surface RT tablet just to learn that almost no programs can run on it. I would have had to buy the Pro version and throw the old one away.
Should we really work this way?
I’m forced to buy new stuff. I buy new stuff because the previous stuff I’ve had breaks apart so quickly. And in many cases, it is very clear that it has been designed to break apart in a short period of time. Replacing things with new things is an industry of its own. If stuff were made to last and to work for 10 years (Hah 10 years. Our grandparents used the same stuff for 40 years!), corporations would make less money with new merchandise to replace their previous equivalent merchandise. Take my awesome Samsung flat screen TV, for instance. I had bought it around 7 year ago, and it still works like a charm. Samsung never got any money from me again, even if I’m a very happy customer. Is that a bad business plan for Samsung?
There’s more to life than making tons of money and keeping a paying customer base for your deliberately mediocre product line. There is a strong urge to contribute to making this world a better place. By selling quality products that do not fall apart very quickly. Products that do not require a lot of support. Products that are easy to use and long-lasting, such that the return on investment for your customer is extremely high, at the cost of making “only” a living instead of tons of money and waste.
At Data Geekery, producing such products is our highest credo. This is why we charge a bit of money for licensing with support included, because we think that our quality is so high, you might not even need any support. We could make a lot more money by lowering our quality and by hiring a lot of expensive consultants to explain to you how our complicated product works. But jOOQ is not complicated, it is extremely easy to use.
Many “free” Open Source products don’t work this way. They lure you in by being free and LGPL-licensed, unloading a lot of consulting and maintenance costs onto you only later on. It is your choice. Do you want to invest in your future by keeping maintenance costs low? Or do you want to get a cheap product and pay later on? Think about dirt cheap ink jet printers and how much you’ll pay on those quickly-emptying ink-cartridges later on. Think about dirt cheap coffee machines and how much you’ll pay on those capsules later on. Think about some computer products, and how often you have to pay for ridiculous updates, because the “old” minor release of the operating system is no longer supported.
Don’t think in short terms. Don’t fall for “free” stuff. There is no such thing as free lunch. You always pay. A little bit now, or much more later.
A recent event has triggered a lot of interest in the debate about the good and the bad parts of Open Source. Oracle’s attack on Open Source. For large corporations who aren’t Red Hat, taking a stand on the topic is far from easy. Oracle used to sell only commercial software, but has since acquired a lot of open-sourcey companies, such as Sleepycat Software (BerkeleyDB) or Sun Microsystems (Java, MySQL). Phrasing a long-term strategy upon this legacy isn’t easy.
At the same time, Oracle is extremely successful, having surpassed IBM’s revenue, making Oracle the second largest software company in the world. The continuing popularity of its flagships Java and the Oracle database is promising, also for middleware vendors providing products such as jOOQ, for their flagships.
At Data Geekery, Open Source is also very important, just as commercial licensing has become, since recently. The change towards dual-licensing has been received rather positively on the jOOQ user group, even if it led to open questions about the continued Open Source strategy. But what’s the real difference between Open Source and commercial software? At Adobe, Dr. Roy Fielding is often cited saying that there is essentially no difference between Open Source and commercial software, and he’s quite an authority for both worlds. Both are absolutely viable business models with their pros and cons respectively (unfortunately, I cannot back this up with an actual citation).
One significant difference, however, is that low-quality open source software can heavily outlive low-quality commercial software, as it just never really dies, as no one is “losing money” on low OSS “sales”. I’ve recently blogged about how to recognise such low-quality Open Source software.
Open Source is foremost a business and marketing strategy, just as much as it is a mission. This business strategy can be a good or a bad choice for any software vendor.
This is huge news! The Internet will finally become the global network it could’ve always been as ICANN, IANA, IETF and others simultaneously move away from US unilateral Internet governance.
I guess, in the end, the NSA did us all a “favour” with their spying. If this will make the internet better, or if this will introduce UN-style politics remains unclear… But it will certainly change the world. If you want to express your opinion, there’s a heated debate on www.reddit.com going on!
OK, now this beats everything I’ve seen so far. I can now code in the cloud with Koding.com. From a first, very quick glance, I get:
- A VM with a terminal (looks like a Debian distribution)
- PHP and all sorts of stuff that is already installed
- An app store for apps like PostgreSQL or MySQL
- 1.2 GB of free disk space and 2 GB of RAM
Wow. Coding in the cloud. Sounds awesome. What’s next!? And who are they? See the Koding, Inc. blog for their press release about opening up their services to the public: