<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Ian Dancan]]></title><description><![CDATA[Learn today, Teach tomorrow. Java, DevOps, Education]]></description><link>https://yourjavaguy.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ZdBK!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c9fd3d-61ce-481d-9900-e8b979bf1b4e_3200x3200.jpeg</url><title>Ian Dancan</title><link>https://yourjavaguy.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 01 Sep 2026 18:35:04 GMT</lastBuildDate><atom:link href="/__u/yourjavaguy.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ian Dancan]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[yourjavaguy@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[yourjavaguy@substack.com]]></itunes:email><itunes:name><![CDATA[Ian Dancan]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ian Dancan]]></itunes:author><googleplay:owner><![CDATA[yourjavaguy@substack.com]]></googleplay:owner><googleplay:email><![CDATA[yourjavaguy@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ian Dancan]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[WHAT KAFKA ACTUALLY IS]]></title><description><![CDATA[Three lessons in, not a line of Java written, and the moment Kafka stopped feeling arbitrary.]]></description><link>https://yourjavaguy.substack.com/p/what-kafka-actually-is</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/what-kafka-actually-is</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Mon, 31 Aug 2026 08:10:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nXQd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dearest gentle readers,</p><p>I have a Kafka cluster running on my laptop right now, and I have not written a single line of Java against it yet. That was on purpose, and it is the best decision I made in this whole course.</p><p>Let me tell you what I found in there.<br><br>First, <a href="https://github.com/Dancan254/kafka-springboot">here&#8217;s</a> the repo for you to practice with along the way, too.</p><p><em><strong>THE MODEL YOU ARRIVE WITH</strong></em></p><p>Most of us meet Kafka after years of something else. <strong>RabbitMQ</strong>. <strong>SQS</strong>. <strong>ActiveMQ</strong>.</p><p>So we arrive carrying a picture. A producer pushes a message in. A consumer pops it off. The message is gone.</p><p>It is a good picture. It is also the single biggest reason Kafka feels confusing.</p><p>Because if consuming destroys, then consumer groups look like bureaucracy. Offsets look redundant, since the message left already. And replay looks like magic, or worse, like a feature somebody bolted on.</p><p>Here is the truth: none of those are features. They are consequences.</p><p>Kafka is not a queue. Kafka is a log.</p><p>A queue destroys. Its entire job is to reach empty.</p><p>A log remembers. It is closer to a file that many programs append to and many programs read from, independently, at their own pace.</p><p>Nothing is removed when you read it. All you did was move a bookmark.</p><p><em><strong>PICTURE IT</strong></em></p><p>One partition. Six records, at offsets 0 through 5.</p><p>Your billing service has read as far as offset 2. Your search indexer has read all the way to 5.</p><p>One copy of the data. Two readers. Two different positions. Neither one aware the other exists.</p><p>Billing falling behind cannot slow the indexer down. The indexer racing ahead cannot delete anything billing still needs.</p><p>Records leave when a retention policy says so, after seven days or once the log outgrows a size limit. Never because somebody read them.</p><p>That is the entire pitch. And three things fall out of it for free.</p><p>You can replay. Shipped a consumer that mangled yesterday&#8217;s data? Fix it, move the bookmark back, reprocess. In a queue those records are ash.</p><p>You can add a reader later. A brand new service reads history from the beginning without asking permission and without touching anyone else&#8217;s position.</p><p>Reading is cheap and parallel. No coordination between applications, because nobody is competing to destroy anything.</p><p><em><strong>THE PART WHERE I STOPPED TRUSTING THE DIAGRAM</strong></em></p><p>Everything above is what the docs tell you. It is also what I would have happily repeated in an interview without ever having checked.</p><p>So I checked.</p><p>Here is the thing I wish someone had told me earlier: you do not need to create a topic to look inside a real Kafka log. Your broker already has one. It keeps its own cluster metadata in a partition, using exactly the structure the diagram promised.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;019be5b4-a31f-42b5-a32f-09a0833b0e4a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker exec kafka-1 ls /var/lib/kafka/data/</code></pre></div><p>One directory comes back: __cluster_metadata-0. Named topic, dash, partition number. Every topic you ever create will add a directory with that same shape.</p><p>Go one level deeper and the abstraction gets physical.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;e719af6c-890f-4457-a998-52dcddd4d60c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker exec kafka-1 ls /var/lib/kafka/data/__cluster_metadata-0/</code></pre></div><div class="callout-block" data-callout="true"><p>00000000000000000000.log</p><p>00000000000000000000.index</p><p>00000000000000000000.timeindex</p></div><p>A partition is not one enormous file. It is a series of segments, and each segment is three files sharing a name, and that name is the offset the segment starts at.</p><p>The .log holds the records. The .index is a sparse map from offset to byte position. The .timeindex is a sparse map from timestamp to offset.</p><p>Notice what those two index files are for. A log that is only ever appended to and read forward should not need them. But consumers do not always read forward from where they are. A consumer coming back from a restart says &#8220;give me offset 4711&#8221;, and without an index that means scanning the segment from byte zero.</p><p>Sparse, not complete. One entry every few kilobytes. Kafka trades a little scanning for a much smaller index, and gets seek-by-offset and seek-by-timestamp out of it.</p><p>Then I read the actual records.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;17671227-19b7-4b9e-b8c5-19dd5c4012c2&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker exec kafka-1 kafka-dump-log --cluster-metadata-decoder \ 
--files /var/lib/kafka/data/__cluster_metadata-0/00000000000000000000.log \ 
| grep REGISTER_BROKER_RECORD</code></pre></div><p>And there it was, at offset 12: my broker&#8217;s own registration, listing the two advertised addresses I had configured in Docker Compose that morning.</p><p>Sit with that for a second.</p><p>When your broker started, it did not write its identity into a config table or a registry. It appended a record. To a log. At an offset.</p><p>Kafka is built on its own abstraction. Cluster metadata is a log. Consumer positions are a topic. Both get the same durability machinery as your data, because as far as the storage layer is concerned they are your data.</p><p>That was the moment the design stopped looking arbitrary to me.</p><p><strong>THE EMPTY SCREEN THAT TAUGHT ME SOMETHING</strong></p><p>Next I opened Kafka UI, expecting a dashboard tour and nothing more.</p><p>Topics: zero. Not &#8220;empty except the internal ones&#8221;. Genuinely zero, with internal topics shown.</p><p>But Lesson 01 said consumer positions live in a topic called __consumer_offsets. Both statements are true, and the gap between them is the lesson.</p><p>Kafka creates its internal topics on first use, not at startup. Nothing had consumed yet, so no group had committed a position, so the topic to hold positions did not exist.</p><p>Which means you can watch it be born.</p><p><strong>THREE COMMANDS, AND THE MODEL GOES CONCRETE</strong></p><p>Create a topic. One partition, one copy.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;fe1ec784-9a08-48ef-9d8f-5a8e8586afff&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker exec kafka-1 kafka-topics \ 
--bootstrap-server localhost:9092 \ 
--create --topic lessons-demo \ 
--partitions 1 --replication-factor 1</code></pre></div><p>Type three records into the console producer. Read them back with the metadata attached.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;7fcbf9ca-7928-4f45-9ef3-cc023fab93ab&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker exec kafka-1 kafka-console-consumer \ 
--bootstrap-server localhost:9092 \--topic lessons-demo --from-beginning --max-messages 3 \
--formatter-property print.partition=true \
--formatter-property print.offset=true</code></pre></div><div class="callout-block" data-callout="true"><p>Partition:0  Offset:0  hello kafka</p><p>Partition:0  Offset:1  second message</p><p>Partition:0  Offset:2  third message</p></div><p>There is the model, made of your own typing. One partition, offsets counting from zero, in the order you wrote them.</p><p>Now run that same command again and leave off --from-beginning. It hangs, printing nothing.</p><p>That is the most common &#8220;Kafka is broken&#8221; moment there is, and it is not a bug. A brand new consumer has no committed position, so auto.offset.reset decides where it starts, and the default is latest. It is sitting at the end of the log waiting for a record that has not been written yet.</p><p>Then look at the topic list one more time.</p><blockquote><p>__consumer_offsets</p></blockquote><p>lessons-demo</p><p>You never created the first one. Your console consumer did, indirectly, by joining a group and committing a position. The broker made a topic to hold the bookmark.</p><p>Empty screen in Lesson 02. Two topics in Lesson 03. Same cluster, and you caused it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!nXQd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 424w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 848w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!nXQd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png" width="1456" height="2546" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2546,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:495865,&quot;alt&quot;:&quot;kafka&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/213508158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="kafka" title="kafka" srcset="/__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 424w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 848w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 1272w, /__u/substackcdn.com/image/fetch/$s_!nXQd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd29eb1e2-c868-44f1-8e99-45343cc0b89a_1640x2868.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>WHAT ACTUALLY CHANGED HERE</strong></p><p>I did not learn a single new API in three lessons. I learned that one sentence, &#8220;a log remembers&#8221;, is load bearing, and I stopped taking it on faith.</p><p>The trade is worth naming plainly. Doing it by hand is slower. Nobody&#8217;s demo gets more impressive because they ran kafka-dump-log.</p><p>But in Part 2 I am going to call kafkaTemplate.send and something will go wrong, because something always does. And when it does I will know whether to suspect my serializer, my Spring config or the broker, because I have already seen what the broker does on its own with no framework in the way.</p><p>Nobody pours the foundation of a house and then decides where the bathroom goes.</p><p><strong>HOMEWORK</strong></p><p>Tonight, before you write any Kafka code, do exactly one thing.</p><p>Start a single broker with Docker Compose, create a topic with three partitions, and produce five records to it with no key. Then consume them back with print.partition=true.<br><br><a href="https://github.com/Dancan254/kafka-springboot">Here</a> is a material I am using to learn. </p><p>You will almost certainly find all five sitting on one partition, and probably not partition 0. Three were available. The producer used one.</p><p>Write down your explanation before you go looking for the answer. Getting that prediction wrong is how partitioning finally sticks.</p><p>Until next time,</p><p>Keep building.</p>]]></content:encoded></item><item><title><![CDATA[What a Queue Actually Is]]></title><description><![CDATA[The one diagram about RabbitMQ I wish someone had drawn for me before I shipped a single line of code.]]></description><link>https://yourjavaguy.substack.com/p/what-a-queue-actually-is</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/what-a-queue-actually-is</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Mon, 20 Jul 2026 20:45:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YTMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My dearest gentle readers,</p><p>I have been living inside RabbitMQ for a few weeks now, and I want to tell you about the single realization that finally made the entire ecosystem click for me.</p><p>Here it is: <strong>A producer never talks to a queue.</strong></p><p>If you have used RabbitMQ before and that sentence surprises you, stay with me. It surprised me too, and I had already shipped production code with it. Let us break down why our mental models are broken, and how fixing them saves us from the worst kinds of production bugs.</p><h2>The Lie We All Start With</h2><p>Ask most backend developers to draw a message queue and you get the exact same picture every time:</p><ul><li><p>A box on the left called the <strong>Producer</strong>.</p></li><li><p>A box on the right called the <strong>Consumer</strong>.</p></li><li><p>A straight pipe between them called the <strong>Queue</strong>.</p></li></ul><p>It is a clean picture. It is also completely wrong in the one place that actually matters.</p><p>There is an entire architectural layer sitting right in the middle of that pipe. Every hard RabbitMQ problem you will ever debug lives inside it: messages that vanish into thin air, consumers that never fire, or a queue that stays completely empty while your application logs insist you just successfully published a hundred payloads.</p><p>All of it comes back to the layer nobody drew.</p><h2>The Real Problem: Durability Over Speed</h2><p>Picture this scenario: You are building a checkout system.</p><p>Someone clicks pay. Your controller charges the card, writes the order to the database, generates a PDF receipt, sends a confirmation email, pings the analytics service, and finally returns a <code>200 OK</code> response.</p><p>Total time: Four seconds. Maybe six on a bad day.</p><p>The card charge only took 300 milliseconds. Everything else was heavy, asynchronous work that the customer did not need to sit around waiting for.</p><p>So, you do the obvious thing first. You wrap the slow execution blocks in a Java thread pool and return the response early. You ship it to production.</p><p>It works beautifully, right up until the server restarts mid-receipt. That in-memory thread pool is instantly wiped. The receipt is gone, no record of it exists, there is no automatic retry, and you have no way to recover it.</p><p>That is your bottleneck. It isn&#8217;t speed; it is <strong>durability</strong>. You need a landing zone for asynchronous work that outlives the web request, outlives the thread pool, and outlives the application process itself.</p><p>That somewhere is a queue. But to use it properly, you have to understand the layer nobody drew.</p><h2>The True Shape of RabbitMQ</h2><p>Before writing a single line of Java code, start the broker locally. One container, two exposed ports:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;bash&quot;,&quot;nodeId&quot;:&quot;9fd0bf30-5525-40c5-9643-191b3cf92cf3&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-bash">docker run -d --name rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  rabbitmq:4-management
</code></pre></div><ul><li><p><code>5672</code> is the AMQP protocol port. That is where your Spring Boot application connects.</p></li><li><p><code>15672</code> is the management UI. Open <code>localhost:15672</code> in your browser and log in using the default credentials: <code>guest</code> / <code>guest</code>.</p></li></ul><p>If you click around the tabs, you will find several exchanges already sitting there that you did not create: <code>amq.direct</code>, <code>amq.fanout</code>, <code>amq.topic</code>, and one with an empty name shown as <code>(AMQP default)</code>.</p><p>Those exchanges are the layer nobody drew. Here is the real architectural pipeline:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;406a4bce-d8fd-4877-aa9a-c29605518514&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">[Producer]  --&gt;  [Exchange]  --(Binding / Routing Key)--&gt;  [Queue]  --&gt;  [Consumer]
</code></pre></div><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;1c37c114-a8e8-4c2f-ad7c-a1de77e340a1&quot;,&quot;duration&quot;:null}"></div><p>The producer publishes exclusively to an <strong>Exchange</strong>, stamped with a <strong>Routing Key</strong>. That is the entire contract. The producer has absolutely no idea which queues exist, who is listening, or if anyone is listening at all.</p><p>The <strong>Binding</strong> is the contractual link that decides where the message actually lands based on that routing key. No binding, no delivery.</p><blockquote><p><strong>The One Exception:</strong> The <code>(AMQP default)</code> exchange automatically routes messages to a queue whose name matches the routing key exactly, requiring no explicit binding bean. It is highly convenient, but it is also the exact reason why a lot of basic tutorials get away with never explaining exchanges at all.</p></blockquote><h2>The Minimal Spring Boot Topology</h2><p>To build this cleanly in Spring Boot, we only need to declare three structural beans.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;b435d6c0-f6e1-4cb6-99d1-8f24ab224c97&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">@Configuration
public class RabbitMQConfig {

