Skip to content
DevMeme
5936 of 7435
The Duality of Developer: Knows No Trees, Builds All Engines
CS Fundamentals Post #6500, on Jan 6, 2025 in TG

The Duality of Developer: Knows No Trees, Builds All Engines

Why is this CS Fundamentals meme funny?

Level 1: Can’t Cook, Opens Restaurant

Imagine a friend who says, “I don’t even know how to scramble an egg,” and in the next breath declares, “I’m going to open my own restaurant and cook all the dishes from scratch!” You’d probably giggle, right? 😅 It sounds silly because if someone can’t do a small, basic task (like cooking an egg), it’s crazy for them to think they can succeed at a huge, super difficult task (running an entire restaurant kitchen).

That’s exactly what this meme is joking about, but in the programming world. One side of the picture has a person basically saying “I have no idea what a simple thing (a binary tree) is,” and the other side has them saying “I’m going to build a very complicated thing (a whole game engine) by myself.” It’s funny for the same reason as the cooking example: the person is skipping the basics and yet is super confident about doing something that even experts find hard. It’s like someone who can’t ride a bicycle yet announcing they’ll design and build a rocket ship. We kind of know they’re getting way ahead of themselves!

So the big idea in simple terms: the meme makes us laugh because the person’s knowledge is tiny, but their confidence is huge. It’s showing two opposite sides (just like the black and white yin-yang symbol): one side doesn’t know a little thing, the other side wants to do a giant thing. In real life, when we see that, we smile because we expect they’ll run into trouble. It’s a gentle poke saying, “Maybe learn to walk before you run.”

Level 2: Fundamentals vs Fantasy

Let’s break down what this meme is saying in simpler terms. It shows a black-and-white yin-yang symbol with two captions: on the white half it says “wtf is a binary tree” and on the black half “I’ll program my own game engine from scratch.” Essentially, it’s presenting two opposite statements from the same person, and that contrast is the joke. One side is basically, “I have no idea about a very basic concept,” and the other side is, “I’m confidently going to tackle a ridiculously complex project.” If you’ve ever been a new programmer (or met one), this might sound familiar! It’s pointing out a kind of funny knowledge gap paired with overconfidence.

First, what is a binary tree? Despite the meme’s flippant “wtf” (what the heck) phrasing, a binary tree is a fundamental data structure in computer science. Think of it like an upside-down family tree or an organizational chart. Each element in a binary tree is called a node, and it can have up to two “branches” coming off it (children nodes) – one to the left, one to the right. There’s a top node called the root, and from there data branches down in two directions repeatedly, forming a treelike shape. Why do we care about this structure? Because it’s super useful for organizing data to allow quick searching, insertion, and deletion. A special kind of binary tree, a binary search tree, keeps everything in sorted order: for any node, all values in its left branch are smaller and all values in its right branch are larger (assuming we’re dealing with numbers, for example). This property means you can find a number by comparing and deciding “go left or right” at each step, which very quickly narrows down where the number could be. In a balanced binary search tree, looking up something might only take about $\log_2(n)$ steps (log base 2 of n), which grows very slowly even if n (the number of items) is huge. In plain terms, if you had 1,000 items, $\log_2(1000)$ is about 10 – so roughly 10 steps to find something instead of potentially 1000 steps if you searched a plain list. That’s a big deal for efficiency! So binary trees are a staple of CS fundamentals courses and coding interviews. It’s one of the first non-linear data structures beginners learn after simpler things like arrays and linked lists. Hearing “what’s a binary tree?” from a developer suggests they might be pretty junior or self-taught and just haven’t encountered the concept yet. It’s akin to a student in carpentry asking “what’s a hammer for?” — not a crime, we all start somewhere, but it is basic.

