Optional - The Mother of All Bikesheds by Stuart Marks
DevoxxCited 3× on HN, 2019-2022
63K views · 10 years ago · talk · evergreen
Stuart Marks explains the intended purpose and proper use of Java 8's Optional class and why it caused so much controversy. He gives guidelines for using its small API correctly.
Cited as the authoritative explanation, from the person who added it to OpenJDK, of Optional's narrow intended purpose.
51:40Constraints Liberate, Liberties Constrain — Runar Bjarnason
Scala World
44K views • 10 years ago
50:01Simplicity Ain't Easy - Stuart Halloway
ClojureTV
24K views • 13 years ago
41:19Stuart Sierra - Components Just Enough Structure
ClojureTV
36K views • 12 years ago
1:03:31Brian Goetz - Stewardship: the Sobering Parts
ClojureTV
39K views • 11 years ago
1:42:53Edward Kmett - Type Classes vs. the World
Boston Haskell
36K views • 11 years ago
1:00:19How To Design A Good API and Why it Matters
Google TechTalks
453K views • 19 years ago
9:59Intentional Programming demo (Part 1) - Editor
dftube
14K views • 20 years ago
45:22Coroutines and Loom behind the scenes by Roman Elizarov
Kotlin by JetBrains
41K views • 3 years ago
35:53RailsConf 2015 - Nothing is Something
Confreaks
84K views • 11 years ago
24:28Sebastian Markbage: Minimal API Surface Area | JSConf EU 2014
JSConf
71K views • 12 years ago
49:54The Clean Architecture in Python
Next Day Video
114K views • 12 years ago
44:35Object-Oriented Programming is Bad
Brian Will
2.6M views • 10 years ago
40:50Ruby Manor 3 - Programming with Nothing by Tom Stuart
Confreaks
13K views • 14 years ago
1:32:47Data-Oriented Demo: SOA, composition
Jonathan Blow
201K views • 11 years ago
28:06MountainWest RubyConf 2014 - But Really, You Should Learn Smalltalk
Confreaks
27K views • 12 years ago
56:39Alan Kay - Programming and Scaling
Colin McDonnell
36K views • 11 years ago
47:41"Programming Should Eat Itself" by Nada Amin
Strange Loop Conference
43K views • 12 years ago
10:01Intentional Programming demo (Part 2) - Compiler
dftube
4K views • 20 years ago
33:52Nordic.js 2014 • Douglas Crockford - The Better Parts
Nordic.js
73K views • 12 years ago
1:29:27The Forgotten Art of Structured Programming - Kevlin Henney [C++ on Sea 2019]
cpponsea
245K views • 7 years ago
3 comments from Hacker News
See also the discussion for a similar feature in Java, from "Optional: The Mother of all Bikesheds", where the use and misuse of get() has a central role. video: ▶ this video slides: link
These are pretty weak arguments For the first point - val/var "More importantly, it doesn’t offer its immutable counterpart, val. You still need to add the final keyword, which nearly nobody uses." This super undermines the criticism. "It has the feature but people don't use it" isn't exactly much to write home about. Just use `final var` if you want. Make "final var over var" the same force culturally as JS's const over let" "However, the developers of Optional designed it for return values only. Nothing is available in the language syntax for methods parameters and return values. To cope with this, a bunch of libraries provides compile-time annotations:" This flow of causality here is slightly incoherent. The phrasing implies that if there was a version of optional that was designed for method parameters that would be better and there would be less of a need for compile-time annotations. Here it is sealed interface Option<T> { record Some<T>(T value) implements Option<T> {} record None<T>() implements Option<T> {} } This has "better" semantics than Optional for storing in fields and for using as method parameters. The existence of this does not obviate the desire to have null static analysis, so Optional really isn't that related. ▶ this video It is true though that Kotlin has a more consistent story here, but there are active efforts to improve it for Java. Also, the discussion of extension functions points out that static methods cannot be chained like instance methods - corre
That's not really "why" it was introduced. Optional is used as a null wrapper in other JVM languages so that idiom bled over pretty naturally. Here's a talk "Optional - Mother of all Bikesheds" by Stuart Marks, the guy who added it to OpenJDK: ▶ this video It was mostly just meant to cover the zero or one case on fluent-style interfaces like the Streams API, so check as getFirst() or getAny(). In hindsight, the name Optional was a poor choice if they didn't want the idiom coming over.