One lesson that Nathan Weizenbaum learned from Java that makes him a better Ruby programmer: “I learned what I was abstracting. I learned what blocks are, why dynamic typing is useful, what it means to redefine an operator. And I learned it from Java, by doing without.”