Now, what is a game engine? A game engine is the underlying software framework that game developers use to build video games. Instead of writing every piece of a game from scratch, developers use engines that provide common functionality needed by many games. For example, a game engine typically handles: rendering graphics to the screen (2D or 3D), playing audio, detecting collisions between entities (like your character and a wall), physics calculations (so things fall realistically or objects bounce), input handling (keyboard, mouse, gamepad), and more. Popular engines you may have heard of include Unity and Unreal Engine. These are huge, sophisticated codebases – basically giant toolkits – that have been built and optimized over many years by large teams. They let game creators focus on the unique parts of their game (like story, art, game mechanics) without reinventing the wheel for the low-level stuff. When someone says “I’m going to program my own game engine from scratch,” they’re implying they plan to create all those systems by themselves, from the ground up. That’s an enormous undertaking, even for a very experienced programmer. It’s not impossible (many famous engines started as homegrown projects decades ago), but it’s absolutely not a casual weekend project. For a sense of scale: a basic game engine involves graphics programming (which itself means understanding how to draw thousands or millions of triangles efficiently using the GPU), physics (solving math formulas for movement and collisions), managing game objects and scenes, scripting (so that game designers can define behaviors), and tools to import things like 3D models, sounds, and levels into the game. Each of those pieces is complex. Just writing a decent physics engine alone is a big project that requires good math skills and coding skills. So writing all of it from scratch is like trying to make your own car by mining the ore for steel, forging the engine, and hand-crafting every gear – doable in theory with enough time and knowledge, but extremely ambitious.

Now you see the comic contrast: this meme shows one side ignorant of a basic data structure and the other side dreaming of a massive project. It’s making fun of a certain kind of overconfidence that newbie developers (often juniors) sometimes have. For example, a person might not have formally learned data structures or Big-O complexity, but they’re fearless (or naïve) enough to say, “Eh, I’ll build a whole new game engine, how hard can it be?” Seasoned devs chuckle at this because they know how hard it can be – they’ve been through the grind of optimizing code or debugging crazy bugs even when using existing engines or libraries. The newbie in the meme skipping fundamentals is setting themselves up to learn those fundamentals the hard way. If you don’t know what a binary tree is but attempt to make an engine, you’ll likely stumble upon problems (like optimizing a game’s performance, organizing game objects, etc.) where the ideal solutions are exactly those classic things from CS class. It’s the universe’s way of saying “you can’t escape the basics!” In game development, for instance, one common fundamental is using efficient structures for collision detection (imagine a game with 1000 objects – you need a smart way to check collisions or the game will lag). Often, developers use spatial partitioning trees or grids for this – essentially fancy uses of the concepts behind binary trees or similar structures. So the person in the meme might end up reinventing a binary tree without knowing it, or suffer bad performance.

The tags like OverEngineering and NotInventedHereSyndrome are relevant here. Over-engineering means designing a solution more complicated or grandiose than what’s actually needed. If someone’s goal is “I want to make a game,” writing a whole engine from scratch instead of using Unity could be over-engineering – it’s an enormous detour unless your real goal is specifically to learn engine development. And “Not Invented Here Syndrome” is a tongue-in-cheek way developers describe the tendency to avoid using existing solutions in favor of building your own. Some programmers (especially when inexperienced or very particular) fall into the trap of thinking, “Eh, I’ll just code my own version, I don’t want to use someone else’s.” It can stem from wanting a deeper understanding, or believing you can do it better, or sometimes just not being aware of the existing options. In moderation, this attitude can lead to learning. In excess, it leads to wasting time rebuilding things that already exist (often ending up worse than the mature product you refused to use). This meme’s character deciding to make their own engine (instead of, say, using an established one) shows a bit of that NIH mentality – maybe they think existing engines are too bloated, or they simply underestimate how much work they’re signing up for.