    public static final String QUEUE       = "hello.queue";
    public static final String EXCHANGE    = "hello.exchange";
    public static final String ROUTING_KEY = "hello.routing.key";

    @Bean
    public Queue queue() {
        // true = durable (survives broker restarts)
        return new Queue(QUEUE, true); 
    }

    @Bean
    public DirectExchange exchange() {
        return new DirectExchange(EXCHANGE);
    }

    @Bean
    public Binding binding(Queue queue, DirectExchange exchange) {
        return BindingBuilder
                .bind(queue)
                .to(exchange)
                .with(ROUTING_KEY);
    }
}
</code></pre></div><p>Notice the explicit <code>true</code> flag on the <code>Queue</code> constructor. This configures <strong>durability</strong>. Without it, your queue vanishes into memory space when Docker restarts.</p><p>Notice the string constants as well. Network configuration strings cannot be verified at compile time. A simple typo in a raw string will result in a message that silently routes to nowhere. Using constants turns a midnight production mystery into a compile-time safety check.</p><p>Best of all, you aren&#8217;t creating these resources manually in the UI. Spring Boot scans these beans and automatically declares the topology on startup if it doesn&#8217;t already exist.</p><h3>The Producer</h3><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;bcd0f86a-407e-4952-b942-1349d96b92c8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">@Component
public class HelloProducer {

    private final RabbitTemplate rabbitTemplate;

    public HelloProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void send(String message) {
        System.out.println("Publishing: " + message);
        rabbitTemplate.convertAndSend(
            RabbitMQConfig.EXCHANGE, 
            RabbitMQConfig.ROUTING_KEY, 
            message
        );
    }
}</code></pre></div><p>Look closely at the <code>rabbitTemplate.convertAndSend()</code> signature: <code>(exchange, routingKey, payload)</code>. There is no queue argument. There never was.</p><h3>The Consumer</h3><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;861ec97f-3cee-43f6-8f63-c1d57447fe9b&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">@Component
public class HelloConsumer {

    @RabbitListener(queues = RabbitMQConfig.QUEUE)
    public void receive(String message) {
        System.out.println("Received from queue: " + message);
    }
}</code></pre></div><p>If you run this application and fire a message, it processes so quickly it will never visibly sit in the UI.</p><p>Now, do the experiment that actually teaches you something: <strong>comment out the </strong><code>@RabbitListener</code><strong> annotation and restart the app.</strong> Fire five messages at the endpoint.</p><p>With no active consumer, open the Management UI and check your queue. You will see <strong>Ready: 5</strong>. Five messages sitting on disk, waiting patiently. Uncomment the listener, restart the app, and all five process instantly.</p><p>This is the ultimate core benefit: <strong>The producer and the consumer never have to be alive at the same time.</strong> The queue bridges the temporal gap, ensuring your critical data survives infrastructure instability.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!YTMc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!YTMc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png" width="1080" height="1350" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1350,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:169683,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/207822299?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 424w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 848w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 1272w, /__u/substackcdn.com/image/fetch/$s_!YTMc!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f706a9d-8f87-4f4d-af56-13cd66296005_1080x1350.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Scaling Beyond Round-Robin Bottlenecks</h2><p>Let us go back to our checkout scenario. The receipts are moving through the queue safely, and our HTTP response time is down to a crisp 300 milliseconds.</p><p>Then, your platform traffic suddenly triples.</p><p>A single consumer thread processes one message at a time. If generating a complex PDF receipt takes three seconds, one consumer tops out at 20 receipts per minute, regardless of how fast the underlying broker is. The queue depth will begin climbing rapidly, creating consumer lag.</p><p>The instinctive fix is to scale out horizontally by adding more concurrent workers to the same queue:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;77e8cbed-3788-44df-abbd-9ce0e913b1ec&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">@RabbitListener(queues = RabbitMQConfig.QUEUE, concurrency = "2")
public void receive(String message) {
    // Concurrent processing logic
}</code></pre></div><p>This spins up two listener threads within your JVM. They will successfully compete for messages, and each message will still be delivered to exactly one thread.</p><p>However, out of the box, this doesn&#8217;t scale perfectly. If you send ten tasks of wildly different processing sizes, you will notice one worker finishes its share quickly and sits idle, while the second worker grinds through a massive backlog.</p><p>By default, RabbitMQ distributes messages using <strong>Round-Robin</strong> pre-allocation. It hands out messages up-front before the worker has even completed its current task. If Worker 2 gets pre-allocated four highly intensive tasks while Worker 1 gets swift ones, Worker 1 cannot step in to help clear the backlog.</p><p>The fix is a single configuration line on your container factory:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;68608efe-635a-4be3-abe2-6af1e9acb54c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(
        ConnectionFactory connectionFactory) {
    SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    
    // The magic line for fair dispatch
    factory.setPrefetchCount(1); 
    return factory;
}</code></pre></div><p><strong>Prefetch</strong> specifies how many unacknowledged messages the broker will push to a single worker. By setting this to <code>1</code>, the broker stops guessing. No worker receives a new payload until it explicitly acknowledges (<code>ack</code>) that it has finished the previous one.</p><p>Fast workers pull work rapidly; slow workers pull work as they are able. This is <strong>Fair Dispatch</strong>, and it is the key to running highly efficient, horizontally scaled consumers.</p><h2>What Actually Changed Here?</h2><p>By moving away from standard synchronous execution and embracing a structured routing layer, you gain three significant architectural advantages:</p><ol><li><p><strong>Complete Decoupling:</strong> Your producer no longer knows, nor cares, who is consuming its events or how they are configured.</p></li><li><p><strong>Resilience:</strong> Your state survives application service restarts because it lives inside a managed, durable broker.</p></li><li><p><strong>Elastic Throughput:</strong> You can scale processing capacity up or down simply by adjusting consumer counts, without modifying a single line of producer code.</p></li></ol><p>The cost is real: you now have to manage a broker, declare a topology, and design for a hidden layer where misconfigured routing keys can drop messages into nothingness.</p><p>But that isn&#8217;t an architectural flaw; it is simply the price of admission for building scalable distributed systems. When things go wrong, always go back to the blueprint and ask the exact same three questions: <strong>Which exchange, which routing key, which binding?</strong></p><h2>Homework</h2><p>Take ten minutes tonight to break your system on purpose.</p><p>Go into your <code>HelloProducer</code> and change the routing key to a value that does not exist, <code>wrong.key</code> will do perfectly. Fire a message.</p><p>You will receive no error, no exception, and no warning logs. The Java application will report a successful operation. Yet, if you check the queue, it will remain completely empty.</p><p>Open up the Management UI, navigate to the <strong>Exchanges</strong> tab, click into <code>hello.exchange</code>, and look closely at the <strong>Bindings</strong> section until you can explain exactly why that message evaporated.</p><p>A successful message <em>publication</em> and a successful message <em>delivery</em> are two entirely separate infrastructure promises. Recognizing that gap right now will save you days of debugging down the road.</p><p>&#128073; <strong>Get the Code:</strong> <a href="https://github.com/Dancan254/spring-rabbitmq">spring-rabbitmq on GitHub</a></p><p>Until next time, go break something small on your local machine.</p><p>Keep building.</p>]]></content:encoded></item><item><title><![CDATA[“It Works” Is Where the Real Work Begins]]></title><description><![CDATA[Why the engineers who ask &#8220;why this way?&#8221; are the ones who look like wizards]]></description><link>https://yourjavaguy.substack.com/p/it-works-is-where-the-real-work-begins</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/it-works-is-where-the-real-work-begins</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Fri, 10 Jul 2026 09:37:20 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/f1f7b935-24ec-4d86-8d21-e464877350dc_1200x627.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My dearest gentle reader, how have you been since we last spoke?</p><p>I hope the code has been kind to you. I hope your builds are green, your production is quiet, and the weekend ahead is actually a weekend. And if this week hasn't been kind, if you've been staring at something that runs but doesn't quite feel right, then pull up a chair. This one is for you.</p><p>Because today I want to talk about the quietest skill in all of engineering. The one nobody puts on a course syllabus. The one that makes certain developers look like they were simply born knowing things.</p><p>You know the type. You watch them work and the logic just appears. Their fingers barely pause. And somewhere in the back of your mind a small unkind voice whispers, &#8220;I will never think that fast.&#8221;</p><p>Here&#8217;s the truth, and I need you to really hear it: they were not born that way. That speed you&#8217;re admiring is not talent. It is <strong>judgment</strong>. And judgment, unlike talent, is something you can build on purpose, one small question at a time.</p><p>That question is: <em>why this way?</em></p><p>Let me show you what I mean.</p><h2>The moment we all rush past</h2><p>Picture it. You&#8217;ve been handed a small feature. You write it. You run it. The tests go green. The app does the thing it was supposed to do.</p><p>And you ship it.</p><p>Nothing wrong with that, my friend. Truly. Making the code work is the whole job when you&#8217;re starting out, and every one of us lived there for a good while. But here is the thing I wish someone had told me earlier: <strong>&#8220;it works&#8221; is the lowest bar in this entire craft.</strong> Almost anything works if you push on it long enough. A tangle of loops and if-statements will make the tests pass. That tells you the code runs. It tells you nothing about whether it will survive real traffic, or the next engineer who has to read it, or you, six months from now, at midnight.</p><p>The developers who look like wizards ask one more question after the code runs. A small one. <em>What did I give up to make it work this way, and was that the right trade?</em></p><p>Think of it like packing a bag for a trip. A backpack and a rolling suitcase will both carry your clothes. Neither one is &#8220;correct.&#8221; It depends entirely on whether you&#8217;re hiking a trail or gliding through an airport. Code is exactly the same. Nearly every decision you make is a trade-off, and the skill is not memorizing the one right answer. The skill is simply <em>noticing you made a choice at all.</em></p><p>Let me show you how gentle this can be, with a real piece of code.</p><h2>One tiny example, and the whole idea hiding inside it</h2><p>Say you&#8217;re building a checkout feature. VIP customers get a discount. You&#8217;ve got a pile of orders, and a collection of VIP customer IDs. Here&#8217;s the natural first draft, the one your fingers reach for without thinking:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;b19f7331-dcc1-4b01-9958-acca379bf969&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">List&lt;Long&gt; vipCustomerIds = loadVipCustomerIds();

for (Order order : orders) {
    if (vipCustomerIds.contains(order.getCustomerId())) {
        applyDiscount(order);
    }
}</code></pre></div><p>It works. The tests pass. The VIPs get their discount. Ship it, yes?</p><p>Wait. Just for a moment. Ask the question.</p><p><em>Why is </em><code>vipCustomerIds</code><em> a </em><code>List</code><em>?</em></p><p>Sit with that, because there&#8217;s something quietly expensive happening here. When you call <code>contains</code> on a <code>List</code>, Java has no clever trick. It walks the collection one item at a time, top to bottom, until it finds a match. If you have ten thousand VIP IDs, that&#8217;s up to ten thousand checks.</p><p>And you&#8217;re doing that <em>for every single order.</em></p><p>Ten thousand orders, each triggering up to ten thousand checks. That&#8217;s a hundred million comparisons hiding behind three innocent lines. On your little test array, it feels instant. On a real checkout on a real busy day, it crawls, and you won&#8217;t understand why.</p><p>Now watch. Change one word.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;78117563-8670-49fa-a3e1-2d2f904e4c04&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">Set&lt;Long&gt; vipCustomerIds = loadVipCustomerIds();

