<?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"><channel><title><![CDATA[Untitled Publication]]></title><description><![CDATA[Untitled Publication]]></description><link>https://dhruvsud.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Tue, 03 Nov 2026 08:03:29 GMT</lastBuildDate><atom:link href="https://dhruvsud.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[MODERN DAY COMPUTING SYSTEM]]></title><description><![CDATA[Explore how I built a 16-bit computer from scratch using Logisim Evolution, featuring a custom CPU, Screen, memory, assembly language.]]></description><link>https://dhruvsud.hashnode.dev/modern-day-computing-system</link><guid isPermaLink="true">https://dhruvsud.hashnode.dev/modern-day-computing-system</guid><category><![CDATA[logisim, cpu from scratch,]]></category><category><![CDATA[logisim]]></category><category><![CDATA[nand2tetris]]></category><category><![CDATA[simulation]]></category><dc:creator><![CDATA[Dhruv Sud]]></dc:creator><pubDate>Sun, 31 May 2026 03:30:00 GMT</pubDate><content:encoded><![CDATA[<h1>Building a 16-Bit Computer from Scratch: CPU Architecture, Custom Assembler, Memory and Pixel Graphics</h1>
<p><em>Designing a complete computing system using Logisim Evolution, Java, assembly language, and digital logic.</em></p>
<img src="https://cdn.hashnode.com/uploads/covers/64f618062978fcfb72cb2921/ee2d5a09-f95c-47aa-a67c-b7e88e160f30.png" alt="" style="display:block;margin:0 auto" />

<h2>Introduction</h2>
<p>What actually happens inside a computer when we execute a program?</p>
<p>How does a processor interpret machine instructions? How does it perform arithmetic, access memory, handle input, and display graphics?</p>
<p>To explore these questions at the hardware level, I developed <strong>Modern Day Computing System</strong>, a 16-bit computer architecture built using Logisim Evolution.</p>
<p>The project integrates a custom CPU, Arithmetic Logic Unit (ALU), registers, Program Counter, RAM, ROM, instruction decoder, Java-based assembler, keyboard interface, and a memory-mapped graphical display.</p>
<p>The architecture is inspired by the <em>Nand2Tetris</em> approach, with additional experiments in memory organization, RGB graphics, and hardware-software integration.</p>
<p>The objective was to build an interconnected system capable of executing assembly programs and producing observable results through memory and graphical output.</p>
<p><strong>GitHub Repository:</strong> <a href="https://github.com/MODERN-DAY-COMPUTING-SYSTEM/PROJECT">https://github.com/MODERN-DAY-COMPUTING-SYSTEM/PROJECT</a></p>
<hr />
<h2>1. System Architecture</h2>
<p>The computer follows a <strong>16-bit Harvard-style architecture</strong>, with separate instruction and data memory.</p>
<p>The principal components are:</p>
<ul>
<li><strong>CPU:</strong> Executes instructions and controls data movement.</li>
<li><strong>ALU:</strong> Performs arithmetic and logical operations.</li>
<li><strong>Registers:</strong> Store operands, addresses, and intermediate results.</li>
<li><strong>Program Counter:</strong> Tracks instruction addresses and handles branching.</li>
<li><strong>RAM:</strong> Stores program data and variables.</li>
<li><strong>ROM:</strong> Stores executable machine instructions.</li>
<li><strong>Instruction Decoder:</strong> Generates control signals from the instruction bits.</li>
<li><strong>Memory-Mapped Display:</strong> Converts memory writes into pixel output.</li>
<li><strong>Keyboard Interface:</strong> Makes external input available to programs.</li>
</ul>
<p>The execution process begins with an assembly program, which is translated into machine code by the Java assembler and loaded into ROM.</p>
<p>The CPU fetches instructions from ROM, decodes them, performs the required operations, and interacts with memory or I/O devices.</p>
<p>This establishes a complete connection between software instructions and simulated hardware behavior.</p>
<h2>2. Designing the 16-Bit CPU</h2>
<p>The CPU is the central processing component of the system.</p>
<p>Its design consists of registers, multiplexers, instruction-decoding circuitry, ALU control logic, memory interfaces, and jump-control circuitry.</p>
<img src="https://cdn.hashnode.com/uploads/covers/64f618062978fcfb72cb2921/c7c63fec-beb8-4c42-b2bd-6af859faebda.jpg" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/64f618062978fcfb72cb2921/20e321e3-5c5e-4544-a63a-8b24cd834824.png" alt="" style="display:block;margin:0 auto" />