From a junior developer’s perspective, the meme is a humorous caution. It’s basically saying: “Before you attempt something huge, maybe make sure you understand the small stuff!” It’s not mocking learning by doing – building ambitious projects is actually a great way to learn – but it is poking fun at the naïveté of completely ignoring foundational knowledge. The best approach is a balance: learn some theory, build something, learn more when you hit a wall, and so on. Jumping straight to “engine from scratch” without even knowing what a binary tree is means you’re likely to hit a wall of confusion pretty fast. That’s why experienced devs find it funny; they know this poor soul is in for a rough ride. The meme is popular in developer humor circles because we’ve all been a bit overconfident at times. Maybe you didn’t know about databases and said you’d write your own database engine, or you never wrote a compiler but wanted to make your own programming language as a first project. These things are possible, but once you’re in the thick of it you often realize why people spend years studying and refining these technologies.

In summary, the meme contrasts basic knowledge vs. big ambition. It’s funny because the person skips step 1 (“learn what a tree structure is”) but jumps to step 100 (“build something incredibly complex”). For a junior dev reading this, take it as a light-hearted reminder: it’s okay not to know things (we all start not knowing!), and it’s great to be ambitious, but try to fill in your basics before or while you tackle the moonshot projects. It’ll save you a lot of pain and ironically help you achieve those big dreams faster. After all, even the fanciest game engine is built on fundamental concepts like algorithms and data structures – the not-so-glamorous stuff matters!

Level 3: Big O, Big Ego

The meme’s yin-yang image juxtaposes two quotes that capture a classic developer folly. In the white half: “wtf is a binary tree”. In the black half: “I’ll program my own game engine from scratch.” If you work in software, you’ve likely met this attitude (or had it yourself early on). It’s that mix of ignorance and hubris so common among enthusiastic new programmers. The humor hits home for experienced developers because the contrast is extreme and painfully relatable. We have a person clueless about a binary tree – a basic data structure taught in any introductory algorithms course – yet supremely confident they can create a full-fledged game engine, one of the most complex projects in software development. It’s like hearing someone ask, “What’s a wheel, anyway?” and then proclaim, “I’m gonna build a Ferrari from scratch.”

Why is this so funny (and cringey)? Because it screams Dunning-Kruger effect in action: the less someone knows, the more they think they know. A junior developer who hasn’t faced hard lessons yet might genuinely underestimate the complexity of a game engine. In their mind, building an engine is just a “cool side project” – after all, they’ve maybe made a simple platformer game or learned some graphics API basics, so how hard could an entire engine be? At the same time, they might shrug off CS fundamentals like data structures and algorithms as “the boring academic stuff.” This is the paradox of competence the meme nails: high confidence, low groundwork. Every senior dev who’s mentored juniors has seen this movie play out. We laugh because we remember being there or watching a colleague go down that rabbit hole.

Let’s unpack the two halves. “WTF is a binary tree” implies the person skipped or forgot an elementary topic. A binary tree is no obscure piece of trivia – it’s a core concept in CS_Fundamentals. (Many of us had to code one by hand in undergrad or during coding interviews.) If someone doesn’t know what a binary tree is, it likely means they haven’t learned about data structures like trees, linked lists, graphs, etc. Perhaps they jumped straight into coding with high-level languages or game tutorials without touching theory. No shame – not everyone has formal CS training – but it’s a glaring gap. It’s the kind of question a fresh student might blurt out in week 2 of Algorithms 101, or a self-taught coder might wonder when encountering a library function like TreeNode. For a seasoned dev, hearing “WTF is a binary tree” sets off alarm bells (and maybe a chuckle) because it’s so fundamental that not knowing it suggests you’re very, very green.

