Before we continue with more Java, I just wanted to take a quick break today to acknowledge how difficult programming (in Java or any language) can be and how frustrating it can be, especially at the beginning. (But, spoiler alert, the frustration doesn’t go away as you get more experienced; early problems get much easier, but harder problems can still be just as frustrating!)
You’ll write a lot of code on your way to Java proficiency—many thousands of
lines. If you’re following along, learning from me, then you’re just getting
started. People who do this for a full career from early adulthood to
retirement will end up writing hundreds of thousands of lines over all those
years.
And in all those years writing all those lines, there will be lots of bugs. If
your lifetime output is 500,000 lines, you probably wrote at least 1,000,000 bugs along
the way. Brady, Manning, Montana, Brees, etc., are some of the greatest quarterbacks ever, and none of them has a career completion percentage over 70; each of them, as great as they were, made thousands of mistakes over their careers. Even the best make mistakes! That's OK! You will, but you'll improve over time!
The more practice you get with the simple parts, the easier it is for
those to be bug-free. There will be a point, as a programmer, where certain
structures become so obvious that they become second nature. If you aren’t at
that point yet, don’t worry! Bugs are a critical part of the learning process.
(It took me an embarrassingly long time, for example, in 2017-18, to
consistently remember to end my lines with a ;, and that’s a serious enough bug
that your code will not run if even one of them is missing.)
Bugs come in two general flavors:
- Errors in syntax
- Errors in logic
Syntax errors, generally, are easier to grow out of: “oops,
I called an int a ‘num’ because I forgot the name of the data type” or “oops, I
left off a semicolon, or didn’t pair () inside () inside () correctly so there
was one too many (”. These come down to learning the conventions of the language
and being careful, just like a college professor makes fewer spelling mistakes
than her 5-year-old kindergartener. The professor has been reading and writing
far longer, so she has seen much more correct spelling and had many more
opportunities to practice it.
Logic errors, on the other hand, are the real nasty bugs—the reason people in
coding make so much: because it’s our job to work through an algorithm to do
something, put it on paper, explain it to a coworker (this is great at catching
these bugs), and then translate plain English into computable Java. If a problem
is just particularly hard, or if your boss’s requirements aren’t clear, or if
you’re working with something new, or if you’ve had a bad day, you’re much more
likely to make logic errors, even after 10, 20, 30 years of coding. That is to
say: professionals write bugs all the time, so if you’re just getting
started, don’t beat yourself up!
But at the same time, don’t look for the easy way out. If you’re learning Hanoi, don’t Google the solution, or read too far down my article without playing with plates first. If you have an infinite loop or StackOverflowException somewhere, don’t throw your hands up and give the problem to an LLM to fix for you. It’s totally normal, especially early, to feel the pressure to get things right, right away—but this does not (or should not) exist. You will, and you can, make mistakes. You are learning!
If you're learning a new algorithm and you come across a bug, then the best things to do are any of the following:
- Take a break
- Ask questions
- Find a good explainer video/article
- Ask someone else for help
- Try to teach someone the algorithm and answer their questions
- Make your learning experience multi-sensory somehow
- Go to an LLM right away for a quick and easy answer
- Copy a solution from somewhere like StackOverflow or ChatGPT
- Give up
- Ask someone else to write it for you
No comments:
Post a Comment