<h3>Registers</h3>
<p>The architecture contains three particularly important registers:</p>
<p><strong>A Register (Address Register)</strong></p>
<p>Stores addresses or immediate values. It is used to access memory and provide an operand to the ALU.</p>
<p><strong>D Register (Data Register)</strong></p>
<p>Stores intermediate values and operands used in arithmetic and logical computations.</p>
<p><strong>Program Counter (PC)</strong></p>
<p>Contains the address of the next instruction to execute.</p>
<p>These registers form the foundation for instruction execution and data movement.</p>
<h3>Instruction Execution</h3>
<p>The CPU implements the essential stages of instruction processing:</p>
<ol>
<li>Fetch an instruction from ROM using the Program Counter.</li>
<li>Decode the instruction to determine the required operation.</li>
<li>Route operands through the appropriate registers and multiplexers.</li>
<li>Execute the operation using the ALU.</li>
<li>Update registers or memory when required.</li>
<li>Increment the Program Counter or perform a conditional jump.</li>
</ol>
<p>The key engineering challenge is coordinating these operations using digital control signals rather than software-level abstractions.</p>
<hr />
<h2>3. Arithmetic Logic Unit (ALU)</h2>
<p>The ALU operates on 16-bit values and forms the computational core of the processor.</p>
<p>I implemented arithmetic and logical circuitry using components such as adders, multiplexers, and logic gates.</p>
<p>The ALU supports operations including:</p>
<ul>
<li>Addition and subtraction</li>
<li>Incrementing and decrementing</li>
<li>Bitwise AND, OR, and NOT</li>
<li>Operand selection and negation</li>
<li>Computation of zero and negative status flags</li>
</ul>
<h3>Status Flags</h3>
<p>Two important outputs are generated from the ALU result.</p>
<p><strong>Zero flag (ZR):</strong> Indicates whether the computation produced zero.</p>
<p><strong>Negative flag (NG):</strong> Indicates whether the result is negative when interpreted as a signed 16-bit value.</p>
<p>These signals are subsequently used by the CPU's jump logic to evaluate conditional branches.</p>
<p>The ALU is therefore responsible not only for computation but also for providing the information necessary to control program execution.</p>
<h2>4. Instruction Set Architecture (ISA)</h2>
<p>A CPU requires an instruction set defining how software communicates with its hardware.</p>
<p>The computer implements a 16-bit instruction encoding based on the Hack instruction architecture.</p>
<p>There are two principal instruction formats.</p>
<h3>A-Instruction</h3>
<p>An A-instruction loads a value into the A register.</p>
<p>Its binary representation consists of a leading <code>0</code> followed by a 15-bit value.</p>
<p>For example:</p>
<p><code>@100</code></p>
<p>This instruction loads the value <code>100</code> into the A register.</p>
<h3>C-Instruction</h3>
<p>C-instructions perform computations, update destinations, and control branching.</p>
<p>The instruction format is:</p>
<p><code>111accccccdddjjj</code></p>
<p>Each field has a specific purpose:</p>
<table>
<thead>
<tr>
<th>Field</th>
<th>Purpose</th>
</tr>
</thead>
<tbody><tr>
<td><code>111</code></td>
<td>Identifies a computation instruction</td>
</tr>
<tr>
<td><code>a</code></td>
<td>Selects the A register or memory operand</td>
</tr>
<tr>
<td><code>cccccc</code></td>
<td>Specifies the ALU computation</td>
</tr>
<tr>
<td><code>ddd</code></td>
<td>Selects destination registers or memory</td>
</tr>
<tr>
<td><code>jjj</code></td>
<td>Specifies conditional jump behavior</td>
</tr>
</tbody></table>
<p>An example is:</p>
<p><code>D=D+A</code></p>
<p>The CPU decodes this instruction, routes the operands into the ALU, performs addition, and stores the result in the D register.</p>
<p>Another example:</p>
<p><code>D;JGT</code></p>
<p>This uses the ALU status flags to branch when the computed value is greater than zero.</p>
<p>The instruction decoder translates the binary representation into the control signals required by the underlying digital circuitry.</p>
<hr />
<h2>5. Program Counter and Jump Logic</h2>
<p>The Program Counter determines which instruction the CPU executes next.</p>
<p>During normal sequential execution, the PC increments to point to the next ROM address.</p>
<p>However, instructions such as loops and conditional branches require the CPU to change the execution sequence.</p>
<p>The jump-control circuitry evaluates the encoded jump condition using the ALU's zero and negative flags.</p>
<p>Depending on the instruction and control signals, the PC can:</p>
<ul>
<li>Increment sequentially.</li>
<li>Load a target address for branching.</li>
<li>Reset to the initial instruction address.</li>
</ul>
<p>This makes it possible to implement loops, conditional execution, and other essential control-flow operations directly in assembly language.</p>
<h2>6. 64 KB RAM and 64KB ROM Architecture</h2>
<p>Memory design was another major component of the project.</p>
<h3>Hierarchical RAM Design</h3>
<p>Rather than treating RAM simply as a prebuilt storage device, I explored its construction through hierarchical digital circuits.</p>
<p>Smaller memory modules were combined into larger structures using address decoding, registers, and multiplexers.</p>
<p>The memory subsystem supports storing 16-bit data, accessing values through addresses, and performing controlled read/write operations.</p>
<h3>ROM and Instruction Storage</h3>
<p>ROM is responsible for storing the executable machine instructions generated by the assembler.</p>
<p>The Program Counter supplies an address to ROM, and the corresponding instruction is delivered to the CPU.</p>
<p>Separating instruction memory from data memory simplifies the instruction-fetching process and allows the CPU to fetch instructions while maintaining a distinct data-memory interface.</p>
<h3>Memory-Mapped I/O</h3>
<p>An important feature of the architecture is memory-mapped input/output.</p>
<p>Instead of requiring a completely separate instruction set for peripheral access, designated memory addresses represent hardware devices.</p>
<p>This concept is used for the graphical display and keyboard interface.</p>
<p>It enables ordinary memory-access instructions to interact with peripherals.</p>
<hr />
<h2>7. Building a Custom Assembler in Java</h2>
<p>With the CPU and ISA defined, the next requirement was a way to convert human-readable assembly programs into machine instructions.</p>
<p>I developed a custom assembler using Java.</p>
<p>Its purpose is to translate assembly language into the binary representation understood by the simulated processor.</p>
<h3>Assembler Implementation</h3>
<p>The assembler handles:</p>
<ul>
<li>Reading assembly instructions from source files.</li>
<li>Processing instruction syntax and comments.</li>
<li>Resolving labels and symbolic addresses.</li>
<li>Translating address instructions into binary.</li>
<li>Encoding computations, destinations, and jump conditions.</li>
<li>Generating 16-bit machine instructions.</li>
</ul>
<p>I also implemented a hexadecimal conversion utility to prepare the generated instructions for loading into Logisim ROM.</p>
<h3>Complete Workflow</h3>
<p>The process can be represented as:</p>
<p><strong>Assembly Source → Java Assembler → Binary Machine Code → Hexadecimal ROM File → CPU Execution</strong></p>
<p>The repository includes assembly programs for testing arithmetic operations, Fibonacci sequences, pointer and array manipulation, branching, keyboard interaction, and graphics.</p>
<p>Developing the assembler established the connection between the software instruction format and the physical control signals implemented within the CPU.</p>
<hr />
<h2>8. Designing a Memory-Mapped Graphics Display</h2>
<p>One of the most interesting additions to the computer was the graphical output subsystem.</p>
<p>I implemented a <strong>64 × 64 pixel framebuffer</strong> with RGB565 color representation.</p>
<img src="https://cdn.hashnode.com/uploads/covers/64f618062978fcfb72cb2921/1916d5cd-8d6b-4592-9ee4-7040db4d02e5.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/64f618062978fcfb72cb2921/90a4da0b-1b92-4505-b6b5-61aab4e2bc1a.png" alt="" style="display:block;margin:0 auto" />