Now the dark half: “I’ll program my own game engine from scratch.” This is an overambitious side project even for experienced engineers. Modern game engines (Unreal, Unity, Godot) are massive, sophisticated codebases built by teams of experts over years. Even older engines like id Tech (Doom/Quake) required genius-level developers to push hardware to its limits. So when someone casually declares they’ll write a new engine solo, it sounds comically naive. It’s over-engineering to the extreme – reinventing a very heavy wheel. There’s also a whiff of “Not Invented Here Syndrome” in that statement: the attitude that “I won’t use someone else’s engine, I’ll make my own from the ground up because mine will be better (or because I don’t trust/understand the existing ones).” Seasoned devs know this mindset well. We’ve seen junior team members suggest scrapping a stable framework to build a custom one, not realizing the Pandora’s box they’re opening. Usually it ends in a half-finished system, countless bugs, and a newfound appreciation for the off-the-shelf solution they scorned.

The yin-yang symbolism is spot on. Yin and yang represent balance and complementary forces. In a well-rounded developer, you balance knowledge and ambition: you learn data structures (even if they’re unsexy) so that you can tackle big projects intelligently. The meme’s dev has the two halves comically out of balance – all yang (bold confidence to build anything) and no yin (no foundational knowledge to ground that ambition). The result is a “hubris vortex”: plenty of can-do spirit but headed for a reality check. It’s developer humor 101: we often joke about times we thought we knew everything and life (or code) taught us otherwise. This meme turns that into a visual gag. The white side (ignorance of basics) and the black side (grandiose project plans) swirl together, implying they’re two sides of the same coin. In tech, we often see that the people with the least experience are the most certain they can solve a problem that countless others have struggled with. Those of us with battle scars smile wryly at this – not just to poke fun at juniors, but remembering our own youthful overconfidence. (“Sure, I can build an entire MMORPG engine over summer break!” …fast forward to fall: I have a buggy movement demo and a newfound respect for engine developers.)

Another reason this resonates is the knowledge gap humor. Everyone in software has experienced a moment of feeling lost on a “simple” concept and, separately, a moment of biting off more than they could chew. The meme just slams those two experiences together in one person within one moment. The result is absurd and thus funny. It pokes at the classic theory-vs-practice divide, too. You can imagine this person saying, “I don’t care about theory (like binary trees and all that academic stuff), I learn by doing – now watch me code the next Unreal Engine!” The CS_theory_vs_practice tension is real: practical projects are crucial, but so is knowing common solutions so you’re not reinventing every wheel. The best devs balance the two. This meme’s character has chosen practice over theory so hard that it’s become a caricature. And as any senior could tell them, that engine project will inevitably force them to learn the theory they skipped (in the most painful ways, debugging nasty performance issues or broken data structures they reinvented poorly).

In summary, the meme lands with developers because it captures a cycle many of us go through: ignorance, arrogance, then enlightenment (often via a crash-and-burn project). It’s a lighthearted roast of that “I got this, how hard can it be?” stage. The yin-yang of dev hubris indeed — one side naive, one side overconfident, spinning in eternal irony. Experienced engineers share it with a smirk, thinking “Kid, I hope you at least Google what a binary tree is before you write your own physics engine.” We’ve seen how that story ends, and it usually isn’t with a revolutionary new engine… more often it ends with a sheepish developer finally cracking a algorithms textbook.

Level 4: Algorithmic Yin, Engine Yang

On a theoretical level, this meme highlights a jarring disconnect between basic CS fundamentals and extreme software ambition. Consider the humble binary tree: an elegant data structure where each node links to at most two children (left and right). In a balanced binary search tree, fundamental operations like lookup or insertion run in about $O(\log n)$ time – meaning they scale efficiently even as data grows. This is CS-101 material, the kind of algorithmic enlightenment every developer encounters early on. So when a dev says “wtf is a binary tree”, it’s a bit like a mathematician saying “what’s addition?” – a raised eyebrow moment in any technical circle.

