How I Wish I Learned Java

Table of contents
- About Me
- Why Do We Always Start with Data Types?
- My Revelation About the JVM
- Explaining Computers Like to Your Grandma (or Rubber Duck)
- A Computer Is Just a Magical Notebook
- How it works inside the computer
- What happens with these 0s and 1s?
- The Ice Cream Analogy
- Why record it all in the notebook?
- And what about symbols?
- Conclusion

About Me
I’m a Java developer. And this is actually my second profession, and also my second higher education. Throughout my life, I’ve studied all sorts of disciplines: economics, political science, psychology, statistics, even religious studies at some point. In my portfolio, there are several programming languages. My main one is Java, but I can do a bit more as well.
When I started learning Java, I already had certain knowledge and expectations about how the learning process for any science should be structured - in a way that makes it interesting and understandable. And I had many questions about the way Java training programs are usually organized.
Why Do We Always Start with Data Types?
To this day, I don’t understand why learning a programming language in different universities, on different courses, and in different programs always starts with data types, then goes on to operations with those data types, then we study strings and how they work, and so on.
For me, it felt like being brought onto a ship and told: “In two months you will be the captain, we’ll teach you everything, but let’s start with painting the railings.” Why the railings? Why are we painting them? How will that help me steer the ship? I only have 60 days to learn to command this machine, and I’m wasting precious time painting railings!
My Revelation About the JVM
Later, after I had studied and even started working, I suddenly came across something about the JVM (in my ship metaphor, it was like reading a book about how the ship’s engine works), and I had this revelation: “Ohhh, so that’s why it works like that!!! Why didn’t anyone tell me this two years ago?! It’s so logical!”
Since then, my conviction has only grown stronger: learning a programming language should begin with the fundamentals - why the language works the way it does, and why it was designed that way.
Explaining Computers Like to Your Grandma (or Rubber Duck)
So today I want to help those who:
want to become Java developers,
already work on a Java project not like a developer, or
are just curious about programming.
And I’ll try to explain Java in words your grandmother could understand. Or your rubber duck.
A Computer Is Just a Magical Notebook
So let’s start at the very beginning.
Here’s a computer. Everyone knows how to use one: you press keys or give it a voice command - and it does something. It loads your social media profile, shows you photos, books a plane ticket, or simply displays memes. Doesn’t matter what exactly - it just works.
It’s your servant and assistant. A magical device, a magic wand. But instead of magical power, it needs electricity to function. Why electricity? Not just to keep it running, but also to help it understand what you want it to do. In other words, to understand your commands.
So what is a command for your gadget?
Imagine a giant notebook with graph paper. With 1,000,000 cells. In each cell, you can either write a 0
or a 1
. Why 0
and 1
? Why not 0
and 10
? Or A
and Я
? Essentially, 0
and 1
mean: nothing / something.
How it works inside the computer
I (as the computer) have this giant notebook where I record what the meatbag (user) wants from me. For communication, I have external tools (keyboard, screen, voice input, etc.). And I have a sort of “bridge” (the data bus) through which information from the user (via those tools) is transmitted into my notebook.
The meatbag presses Save to save a post. For them, Save is just a key on the keyboard or a button on the screen. For me, it’s a message in an internal list of commands (like a dictionary that says: if the user presses Save, this translates into a certain binary code - a sequence of 0s and 1s).
This message must pass through the bridge and be written into the notebook, to be executed later (like a to-do list from which I take tasks). But remember: I don’t understand words, only empty/full, 0s and 1s. So the Save command, using a built-in dictionary, gets transformed into a sequence of 0s and 1s - say 11101000
. That command goes over the bridge and into my notebook (in reality, the sequence is much longer, but let’s not get stuck on that now).
What happens with these 0s and 1s?
Here’s what: on the bridge, a barrier (a “gate”) opens. It lets through a fixed amount of information - like a group of cars. Then it closes. If needed, the process repeats.
One car = 1 bit of information (0
or 1
).
Usually, 32 or 64 cars are allowed through at once. Remember that line in your computer specs - “64-bit operating system”? That’s what it refers to: the size of data chunks the processor handles at a time. So the processor typically works with 32- or 64-bit chunks, and the data bus (the bridge) is designed to carry exactly that much per cycle. In other words, the number of cars crossing the bridge at once equals the size of the data chunk the processor can process in one step.
And what is a car physically? It’s just the presence or absence of an electric signal on the bus in a unit of time. Imagine someone counting aloud over the bridge: 1, 2, 3, … 63, 64. Each time a number is called, electricity either flows or not. Or imagine a little lamp: each count, it either lights up (that’s a 1
) or stays dark (0
).
Behind the bridge sits a “pen,” filling in the notebook’s cells. For 64 cars, it marks 64 cells in sequence: if the car was 1
, the cell is filled; if 0
, left empty.
The Ice Cream Analogy
Another analogy: an ice cream conveyor. 64 empty waffle cones go by, and after the gate closes, the conveyor moves and the cars “drop” their contents: if it’s a 1
, ice cream goes into the cone; if it’s a 0
, the cone stays empty.
At the end of the conveyor stands the factory director, who reads the pattern of full and empty cones to decide what needs to happen next.
Or: a spy picks up the notebook and, by the filled/empty cells, understands what instructions the meatbag gave.
Why record it all in the notebook?
Because the computer has a whole infrastructure for carrying out these tasks.
Say we need to save text. What does “save” mean? It means putting it into a database so we can find it later. That means somewhere there’s a DB that recognizes this meatbag, plus some storage for text. My computer must find the bridge to this DB, tell it: “We’re about to talk, open your gate”, then transmit: “User so-and-so with these details wants to save text. Allocate space, tag it so we can find it, now take this data. Close your gate.”
And so the notebook stores everything that needs to be done. When a task is complete, an eraser wipes the corresponding cells. Some notebook entries are never erased (because they’re needed to run the system), some are erased rarely, and others right away.
And what about symbols?
It’s not just about commands - the user also types text. Say they type =
. But the computer doesn’t understand symbols, only 0s and 1s.
Here’s what happens: every computer has a built-in dictionary that translates any human symbol into machine language (binary). For example:
0
→0
1
→1
2
→10
3
→11
a
→101010101110001000
(this is a very, very strong simplification).
This dictionary is called Unicode. It’s standardized worldwide, so all programming languages, devices, phones, and even coffee machines agree: if the stored code is 11
, the screen should display 3
.
Unicode includes Latin letters, Cyrillic, hieroglyphs, emojis, and more. Each year it expands, adding previously unencoded characters, new emojis, and other symbols. For example, a new panda emoji 🐼 will be added soon. Once Unicode updates, Android and iOS developers will adapt their emoji panels, and we - the end users - will be able to send pandas to each other.
So every symbol you type on your keyboard is translated via Unicode into binary, sent over the bridge into memory, and then the machine executes the command associated with it.
Conclusion
Now that you understand how a computer processes commands at the level of zeros and ones, it will be easier to see why Java needs the JVM - and how it works under the hood.
Subscribe to my newsletter
Read articles from Yana Dziadkouskaya directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Yana Dziadkouskaya
Yana Dziadkouskaya
Hi! I’m Yana, a Java Software Engineer with 4+ years of experience building scalable backend systems in fintech, IoT, and enterprise projects. I work with Java, Spring, SQL and noSQL, AWS, Camunda, and modern DevOps tools. I love writing, teaching, and sharing knowledge. In this blog, I explain Java concepts — from JVM internals to clean code practices — in simple language. You’ll also find reflections on software psychology, soft skills, and even some comics about how the JVM works 🎨. My goal is to make programming not just about code, but about people, growth, and curiosity.