for (Order order : orders) {
    if (vipCustomerIds.contains(order.getCustomerId())) {
        applyDiscount(order);
    }
}
</code></pre></div><p>Almost nothing changed on the page. But a <code>HashSet</code> doesn&#8217;t walk the collection one by one. It jumps very nearly straight to the answer, so each <code>contains</code> check is roughly instant no matter how many VIPs you have. That hundred million comparisons quietly becomes about ten thousand.</p><p>Think of a <code>List</code> like finding a friend&#8217;s number by reading every name in your contacts, top to bottom, until you hit theirs. A <code>HashSet</code> is like flicking straight to the &#8220;M&#8221; section. Same phone book. A completely different amount of effort.</p><p>And here&#8217;s what I want you to notice, gentle reader. You didn&#8217;t learn a fancy algorithm. You didn&#8217;t need a computer science degree. You just asked why the code was using a <code>List</code> when all it ever does is ask &#8220;is this ID in here?&#8221;</p><p>That one small question is the entire skill.</p><h2>The habit that builds the instinct</h2><p>Now, you might be thinking, &#8220;that&#8217;s lovely, but I&#8217;d never have spotted it.&#8221; Not yet. That&#8217;s the whole point. It&#8217;s a habit, and you build it faster than you&#8217;d believe. You don&#8217;t even have to go reading terrifying source code to start.</p><p>You just change one small thing about how you work.</p><p>The next time you use a method and you&#8217;re not quite sure what it&#8217;s really doing, don&#8217;t just trust it and move on. In your IDE, hold <code>Ctrl</code> (or <code>Cmd</code>) and click into it. Peek. You will not understand all of it, and that is completely fine. The point is simply to stop being afraid of the inside. The people who write great code are not scared of the source, and neither should you be.</p><p>Then, whenever something feels slow or clunky, resist the urge to shrug and say &#8220;it&#8217;s just slow.&#8221; Ask <em>why.</em> Half the time, like our little <code>List</code>, the fix is a single word once you can see the cause.</p><p>And once a month or so, open something you wrote three months ago. Read it. Ask what you&#8217;d change now. If you can spot even one thing, my friend, that is your judgment growing, in real time, right in front of you.</p><p>One &#8220;why this way?&#8221; a day. That&#8217;s all. In a year you&#8217;ll have hundreds of these small lessons baked so deep you won&#8217;t remember learning them.</p><h2>The lovely part: you stop starting from scratch</h2><p>Here&#8217;s the reward for all that gentle questioning. After a while, you stop seeing a hundred unrelated problems and start seeing the same few shapes wearing new hats.</p><p>&#8220;I need to check if something&#8217;s in here, fast.&#8221; That&#8217;s a <code>Set</code> or a <code>Map</code>. &#8220;I need to keep things in order.&#8221; That&#8217;s a <code>List</code>. &#8220;I need to react when something happens.&#8221; That&#8217;s an event, a listener. You&#8217;re not memorizing anything anymore. You&#8217;re recognizing an old friend and reaching for the tool that fits.</p><p>This is the real reason strong developers pick up new languages and frameworks so quickly. They aren&#8217;t smarter than you. They already know the patterns. They&#8217;re just learning where the new tool keeps its buttons. Tools come and go every couple of years. The patterns underneath barely change in a decade, which is exactly why your effort there pays off for the rest of your career.</p><h2>One quiet word on focus</h2><p>None of this works if you can&#8217;t sit still long enough to practice it, so let me leave you with the gentlest version of the usual advice. You don&#8217;t need iron willpower. You just need to make distraction a little harder than focus. Put the phone in the other room, not face-down on the desk. Turn off the notifications while you code, because every ping yanks the whole problem out of your head and rebuilding it costs you real time. Close the extra tabs before &#8220;one quick video&#8221; eats your afternoon.</p><p>Protect the quiet, and the practice quietly takes care of itself.</p><h2>So, your homework</h2><p>Here&#8217;s the truth I&#8217;ll leave you with: the slow, deliberate question is the fast path. The developer who ships in a hurry and never asks &#8220;why this way?&#8221; is the one who ends up debugging a crawling checkout on a bad day, with no idea where the time went. You don&#8217;t have to be that person.</p><p>So tonight, pick one thing you wrote recently. Something that works. Read it, and ask, out loud if you like, &#8220;why this way? What did I trade?&#8221; Just once. Find the choice hiding in your own code.</p><p>It&#8217;ll feel a little silly at first. Do it anyway. In a couple of weeks, it stops being a question you ask and becomes the way you think. And one day someone will watch you work, and admire how fast you are, and never know it was just a thousand quiet &#8220;why this way?&#8221;s stacked on top of each other.</p><p>You weren&#8217;t born a wizard. You just asked better questions than everyone staring at their phones.</p><p>That&#8217;s it from me. Go find one trade-off. Bye!!</p><div><hr></div><p><em>Learn today, Teach tomorrow. Java, DevOps, Education.</em></p>]]></content:encoded></item><item><title><![CDATA[Slow Down to Speed Up: A Calmer Way to Crack Technical Interviews]]></title><description><![CDATA[Why the engineers who think before they type are the ones who finish first]]></description><link>https://yourjavaguy.substack.com/p/slow-down-to-speed-up-a-calmer-way</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/slow-down-to-speed-up-a-calmer-way</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Tue, 23 Jun 2026 19:47:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/90355b36-7b37-45c0-8a90-7db963a490aa_750x422.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My dearest gentle reader, how have you been since we last spoke?</p><p>How are you holding up in this fast-paced AI era? Are you still grinding through Data Structures and Algorithms, or have you quietly shelved it, figuring an LLM can just generate all the execution blocks for you?</p><p>If you&#8217;re still in the trenches, or if you&#8217;ve been questioning the point of the grind lately, let me share something that might reframe the whole journey.</p><p>Here&#8217;s the truth: this framework goes far beyond DSA. It isn&#8217;t a checklist for gaming a technical interview loop. It&#8217;s a repeatable, disciplined system of architectural thinking, the exact process that separates engineers who mindlessly type out syntax from the real problem-solvers who design high-performance systems under pressure.</p><p>And it all starts in a place you might not expect.</p><p>The biggest mistake I see  engineers make in a technical interview happens in the first sixty seconds.</p><p>Picture it. The interviewer finishes reading out the problem. The last word is still hanging in the air, and the candidate is already typing. Head down, fingers flying. Nested loops appear. Random variables get declared. There&#8217;s a quiet, desperate prayer humming underneath all of it: <em>maybe if I just type fast enough, the answer will show up on its own.</em></p><p>It almost never does.</p><p>What usually happens instead is this. About three minutes in, they hit a wall. The logic doesn&#8217;t hold. They freeze. The panic creeps up the back of the neck. And they spend the rest of the interview staring at a screen full of code that&#8217;s going nowhere, watching the clock quietly run out the door.</p><p>Here&#8217;s the thing I wish someone had told me earlier: jumping straight into code isn&#8217;t a sign that you&#8217;re fast. It&#8217;s a sign of a process that hasn&#8217;t been built yet.</p><p>No senior backend engineer designs a system without a blueprint first. Nobody pours the foundation of a house and <em>then</em> decides where the bathroom goes. So why would you write code before you have a solution in your head? Speed in an interview doesn&#8217;t come from typing quickly. It comes from knowing exactly what you&#8217;re about to type before your fingers touch the keys.</p><p>So let&#8217;s build you that process.</p><p>For the next two weeks of your prep, I want you to write these ten steps down, physically and explicitly, for <em>every single problem</em> you touch. Yes, all of them. It&#8217;s going to feel painfully slow at first, like you&#8217;re filling out paperwork before you&#8217;re allowed to think. Do it anyway. By around week three, something quietly clicks. The steps stop being a checklist and start being instinct. And you walk into interviews calm, almost a little bored, completely unbothered.</p><p>Let&#8217;s look at the framework first. Then we&#8217;ll take a real problem and walk it through, step by step, so you can see exactly how it feels in practice.</p><h2>The 10-Step Problem-Solving Framework</h2><p><strong>1. Read the problem carefully.</strong> Don&#8217;t scan it. Read every word. Then restate it out loud in your own words. If you can&#8217;t explain what&#8217;s being asked without looking back at the prompt, you don&#8217;t understand it yet.</p><p><strong>2. Identify inputs and outputs.</strong> Define exactly what&#8217;s coming into your function and what has to leave it. What are the data types? What does success actually look like?</p><p><strong>3. Clarify constraints and edge cases.</strong> Ask about the boundaries. How big can the input get? Can it be null, empty, or negative? Are there duplicates? These questions aren&#8217;t stalling. They signal that you think like an engineer.</p><p><strong>4. Work through an example by hand.</strong> Pen and paper. Trace a sample input all the way to its expected output. Don&#8217;t simulate code in your head, simulate the <em>logic</em>. You&#8217;re looking for the pattern, not the syntax.</p><p><strong>5. Think brute-force first.</strong> What&#8217;s the simplest, most naive thing that would work? Even if it&#8217;s embarrassingly slow, get a correct solution on the board. A slow, working answer beats a clever, broken one every time.</p><p><strong>6. Identify the bottleneck.</strong> Now look hard at that brute-force solution. Where is it wasting effort? Is it scanning the same data over and over for no reason?</p><p><strong>7. Think about data structures.</strong> Which structure, a HashMap, a Stack, a Queue, a Tree, is <em>built</em> to kill that exact bottleneck? This is usually where the real solution hides.</p><p><strong>8. Recognize the pattern.</strong> Does this look like something you&#8217;ve met before? A sliding window? Two pointers? A modified binary search? Most problems are old friends wearing a new hat.</p><p><strong>9. Code the solution.</strong> <em>Now</em>, and only now, you open the IDE or pick up the marker. You&#8217;re not inventing anything at this point. You&#8217;re translating a blueprint you already trust into clean, idiomatic code.</p><p><strong>10. Test and optimize.</strong> Dry-run your code against the edge cases from Step 3. Walk it line by line. Then state your final time and space complexity out loud, like you own it.</p><p>That&#8217;s the whole thing. Ten steps. Notice that nine of them happen <em>before</em> you write a single line of code.</p><h2>The Framework in Action: Cracking the Complement Search</h2><p>Theory is comforting, but it doesn&#8217;t hold up under interview pressure. So let&#8217;s run a real problem through the framework and watch what happens when you trust the process instead of your fingers.</p><p><strong>The scenario:</strong> You&#8217;re building a feature for an e-commerce checkout system. Given an array of item prices and a target wallet balance, find the indices of the two distinct items whose prices add up <em>exactly</em> to the target.</p><p>Let&#8217;s go.</p><h3>Step 1, Read and restate</h3><blockquote><p><em>&#8220;Okay. I&#8217;m being asked to find two distinct numbers in an array that add up to a specific target. And I need to return their positions, the indices, not the numbers themselves.&#8221;</em></p></blockquote><p>That last sentence matters. Half of the wrong answers in this problem come from returning the values instead of the indices. Restating it out loud catches that before it bites you.</p><h3>Step 2, Inputs and outputs</h3><ul><li><p><strong>Inputs:</strong> an integer array of prices (<code>int[] prices</code>) and a target integer (<code>int target</code>).</p></li><li><p><strong>Output:</strong> an integer array holding the two indices, e.g. <code>int[]{ i, j }</code>.</p></li></ul><p>Already we&#8217;ve made a quiet decision: the answer is a pair of positions, so a two-element array is the natural shape to return.</p><h3>Step 3, Clarify constraints and edge cases</h3><p>This is your moment to sound senior. Ask:</p><ul><li><p><em>&#8220;Is there always exactly one valid pair, or could there be none, or several?&#8221;</em></p></li><li><p>&#8220;<em>Can the same element be used twice?&#8221;</em> (No, the two items must be <em>distinct</em> positions.)</p></li><li><p><em>&#8220;Can prices be negative or zero?&#8221;</em> (In a wallet, probably not, but ask anyway. It changes nothing here, but it shows you check.)</p></li><li><p><em>&#8220;How large can the array get?&#8221;</em> (This tells you whether an O(n&#178;) answer will survive.)</p></li></ul><p>For our walkthrough, let&#8217;s assume exactly one valid pair exists, and we can&#8217;t reuse the same item.</p><h3>Step 4, Work through an example by hand</h3><p>Grab the pen.</p><pre><code><code>prices = [2, 7, 11, 15]
target = 9
</code></code></pre><p>Walking it manually: 2 + 7 = 9. The 2 sits at index 0, the 7 at index 1. So the answer is <code>[0, 1]</code>.</p><p>Simple. But notice what your brain <em>actually did</em>. You didn&#8217;t add up every possible pair. You looked at 2 and instantly asked, &#8220;what number do I still need to reach 9?&#8221; The answer was 7. Then you went hunting for a 7.</p><p>Hold onto that. That little move is the entire solution.</p><h3>Step 5, Think brute-force first</h3><p>Before we get clever, let&#8217;s get <em>correct</em>. The most naive approach: take every number, and compare it against every other number.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!_Rp6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 424w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 848w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!_Rp6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png" width="848" height="399" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:399,&quot;width&quot;:848,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42844,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/203293018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 424w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 848w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 1272w, /__u/substackcdn.com/image/fetch/$s_!_Rp6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16100d3a-2d91-4e4f-92ff-48562de05f96_848x399.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It works. For every item, we check it against every item that comes after it. If a pair hits the target, we return both indices. It&#8217;s honest and it&#8217;s correct, and that&#8217;s worth a lot when you&#8217;re under pressure.</p><p>But it&#8217;s slow. Two nested loops means <strong>O(n&#178;)</strong> time. On a small array, fine. On a checkout with a hundred thousand line items, you&#8217;ve got a problem.</p><h3>Step 6, Identify the bottleneck</h3><p>Look back at the brute-force loop and ask the one question that unlocks everything: <em>what work am I repeating?</em></p><p>For every single number, we walk the rest of the array looking for its partner. We&#8217;re searching, over and over, for one specific value: the <em>complement</em> (the number we still need to hit the target). That repeated linear search is the whole cost.</p><p>Which leads to the obvious wish: <em>what if finding the complement were instant, instead of a full scan?</em></p><h3>Step 7, Think about data structures</h3><p>When you hear &#8220;I wish lookups were instant,&#8221; your brain should answer with one word: <strong>HashMap.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4GIY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4GIY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg" width="260" height="193" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:193,&quot;width&quot;:260,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;It's true : r/ProgrammerHumor&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="It's true : r/ProgrammerHumor" title="It's true : r/ProgrammerHumor" srcset="/__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4GIY!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42c77d7b-f23e-4b8e-92eb-e0ad80effebc_260x193.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A HashMap gives you near-constant-time lookups. So instead of searching the array for each complement, we can store what we&#8217;ve already seen in a map and check it in O(1).</p><p>The plan writes itself:</p><ul><li><p>As we walk the array, for each price, calculate the complement (<code>target - price</code>).</p></li><li><p>Check the map: have we already seen that complement?</p></li><li><p>If yes, we&#8217;ve found our pair, and the map already holds <em>where</em> we saw it.</p></li><li><p>If no, store the current price and its index, and keep walking.</p></li></ul><h3>Step 8, Recognize the pattern</h3><p>Pause and name it. This is the <strong>complement search</strong> pattern, sometimes called the &#8220;seen so far&#8221; HashMap trick. The moment a problem says <em>&#8220;find two things that combine to make a target,&#8221;</em> your instinct should reach for a map of what you&#8217;ve already passed.</p><p>Once you&#8217;ve named the pattern, you&#8217;ve seen this problem before, even if you haven&#8217;t. That&#8217;s the quiet confidence the framework is building.</p><h3>Step 9, Code the solution</h3><p>Only now do we touch the keyboard. And because the thinking is already done, the code almost writes itself:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!dmwd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 424w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 848w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!dmwd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png" width="848" height="505" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/128069da-590a-4d4c-8649-91cd7dc64354_848x505.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:505,&quot;width&quot;:848,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56967,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/203293018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 424w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 848w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 1272w, /__u/substackcdn.com/image/fetch/$s_!dmwd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F128069da-590a-4d4c-8649-91cd7dc64354_848x505.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One pass. For each price we ask, &#8220;have I already seen the number that completes this pair?&#8221; If we have, we&#8217;re done. If not, we remember this price and where it lives, then move on.</p><p>Notice we store the price <em>after</em> checking. That&#8217;s deliberate. It guarantees we never accidentally pair an item with itself.</p><h3>Step 10, Test and optimize</h3><p>Don&#8217;t declare victory yet. Dry-run it against our example:</p><pre><code><code>prices = [2, 7, 11, 15], target = 9