Now flip to the opposite side of this yin-yang: “I’ll program my own game engine from scratch.” A game engine isn’t just another program; it’s an amalgamation of complex subsystems and hard-won engineering principles. Writing one from scratch means re-deriving decades of game development knowledge. We’re talking about implementing or integrating:

  • Rendering pipelines – Code that interfaces with GPU APIs (like DirectX or OpenGL) to draw graphics. This involves linear algebra (matrices, vectors), shaders for lighting and texture, and optimizing draw calls. It’s a whole field (computer graphics) packed with algorithms (rasterization, occlusion culling) and engine developers spend years mastering it.
  • Game loops & real-time updates – The core render loop that runs ~60+ times a second, updating game states and drawing frames. Managing this loop means handling delta times, frame synchronization, and often multi-threading (separating physics, rendering, and AI onto different threads). If you’ve never even coded a binary tree traversal, imagine writing a multi-threaded update scheduler that avoids race conditions.
  • Physics engines – Simulating realistic motion and collisions. This requires solving Newtonian physics equations, collision detection algorithms, and spatial partitioning. Many engines use advanced data structures like octrees or BVH (Bounding Volume Hierarchy) trees to broad-phase cull collision checks. Ironically, these are tree structures too – skip those “boring” trees and your homemade physics might end up $O(n^2)$ sluggish as every object checks collision with every other.
  • Entity-Component Systems (ECS) – A modern game-engine architecture pattern. Instead of deep class inheritance for game objects, ECS uses composition: entities (game objects) have components (like Position, RenderMesh, PhysicsBody) and systems process these components. ECS is powerful for performance (cache-friendly iteration) but tricky to get right. Crafting an ECS from scratch means grasping data-oriented design, memory alignment, and CPU cache behavior – concepts far beyond “what’s a binary tree?”.
  • Cross-platform tools & build pipeline – A custom engine must deal with platform differences (Windows vs. Linux vs. consoles), file I/O, memory management, and possibly writing tools like level editors or importers for assets. There’s build tooling, packaging, and debugging infrastructure specific to engines. Each of these tasks can be a project on its own (writing a custom renderer, writing a physics solver, building an editor UI, etc.).

In other words, a bespoke engine is a labyrinth of interlocking pieces: real-time rendering, physics simulation, audio processing, input handling, AI scripting, and more – each piece grounded in advanced algorithms and patterns. Developers typically leverage existing libraries or engines precisely because this complexity is so daunting.

Here’s the kicker: many of those subsystems themselves rely on classic data structures and algorithms. Take graphics: early 3D engines like id Software’s Quake used a BSP tree (Binary Space Partitioning tree) to quickly decide which walls and rooms were visible, drastically reducing rendering work. Yes, that’s a specialized binary tree at the heart of a game engine. Or consider AI pathfinding: algorithms like A* use priority queues (often implemented with binary heaps, close cousins of binary trees) to efficiently find shortest paths. In physics, Quadtrees partition space into regions for collision detection so that every bullet isn’t checking against every object in the world. Without knowing it, our intrepid “I’ll build my own engine” programmer will likely re-discover these data structures the hard way (or suffer terrible performance). It’s the height of irony – the very concept he labeled “wtf” might be crucial to the monster project he’s boasting about.

From a computer science standpoint, this yin-yang imbalance is almost poetic. One side (the yin of theory) is a void – ignorance of basic algorithmic knowledge. The other side (the yang of practice) is overcharged – a plan to tackle an enormously complex engineering feat. In a well-balanced developer, theory and practice complement each other (you use that O(log n) data structure wisdom to build efficient large systems). But here the meme shows an upsetting of that natural balance, a kind of tech paradox of competence. It’s as if someone skipped straight to boss-level coding with a knowledge gap in their inventory. Seasoned engineers recognize this as a recipe for disaster (or at least a decade-long “learning experience”). The meme’s high-contrast black-and-white circle visually amplifies this absurd duality: ignorance and ambition, dark and light, swirling together. Under the hood of the humor lies a truth known to every senior dev – if you charge into writing a whole engine while shrugging off core CS concepts, the karma (in bug form) will come full circle. Yin needs yang; code ambition needs code fundamentals.

Description

