5 ms·
It's not about being careful (they are--but always with the baggage of backwards compatibility), it's about not having a soul. Java has made a U-turn in adding
by dullgiulio 7y ago
It's not about being careful (they are--but always with the baggage of backwards compatibility), it's about not having a soul.
Java has made a U-turn in adding streams and related functional features on top of a language that used to be strongly for OOP (actually defining the meaning of OOP for a generation of developers.)
These different paradigms together make for code that does not read the same no matter who writes it.
I love how Go code usually ends up being extremely similar, no matter who write is. (Actually, Kubernetes is a counter example for this: Go should have gone even further in forcing style.)
If you think that "all code reads the same" is detrimental to developers, you are conflating the idea of developer (problem solver) to that of coder (keyboard typist.)
- sgift 7y ago> Java has made a U-turn in adding streams and related functional features on top of a language that used to be strongly for OOP (actually defining the meaning of OOP for a generation of developers.) So, by adding a feature which works extremely well with OO and enhances the language they have no soul? That doesn't make any sense. Javas soul is being a blue collar language. It leaves the experiments to other (JVM) languages and takes the parts which have been shown in the field to be useful for many cases. Go on the other hand is a half-finished Java, produced for the sake of saying "We are Google, OF COURSE we have our own language".
- glangdale 7y ago"Java, from Bell Labs"
- pjmlp 7y agoThat was Limbo actually, so it goes well with Go.
- blankaccount 7y agoHow do you feel about streams/lambdas with Java's checked exceptions?
- james-mcelwain 7y agoThis is absolutely the biggest wart in modern Java. We now wrap all methods that can throw checked exceptions to rethrow unchecked. This works well for web services that can just retry or rollback and report an error to the client on transient exceptions, but is insufficient for many applications.
- 0x445442 7y agoI think what dullgiulio is getting at is when working with large, code bases and teams Java's multiple paradigms leads to more difficult code to maintain. I've been experiencing this on my current project and its completely new development. One package is written in the "new" functional style, another is written in "old" object oriented style, other parts use classes for nothing more than name spaces to house static methods. The reality is it's already a mess.
- jeanlucbernard 7y agoJava is a blue collar language in the eyes of people interested in language design and to be fair, some of them recognize its merits. The majority of programmers care more about their domain in which they are working and less about the language used in that domain.
- usrusr 7y ago> Java has made a U-turn in adding streams and related functional features on top of a language that used to be strongly for OOP (actually defining the meaning of OOP for a generation of developers.) But isn't that just an inevitable outcome of aging? The only way to never age is dying young. And practical use of Java had stopped being textbook OOP (which means using classes to model the world and putting your logic where the data is) long before the streams API etc came along. Actually the shift away from textbook OOP integration between logic and data already started when the beans pattern drowned us in getters and setters, which already happened when Java generics were still the Pizza language sitting as a draft on Odersky's desk. I even suspect that lack of generics was a confounding factor in that shift, because when you look at a pre-generics codebase (which I happened to do just yesterday) you will find that the brave men and women back then spent an enormous amount of boilerplate just for hiding untyped collections behind typed facades which is a form of using OOP features (meant for modeling the world) for program structure, which is basically what post-textbook-OOP Java is all about.
- StevePerkins 7y agoI have no idea what having a "soul" means. But I suspect that my career has been well-served by being dead inside.
- reallydude 7y ago> I have no idea what having a "soul" means A design philosophy. Some sort of measurable practice that influences design. This is not limited to Java. Design by committee has been destroying the maintainability of many languages.
- hackerpacker 7y ago"Some sort of measurable practice", not anything remotely like a "soul", in fact invoking "you have no soul" usually means you lost the argument and are now desperate enough to say anything.
- bunderbunder 7y ago> streams and related functional features Streams are inspired by some idioms of functional programming. But they are not functional, and they cannot be made to be functional, because it is impossible to evaluate one without causing a rather glaring side effect.
- erik_seaberg 7y ago> I love how Go code usually ends up being extremely similar, no matter who write is. I want expert code to be concise and uncluttered. When everything reads like a novice wrote it, that's a problem.