i = 0  -&gt;  price = 2, complement = 7. Map empty. Store {2 -&gt; 0}.
i = 1  -&gt;  price = 7, complement = 2. Map has 2! Return [0, 1].
</code></code></pre><p>It lands exactly where the hand-trace did. Now run the edge cases you asked about in Step 3. What if no pair exists? The exception fires. Good.</p><p>Then say the complexities out loud, because the interviewer is waiting for them:</p><ul><li><p><strong>Time: O(n).</strong> We touch each element once.</p></li><li><p><strong>Space: O(n).</strong> In the worst case, the map holds almost every element.</p></li></ul><p>We traded a little memory for a huge speed win, turning an O(n&#178;) crawl into an O(n) walk. That trade-off, stated clearly, is exactly what separates a candidate who <em>got the answer</em> from one who <em>understands the answer</em>.</p><h2>What actually changed here</h2><p>Look back at how that went. We spent eight steps thinking and just one step typing, and the code came out clean, correct, and fast on the first try. No panic. No wall. No clock anxiety.</p><p>That&#8217;s the secret nobody tells you: the slow, deliberate process <em>is</em> the fast one. The candidates who freeze are the ones who skipped straight to Step 9 and tried to reason and type at the same time. You don&#8217;t have to be one of them.</p><p>So here&#8217;s your homework. Pick a problem tonight. Don&#8217;t open your editor. Get a pen, write the ten steps down the side of a page, and fill each one in by hand. It&#8217;ll feel slow. It&#8217;ll feel like overkill.</p><p>Do it anyway. In two weeks, this becomes the way you think. And the next time an interviewer finishes reading a problem, you won&#8217;t reach for the keyboard.</p><p>You&#8217;ll reach for the pen, and smile.<br><br>That&#8217;s it from me. Bye!!</p>]]></content:encoded></item><item><title><![CDATA[I Finally Started Learning AWS. Here's What I've Learned So Far.]]></title><description><![CDATA[Exploring the core services, what AWS actually is, and the essential tools every DevOps engineer needs.]]></description><link>https://yourjavaguy.substack.com/p/i-finally-started-learning-aws-heres</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/i-finally-started-learning-aws-heres</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Sat, 20 Jun 2026 08:48:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PqX8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>My dearest gentle reader,</em></p><p>I have been learning AWS. Yes, I have used Azure before and deployed a couple of projects there, but it was time to try something new. On Azure, I got free credits since I was an MLSA. That time ended, just joking, I am on the free tier on AWS too&#129394;.</p><p>I guess it was the right time for me to try exploring something new. Most job descriptions mention AWS and specific services for AWS. My goal is to be conversant with the cloud and DevOps, so AWS is part and parcel of the journey.</p><p>So, here are the services I have learnt so far. First is understanding what AWS is all about. Then comes the various services it offers and how they are significant for your startup company, etc.<br><br>But before that, let&#8217;s answer a simple question.</p><h2>What Actually is AWS?</h2><p><a href="https://aws.amazon.com/">Amazon Web Services</a> (AWS) is a massive cloud computing platform provided by Amazon. Instead of buying physical hardware and keeping a noisy server rack in your office, AWS lets you rent computing power, storage, and databases over the internet on a pay as you go basis.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4nQQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4nQQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg" width="338" height="295" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:295,&quot;width&quot;:338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The AWS Cloud Computing Concept. Source: AWS Builder Center&quot;,&quot;title&quot;:&quot;The AWS Cloud Computing Concept. Source: AWS Builder Center&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The AWS Cloud Computing Concept. Source: AWS Builder Center" title="The AWS Cloud Computing Concept. Source: AWS Builder Center" srcset="/__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!4nQQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff4ede3a0-a2a5-40be-bfb8-d4ca8e6cf7e2_338x295.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Whether you are hosting a simple website, training machine learning models, or building a complex microservices architecture, AWS gives you the exact tools you need in data centers located all around the world.</p><p>So let&#8217;s start here. AWS has over 200 services at least that&#8217;s what Google says, or rather I should have asked Amazon Q. Amazon Q is their AI integrated assistant that helps you figure things out how to use various services, could give you commands etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!kPMy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 424w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 848w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!kPMy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png" width="1273" height="554" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:554,&quot;width&quot;:1273,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98156,&quot;alt&quot;:&quot;screenshot of amazon Q&quot;,&quot;title&quot;:&quot;screenshot of amazon Q&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/202813709?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="screenshot of amazon Q" title="screenshot of amazon Q" srcset="/__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 424w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 848w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 1272w, /__u/substackcdn.com/image/fetch/$s_!kPMy!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0b4d868-38c8-4d11-a85c-a47d9e593e52_1273x554.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>And yes, AWS is full of abbreviations. Even AWS itself is an abbreviation.</p><p>At first, it feels overwhelming. Then slowly, it starts feeling like vocabulary.</p><h2>The Cloud Landscape: Who Uses What?</h2><p>To understand why AWS is such a big deal, it helps to see where it stands compared to the other major cloud providers like Azure and Google Cloud Platform (GCP). While there are smaller players for simpler hosting, the global tech industry is largely dominated by the Big Three.</p><ul><li><p><strong>AWS (Amazon Web Services)</strong></p><p>AWS is the undisputed pioneer and market leader, currently controlling roughly 28 to 30 percent of the global cloud market. It is the default choice for fast scaling startups and massive tech enterprises. Companies like Netflix, Airbnb, and Slack rely on AWS to power their entire global infrastructure.</p></li><li><p><strong>Azure (Microsoft Azure)</strong></p><p>Holding around 21 to 25 percent of the market, Azure is incredibly popular with established corporations that already use Microsoft software. Because of existing enterprise agreements, giants like Walmart, FedEx, and Starbucks run massive portions of their operations on Azure.</p></li><li><p><strong>GCP (Google Cloud Platform)</strong></p><p>Sitting at around 11 to 14 percent market share, Google Cloud is heavily favored for its advanced data analytics, artificial intelligence capabilities, and container management tools. Tech heavy companies like Spotify, Snap, and HSBC leverage GCP to process massive amounts of user data.</p></li></ul><p>By focusing on AWS right now, you are positioning yourself directly where the highest volume of startup and DevOps jobs live, making it a crucial tool in your engineering toolkit. </p><p>Learning AWS does not mean ignoring the others.</p><p>It just means starting where most job opportunities currently sit.</p><h2>One Thing That Changed Everything</h2><p>Before diving into the servers and databases, I quickly learned that none of it matters if your environment isn&#8217;t secure. That brings us to IAM.</p><h3>IAM (Identity and Access Management)</h3><p>IAM is the foundation of security in AWS. It answers a simple question: <strong>Who is allowed to do what?</strong> Without IAM, everything else would be chaos.</p><p>IAM introduces a few core ideas:</p><ul><li><p><strong>Users:</strong> Individual identities for people or applications.</p></li><li><p><strong>Groups:</strong> Collections of users with shared permissions.</p></li><li><p><strong>Policies:</strong> Rules written in JSON that define what actions are allowed or denied.</p></li><li><p><strong>Roles:</strong> Temporary identities that AWS services or users can assume without storing long-term credentials. For example, an EC2 instance can assume a role that allows it to access an S3 bucket without hardcoding access keys into the application.</p></li></ul><p>One principle stood out immediately: <strong>The Principle of Least Privilege.</strong> Only give the permissions that are absolutely necessary. Nothing more.</p><p>IAM is not flashy. You do not &#8220;see&#8221; it working. But it quietly controls everything. In many ways, IAM is the gatekeeper of AWS.</p><h2>AWS Free Tier</h2><p>One thing I appreciate as a learner is the AWS Free Tier.</p><p>It allows you to experiment with services like EC2, S3, and RDS without immediate cost.</p><p>Key word: carefully.</p><p>Because nothing teaches discipline faster than a surprise billing alert at 3 AM.</p><h2><strong>Here are the core features I have covered so far:</strong></h2><h2>Compute and Storage</h2><p><strong>EC2 (Elastic Compute Cloud)</strong></p><p>The famous EC2 you have definitely heard about this, if not no worries I gatchu. So basically EC2 is a VM that Amazon gives you. You rent a server, pick an operating system like Ubuntu or Windows, choose your RAM and CPU size, and use it to host things like a SpringBoot or Node.js backend or an Nginx web server.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!59qf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!59qf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png" width="379" height="263" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/43539065-1274-4082-b30b-2639ab44e8d5_379x263.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:263,&quot;width&quot;:379,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;EC2 Lifecycle&quot;,&quot;title&quot;:&quot;EC2 Lifecycle&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="EC2 Lifecycle" title="EC2 Lifecycle" srcset="/__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 424w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 848w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 1272w, /__u/substackcdn.com/image/fetch/$s_!59qf!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F43539065-1274-4082-b30b-2639ab44e8d5_379x263.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If AWS is a city, EC2 is the apartment where your application lives.</p><p><strong>EBS (Elastic Block Store)</strong></p><p>This is the hard drive you attach to your EC2 virtual machine. If you need to store files locally on your server, install an operating system, or host local databases, the data goes here. </p><p>You can detach an EBS volume from one server and plug it into another, and you can take point in time snapshot backups to keep your data safe.</p><p>Think of it as the hard drive for your cloud machine.</p><p><strong>S3 (Simple Storage Service)</strong></p><p>Unlike EBS, S3 is an infinite bucket specifically for storing objects and files. You use S3 to store user profile pictures, video uploads, application backups, or even to host frontend React website builds. You only pay for the exact gigabytes you upload.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!PqX8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 424w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 848w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!PqX8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png" width="712" height="431" data-attrs="{&quot;src&quot;:&quot;https://substackcdn.com/image/fetch/$s_!PqX8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:431,&quot;width&quot;:712,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Amazon S3 Architecture Flow, AI generated&quot;,&quot;title&quot;:&quot;Amazon S3 Architecture Flow, AI generated&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Amazon S3 Architecture Flow, AI generated" title="Amazon S3 Architecture Flow, AI generated" srcset="/__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 424w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 848w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 1272w, /__u/substackcdn.com/image/fetch/$s_!PqX8!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2cbdf4a9-6fb1-46d4-8cf6-cc2c9c1996d9_712x431.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If EC2 is a house, S3 is the warehouse that never runs out of space.</p><h2>Management and Security</h2><p><strong>AWS CLI (Command Line Interface)</strong></p><p>Instead of clicking through the AWS website, you type commands directly in your terminal. For example, typing <code>aws s3 cp</code> uploads a file from your laptop straight to your cloud storage. It is essential for writing scripts to automate your daily deployments.</p><p><strong>SSM (Systems Manager)</strong></p><p>The Session Manager feature inside SSM lets you securely log into your EC2 instances directly from your browser or terminal. You do not need to open port 22 or manage complicated SSH keys. It also logs every single command you type, which makes it incredibly secure for team environments.</p><h2>Networking and Scaling</h2><p><strong>ELB (Elastic Load Balancing)</strong></p><p>If your app suddenly gets 10,000 visitors, a single server will crash. ELB acts as a traffic controller. It receives all the incoming web traffic and splits it equally across multiple EC2 servers so no single machine gets overloaded.</p><p><strong>Auto Scaling</strong></p><p>This works directly with your load balancer. If your application starts getting heavy traffic, Auto Scaling automatically launches new EC2 instances to handle the load. When traffic drops at night, it deletes the extra servers automatically so you stop paying for idle machines.</p><h2>Monitoring and Databases</h2><p><strong>CloudWatch</strong></p><p>This is your central monitoring dashboard. It tracks exact hardware metrics like CPU utilization or memory usage and collects your application error logs in real time. You can set alarms to send you an email alert if a server&#8217;s CPU stays above 80 percent for more than five minutes.</p><p><strong>RDS (Relational Database Service)</strong></p><p>Instead of manually installing PostgreSQL or MySQL on an EC2 server, AWS sets it up for you. RDS provides a clean database endpoint for your app to connect to. It automatically handles software patching, performs daily automated backups, and can copy your database to another location for disaster recovery.</p><p>You focus on writing queries and building features. AWS handles the operational burden.</p><p>You can read more about the services <a href="https://docs.aws.amazon.com/">here</a></p><h2>How It All Comes Together</h2><p>At first, AWS feels like a collection of random services. Then it starts to form a system.</p><p>Imagine building a simple photo-sharing application:</p><ol><li><p>A user sends a request, which hits an <strong>Elastic Load Balancer</strong>.</p></li><li><p>The load balancer distributes traffic across multiple <strong>EC2</strong> instances running your application.</p></li><li><p>Those EC2 instances store structured data in <strong>RDS</strong> and upload images to <strong>S3</strong>.</p></li><li><p>Each EC2 instance uses <strong>EBS</strong> for system storage.</p></li><li><p><strong>Auto Scaling</strong> ensures the number of EC2 instances adjusts based on traffic.</p></li><li><p><strong>CloudWatch</strong> monitors everything and alerts you when something goes wrong.</p></li><li><p><strong>SSM</strong> allows secure management of the infrastructure.</p></li><li><p><strong>AWS CLI</strong> helps automate deployments and operations.</p></li><li><p><strong>IAM</strong> ensures only the right people and services can access the right resources.</p></li></ol><p>Slowly, the system stops feeling like abbreviations and starts feeling like architecture.</p><h2>See You in the Next One</h2><p>These are just some of the things I have learned so far, and honestly, I feel like I have barely scratched the surface. There is still IAM in deeper detail, VPCs, Route 53, Lambda, ECS, EKS, CloudFormation, Terraform, Docker deployments, CI/CD pipelines, and many more layers waiting ahead.</p><p>What I enjoy most is not memorizing services. It is seeing how they come together to build systems that can scale from a small idea to something used by millions.</p><p>The cloud can feel overwhelming at first. But one service at a time, the picture becomes clearer.</p><p>I hope you enjoyed the read. If you&#8217;re also starting your AWS journey, we are probably learning together.</p><p>See you in the next one. </p>]]></content:encoded></item><item><title><![CDATA[Beyond the Textbook: Why OOP Struggles Are Real (And How to Cleanly Master It)]]></title><description><![CDATA[Dearest gentle readers, let us finally talk about Object-Oriented Programming.]]></description><link>https://yourjavaguy.substack.com/p/beyond-the-textbook-why-oop-struggles</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/beyond-the-textbook-why-oop-struggles</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Mon, 25 May 2026 13:20:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bb1627f5-26a6-49cd-b6aa-9df52fb5c7dc_1456x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dearest gentle readers, let us finally talk about Object-Oriented Programming.</p><p>We have spent a lot of time recently discussing career roadmaps, language fundamentals, and the cutting edge of Spring AI. But today, I want to take a deliberate step back to fix a foundational pain point that quietly breaks the confidence of intermediate developers alike.</p><p>Most developers learn OOP through pure performance art. They memorize definitions for a technical interview, pass the test, and immediately return to writing procedural code wrapped inside Java classes. They can recite definitions for encapsulation or polymorphism from memory, but the moment they sit down to design a multi-tenant billing service or a modular fleet telemetry engine, their architecture collapses into a tangled web of tightly coupled classes and side effects.</p><p>OOP is not a set of rules designed to make your life difficult. It is simply a way of organizing code. To understand why it became the dominant paradigm for enterprise software, we first need to understand the structural problems it was designed to solve.</p><h2>The Evolution of Paradigms: Before OOP</h2><p>Computers do not care about paradigms. At the hardware level, everything is Von Neumann architecture: instructions are fetched from memory and executed sequentially, manipulating values in registers and RAM. Paradigms exist purely for human sanity, allowing us to manage complexity as codebases grow.</p><p>Before OOP became the industry standard, two major paradigms shaped how we wrote software.</p><h3>1. The Imperative / Procedural Paradigm</h3><p>In early programming languages like Fortran or C, software was structured as a sequence of linear instructions grouped into procedures (functions). Data sat in one place, and functions sat in another, reaching out to mutate that data directly.</p><p>Let us look at a simple procedural implementation in C for managing a retail order discount:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!CrV0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 424w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 848w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!CrV0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png" width="1456" height="1146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1146,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:477339,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 424w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 848w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 1272w, /__u/substackcdn.com/image/fetch/$s_!CrV0!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa3af12d-30e8-4226-bd41-900baef4517b_3004x2364.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The Breakdown:</strong> The data inside <code>struct Order</code> is completely naked. Any function anywhere in the entire codebase can modify <code>totalAmount</code> or <code>customerType</code> to an invalid state without the structure knowing about it. As systems grow to millions of lines of code, tracking down which function corrupted your data state becomes an absolute nightmare.</p><h3>2. The Functional Paradigm</h3><p>Functional programming takes the opposite approach. Instead of mutating global state, it treats computation as the evaluation of mathematical functions, completely avoiding state changes and mutable data.</p><p>Here is how you would process a list of transactions using a pure functional style in Haskell:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sTfF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 424w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 848w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sTfF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png" width="1456" height="400" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:400,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259790,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 424w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 848w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sTfF!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f458dff-19d9-45d0-b0fb-78822e181482_3308x908.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The Breakdown:</strong> Functional programming is incredibly elegant for data transformation pipelines and concurrent environments because code without mutable state cannot have side effects. However, modeling highly stateful, interactive real-world systems (like a complex corporate banking application or an aircraft simulator) purely through immutable mathematical functions can introduce significant mental overhead for large, distributed engineering teams.</p><h2>Enter the Object-Oriented Paradigm</h2><p>OOP emerged to merge data and behavior into single, cohesive structures called <strong>Objects</strong>. Instead of functions acting on passive data, objects hold their own private state and expose public behaviors.</p><p>According to the <strong><a href="https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.3.1">Java Language Specification (JLS) &#167;4.3.1</a></strong>, an object is a dynamically created class instance or an array. Reference values in Java are references to these objects. When you invoke a method, you are not simply executing a global function; you are passing a message to a specific instance, asking it to execute an operation on its private state.</p><h3>The Blueprint and the Instance: Classes and Objects</h3><p>The classic textbook analogy tells you that a class is a blueprint and an object is the house built from it. That is a fine starting point, but in software engineering, a class is a user-defined data type that binds state and behavior together into a single cohesive unit.</p><p>When you write a class, you are telling the Java Virtual Machine exactly how much memory to allocate and what operations are legally permitted on that memory structure.</p><p>Consider a system tracking vehicle telemetry data. We do not just want a loose collection of floating variables drifting through our application context. We want a structured type.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!2yUQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 424w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 848w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!2yUQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png" width="1456" height="1162" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1162,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:614441,&quot;alt&quot;:&quot;Java Code&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Java Code" title="Java Code" srcset="/__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 424w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 848w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 1272w, /__u/substackcdn.com/image/fetch/$s_!2yUQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbf562c49-4572-4555-9936-bdc043d5aa9f_3680x2936.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The class <code>TelemetryPing</code> defines the structure. The object is the actual allocated segment of heap memory containing a specific vehicle id and coordinate set at a distinct moment in time.</p><h2>The Four Pillars Under the Hood</h2><h3>1. Encapsulation: Guarding the State</h3><p>Encapsulation is frequently explained in tutorials as making fields private and generating getters and setters. That definition is wrong. If you make an internal variable private but blindly expose a public setter for it, you have completely destroyed encapsulation.</p><p>According to the <a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/jjdev/Java-overview.html#GUID-68EE1A7B-1F78-4074-AB76-AF9B2CE878F6">JLS</a>, access control modifiers (<code>private</code>, <code>protected</code>, <code>public</code>) are enforced at compile time and verified by the JVM at class-loading time to ensure structural integrity. Real encapsulation means hiding the internal state mechanics of an object and exposing only explicit, validated behaviors.</p><p>Consider a production-grade banking ledger implementation:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sHlY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 424w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 848w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sHlY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png" width="1456" height="1624" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1624,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1123446,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 424w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 848w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sHlY!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F65370f15-1f91-42e3-953c-87df1e5f3c6e_3680x4104.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>2. Abstraction: Defining Boundaries</h3><p>Abstraction means separating <em>what</em> an operation does from <em>how</em> it is implemented. In Java, this boundary is enforced via interfaces and abstract classes.</p><p>Per <strong><a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-9.html#jls-9.1">JLS &#167;9.1</a></strong>, an interface is a reference type whose members are constants and abstract methods. It specifies a contract that implementing classes must fulfill.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!sIAO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!sIAO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png" width="1456" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:178550,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 424w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 848w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 1272w, /__u/substackcdn.com/image/fetch/$s_!sIAO!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffadd76a3-bfcc-4da6-a5fc-ca7431930aa8_2712x1044.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Any component in your system can depend directly on <code>PaymentGateway</code>. Whether the actual underlying engine connects via REST to Stripe or uses gRPC to communicate with an internal banking ledger is completely hidden from the caller. The complexity is safely contained behind the interface boundary.</p><h3>3. Inheritance: Structural Relationships</h3><p>Inheritance allows a class to derive state and behavior from an existing class. In Java, this is achieved using the <code>extends</code> keyword, which sets up a strict parent-child relationship (<strong><a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-8.html#jls-8.1.4">JLS &#167;8.1.4</a></strong>).</p><p>Java uses single inheritance for classes to avoid the famous &#8220;Diamond Problem&#8221; found in languages like C++, where a subclass inherits conflicting implementations from multiple parent classes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!oCK5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 424w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 848w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!oCK5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png" width="1456" height="821" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:821,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:422993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 424w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 848w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 1272w, /__u/substackcdn.com/image/fetch/$s_!oCK5!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feaea6dcd-9cbc-4115-8890-0a559b1852b7_3292x1856.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>We extend this base structure to provide concrete vendor-specific logic:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!o2lK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 424w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 848w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!o2lK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png" width="1456" height="932" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:932,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:383763,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 424w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 848w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 1272w, /__u/substackcdn.com/image/fetch/$s_!o2lK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d21abc9-b6f2-4122-9596-d7405bb8ff8a_3036x1944.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>4. Polymorphism: Dynamic Method Dispatch</h3><p>Polymorphism allows us to treat different objects as instances of a common supertype while executing their own specific overrides at runtime.</p><p>Under the hood, Java achieves this via <strong>Dynamic Method Dispatch (<a href="https://docs.oracle.com/javase/specs/jls/se9/html/jls-15.html#jls-15.12.4.3">JLS &#167;15.12.4.3</a>)</strong>. When you call a method on an interface or superclass reference, the compiler cannot know the exact code to execute. Instead, the JVM looks at the actual object instance on the heap at runtime, references its internal virtual method table (vtable), and calls the specific subclass implementation.</p><p>This completely eliminates messy, unmaintainable if-else type checks:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bdDa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 424w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 848w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bdDa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png" width="1456" height="973" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:973,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:615734,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/199176943?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 424w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 848w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bdDa!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc35113a5-d94c-41a6-aea0-310499374ad1_3584x2396.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Why Spring Boot Depends Heavily on These Pillars</h2><p>If you rush straight into learning Spring Boot without anchoring yourself in these runtime mechanics, the framework will feel like pure, incomprehensible magic.</p><p>When you configure a service bean and use dependency injection via <code>@Autowired</code> or constructor injection, you are leveraging <strong>Abstraction</strong> and <strong>Polymorphism</strong>. Spring requests the interface type, inspects its internal <code>ApplicationContext</code> container to locate the concrete implementation bean, and hooks it up seamlessly.</p><p>When you apply the <code>@Transactional</code> annotation to a service method, Spring uses Java dynamic proxies or CGLIB byte-code manipulation. It constructs a dynamic subclass or wrapper around your component at runtime, leveraging <strong>Inheritance</strong> and <strong>Polymorphism</strong> to intercept your method call. It opens a database transaction, executes your exact code, and safely commits or rolls back the changes based on your execution outcome.</p><p>Frameworks do not replace object-oriented design; they amplify it.</p><h2>Moving Beyond Shallow Practice</h2><p>The reason most developers get stuck in a loop of shallow understanding is that they avoid building real, stateful applications. You cannot master object design by simply reading slides or looking at basic code samples.</p><p>To truly make this click, challenge yourself to build a self-contained system without reaching for an external database or a framework first. Write a clean, terminal-based library catalog or a vehicle fleet tracking simulation using nothing but pure Java core classes.</p><p>Force yourself to design the boundaries carefully:</p><ul><li><p>Secure your class states against negative inputs or invalid mutations.</p></li><li><p>Hide your storage mechanics behind clean interfaces.</p></li><li><p>Use dynamic polymorphism to handle variations in system actions instead of nesting complex switch blocks.</p></li></ul><p>Once you can orchestrate a clean architecture using standard, plain old Java objects, stepping up to microservices, enterprise design patterns, and enterprise frameworks will feel like a natural extension of your skills instead of an uphill battle.</p><p>Signing off,<br>your_javaguy</p>]]></content:encoded></item><item><title><![CDATA[JavaConnect, Spring AI, and a Demo That Tried to Humble Me]]></title><description><![CDATA[JavaConnectKE2026]]></description><link>https://yourjavaguy.substack.com/p/javaconnect-spring-ai-and-a-demo</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/javaconnect-spring-ai-and-a-demo</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Fri, 15 May 2026 08:56:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!I0wp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dearest gentle readers,</p><p>I know&#8230; I disappeared for a little while.</p><p>Not because I forgot about all of you, but because the past few weeks have been wonderfully chaotic.</p><p>I was helping organize JavaConnectKE, and I am still smiling thinking about how successful it turned out to be.</p><p>To everyone who attended, supported, spoke, volunteered, shared posts, asked questions, or simply believed in what we were trying to build, thank you.</p><p>What started as planning calls, logistics spreadsheets, venue preparations, and moments of &#8220;will this actually work?&#8221; eventually became a room full of developers, learners, conversations, laughter, and shared passion for Java and engineering.</p><p>And honestly?</p><p>Seeing the community come together like that reminded me why I love tech spaces so much.<br>Back in 2024, I made this tweet after watching talks from Venkat Subramaniam on X</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!zgB6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!zgB6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg" width="720" height="686" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:686,&quot;width&quot;:720,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65648,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!zgB6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96a53d7a-8b0a-41f0-a162-b41ea4ae7de0_720x686.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At the time, it felt like one of those internet moments you smile at and move on from.</p><p>Fast forward to JavaConnectKE&#8230; and somehow, that moment became real.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!I0wp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!I0wp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1238983,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!I0wp!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7697ec9b-2b38-4841-88c5-acbef33c8fbf_2048x1365.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Wearing Multiple Hats</h2><p>This event was special for me because I got to experience it from multiple angles.</p><p>I was not only involved in organizing it, but I also had the opportunity to:</p><ul><li><p>MC the event</p></li><li><p>Speak about Spring AI with my friend <span class="mention-wrap" data-attrs="{&quot;name&quot;:&quot;Newton Wamiti&quot;,&quot;id&quot;:321182666,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/970ac551-753d-4631-bc19-59ddb30eb355_960x960.jpeg&quot;,&quot;uuid&quot;:&quot;b1b68bed-6fde-414e-8dca-75434d80c1af&quot;}" data-component-name="MentionToDOM"></span></p></li><li><p>Moderate the panel discussion</p></li></ul><p>And somehow survive all of that without my voice filing a resignation letter.</p><p>Being the MC was both exciting and slightly terrifying. One moment you are confidently introducing speakers, the next you are hoping your brain remembers the next schedule item correctly.</p><p>Thankfully, the energy in the room made everything easier.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!l4_P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!l4_P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/feb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:197391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!l4_P!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffeb5b3b8-33bb-40b2-a644-3c7382b69792_1554x1036.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Speaking About Spring AI</h2><p>One of my favorite moments from the event was speaking about Spring AI together with my good friend, Newton Wamiti.</p><p>We did a deep dive into:</p><ul><li><p>Retrieval-Augmented Generation (RAG)</p></li><li><p>MCPs</p></li><li><p>Tool Calling</p></li><li><p>Chat Memory</p></li><li><p>Agentic Workflows with Embabel</p></li></ul><p>AI is rapidly becoming part of modern software engineering workflows, and seeing Java confidently enter that space is genuinely exciting.</p><p>Now&#8230; let me confess something.</p><p>At some point during the demo, things decided to become &#8220;interesting.&#8221;</p><p>And by interesting, I mean:<br>the demo briefly refused to cooperate.</p><p>A timeless engineering tradition.</p><p>Nothing humbles a developer faster than a live demo deciding to explore free will in front of an audience.</p><p>But strangely enough, moments like that are part of what makes live tech events memorable. Engineering is not perfection. It is adapting, debugging under pressure, and continuing anyway.</p><p>Thankfully, we recovered well, and the session ended strongly.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0YHQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0YHQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg" width="1456" height="1051" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1051,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:731106,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!0YHQ!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F968429fd-05d3-4c16-90bf-15c37a2500a0_2048x1478.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Learning from Incredible Speakers</h2><p>One of the biggest highlights of JavaConnect was hearing from incredible speakers who brought both depth and practical experience to the stage.</p><h3>Venkat Subramaniam</h3><p>Venkat spoke about:</p><ul><li><p>Modern Concurrency in Java</p></li><li><p>Records and Pattern Matching</p></li><li><p>Functional Programming Done Right</p></li></ul><p>Watching him break down complex ideas into understandable concepts was honestly inspiring. Some people teach Java. Others make Java feel alive.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!0wtK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!0wtK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg" width="1456" height="1049" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1049,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:680762,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!0wtK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d4d8cfd-93c8-4201-a4fe-b31ab18d9992_2048x1476.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Ivar Grimstad</h3><p>Ivar covered:</p><ul><li><p>Jakarta EE</p></li><li><p>The evolving enterprise Java ecosystem</p></li></ul><p>His session gave a strong perspective on where enterprise Java continues to grow and adapt in modern software engineering.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!fOso!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!fOso!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg" width="1456" height="1180" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1180,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:870718,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!fOso!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdedf82d7-3332-4410-be00-a85f8f76ad8e_2048x1660.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Elvis Parsaloi Nakuoh</h3><p>Elvis spoke about:</p><ul><li><p>Spring Modulith</p></li></ul><p>A topic that sparked many interesting conversations around modular application design and maintainable architectures.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-HYw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-HYw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:707998,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-HYw!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85196cce-af1b-45d8-aa1e-173043438a09_2048x1365.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Moderating the Panel Discussion</h2><p>I also had the opportunity to moderate the panel discussion, and this may have been one of my favorite parts of the entire event.</p><p>The panel featured:</p><ul><li><p>Venkat Subramaniam</p></li><li><p>Nelly Nakhero</p></li><li><p>Ivar Grimstad</p></li><li><p>George Okumu</p></li><li><p>Patrick Musembi</p></li><li><p>Baraka Mbugua</p></li></ul><p>Together, we explored conversations around:</p><ul><li><p>The future of Java</p></li><li><p>Artificial Intelligence</p></li><li><p>Backend engineering</p></li><li><p>Developer growth</p></li></ul><p>What I loved most was how honest the discussion felt.</p><p>Not polished corporate answers.</p><p>Real experiences.<br>Real lessons.<br>Real opinions.</p><p>And I think those are the conversations developers connect with the most.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-nx-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-nx-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg" width="1456" height="997" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:997,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:761959,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!-nx-!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fba1f011a-3589-4d83-b228-defd324ba889_2048x1402.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>What This Experience Reminded Me</h2><p>This event reminded me of something important.</p><p>Communities matter.</p><p>Technology grows faster when people grow together.</p><p>Sometimes we focus so much on code, frameworks, deployments, and certifications that we forget how powerful human connection is in this field.</p><p>Conversations matter.</p><p>Mentorship matters.</p><p>Shared experiences matter.</p><p>And spaces like JavaConnect create room for all of that.</p><div><hr></div><h2>One More Important Thank You</h2><p>Behind every successful community event is a group of people solving problems quietly in the background long before attendees ever walk into the venue.</p><p>I genuinely want to appreciate the incredible organizing team that helped make JavaConnectKE possible:</p><p>Phenny Mwaisaka, Lenny Dennis, Rose Wambui, Stephen Omondi, Newton Wamiti, Silas Abel, Kennedy Muchiri, Samuel Owino, Dalton Lemaiyan, and Cosmas Gikunju.</p><p>From coordination and logistics to communication, planning, troubleshooting, and making sure everything kept moving, this event was truly a collaborative effort.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!k1Jy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!k1Jy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg" width="1456" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:968513,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!k1Jy!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe0f79e78-5dde-4333-8548-a5b485c2d91f_2048x1365.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Some Extra moments from the event capturing me ofcourse:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!pD6m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!pD6m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg" width="1456" height="1096" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1096,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1061409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!pD6m!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e88d8a5-a584-462c-bd0f-0683716d6e49_2048x1541.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!eTNt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!eTNt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg" width="1456" height="1188" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1188,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:777338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/197823434?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 424w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 848w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 1272w, /__u/substackcdn.com/image/fetch/$s_!eTNt!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061f8102-d315-423f-bb97-34bac8724e58_2048x1671.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What Happens Next?</h2><p>Now that the dust has settled a little, I am back to writing consistently again.</p><p>We still have many bricks to lay together:</p><p>&#129521; Java fundamentals<br>&#129521; Spring Boot<br>&#129521; DevOps adventures<br>&#129521; AI explorations<br>&#129521; Engineering lessons<br>&#129521; The occasional &#8220;this bug almost finished me&#8221; stories</p><p>And yes, more stories from the road as well.</p><p>Thank you once again for being here.</p><p>Truly.</p><p>Until next time,</p><p>Keep building. &#129521;</p>]]></content:encoded></item><item><title><![CDATA[Java Basics: Java Syntax, Variables, and Data Types — Your First Real Step]]></title><description><![CDATA[Part one of your journey into Java, starting from absolute zero.]]></description><link>https://yourjavaguy.substack.com/p/java-basics-java-syntax-variables</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/java-basics-java-syntax-variables</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Wed, 22 Apr 2026 07:13:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1d049625-e491-4349-a038-5495aaa86f2a_1200x1278.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Dearest gentle readers, </p><p>I have not forsaken you, I remember about all of you. Still contemplating on the kind of content that would best fit all of you.</p><p>If you are reading this, thank you for making me reach 100+ subs.</p><p>In the previous write-up I did a guide on the topics I would learn when starting out in Java before touching a framework. I missed out on Java Database Connectivity, which is a good topic too.</p><p>That&#8217;s not why we are here today, but I thought you should know that.</p><p>What will we be covering today? The basics of Java you need, the so-called verbose syntax (although Java 25 is making things easy), variables (how we store data), the supported data types, and possible methods. Kind of a quick crash course to get you started.</p><p>Grab a coffee. Or tea. Or water. Whatever keeps you awake. Let&#8217;s get into it.</p><h2>The &#8220;Verbose&#8221; Reputation (And Why Java 25 Is Changing That)</h2><p>If you&#8217;ve spent any time around developers, you&#8217;ve probably heard someone say, &#8220;Java is verbose.&#8221; And honestly, they weren&#8217;t lying. For years, just printing &#8220;Hello World&#8221; required you to write something like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;ac02395e-9a7c-4334-bb45-665540df8236&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}</code></pre></div><p>That&#8217;s a lot of ceremony for one line of actual work. A beginner looks at this and thinks, &#8220;Why do I need a class? What is <code>public static void main</code>? What&#8217;s <code>String[] args</code>?&#8221; And those are fair questions. You came to print a message, not to decode ancient runes.</p><p>Here&#8217;s the good news. Java 25 gives us something beautiful. With the new simplified source files, you can now write this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;410845db-01f5-4137-b0ca-816d80b6f4c1&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">void main() {
    IO.println("Hello World");
}</code></pre></div><p>That&#8217;s it. No class declaration. <s>No </s><code>public static</code><s>. No </s><code>String[] args</code> that you don&#8217;t understand yet. Just the thing you actually wanted to do. The Java team finally heard us, and they&#8217;re letting beginners focus on learning the language instead of wrestling with boilerplate.</p><p>You can still write the old-style code, and you&#8217;ll see it everywhere, so don&#8217;t worry, you&#8217;ll learn both. But while you&#8217;re starting out, Java 25 lets you breathe a little.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://yourjavaguy.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Variables: How We Store Data</h2><p>Think of a variable as a labeled box. You put something in the box, you give the box a name, and later when you need that thing, you just call the box by its name. That&#8217;s literally it. Don&#8217;t let anyone over-complicate it for you.</p><p>In Java, when you create a variable, you usually tell Java three things: what type of thing it is, what you want to call it, and what value it should hold.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;9eeeeee7-9162-41a9-9558-b7afbc66c051&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">void main() {
    int age = 25;
    String name = "Ian";
    double salary = 1500.50;

    IO.println("My name is " + name);
    IO.println("I am " + age + " years old");
    IO.println("I earn " + salary);
}</code></pre></div><p>Read that slowly. <code>int age = 25</code> means &#8220;create a box of type integer, call it age, and put the number 25 inside.&#8221; Simple. The word on the left is the type (what kind of data), the word in the middle is the name (what you&#8217;ll call it), and the value on the right is what goes in the box.</p><p>Now here&#8217;s something useful. Java is smart. Since Java 10, if Java can figure out the type on its own, you can just write <code>var</code> instead:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;835d2f05-173f-469b-9f76-d301582dcb4f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">void main() {
    var age = 25;           // Java knows this is an int
    var name = "Ian";       // Java knows this is a String
    var salary = 1500.50;   // Java knows this is a double

    IO.println(name + " is " + age);
}</code></pre></div><p><code>var</code> is not a new type. It&#8217;s just you saying, &#8220;Java, you figure it out.&#8221; And Java does. Use it when the type is obvious from the value. Don&#8217;t use it when it makes your code harder to read. That&#8217;s the rule.</p><h2>The Data Types You Actually Need to Know</h2><p>Java has two families of data types. Primitives and Non-primitive(Reference or Objects). Don&#8217;t panic, I&#8217;ll explain.</p><p><strong>Primitives</strong> are the simple, raw building blocks. They hold a single value and nothing else. No fancy features. They&#8217;re fast and lightweight. Here are the ones you&#8217;ll actually use:</p><ul><li><p><code>int</code> holds whole numbers like 1, 42, or -100. It&#8217;s your go-to for counting things, indexing, ages, quantities, anything that doesn&#8217;t need decimals.</p></li><li><p><code>long</code> is just like <code>int</code> but bigger. Use it when your numbers get really large, like storing a timestamp or counting grains of sand on a beach. You mark them with an L at the end: <code>long bigNumber = 9000000000L</code>.</p></li><li><p><code>double</code> holds decimal numbers like 3.14 or 99.99. Use it for money, measurements, percentages, anything with a fractional part.</p></li><li><p><code>boolean</code> holds only two values: <code>true</code> or <code>false</code>. Use it for yes/no questions your program needs to answer. &#8220;Is the user logged in?&#8221; &#8220;Is the cart empty?&#8221; <code>boolean</code> handles that.</p></li><li><p><code>char</code> holds a single character like &#8216;a&#8217; or &#8216;9&#8217; or &#8216;?&#8217;. Notice the single quotes. Single quotes for single characters, always.</p></li></ul><p>Then we have <strong>objects</strong>, and the one you&#8217;ll meet on day one is <code>String</code>. A String holds text, like &#8220;Hello&#8221; or &#8220;Nairobi&#8221; or &#8220;I love Java&#8221;. Strings use double quotes, not single. Mix these up and the compiler will let you know in a very unfriendly way.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;11ef0c64-2605-494d-bb82-08ff1ff84008&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">void main() {
    int count = 10;
    long population = 54000000L;
    double price = 199.99;
    boolean isJavaFun = true;
    char grade = 'A';
    String message = "Java is actually pretty cool";

    IO.println(message);
    IO.println("Is Java fun? " + isJavaFun);
    IO.println("Your grade is " + grade);
}</code></pre></div><p>One thing I want you to notice. We used <code>+</code> to join strings together. In Java, when you use <code>+</code> with a String, it glues things together instead of adding them. This is called concatenation. It&#8217;s a small word for a simple idea: stick these things together to make one big String.</p><h2>Putting It All Together</h2><p>Let&#8217;s write one tiny program that uses everything we&#8217;ve covered. Nothing fancy, just a little profile of a person using the types we just learned.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;java&quot;,&quot;nodeId&quot;:&quot;15ce12b6-c172-441a-89bb-e57673981eb7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-java">void main() {
    String firstName = "Dearest";
    String lastName = "Reader";
    String fullName = firstName + lastName; // concatenation
    int age = 25;
    double height = 1.78;
    boolean lovesJava = true;
    char initial = 'I';

    IO.println("FirstName: " + firstName);
    IO.println("LastName: " + lastName);
    IO.println("Full name: " + fullName);
    IO.println("Initial: " + initial);
    IO.println("Age: " + age);
    IO.println("Height: " + height + " meters");
    IO.println("Loves Java? " + lovesJava);
}</code></pre></div><p>Run this in your head before you run it on a computer. That&#8217;s a habit I want you to build. Read the code, predict what will happen, then run it and see if you were right. This is how you learn to think like a programmer.</p><p>Every line is a variable you now understand. Every output uses concatenation you now understand. No mystery, no magic, no hand-waving. That&#8217;s genuinely the foundation.</p><p>Don&#8217;t rush. Write this yourself. Change the values. Add a new variable. Break it on purpose by putting a String value into an <code>int</code>, or by using single quotes where you should use double quotes. When you break something, read the error message carefully. The compiler is not your enemy, it&#8217;s your first teacher. It tells you exactly what&#8217;s wrong, you just have to learn its language.</p><h2>A Free Companion Guide for You</h2><p>Reading is one thing. Actually writing code is where the learning happens. So I put together a repository called <strong>Java for Everyone</strong> that goes hand in hand with articles like this one. It has organized notes on each topic, small exercises to practice what you just read, and full mini-projects you can build to tie everything together. You can use it as your self-study workbook alongside these write-ups.</p><p>You&#8217;ll find it here: <a href="https://github.com/Dancan254/java-for-everyone">Java For Everyone</a></p><p>Go give it a star while you&#8217;re there. It genuinely helps more people discover the repo, and it gives me a little nudge to keep adding to it. If you spot something missing, open an issue. If you want to contribute an exercise, even better. This is meant to be a community resource, not a one-man show.</p><h2>What&#8217;s Next?</h2><p>You now know enough Java to store and display data. That sounds small, but honestly, almost every program you&#8217;ll ever write is built on top of exactly these ideas.</p><p>From here, the next thing you want to learn is how to make your program make decisions. That&#8217;s conditionals: if this is true, do that, otherwise do something else. After that, loops, which let you do things over and over without copy-pasting. Then we&#8217;ll talk about methods, which are how you package code so you can reuse it, and that&#8217;s where your programs will start to feel like real programs.</p><p>And remember my teaching philosophy: Learn Today, Teach Tomorrow. Once something clicks for you, try explaining it to someone else, even if that someone else is your rubber duck. If you can teach it, you understand it.</p><p>Until next time. Keep coding.</p><p>&#8212; Ian, your_javaguy.</p>]]></content:encoded></item><item><title><![CDATA[What I’d Learn in Java Before Touching Spring Boot (If I Started Again)]]></title><description><![CDATA[A practical roadmap every Java developer should follow before frameworks.]]></description><link>https://yourjavaguy.substack.com/p/what-id-learn-in-java-before-touching</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/what-id-learn-in-java-before-touching</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Mon, 13 Apr 2026 14:47:19 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/248004ad-de97-49bb-8ac0-2f0d11c0a0a7_1414x2000.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Dearest gentle readers,</strong></p><p>Was wondering what I should write today.</p><p>Should I jump directly into Spring Boot and list resources?</p><p>Or should I take a step back and share my thoughts on the kind of topics one needs to be comfortable with in Java before touching frameworks like Spring, Jakarta or Quarkus ?</p><p>We will not be having wars on which is better or not. Whichever makes you feel better and gets the work done is what you opt for.</p><p>I use Spring Boot.</p><p>Now that that is said and done, how would I learn Java if starting out? What topics would I ensure I have at my fingertips before touching a framework?</p><p>The most fundamental thing every developer needs is the basics; being comfortable with syntax, variables, and data types.</p><p>These are things one should always be comfortable with in any language.</p><p>A joke is normally made that those who move from language to language are syntax masters. And there is some truth in that. Syntax is the doorway but it is not the house.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DLHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 424w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 848w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DLHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png" width="1115" height="371" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:371,&quot;width&quot;:1115,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36357,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/194051701?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 424w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 848w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DLHK!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb7538-ace7-4248-b1be-019fbe33a50a_1115x371.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>First Brick &#8212; Syntax, Variables, and Data Types</h2><p>Before anything fancy, you must be comfortable writing Java without fear.</p><p>Not memorizing.<br>Not guessing.<br>Comfortable.</p><p>This includes:</p><ul><li><p>Variables</p></li><li><p>Primitive data types</p></li><li><p>Reference data types</p></li><li><p>Basic operators</p></li><li><p>Type conversions</p></li></ul><p>These are the letters of the alphabet in the language of Java. If these feel shaky, everything else will feel heavier than it should.</p><p>Rome was not built in a single day.</p><p>It took brick after brick. But what really mattered was the foundation beneath those bricks.</p><p>Would it really hold the entire building?</p><p>The same concept applies in your software engineering journey.</p><p>How strong are your basics?</p><p>Because complex concepts do not appear from nowhere. They are built on top of fundamental concepts.</p><div><hr></div><h2>Second Brick &#8212; Control Flow</h2><p>Once syntax feels natural, the next question becomes:</p><p><strong>How does your program decide what to do?</strong></p><p>That is where control flow comes in.</p><p>Control flow is what allows us to control how our programs are executed.</p><p>Are there conditions to be met? That gives birth to conditional statements.</p><p>Here we have:</p><ul><li><p><code>if</code> statements</p></li><li><p><code>if-else</code> statements</p></li><li><p><code>else if</code> statements</p></li></ul><p>They help us move around various conditions that determine which pieces of code should run.</p><p>But here is something worth remembering.</p><p>When you ever find yourself having many <code>if-else-if</code> statements, it does not mean you are wrong; it may simply mean there is a tool you are not using yet.</p><p>That tool is:</p><p><strong>Switch expressions.</strong></p><p>They help you write cleaner code and avoid clogged code, if I may call it that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Oeyz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 424w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 848w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Oeyz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png" width="1223" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:1223,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99624,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/194051701?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 424w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 848w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Oeyz!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc1b97f1-ea29-4d23-bdce-71295ad94fc4_1223x437.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Third Brick &#8212; Loops (Making Code Repeat Without Complaining)</h2><p>Next up, we have the tools that help us execute code multiple times.</p><p>We can control repetition.</p><p>These tools are called <strong>loops</strong>, or as some would call them, iterators.</p><p>Here we have:</p><ul><li><p><code>for</code> loops &#8212; executes a known number of times</p></li><li><p><code>while</code> loops &#8212; runs while a condition remains true</p></li><li><p><code>do-while</code> loops &#8212; executes at least once</p></li><li><p>Enhanced <code>for</code> loop &#8212; useful when you do not need to mutate data while looping</p></li></ul><p>Loops are like the engine of repetition. Without them, you would write the same line of code again and again &#8212; and trust me, keyboards deserve mercy too.</p><div><hr></div><h2>Fourth Brick &#8212; Object-Oriented Programming (The Heart of Java)</h2><p>Now we arrive at the place where Java truly begins to feel like Java.</p><p><strong>Object-Oriented Programming &#8212; OOP.</strong></p><p>If Java were a city, OOP would be its roads, buildings, and traffic systems.</p><p>This is where many developers either grow strong&#8230; or remain stuck.</p><p>OOP is not optional.</p><p>It is foundational.</p><p>Here are the concepts you must understand deeply:</p><ul><li><p>Classes</p></li><li><p>Objects</p></li><li><p>Constructors</p></li><li><p>Encapsulation</p></li><li><p>Inheritance</p></li><li><p>Polymorphism</p></li><li><p>Abstraction</p></li></ul><p>Let me stress this clearly:</p><p><strong>Spend time here. A lot of time here.</strong></p><p>Do not rush past OOP.</p><p>Frameworks like Spring Boot are built heavily on OOP principles. If OOP feels confusing, frameworks will feel magical and magic is dangerous when you do not understand the trick.</p><p>You do not want magic.</p><p>You want mastery.</p><div><hr></div><h2>Fifth Brick &#8212; Collections Framework</h2><p>Once you understand objects, you need ways to manage groups of data.</p><p>That is where collections come in.</p><p>You should understand:</p><ul><li><p>Lists</p></li><li><p>Sets</p></li><li><p>Maps</p></li><li><p>Iteration through collections</p></li><li><p>Basic sorting</p></li></ul><p>Collections teach you how to handle real-world data &#8212; not just single values.</p><p>Because real applications rarely deal with one item. They deal with many.</p><div><hr></div><h2>Sixth Brick &#8212; Exception Handling</h2><p>Programs fail.</p><p>Not sometimes. Often.</p><p>What matters is how gracefully they fail.</p><p>Exception handling teaches you to prepare for failure instead of being surprised by it.</p><p>Focus on:</p><ul><li><p><code>try</code></p></li><li><p><code>catch</code></p></li><li><p><code>finally</code></p></li><li><p><code>throw vs throws</code></p></li><li><p><code>Custom exceptions</code></p></li></ul><p>Errors are not enemies.</p><p>They are teachers loud &#8212; ones.</p><div><hr></div><h2>Seventh Brick &#8212; File Handling and Basic I/O</h2><p>At some point, your program must interact with the outside world.</p><p>Files are one of the simplest ways to start.</p><p>You should understand:</p><ul><li><p>Reading files</p></li><li><p>Writing files</p></li><li><p>Basic input/output operations</p></li></ul><p>This is where programs stop being academic and start becoming useful.</p><div><hr></div><h2>So&#8230; When Can You Start Spring Boot?</h2><p>Now the question everyone quietly waits for.</p><p><strong>When is it safe to start Spring Boot?</strong></p><p>You can start Spring Boot after you are comfortable with:</p><ul><li><p>Core syntax</p></li><li><p>Control flow</p></li><li><p>Loops</p></li><li><p>Object-Oriented Programming</p></li><li><p>Collections</p></li><li><p>Exception handling</p></li></ul><p>Once these feel natural &#8212; not perfect, but comfortable &#8212; you are ready.</p><p>That does not mean you ignore other topics.</p><p>Far from it.</p><p>Topics like:</p><ul><li><p>Multithreading</p></li><li><p>Concurrency</p></li><li><p>Streams</p></li><li><p>Functional programming</p></li></ul><p>These can come later.</p><p>You can always return to them.</p><p>Learning is not a race.</p><p>It is a layered process.</p><div><hr></div><h1>Additional Topics Worth Knowing Before Spring Boot</h1><p>There are a few topics that are not always listed early &#8212; but make a noticeable difference once you step into real-world applications.</p><p>You do not need to master them completely before Spring Boot, but being familiar with them will make your journey smoother.</p><div><hr></div><h2>Eighth Brick &#8212; Streams and Functional Programming Basics</h2><p>Modern Java relies heavily on functional-style programming.</p><p>You should be familiar with:</p><ul><li><p>Lambda expressions</p></li><li><p>Method references</p></li><li><p>Basic Stream operations:</p><ul><li><p><code>filter()</code></p></li><li><p><code>map()</code></p></li><li><p><code>forEach()</code></p></li><li><p><code>collect()</code></p></li></ul></li></ul><p>Streams appear frequently in real-world applications.</p><p>Not knowing them does not stop you from starting &#8212; but knowing them removes friction.</p><p>Think of Streams as learning how to use power tools instead of hand tools.</p><p>Both work.</p><p>One just saves time.</p><div><hr></div><h2>Ninth Brick &#8212; Interfaces and Abstract Classes (Deep Understanding)</h2><p>While Interfaces and Abstract Classes are part of OOP, they deserve special attention.</p><p>Spring Boot relies heavily on:</p><ul><li><p>Interfaces</p></li><li><p>Dependency injection</p></li><li><p>Contracts between components</p></li></ul><p>You should understand:</p><ul><li><p>When to use interfaces</p></li><li><p>Difference between interfaces and abstract classes</p></li><li><p>How classes implement interfaces</p></li></ul><p>Many Spring components are wired using interfaces.</p><p>Understanding this early prevents confusion later.</p><div><hr></div><h2>Tenth Brick &#8212; Basic Debugging Skills</h2><p>Writing code is one skill.</p><p>Fixing code is another.</p><p>You should be comfortable with:</p><ul><li><p>Reading stack traces</p></li><li><p>Using breakpoints</p></li><li><p>Stepping through code</p></li><li><p>Understanding error messages</p></li></ul><p>Debugging is often the difference between frustration and confidence.</p><div><hr></div><h2>Eleventh Brick &#8212; Basic Build Tools (Maven or Gradle)</h2><p>Spring Boot projects rely on build tools.</p><p>Focus on:</p><ul><li><p>What Maven or Gradle does</p></li><li><p>Project structure</p></li><li><p>Dependencies</p></li><li><p>Running builds</p></li><li><p>Packaging applications</p></li></ul><p>Without this knowledge, Spring Boot may feel confusing before you even begin.</p><div><hr></div><h1>How Long Does It Take Before Starting Spring Boot?</h1><p>This is one of the most common questions.</p><p>Not everyone learns at the same pace.</p><p>But having rough expectations helps set realistic goals.</p><h3>Approximate Timeline Before Spring Boot</h3><p><em>(Assuming 1&#8211;2 hours daily)</em></p><ul><li><p>Syntax, Variables, Data Types &#8594; <strong>1&#8211;2 weeks</strong></p></li><li><p>Control Flow &#8594; <strong>1 week</strong></p></li><li><p>Loops &#8594; <strong>1 week</strong></p></li><li><p>Object-Oriented Programming &#8594; <strong>3&#8211;5 weeks</strong></p></li><li><p>Collections &#8594; <strong>2&#8211;3 weeks</strong></p></li><li><p>Exception Handling &#8594; <strong>1 week</strong></p></li><li><p>File Handling &#8594; <strong>1 week</strong></p></li><li><p>Streams Basics &#8594; <strong>2 weeks</strong></p></li><li><p>Interfaces &amp; Abstraction &#8594; <strong>2 weeks</strong></p></li><li><p>Maven or Gradle Basics &#8594; <strong>1 week</strong></p></li><li><p>Debugging Skills &#8594; <strong>Ongoing</strong></p></li></ul><p><strong>Total Estimated Time Before Spring Boot:</strong><br>&#10145;&#65039; <strong>10&#8211;16 weeks (about 2.5 to 4 months)</strong></p><p>Not perfection.</p><p>Comfort.</p><p>That is the real target.</p><div><hr></div><h1>For Those Who Want to Truly Master Java</h1><p>Some developers do not just want readiness.</p><p>They want mastery.</p><p>That journey takes longer &#8212; and rightly so.</p><p>After starting Spring Boot, you can continue exploring:</p><ul><li><p>Multithreading</p></li><li><p>Concurrency</p></li><li><p>Synchronization</p></li><li><p>Java Memory Model</p></li><li><p>Advanced Streams</p></li><li><p>Generics</p></li><li><p>Reflection</p></li><li><p>Annotations</p></li><li><p>Design Patterns</p></li><li><p>Networking</p></li><li><p>Performance tuning</p></li><li><p>JVM internals</p></li><li><p>Garbage Collection</p></li><li><p>Reactive programming</p></li></ul><p>These topics move you from <strong>Java user</strong> to <strong>Java craftsman</strong>.</p><p>Not required to begin.</p><p>But powerful to pursue.</p><div><hr></div><h1>Final Thoughts &#8212; Build the Foundation First</h1><p>Frameworks like Spring Boot are powerful.</p><p>But power without understanding becomes dependency.</p><p>Understanding without tools becomes limitation.</p><p>You need both.</p><p>But in the right order.</p><p>Build the foundation.</p><p>Lay the bricks.</p><p>Strengthen the base.</p><p>Because complex systems are not born from magic.</p><p>They are built &#8212; patiently &#8212; on fundamentals.</p><p>And when your foundation is strong, frameworks stop feeling mysterious&#8230; and start feeling like tools.</p><p>Tools you control.</p><p>Not tools that control you.</p><p><strong>Learn Today. Teach Tomorrow.</strong> </p>]]></content:encoded></item><item><title><![CDATA[How I Would Learn Java If I Were Starting Today in the AI Era]]></title><description><![CDATA[Learn Today. Teach Tomorrow.]]></description><link>https://yourjavaguy.substack.com/p/how-i-would-learn-java-if-i-were</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/how-i-would-learn-java-if-i-were</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Fri, 10 Apr 2026 09:31:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!juQe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Beginning of Today&#8217;s Thought</h2><p>Dearest gentle reader,<br>I am seated on my couch, legs crossed, thinking about what to write for my new subscribers.</p><p>I know the audience here is mixed. Some are beginners who are just starting their journey. Others have been in the Java or back-end space for a while and are trying to sharpen their skills.</p><p>I have a soft spot for beginners.</p><p>Not because it sounds nice to say, but because I struggled as one. I did not always have the right direction. At times I got confused, jumped between resources, and wondered whether I was even learning the right way.</p><p>At some point, I made a decision that changed everything.</p><p>I started teaching what I was learning.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-_gv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 424w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 848w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-_gv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Learning Pyramid&quot;,&quot;title&quot;:&quot;The Learning Pyramid&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Learning Pyramid" title="The Learning Pyramid" srcset="/__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 424w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 848w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-_gv!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F922075a7-822a-42ea-9bab-00a7b8422e85_1280x720.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Not because I was an expert, but because teaching forced me to understand. It exposed my weak spots. It made me think deeper. That simple shift gave birth to a philosophy that still guides everything I do today:</p><p><strong>Learn Today. Teach Tomorrow.</strong></p><p>And that brings me to the real question for today.</p><div><hr></div><h2>The Real Question</h2><p>If I were starting Java today, in the era of AI tools and instant answers, how would I learn?</p><p><em>Would I still read documentation?<br>Would I let AI generate code for me?<br>Would I rely on YouTube videos?<br>Would I pay for a boot-camp?<br>Would I use AI to shortcut the journey, or to strengthen my understanding?</em></p><p>There is no single correct answer.</p><p>Learning is personal. Some people learn best by watching videos. Others prefer structured programs. Some thrive in communities. Others prefer self-paced exploration.</p><p>What matters is not the tool you choose.<br>What matters is <strong>how you use it.</strong></p><div><hr></div><h2>First, I Would Still Learn the Fundamentals</h2><p>Even in the AI era, fundamentals remain king.</p><p>No tool can replace understanding how things actually work.</p><p>I would focus on:</p><ul><li><p>Variables and data types</p></li><li><p>Control flow (if statements, loops)</p></li><li><p>Methods</p></li><li><p>Classes and objects</p></li><li><p>Collections</p></li><li><p>Exception handling</p></li></ul><p>These topics are not glamorous, but they are powerful. They were the bricks I laid before I ever built a house.</p><p>Without fundamentals, AI-generated code becomes dangerous. You may get something that works, but you will not understand why it works.</p><p>And that gap becomes expensive later.</p><div><hr></div><h2>Second, I Would Use Structured Learning Resources</h2><p>One mistake beginners make is jumping between random tutorials without direction.</p><p>I would start with reliable resources that explain concepts clearly and consistently.</p><p>Here are some that I recommend.</p><h3>Documentation and Learning Platforms</h3><ul><li><p><a href="https://learn.java/">Official Java learning site</a></p></li><li><p><a href="https://www.w3schools.com/java/">W3Schools Java tutorials</a></p></li><li><p><a href="https://www.baeldung.com/">Baeldung Java guides</a></p></li><li><p><a href="https://roadmap.sh/java">Java Developer Roadmap</a></p></li></ul><p>These resources provide clarity and structure. They help you understand not just how to write code, but why code behaves the way it does.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!NVtq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 424w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 848w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!NVtq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png" width="728" height="629" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:629,&quot;width&quot;:728,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107551,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/193772818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 424w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 848w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 1272w, /__u/substackcdn.com/image/fetch/$s_!NVtq!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feff47f94-9d3a-44cc-b3c9-8bd3eee348ee_728x629.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Third, I Would Use YouTube &#8212; But With Purpose</h2><p>YouTube remains one of the most powerful free learning tools available.</p><p>Not all channels are equal, though. Some explain concepts clearly and build strong foundations.</p><p>Two channels that I consistently recommend are:</p><ul><li><p><a href="https://www.youtube.com/@amigoscode">Amigoscode</a></p></li><li><p><a href="https://www.youtube.com/@Telusko">Telusko</a></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://yourjavaguy.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Both channels explain Java in ways that beginners can follow without feeling overwhelmed.</p><p>Learning from videos works best when you:</p><ul><li><p>Pause often</p></li><li><p>Code along</p></li><li><p>Try variations</p></li><li><p>Make mistakes</p></li><li><p>Fix those mistakes</p></li></ul><p>Passive watching does not build skill. Practice does.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!juQe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 424w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 848w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 1272w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!juQe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png" width="1345" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:1345,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:501866,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/193772818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 424w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 848w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 1272w, /__u/substackcdn.com/image/fetch/$s_!juQe!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66480af6-5f93-4f7a-8e64-7e26967fe093_1345x746.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Fourth, I Would Consider Structured Programs or Bootcamps</h2><p>Some learners thrive in structured environments.</p><p>Bootcamps provide:</p><ul><li><p>Curriculum</p></li><li><p>Mentorship</p></li><li><p>Accountability</p></li><li><p>Community</p></li></ul><p>They reduce confusion and provide direction, especially for beginners who feel lost.</p><p>At the academy where I work, we offer structured training designed to help learners move from beginner to confident developer.</p><p>You can explore it here:</p><p><strong><a href="https://www.skool.com/amigoscode-academy">Amigoscode Academy</a></strong><br>Bootcamps are not mandatory, but for many learners, they provide the consistency and support needed to stay on track.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!q6bd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 424w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 848w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 1272w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!q6bd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:819419,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/193772818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 424w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 848w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 1272w, /__u/substackcdn.com/image/fetch/$s_!q6bd!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeff5a02-1cc1-4fb8-a109-2de4305a9c8a_1909x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Fifth, I Would Use AI &#8212; But Carefully</h2><p>AI tools are powerful.</p><p>Used correctly, they accelerate learning. Used blindly, they weaken understanding.</p><p>If I were starting today, I would use AI in these ways:</p><ul><li><p>Ask for explanations</p></li><li><p>Request examples</p></li><li><p>Debug errors</p></li><li><p>Compare solutions</p></li><li><p>Understand unfamiliar code</p></li></ul><p>Not:</p><ul><li><p>Copy full projects</p></li><li><p>Skip thinking</p></li><li><p>Rely entirely on generated answers</p></li></ul><blockquote><p>Here is an example of a prompt I would actually use:</p><p><strong>Prompt:</strong></p><p>You are a senior Java developer and teacher.</p><p>Teach me the concept of <strong>Java Classes and Objects</strong> step by step.</p><p>Follow this structure:</p><ol><li><p>Explain the concept in simple terms like I am a beginner.</p></li><li><p>Give a real-world analogy.</p></li><li><p>Show a simple Java example.</p></li><li><p>Explain each line of the code.</p></li><li><p>Give me a small exercise to try on my own.</p></li><li><p>After I attempt it, provide the solution.</p></li><li><p>Suggest one small project where this concept can be applied.</p></li></ol><p>Do not skip steps. Do not assume prior knowledge.</p><p>Make sure the explanation builds confidence and understanding.</p></blockquote><p>AI should act like a tutor, not a replacement for thinking.</p><p>The strongest developers will not be the ones who generate code the fastest.</p><p>They will be the ones who understand their code the deepest.</p><div><hr></div><h2>Sixth, I Would Build Projects Early</h2><p>Reading is useful. Watching videos is useful.</p><p>But projects change everything.</p><p>Projects expose gaps. They force decisions. They create experience.</p><p>Some beginner project ideas:</p><ul><li><p>CLI calculator</p></li><li><p>Task manager</p></li><li><p>File organizer</p></li><li><p>Simple REST API</p></li><li><p>Notes application</p></li></ul><p>Start small.</p><p>Finish often.</p><p>Improve continuously.</p><h3>Another Prompt I Would Use &#8212; Project-Based Learning</h3><blockquote><p>You are a senior Java developer mentoring a beginner.</p><p>Help me build a <strong>Simple Task Manager in Java</strong>.</p><p>Follow this approach:</p><ol><li><p>Break the project into small steps.</p></li><li><p>Explain what we are building at each step.</p></li><li><p>Provide code only after explaining the idea.</p></li><li><p>Ask me questions to test my understanding.</p></li><li><p>Suggest improvements after each milestone.</p></li><li><p>Recommend how to extend the project further.</p></li></ol><p>Act like a mentor guiding me through the process, not just writing the code for me.</p></blockquote><p>That rhythm builds confidence faster than endless tutorials.</p><div><hr></div><h2>A Resource I Built for You</h2><p>Along the way, I realized many beginners struggle because they lack structured practice.</p><p>So I created something to help.</p><p><strong>Java for Everyone</strong></p><p>It includes:</p><ul><li><p>Beginner-friendly Java explanations</p></li><li><p>Sample code examples</p></li><li><p>Markdown notes</p></li><li><p>Exercises to test understanding</p></li><li><p>Capstone projects to build confidence</p></li></ul><p>You can explore it here:</p><p><strong><a href="https://github.com/Dancan254/java-for-everyone">Java for Everyone Repository</a></strong></p><p>This resource is designed to help you move from theory to practice. The goal is not just to read code, but to write code and solve real problems.</p><p>If you are starting out, this is a strong place to begin building confidence.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!M4Y6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 424w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 848w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_webp, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!M4Y6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png" width="1283" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:1283,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131653,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://yourjavaguy.substack.com/i/193772818?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_424, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 424w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_848, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 848w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_1272, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 1272w, /__u/substackcdn.com/image/fetch/$s_!M4Y6!, /__u/yourjavaguy.substack.com/w_1456, /__u/yourjavaguy.substack.com/c_limit, /__u/yourjavaguy.substack.com/f_auto, /__u/yourjavaguy.substack.com/q_auto:good, /__u/yourjavaguy.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F79d27e45-0648-4f37-8d1f-a4a45fe08025_1283x636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2>Final Thoughts &#8212; The Path Still Belongs to You</h2><p>Learning Java today is easier than ever.</p><p>Not because the language changed, but because the tools changed.</p><p>We have documentation, videos, communities, structured programs, and AI assistants.</p><p>The challenge is no longer access to knowledge.</p><p>The challenge is discipline.</p><p>If I were starting today, I would not rush.</p><p>I would focus on understanding.</p><p>I would build slowly.</p><p>I would ask questions.</p><p>And most importantly, I would teach what I learn.</p><p>Because when you teach, you clarify.<br>When you explain, you strengthen.<br>When you share, you grow.</p><p>That is still the heart of this journey.</p><p><strong>Learn Today. Teach Tomorrow.</strong></p><p>And if you are just starting, take your first step today. Not tomorrow. Not next week.</p><p>Today.</p>]]></content:encoded></item><item><title><![CDATA[Welcome to Java & Beyond]]></title><description><![CDATA[Learn Today. Teach Tomorrow.]]></description><link>https://yourjavaguy.substack.com/p/welcome-to-java-and-beyond</link><guid isPermaLink="false">https://yourjavaguy.substack.com/p/welcome-to-java-and-beyond</guid><dc:creator><![CDATA[Ian Dancan]]></dc:creator><pubDate>Mon, 06 Apr 2026 13:03:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZdBK!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c9fd3d-61ce-481d-9900-e8b979bf1b4e_3200x3200.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There is a simple truth I have learned over time. You only truly understand something when you can explain it clearly.</p><p>This idea is the main reason I decided to start <strong>Java &amp; Beyond</strong>.</p><h2>Why I Started This Newsletter</h2><p>Over the past few years, I have spent time learning and working with Java, backend systems, DevOps tools, and artificial intelligence technologies(this I started exploring recently). Some concepts were easy to understand. Others took time, patience, and many attempts before they made sense.</p><p>During this process, I noticed something important. The moments when I learned the most were not when I was only reading documentation or watching tutorials. The real learning happened when I tried to explain what I had learned to someone else.</p><p>Writing and teaching forces you to think carefully. It helps organize ideas and reveals gaps in understanding. When something is difficult to explain, it usually means there is more to learn.</p><p>This newsletter is my way of continuing that process. It is a place where I will write about what I learn, what I build, and what I discover along the way.</p><h2>What This Newsletter Will Cover</h2><p><strong>Java &amp; Beyond</strong> will focus on practical lessons drawn from real work and real learning experiences.</p><p>Here are the main areas I plan to cover:</p><ul><li><p><strong>Java development</strong><br>Core concepts, useful patterns, and practical techniques.</p></li><li><p><strong>Backend engineering</strong><br>Building APIs, structuring applications, and solving real system problems.</p></li><li><p><strong>DevOps practices</strong><br>Deployment processes, containers, automation tools, and lessons from real setups.</p></li><li><p><strong>Artificial intelligence integration</strong><br>Exploring how AI tools can be used in modern software systems, mostly around Spring AI and Embabel.</p></li></ul><p>Some articles will focus on explaining technical concepts. Others will share lessons from mistakes, debugging sessions, or project work. Every article will aim to provide something practical that can be applied in real projects.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://yourjavaguy.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>My Personal Goal</h2><p>One of my main goals with this newsletter is to improve how I understand technical topics.</p><p>Writing about what I learn helps me slow down and think deeply. It encourages me to ask better questions and search for better answers. Over time, this creates stronger understanding and better problem solving skills.</p><p>This newsletter will also serve as a personal record of my learning journey. It will capture lessons from projects, experiments, and real challenges.</p><h2>What You Can Expect</h2><p><strong>Java &amp; Beyond</strong> will be published once every week.</p><p>Each issue will include one clear idea, lesson, or experience related to Java, backend engineering, DevOps, or AI. The focus will always be on clarity and usefulness.</p><p>The goal is simple. Learn better by explaining clearly, and help others learn along the way.</p><h2>Thank You for Joining</h2><p>If you are reading this, thank you for being here at the very beginning.</p><p>Whether you are learning Java, working on backend systems, exploring DevOps tools, or experimenting with AI, I hope this newsletter becomes a useful resource for you.</p><p>Welcome to <strong>Java &amp; Beyond</strong>.</p>]]></content:encoded></item></channel></rss>