<p>The display contains:</p>
<ul>
<li>64 horizontal pixels</li>
<li>64 vertical pixels</li>
<li>4,096 individually addressable pixels</li>
<li>16-bit storage per pixel</li>
<li>RGB565 color encoding</li>
</ul>
<p>In RGB565, giving 32 intensity levels per channel and 65,53 possible colors.</p>
<h3>Framebuffer Addressing</h3>
<p>The framebuffer starts at memory address:</p>
<p><code>16384</code></p>
<p>Each pixel corresponds to one memory location.</p>
<p>The address of a pixel can be calculated using:</p>
<p><code>Pixel Address = 16384 + (Y × 64) + X</code></p>
<p>Here, X represents the horizontal position and Y represents the vertical position.</p>
<p>For example, the pixel at coordinate <code>(10, 5)</code> corresponds to:</p>
<p><code>16384 + (5 × 64) + 10 = 16714</code></p>
<p>This allows a two-dimensional graphical display to be represented within a linear memory address space.</p>
<h3>Rendering Pixels Using Assembly</h3>
<p>Pixels can be manipulated using ordinary assembly instructions.</p>
<p>For example, the following program writes a red RGB555 value to the first framebuffer location:</p>
<pre><code class="language-asm">@31744
D=A

@16384
M=D

