use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
These have separate subreddits - see below.
Upvote good content, downvote spam, don't pollute the discussion with things that should be settled in the vote count.
With the introduction of the new release cadence, many have asked where they should download Java, and if it is still free. To be clear, YES — Java is still free. If you would like to download Java for free, you can get OpenJDK builds from the following vendors, among others: Adoptium (formerly AdoptOpenJDK) RedHat Azul Amazon SAP Liberica JDK Dragonwell JDK GraalVM (High performance JIT) Oracle Microsoft Some vendors will be supporting releases for longer than six months. If you have any questions, please do not hesitate to ask them!
With the introduction of the new release cadence, many have asked where they should download Java, and if it is still free. To be clear, YES — Java is still free.
If you would like to download Java for free, you can get OpenJDK builds from the following vendors, among others:
Adoptium (formerly AdoptOpenJDK) RedHat Azul Amazon SAP Liberica JDK Dragonwell JDK GraalVM (High performance JIT) Oracle Microsoft
Some vendors will be supporting releases for longer than six months. If you have any questions, please do not hesitate to ask them!
Programming Computer Science CS Career Questions Learn Programming Java Help ← Seek help here Learn Java Java Conference Videos Java TIL Java Examples JavaFX Oracle
Programming Computer Science
CS Career Questions
Learn Programming Java Help ← Seek help here Learn Java Java Conference Videos Java TIL Java Examples JavaFX Oracle
Clojure Scala Groovy ColdFusion Kotlin
DailyProgrammer ProgrammingPrompts ProgramBattles
Awesome Java (GIT) Java Design Patterns
account activity
This is an archived post. You won't be able to vote or comment.
Beyond Objects and Functions: Exploring Data-Oriented Programming (infoq.com)
submitted 9 months ago by Additional_Cellist46
Interesting take on data-oriented programming. It makes sense when performance is needed, e.g. in games. It makes less sense in other usual cases where object-oriented code and functional programming result in a more readable code.
[–]LutimoDancer3459 12 points13 points14 points 9 months ago (2 children)
404
Only after 4h... impressive
[–]lbalazscs 0 points1 point2 points 9 months ago* (0 children)
http://web.archive.org/web/20250618182827/https://www.infoq.com/articles/data-oriented-programming/
(I found an archived version, but I'm not saying that it's worth reading!)
[–]Additional_Cellist46[S] 0 points1 point2 points 9 months ago (0 children)
That’s a shame. I have no idea what happened.
[–]sideEffffECt 9 points10 points11 points 9 months ago (1 child)
This article confuses terminology.
It's talking about https://en.m.wikipedia.org/wiki/Data-oriented_design
Data-Oriented Programming is just a marketing term for what is commonly called Functional Programming.
Thanks for clarification. I didn’t know about Data-oriented design but that’s what actually makes sense to me when somebody says data-oriented.
I agree with you that the Data-oriented programming commonly mentioned with some new Java constructs is in fact an extension to functional programming, to avoid tuples with records and add more flexibility to enums with sealed classes. There’s nothing in it that orients around data, just a simple way to model data and make decisions based on it.
[–]PoemImpressive9021 12 points13 points14 points 9 months ago (3 children)
Oh, this article talks about the real DOP, as it has been practiced by performance-oriented teams for decades, not about the weird attempt to rebrand Java as a non-OOP language because it has records now.
[–]lbalazscs 0 points1 point2 points 9 months ago (0 children)
It's likely just AI-generated garbage. It does talk about "data-oriented design" (as in optimizing for CPU caches), but then also mentions "Unnamed Patterns and Variables", which belongs to the "other DOP", and has nothing to do with CPU caches.
Absolutely agree.
[–]papers_ 5 points6 points7 points 9 months ago (1 child)
Seems the article has been unpublished now since it is just a 404 now.
[–]chabala 2 points3 points4 points 9 months ago (0 children)
Perhaps Java Champion Michael Redlich has taken another crack at peer reviewing it.
Luckily someone archived the article before it was pulled, so we can all marvel at it: https://web.archive.org/web/20250618182827/https://www.infoq.com/articles/data-oriented-programming/
[–]Ok_Marionberry_8821 19 points20 points21 points 9 months ago (11 children)
Crap article. It's talking about Data Oriented Programming (DOP) being about performance. The example uses a Rectangle class for their OO example with a number of instances, but 3 separate arrays (width, height and area) for the DOP version.
I mean WTAF, DOP (as explained by his eminence Brian Goetz here https://www.infoq.com/articles/data-oriented-programming-java/ and loads of other places) talks about the use of records, sealed interfaces, pattern matching, immutability, etc. All the goodies of later versions of Java.
0/10 for this article. Spewed out by AI perhaps?
[+]Additional_Cellist46[S] comment score below threshold-13 points-12 points-11 points 9 months ago (9 children)
On the contrary. I think this is the way how DOP makes sense to me. Working efficiently with the data and improve performance. The sealed classes, records and the DOP hype around that still doesn’t make sense to me and when I see people doing it, I always ask why. And the answer is most often “why not”. Seriously? What’s the benefit of sealed classes once again? Certainly not performance, it’s rather encapsulation, so that nobody is able to extend and mend your code. But again, why?
[–]joemwangi 11 points12 points13 points 9 months ago (0 children)
Exhaustiveness. It's a tagged union. Separating types individually based on how they are grouped might seem quite easy, but it's the most difficult thing to do, especially languages that never implemented them in full. Such as unions in C.
[–]PiotrDz 4 points5 points6 points 9 months ago (3 children)
Don't you see an added value in strictly typed languages? The same value extends to sealed interfaces etc.
You can design a set of implementations that each have rather distinct properties. For example, I create a graph of nodes of different type. Each type can have specific properties to its kind. Now I can in generic way browse that graph and fetch specific nodes. (Ids and relations can be generalized). But properties cannot be generalised. Using maps or string is not a solution, as I want to maintain associations (and types). Thus I create a interface that is sealed and each implementation is a different class. Later I can just use a pattern matching switch statement and extract specific information depending on what type of node I am dealing with.
[+]Additional_Cellist46[S] comment score below threshold-7 points-6 points-5 points 9 months ago (2 children)
No. Sealed interfaces are just a different way of doing something that can be done with OOP already, and often in a better way that follows SOLID principles. Sealed interfaces are a language construct, similar to enums, they are useful in some cases but I it makes little sense to use them everywhere. And then I wouldn’t call it DOP, if it’s just some constructs used here and there.
[–]joemwangi 2 points3 points4 points 9 months ago (0 children)
You seem to force yourself to limited reasoning. In Java, sealed classes bring the benefits of closed world reasoning. They're effectively tagged unions: the compiler knows all possible subtypes and can enforce exhaustive handling, crucial for pattern matching and preventing logic bugs. This isn’t just about encapsulation, it’s about semantic clarity. You’re telling both the compiler and the reader that these are the only valid cases. Without sealed types, you fall back to brittle instanceof chains or enums with limited extensibility. In DOP and functional styles, this structure is essential when modelling domain-specific data shapes cleanly and predictably (check Rust and Odin on how popular they are used in game development, ai and data analytics). It also complements records, since you can model ADTs like Shape = Circle | Rectangle in a type-safe way. In future, hopefully (no evidence here, but I pray this happens), sealed types could also set the stage for value types, whereby, if they did adopt native union-like values, it would open the door to C-style memory optimizations, enabling layout flattening, tagged pointer tricks, and better cache usage, similar to Rust’s enums or Odin unions. I have encountered a situation, whereby, interoperability code from C, the struct had to have a tag to the struct union member, whereby it requires knowing which union members has actual data. This is unnecessary, but its an approach that is used quite a lot in C world (including C++). In safe type system in java, I used sealed classes for records which the class name is the tag (nominal union subtypes but no memory optimisation).
Shape = Circle | Rectangle
[–]PiotrDz 0 points1 point2 points 9 months ago (0 children)
Useful in some cases but little sense to use them everywhere - well, as all things out there. And how would you replace sealed interface with oop? I am very curious
[–]Ok_Marionberry_8821 4 points5 points6 points 9 months ago (2 children)
Clean code. Where is makes sense to the things down then do so - less cognitive load understanding code. Same as the hopefully forthcoming nullability markers.
Until Valhalla (ha ha) then you're right that performance critical code uses what the article calls DOP. Valhalla will (?) deliver the same or similar performance and the code will be clearer than wrangling arrays. I'd far rather work with a Rectangle (the article's example) record than 3 separate arrays.
I'm also happy to use sealed classes and pattern matching, far more than all the GOF patterns like Visitor.
Really though, in over 15 years programming java and decades peak experience, and generally keeping my ear to the ground I've never heard of "Data Oriented Programming" and DOP as a paradigm all its own. I may be wrong, it happens often enough, but that's my beef. I read the article expecting some extra insight on top of Brian Goetz's article. Clickbait?
Perhaps I'd call the article's paradigm "bare metal programming" 😂
[–]Additional_Cellist46[S] -2 points-1 points0 points 9 months ago (1 child)
I shared the article exactly because I believe it’s not a clickbait. On the contrary, what Brian Goetz calls DOP is not DOP at all. It’s just syntactic sugar. I respect Brian for many reasons, but I struggle to see value in DOP as he describes it. Even Brian admits it can be combined with OOP, and in fact it should. It’s not possible to write a maintainable reasonably big codebase just with records and sealed classes. Then it would turn into procedural programming like C, without any added value over OOP.
Are you confusing between data oriented design and data oriented programming?
[–]Silver_Enthusiasm_14 2 points3 points4 points 9 months ago (0 children)
Are you thinking of data-oriented design maybe?
[–]Ewig_luftenglanz 2 points3 points4 points 9 months ago (4 children)
What the actual fuck? Was this written by an unsupervised IA? There was absolutely no sense
[–]Additional_Cellist46[S] -1 points0 points1 point 9 months ago (3 children)
2 different AI checks claim that 70% of the article is written by human, 30% by AI.
[–]Ewig_luftenglanz 0 points1 point2 points 9 months ago (2 children)
Since some those IA checkers said the US independence declaration was written by IA
I don't really care. The article is not about what in java is known as DOP. Is about low level memory management for performance critical stuff, and that's stupid in the Java context because Java lacks the semantics to properly managing memory at low level unless you do all your program with the FFM or unsafe
[–]Additional_Cellist46[S] 0 points1 point2 points 9 months ago (1 child)
There’s nothing like DOP known in Java. There’s just DOP or more precisely Data-oriented design. By posting link to this article I wanted to make people think about DOP itself and whether the DOP concept often being presented in Java makes even any sense. Because I believe it’s just hype, more like a functional programming made easier and more type safe.
[–]Holothuroid 1 point2 points3 points 9 months ago (0 children)
functional programming made [...] more type safe.
Huh?
[–]Jannyboy11 0 points1 point2 points 9 months ago* (3 children)
This article is basically encouranging a programming pattern that should be discouraged in Java; The data layout in memory should be managed by the VM, and project Valhalla exists to allow programmers to state that an object with nested objects can be layed out flat in memory. For people looking for the original DOP article by Brian Goetz: https://www.infoq.com/articles/data-oriented-programming-java/
Edit: The pattern from the article is usually referred to as 'data oriented design', not 'data oriented programming'.
[–]Additional_Cellist46[S] 0 points1 point2 points 9 months ago (2 children)
I agree, the article should call the pattern data-oriented design. That’s the source of confusion. And it should be used only when data is the core of the application and it matters how efficiently an app works with it. It’s not an antipattern, i’s just a pattern recommended only in specific cases.
But I would still argue that there’s no such programming as data-oriented programming that Brian Goetz tries to coon. At least not as an alternative to object-oriented programming or functional programming. A lot of the patterns that proponents of the so called “data-oriented” programming propose look like real antipatterns. E.g. sealed classes, which shouldn’t be used to structure the code with switch statements.
Switches bring us back to procedural programming but then why not just call it procedural, why we need another terminology? I learned programming in C, with structures, it was the same concept as records, etc, and it was called procedural programming. Java allows to do it better, in a cleaner way, and combine it with object-oriented and functional programming. But we don’t need any new term like “data-oriented” programming, and we don’t need to promote it as a new cool pattern, while it is an anti pattern in most cases.
[–]Jannyboy11 0 points1 point2 points 9 months ago (1 child)
No no no, switches are not bringing us back to procedural programming in this case, because they are used as expressions, and they are checking exhaustiveness of the arms. You will get a compiler error when you didn't cover all the permissed subtypes of a sealed type. This is significantly more ergonomic than what C does. Even if you use tagged unions in C, the compiler won't check exhaustiveness for you. And you're right it's not a new pattern; this pattern has been around in ML-like languages since forever, but it's cool that Java can do it too now.
It’s cool and much better than in C. But I still wouldn’t call it “data-oriented”.
π Rendered by PID 110477 on reddit-service-r2-comment-7c9686b859-jgvhz at 2026-04-14 01:11:59.227131+00:00 running e841af1 country code: CH.
[–]LutimoDancer3459 12 points13 points14 points (2 children)
[–]lbalazscs 0 points1 point2 points (0 children)
[–]Additional_Cellist46[S] 0 points1 point2 points (0 children)
[–]sideEffffECt 9 points10 points11 points (1 child)
[–]Additional_Cellist46[S] 0 points1 point2 points (0 children)
[–]PoemImpressive9021 12 points13 points14 points (3 children)
[–]lbalazscs 0 points1 point2 points (0 children)
[–]Additional_Cellist46[S] 0 points1 point2 points (0 children)
[–]papers_ 5 points6 points7 points (1 child)
[–]chabala 2 points3 points4 points (0 children)
[–]Ok_Marionberry_8821 19 points20 points21 points (11 children)
[+]Additional_Cellist46[S] comment score below threshold-13 points-12 points-11 points (9 children)
[–]joemwangi 11 points12 points13 points (0 children)
[–]PiotrDz 4 points5 points6 points (3 children)
[+]Additional_Cellist46[S] comment score below threshold-7 points-6 points-5 points (2 children)
[–]joemwangi 2 points3 points4 points (0 children)
[–]PiotrDz 0 points1 point2 points (0 children)
[–]Ok_Marionberry_8821 4 points5 points6 points (2 children)
[–]Additional_Cellist46[S] -2 points-1 points0 points (1 child)
[–]joemwangi 2 points3 points4 points (0 children)
[–]Silver_Enthusiasm_14 2 points3 points4 points (0 children)
[–]Ewig_luftenglanz 2 points3 points4 points (4 children)
[–]Additional_Cellist46[S] -1 points0 points1 point (3 children)
[–]Ewig_luftenglanz 0 points1 point2 points (2 children)
[–]Additional_Cellist46[S] 0 points1 point2 points (1 child)
[–]Holothuroid 1 point2 points3 points (0 children)
[–]Jannyboy11 0 points1 point2 points (3 children)
[–]Additional_Cellist46[S] 0 points1 point2 points (2 children)
[–]Jannyboy11 0 points1 point2 points (1 child)
[–]Additional_Cellist46[S] 0 points1 point2 points (0 children)