<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:12.0pt;
        font-family:"Aptos",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Aptos",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;
        mso-ligatures:none;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-CA" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">That was an interesting perspective from Rufus. I was just about to write to this mailing list about how I was disappointed that it was now necessary to write IO.println rather than
 just println.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">My perspective comes from teaching Java. I have always felt that learning a language involves evolution. Java has been reluctant to follow this model by requiring full on OOP on
 day one with all the myriad ‘decorations’. I was excited to see ‘void main()’. It made the entry point simple. Classless or simple source file was another enhancement that I also felt was going to make Java a language that could be taught, not just at University,
 at Primary and Secondary schools. It may be too late for this as Python has pretty much taken over the public-school space.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">As for println or as it is now named IO.println, it is another significant advance in making Java easier to learn. I think we can agree that console I/O beyond learning language
 fundamentals is over, done, and nailed to its perch (Monty Python reference). Therefore, any simplification is significant. You want a desktop UI then use JavaFX. As I mentioned, I’m not crazy about needing the prefix IO but it is still better than System.out.println.
 I never taught System.in other than as a parameter for the Scanner class. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">Enhancements to Java that, as Brian has called it as paving the on-ramp, must be applauded and encouraged. We may not agree (I still don’t like requiring IO) but it shows that the
 language can evolve not only to meet the needs of senior developers but also new developers and children.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US">Ken Fogel<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> amber-dev <amber-dev-retn@openjdk.org>
<b>On Behalf Of </b>Brian Goetz<br>
<b>Sent:</b> June 4, 2025 6:28 PM<br>
<b>To:</b> amber-dev <amber-dev@openjdk.java.net><br>
<b>Subject:</b> Fwd: Regarding JEP 512<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="font-size:13.5pt;font-family:"Courier New"">This was received on amber-spec-comments.</span><o:p></o:p></p>
<div>
<p class="MsoNormal"><br>
<br>
-------- Forwarded Message -------- <o:p></o:p></p>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td nowrap="" valign="top" style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal" align="right" style="text-align:right"><b>Subject: <o:p></o:p></b></p>
</td>
<td style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal">Regarding JEP 512<o:p></o:p></p>
</td>
</tr>
<tr>
<td nowrap="" valign="top" style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal" align="right" style="text-align:right"><b>Date: <o:p></o:p></b></p>
</td>
<td style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal">Wed, 4 Jun 2025 18:43:32 +0200<o:p></o:p></p>
</td>
</tr>
<tr>
<td nowrap="" valign="top" style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal" align="right" style="text-align:right"><b>From: <o:p></o:p></b></p>
</td>
<td style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal">Rufus Riefenstahl <a href="mailto:rufusriefenstahl@gmail.com">
<rufusriefenstahl@gmail.com></a><o:p></o:p></p>
</td>
</tr>
<tr>
<td nowrap="" valign="top" style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal" align="right" style="text-align:right"><b>To: <o:p></o:p></b></p>
</td>
<td style="padding:0cm 0cm 0cm 0cm">
<p class="MsoNormal"><a href="mailto:amber-spec-comments@openjdk.org">amber-spec-comments@openjdk.org</a><o:p></o:p></p>
</td>
</tr>
</tbody>
</table>
<p class="MsoNormal" style="margin-bottom:12.0pt"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Hello there, project Amber EG team. <o:p></o:p></p>
<div>
<p class="MsoNormal"> I would like to share my honest thoughts regarding JEP 512: "Compact Source Files and Instance Main Methods".<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">First off, let me introduce myself. My name is Rufus Riefenstahl. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">I have been programming Java for about 20 years, 13 of them professionally.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Now my thoughts about the JEP...<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">When I first saw it, I thought to myself: "Well, great! Newcomers can get started with Java quicker!"<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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...)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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. <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">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".<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">If you don't agree with my opinions, fine. But be aware.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">If you'd like to discuss this matter further with me, I am 100% open.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">Have a blessed day.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">- Riefenstahl <o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</div>
</div>
</div>
</body>
</html>