TechFundamentals

Learn to Program, Properly

The concepts that stay true after the language you learned them in goes out of fashion, starting from the editor and ending at complexity and character encoding.

13 articles · about 90 min in total

Start with What Is an IDE, and Why Does It Matter

Most programming tutorials teach a language. The useful thing to learn is the set of concepts underneath it, because those survive the language going out of fashion and the language will.

This path is built for someone who can already write a little code and wants the foundations to stop being fuzzy. It starts at the editor, which nobody teaches on purpose and everybody is assumed to know, then moves through how code actually runs.

Compiled versus interpreted is a good example of a distinction that is taught wrong almost universally. It describes an implementation, not a language. CPython compiles to bytecode and then interprets it. Once you see that, a whole category of confusing claims about language speed resolves itself.

The last three steps are the ones that separate someone who can write code from someone who can reason about it. Big O is how you talk about cost without a stopwatch. Regular expressions are a small language most people only half-learn. Unicode is where every text bug you have ever had actually came from.

Key takeaways

  • Compiled and interpreted describe an implementation rather than a language, which is why the same language can ship both.
  • Big O notation describes how cost grows with input size, so it compares algorithms without depending on hardware or language.
  • Most text-handling bugs come from treating bytes and characters as the same thing, which UTF-8 makes convenient to ignore until a non-ASCII input arrives.
  • Synchronous and asynchronous describe whether the caller waits, and choosing wrongly is the usual cause of an application that is idle and slow at the same time.
  1. Step 1: What Is an IDE, and Why Does It Matter

    An IDE is a text editor with steroids. The features that make one an IDE (instead of just an editor) are the difference between writing code and fighting your tools.

    Sep 9, 2025 · 5 min read

  2. Step 2: Compiled vs Interpreted Languages Explained

    Everyone learns that C is compiled and Python is interpreted, then discovers Python has a bytecode compiler and JavaScript gets compiled to machine code at runtime. The clean split is mostly a lie. Here is what is actually going on.

    May 26, 2026 · 8 min read

  3. Step 3: Comment Syntax in Every Major Programming Language

    Most languages use //, #, or /* */, and which one you get is almost entirely an accident of ancestry. One reference for every language you’re likely to touch.

    Sep 16, 2025 · 5 min read

  4. Step 4: Java Variable Types: The Eight That Matter

    Java has eight primitive types. Everything else is an object. Knowing what each primitive does, and which ones you should default to, prevents most of the silly bugs new Java developers ship.

    Sep 2, 2025 · 6 min read

  5. Step 5: Loops in Java: for, forEach, while, and do-while

    Java has four ways to write a loop, and most code only needs two of them. Here’s the difference between each, when to use which, and the few places choosing wrong actually matters.

    Oct 14, 2025 · 6 min read

  6. Step 6: Why Java and JavaScript Are Not the Same Thing

    The most common interview-killing question for people new to programming is whether Java and JavaScript are the same. They are not. Here’s the actual story of how the names ended up that confusing.

    Aug 12, 2025 · 5 min read

  7. Step 7: Python vs Java Syntax: A Side-by-Side

    Java is verbose and explicit. Python is terse and dynamic. Most of what you actually need to know to switch between them fits in one comparison page.

    Jul 22, 2025 · 6 min read

  8. Step 8: Synchronous vs Asynchronous Programming, Explained

    Synchronous code waits, asynchronous code moves on. That one difference decides whether your server handles ten users or ten thousand. Here is what blocking, event loops, and async/await actually mean, and when the complexity is worth it.

    Jun 13, 2026 · 8 min read

  9. Step 9: Big O Notation, Explained Without a Math Degree

    Big O isn't math for its own sake. It answers one practical question: when your input gets 10x or 1000x bigger, does your code get 10x slower, 1000x slower, or barely slower at all? Here's how to read the shapes without the limit definition.

    Jun 15, 2026 · 10 min read

  10. Step 10: Regex Explained: How to Read Any Regular Expression

    A regular expression is a tiny program that describes a shape in text, and it is read left to right as position, characters, and quantity. Learn that, plus the two things that separate people who use regex from people who fear it: greedy versus lazy matching, and the nested quantifier that once cost Cloudflare 27 minutes of traffic.

    Aug 16, 2026 · 9 min read

  11. Step 11: Unicode and UTF-8: Why Your Emoji Breaks the Database

    A character, a code point, and an encoding are three different things, and almost every text bug you have ever shipped comes from a layer that confused two of them. Here is the whole model, with the actual bytes.

    Aug 20, 2026 · 9 min read

  12. Step 12: Learning Python When You Already Know Java

    Java to Python is one of the more common transitions in the industry, and it’s mostly easy. The places it’s not easy are the places where Python’s flexibility produces patterns that look wrong to a Java brain.

    Jul 29, 2025 · 7 min read

  13. Step 13: The Resources I’d Actually Use to Get Good at Java

    Most Java tutorials are surface-level. The resources that actually move someone from beginner to professional are a short list, and the order you use them in matters more than the list does.

    Oct 21, 2025 · 6 min read

Frequently asked questions

Is Python compiled or interpreted?
Both descriptions are partly right, which is why the question misleads. CPython compiles your source into bytecode and then interprets that bytecode. Compiled versus interpreted describes an implementation, and most modern languages have implementations on both sides.
Why does Big O notation matter in practice?
Because it tells you how an algorithm behaves as data grows, independently of machine speed. Code that is fast on a hundred rows and unusable on a million is almost always a complexity problem rather than a hardware one.
What is the difference between Java and JavaScript?
They are unrelated languages that share a name for marketing reasons from the 1990s. They differ in typing, runtime, memory model and standard library. Assuming knowledge transfers between them beyond basic C-style syntax causes more confusion than it saves.
Do I really need to understand Unicode?
Yes, if you handle text from anyone but yourself. Length, comparison, sorting and truncation all behave differently once characters stop being one byte, and the bugs typically appear only when a real user submits a name or emoji you did not test with.