<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<font size="4" face="monospace">This was received on
amber-spec-comments.</font><br>
<div class="moz-forward-container"><br>
<br>
-------- Forwarded Message --------
<table cellpadding="0" cellspacing="0" border="0" class="moz-email-headers-table">
<tbody>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">Subject:
</th>
<td>Regarding JEP 512</td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">Date: </th>
<td>Wed, 4 Jun 2025 18:43:32 +0200</td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">From: </th>
<td>Rufus Riefenstahl <a class="moz-txt-link-rfc2396E" href="mailto:rufusriefenstahl@gmail.com"><rufusriefenstahl@gmail.com></a></td>
</tr>
<tr>
<th valign="BASELINE" align="RIGHT" nowrap="nowrap">To: </th>
<td><a class="moz-txt-link-abbreviated" href="mailto:amber-spec-comments@openjdk.org">amber-spec-comments@openjdk.org</a></td>
</tr>
</tbody>
</table>
<br>
<br>
<div dir="auto">Hello there, project Amber EG team.
<div dir="auto"> I would like to share my honest thoughts
regarding JEP 512: "Compact Source Files and Instance Main
Methods".</div>
<div dir="auto">First off, let me introduce myself. My name is
Rufus Riefenstahl. </div>
<div dir="auto">I have been programming Java for about 20 years,
13 of them professionally.</div>
<div dir="auto">My work includes major contributions to desktop
software at film production firms and 3 years so far, backend
development using Spring Boot. Lately I am preparing to apply
for a mentorship position at my company, teaching novices how
to do Java better.</div>
<div dir="auto">Now my thoughts about the JEP...</div>
<div dir="auto">When I first saw it, I thought to myself: "Well,
great! Newcomers can get started with Java quicker!"</div>
<div dir="auto">Yes, the "public static void main(String[]
args)..." is definitely a lot to a new coder, especially if
not proficient enough in object orientation, and seemingly
very difficult for a person whose first programming language
is Java! (I remember it myself...)</div>
<div dir="auto">As the JEP depicts, a beginner may tell to
himself that the language is just too "complex" to carry out a
simple println(). Also, it says that the current, long way of
doing it, is intended for large scale programs. And that's
where my first doubt about this arrives - what really is a
"large scale program"? Onto that later. The JEP proposes an
interesting way of simplifying things. Instead beginners, or
"simple command line scripts/utilities" (!!!, I will get to
this later too) will use the void main(){} with IO.[whatever].
Now here is the second problem as I see it: By introducing an
"IO" class, the "conventional" ways of getting something to
the standard input/output increases to 2. The original is
System.out.println(), which is the standard, Java-iconic way
to do it. Now, IO is not limited to this "compact notation" as
I will call it, but freely available in "large-scale
programs", too. This may eventually result to some people
using IO for printing & reading in non-small source. But I
still presume most codebases will continue to use
System.[whatever].[whatever] or the BufferedReader to get
input - most Java is written in enterprise anyway. (yes,
getting input, especially in Java, is pretty complex for a
beginner, for sure.). Also tutorials regarding Java have
always used the "standard" ways and it would take time to
adopt this simplification and would maybe contribute to some
confusion on why don't people introduce Java "that way".
Another thing is that most "production-grade" Java isn't on
the newest version, which is unfortunate, but this JEP being
integrated to 25, an LTS, would make a difference. Back to my
criticism. This creates a duality. Why may this be this be a
problem? Let me explain. The core values of Java.</div>
<div dir="auto">Most of the Java community, or at least the
contributors/developers working on it, value stability,
backwards compatibility, and overall maybe a slower pace of
features, but making sure that those features actually commit
to making Java better. To make Java last very long as a
language. A language you can always come back to and not get
overwhelmed with a bunch of "optional" syntax candy. I stand
behind this too. Trust me, I have programmed in languages like
C#, and their pace of change is too quick for me - while
reading other projects' code I need to have a documentation
tab open - showing the new syntax, at least most of the time.
Java strives to be different. Recent additions like Virtual
Threads prove that Java is exceptional: amazing "async/await"
behaviour without the "burden" of function coloring (I
recommend reading the post "What color is your function?"
online). Making Java great, maintainable, good to write for
the future, while being familiar to any programmers that may
return to Java. Can't of course forget the new people, too.
Sure, Java onboarding is not the easiest, especially when
compared to languages like Python, but it makes sense in the
long run. </div>
<div dir="auto">This gets to the core of this message: The
feature that's being proposed isn't inherently "bad", but the
philosophy change that may occur. For example, specifically
dividing "small learning programs/utilities" and "large scale
programs" is just completely foreign to me in the Java space.
Java was always built on solid conventions, style guides, and
the ease of writing (not immediately perhaps, but after
understanding major OO concepts), and most importantly -
reading, yes, reading. When I open a java project of any
codebase, I can understand it almost always. Don't forget:
most time looking at the editor buffer is spent reading and
debugging code, not writing new code. Yes, the programming
landscape is changing with Python at the top of the food chain
currently. Java must adapt to necessary industry changes, but
should not adopt the "shiny new thing" immediately, as it
hasn't done in the past and I feel like that's a good thing.
Again, I don't feel like this compact writing is bad, but I
feel that it's not absolutely necessary and contributes to a
code style divide, more so because it's not only geared
towards beginners but also "small scale programs". Java has
gotten lots of "hate" from a lot of people who criticized
things I praise. Java isn't perfect, but it's a stable,
statically typed high-level programming language. A language
you can always get back to.</div>
<div dir="auto">I'm sorry if this "rant" was too long, but these
are my thoughts. Perhaps I can't do much now as the feature is
looking like to be 100% integrated in 25, but I at least so
that this message to serves to everyone as a some sort of a
"cautionary tale".</div>
<div dir="auto">If you don't agree with my opinions, fine. But
be aware.</div>
<div dir="auto">If you'd like to discuss this matter further
with me, I am 100% open.</div>
<div dir="auto"><br>
</div>
<div dir="auto">Have a blessed day.</div>
<div dir="auto">- Riefenstahl </div>
<div dir="auto"><br>
</div>
<div dir="auto"><br>
</div>
</div>
</div>
</body>
</html>