A meme depicting a classic black-and-white Yin and Yang symbol. The white 'Yang' half contains the text 'wtf is a binary tree'. The black 'Yin' half contains the contrasting text 'ill program my own game engine from scratch'. This meme humorously illustrates the Duality of the Developer or the Dunning-Kruger effect in software engineering. It satirizes the mindset of developers, often earlier in their careers, who may lack foundational computer science knowledge (like data structures) while simultaneously possessing the hubris to take on monumental, complex tasks like creating a game engine from the ground up. The Yin and Yang represents this flawed balance between ignorance and overconfidence

Comments

26
Anonymous ★ Top Pick This developer's stack is perfectly balanced: zero knowledge of O(log n) lookups, infinite confidence in rewriting Unreal Engine over a weekend
  1. Anonymous ★ Top Pick

    This developer's stack is perfectly balanced: zero knowledge of O(log n) lookups, infinite confidence in rewriting Unreal Engine over a weekend

  2. Anonymous

    Nothing says "I skipped data structures" like reinventing Unreal before you can write an in-order traversal

  3. Anonymous

    The same developer who writes custom SIMD-optimized frustum culling algorithms and implements lock-free concurrent job systems will still Google 'how to reverse a linked list' during their FAANG interview prep

  4. Anonymous

    The beautiful duality of modern game development: confidently architecting a custom ECS with SIMD-optimized spatial hashing while Googling 'difference between stack and heap' in another tab. Bonus points if your engine's scene graph is literally just a std::vector because 'trees are too complicated' - who needs O(log n) lookups when you can brute-force at 144 FPS on a 4090?

  5. Anonymous

    Yin: Forgets binary trees exist. Yang: Reinvents one as a game engine. Together: a perfectly balanced red-black tree of regret

  6. Anonymous

    Can’t define a binary tree, but volunteers to build a scene graph, ECS, custom allocator, and renderer - classic NIH where the only balanced tree is their sprint board

  7. Anonymous

    The Venn diagram of “wtf is a binary tree” and “writing a game engine” is a perfect circle - right up until the scene graph, quadtree, and BVH they just reinvented show up

  8. @deadgnom32 1y

    tetris-os is a game too

  9. @callofvoid0 1y

    you don't need to know that

    1. @ZgGPuo8dZef58K6hxxGVj3Z2 1y

      Well in most cases no. But its a basic thing and if you dont even know what a binary tree is you will have no clue how to make a 3d game engine. (Yes I know it didn't say 3d in the post)

      1. @callofvoid0 1y

        I mean even knowing trees is not the only thing you need for making a game engine

        1. @ZgGPuo8dZef58K6hxxGVj3Z2 1y

          Of course not, but if you dont know what it is you are unlikely to know the rest

    2. @GioMetal 1y

      hierarchies are ntrees

      1. @callofvoid0 1y

        well yeah

    3. @ZgGPuo8dZef58K6hxxGVj3Z2 1y

      Dooms map wasn't 3d and didn't have real walls. The hitboxes of walls are a binary tree. Because of Hardware limits. (Just for an example)

      1. @callofvoid0 1y

        wtf

        1. @hotsadboi 1y

          https://wikipedia.org/wiki/Binary_space_partitioning id software did a lot of heavy drugs back in the day

          1. @RiedleroD 1y

            looks like source 1 and 2 also use this

      2. @callofvoid0 1y

        how

        1. @ZgGPuo8dZef58K6hxxGVj3Z2 1y

          The map is "2d"

          1. @dsmagikswsa 1y

            So can we say every ds is a tree?😂

  10. @LostGhost11 1y

    Hey, writing an engine from scratch is good motivation to learn binary trees

  11. @SemakMillev 1y

    Tree-D game... :)

  12. @azizhakberdiev 1y

    what engine exactly? Physics engine or graphics engine?

  13. @FirokOtaku 1y

    regular minecraft modder be like:

    1. @azizhakberdiev 1y

      regular minecraft player be like:

Use J and K for navigation