(END)
@END
0;JMP
</code></pre>
<p>The value <code>31744</code> corresponds to <code>0x7C00</code>, representing red in the chosen RGB555 encoding.</p>
<p>The CPU executes the instructions and writes the color value to the appropriate memory location.</p>
<p>The graphical subsystem interprets that memory location as a pixel.</p>
<p>This demonstrates a fundamental concept in computer graphics: <strong>display output can be produced directly through memory operations.</strong></p>
<hr />
<h2>9. AI Developed a Web-Based Pixel Graphics Editor</h2>
<p>Writing assembly instructions manually for thousands of pixels becomes increasingly impractical.</p>
<p>To make graphics generation easier, I used AI to develop a browser-based bitmap editor using HTML, CSS, and JavaScript.</p>
<p>The editor provides a 64 × 64 canvas corresponding to the simulated computer's display.</p>
<p>Its features include:</p>
<ul>
<li>Pixel-level drawing and erasing</li>
<li>Adjustable brush sizes</li>
<li>Flood-fill functionality</li>
<li>Geometric shapes, including rectangles, circles, triangles, and lines</li>
<li>Character rendering using bitmap fonts</li>
<li>RGB555 color selection</li>
<li>Memory-address visualization</li>
<li>Automatic assembly-code generation</li>
</ul>
<h3>Converting Pixel Graphics into Assembly</h3>
<p>The editor maps each pixel to its corresponding framebuffer address.</p>
<p>It then generates assembly instructions that load color values and write them to the appropriate memory locations.</p>
<p>Pixels sharing the same color are grouped during code generation, reducing redundant color-loading instructions.</p>
<p>The generated program can be passed through the Java assembler and prepared for execution on the simulated computer.</p>
<p>This creates an end-to-end workflow:</p>
<p><strong>Draw Pixel Art → Generate Assembly → Assemble Machine Code → Load ROM → Render Graphics</strong></p>
<p>It is particularly interesting because the graphical content is not displayed through a conventional graphics API on the simulated machine.</p>
<p>Instead, the artwork is translated into instructions executed by the custom CPU, which writes directly into framebuffer memory.</p>
<p><strong>Try the Pixel Graphics Editor:</strong></p>
<p><a href="https://modern-day-computing-system.github.io/PROJECT/">https://modern-day-computing-system.github.io/PROJECT/</a></p>
<hr />
<h2>10. Keyboard Interface and Memory-Mapped Input</h2>
<p>In addition to graphical output, the architecture explores keyboard input through memory mapping.</p>
<p>The idea is to expose keyboard input through an address that can be accessed by the processor.</p>
<p>An assembly program can read from the designated keyboard location and use the retrieved value in subsequent computations or branching operations.</p>
<p>This provides the basis for interactive software, where external input affects the behavior of the running program.</p>
<p>The keyboard subsystem also creates additional design considerations involving address decoding, input synchronization, and coordination with the CPU's memory operations.</p>
<hr />
<h2>11. System Integration and Debugging</h2>
<p>Building the individual components was only one part of the project.</p>
<p>Integrating them into a complete computing system introduced a different set of challenges.</p>
<h3>Timing and Synchronization</h3>
<p>The CPU, registers, memory, and peripherals must operate with compatible timing.</p>
<p>Memory-read latency, clock transitions, and register updates can affect how instructions behave.</p>
<p>Debugging these interactions required examining the movement of signals through the circuit and understanding the sequence of hardware events.</p>
<h3>Instruction Decoding</h3>
<p>Incorrect computation bits, destination signals, or jump conditions can cause programs to behave unexpectedly.</p>
<p>Testing small assembly programs helped isolate problems in instruction execution and control logic.</p>
<h3>Framebuffer Addressing</h3>
<p>Generating graphical output required consistent interpretation of memory addresses by both the software and the display circuitry.</p>
<p>Pixel coordinates, framebuffer offsets, and encoded color values all needed to agree.</p>
<h3>Simulation Performance</h3>
<p>Simulating a large digital system introduces performance constraints, especially when the memory and graphics subsystems involve many interconnected components.</p>
<p>These experiments highlighted the importance of efficient circuit organization and synchronization.</p>
<hr />
<h2>12. Testing the Computer with Assembly Programs</h2>
<p>To validate the architecture, I developed and experimented with a collection of assembly programs.</p>
<p>These included:</p>
<p><strong>Arithmetic and Fibonacci programs:</strong> Testing ALU operations, data movement, registers, and repeated computation.</p>
<p><strong>Conditional branching programs:</strong> Testing Program Counter updates and jump logic.</p>
<p><strong>Pointer and array programs:</strong> Testing memory addressing and indirect data access.</p>
<p><strong>Bitmap and RGB programs:</strong> Testing framebuffer addressing and graphical output.</p>
<p><strong>Keyboard programs:</strong> Exploring input handling and memory-mapped peripheral interaction.</p>
<p>Rather than testing only individual digital components, these programs exercise the interaction between the ISA, CPU, memory system, and peripherals.</p>
<p>They provide a practical way to verify the behavior of the architecture as an integrated computing system.</p>
<h2>13. Technologies Used</h2>
<table>
<thead>
<tr>
<th>Technology</th>
<th>Application</th>
</tr>
</thead>
<tbody><tr>
<td>Logisim Evolution</td>
<td>Digital circuit design and computer simulation</td>
</tr>
<tr>
<td>Java</td>
<td>Custom assembler and machine-code generation</td>
</tr>
<tr>
<td>Assembly Language</td>
<td>Low-level software and architecture testing</td>
</tr>
<tr>
<td>HTML, CSS, JavaScript</td>
<td>Pixel graphics editor and code generation</td>
</tr>
<tr>
<td>Digital Logic</td>
<td>ALU, registers, memory, and control circuitry</td>
</tr>
<tr>
<td>Git and GitHub</td>
<td>Version control and project documentation</td>
</tr>
</tbody></table>
<hr />
<h2>14. Future Development</h2>
<p>The existing architecture provides a foundation for further systems-level experimentation.</p>
<p>Potential extensions include:</p>
<ul>
<li>Improving simulation performance and memory synchronization.</li>
<li>Extending the instruction set.</li>
<li>Developing stronger debugging and instruction-tracing capabilities.</li>
<li>Adding keyboard buffering and more interactive applications.</li>
<li>Exploring VGA-style display output and graphics acceleration.</li>
<li>Experimenting with a minimal operating system.</li>
<li>Developing higher-level language tools that target the custom ISA.</li>
</ul>
<p>These extensions would allow the project to evolve from a digital computer simulation toward a more complete experimental computing platform.</p>
<h2>Conclusion</h2>
<p><strong>Modern Day Computing System</strong> brings together the major building blocks of computer architecture within a single simulated environment.</p>
<p>From the ALU and registers to instruction decoding, memory addressing, machine-code generation, and graphical output, each component contributes to the execution of a program.</p>
<p>One of the most meaningful outcomes of the project was successfully connecting multiple layers of computing:</p>
<p><strong>Digital Logic → CPU Architecture → Instruction Set → Assembler → Machine Code → Memory-Mapped Graphics</strong></p>
<p>The project demonstrates how software instructions are ultimately represented as binary control signals, how a CPU performs computations using digital circuits, and how memory operations can produce visible graphical output.</p>
<p>The complete implementation, circuit files, assembler, assembly programs, and bitmap editor are available in the public repository.</p>
<p><strong>GitHub:</strong> <a href="https://github.com/MODERN-DAY-COMPUTING-SYSTEM/PROJECT">https://github.com/MODERN-DAY-COMPUTING-SYSTEM/PROJECT</a></p>
<p><strong>Interactive Pixel Graphics Editor:</strong> <a href="https://modern-day-computing-system.github.io/PROJECT/">https://modern-day-computing-system.github.io/PROJECT/</a></p>
<hr />
<p><em>Tags: Computer Architecture, Digital Logic, CPU Design, Assembly Language, Systems Programming</em></p>
]]></content:encoded></item><item><title><![CDATA[My 1 Month Java Experience]]></title><description><![CDATA[How was your 1 month coding in java as a begginer]]></description><link>https://dhruvsud.hashnode.dev/my-1-month-java-experience</link><guid isPermaLink="true">https://dhruvsud.hashnode.dev/my-1-month-java-experience</guid><category><![CDATA[Java]]></category><category><![CDATA[kunalkushwaha]]></category><dc:creator><![CDATA[Dhruv Sud]]></dc:creator><pubDate>Tue, 05 Sep 2023 16:59:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/ISFopTz7sBo/upload/bb6c09f17a5cefba1dcc2813d6fc3ad7.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-why-i-learned-java">WHY I LEARNED JAVA?</h2>
<pre><code class="lang-java"><span class="hljs-keyword">package</span> OOPS;
<span class="hljs-keyword">import</span> java.util.Scanner;
<span class="hljs-keyword">import</span> java.util.Array;
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">World</span></span>{
<span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span><span class="hljs-params">(String args[])</span></span>{
    System.out.println(<span class="hljs-string">"Hello bloggers"</span>);
}
}
</code></pre>
<p><strong>Introduction</strong></p>
<p>First, let's talk about why I started learning Java. You might be expecting answers like Memory Security, Platform Independence, or Backend Development. However, my journey began in a slightly different way. I chose to learn Java because one of my favorite tech YouTubers, Kunal Kushawa, had a Data Structures and Algorithms (DSA) playlist based on Java programming rather than the traditionally prefered C++. After just two weeks, I realized that Java is a beautiful language with numerous industry applications. It might seem a bit intimidating at first, but trust me, once you grasp the inner workings of its inbuilt methods, classes, and datatypes, you'll see how extraordinary this language is.</p>
<p><strong>Tips for New Learners</strong></p>
<p>If you're reading this blog, there's a high chance you're an engineering student from India who learned C and C++ in your college course. So, why am I suggesting you choose Java? Well, I don't!!</p>
<p>You don't have to learn Java if you plan to pursue a career in systems programming, game development, embedded systems, high-performance software (e.g., real-time simulations, graphics engines), or low-level programming (e.g., operating systems, device drivers).</p>
<p>But if your goal is a career in web development (backend), Android app development, enterprise software, or big data processing, then I highly recommend learning Java.</p>
<p>Remember that both languages have their pros and cons, and there's no definitive "better" language. It all depends on your interests. Personally, I find Java more beautiful than C++.</p>
<p>Code as many hours possible to Build a Strong Foundation. There is no fixed amount of time how much you should code. Code till your fingers hurt.</p>
<p>Follow Kunal Kushwaha's YouTube channel to learn Java and Object-Oriented Programming (OOP).</p>
<p><a class="user-mention" href="https://hashnode.com/@kunalk">Kunal Kushwaha</a></p>
<p>Learn the internal workings of things, not just the syntax. This is how you'll truly grasp OOP concepts. And don't give up if you don't understand something, it's just the learning process and it takes time.</p>
<p>BUILD PROJECTS AND CONTRIBUTE TO OPEN SOURCE. YES YOU CAN MAKE OPEN SOURCE CONTRIBUTIONS ONLY AFTER LEARNING BASIC JAVA. TAKE THIS FIRST STEP NO MATTER HOW SMALL IT IS.</p>
<p><strong>Things That Make Java Special</strong></p>
<p><strong>Memory Management</strong>:</p>
<ul>
<li><p>Java uses automatic memory management through garbage collection, reducing memory-related errors.</p>
</li>
<li><p>C++ allows manual memory management, which can be more efficient but increases the risk of memory bugs.</p>
</li>
</ul>
<p><strong>Platform Independence</strong>:</p>
<ul>
<li><p>Java's "Write Once, Run Anywhere" philosophy is achieved through the Java Virtual Machine (JVM).</p>
</li>
<li><p>C++ code is platform-dependent and requires recompilation for different platforms.</p>
</li>
</ul>
<p>Also, keep in mind that Java lacks concepts like pointers and contiguous memory allocation found in C or C++. It doesn't support operator overloading or call by reference. Java may be slower than C++ due to its heavy Object-Oriented nature.</p>
<p><strong>Conclusion</strong></p>
<p>I enjoyed coding in Java, and now I'm diving into backend web development and learning DSA. When understanding OOP concepts, focus on logic building rather than memorizing syntax. Try building projects like Chess and Blackjack after learning the basics. In my next vlog, I'll share my Chess-building journey and provide the GitHub link for you to contribute. If you're comfortable with C++, there's no rush to learn Java immediately.</p>
<p><strong>Happy Coding and Have Fun!</strong></p>
<p><strong>Here's a Picture to Get You Started:</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1693931253660/3a15b85d-4076-4ba7-bff6-b6a83dfada1f.jpeg" alt class="image--center mx-auto" /></p>
<p>SPECIAL THANKS TO: My Teacher <a class="user-mention" href="https://hashnode.com/@kunalk">Kunal Kushwaha</a><br />Every single word was explained in boundless depth.</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://www.youtube.com/@KunalKushwaha">https://www.youtube.com/@KunalKushwaha</a></div>
]]></content:encoded></item></channel></rss>