Skip to content
DevMeme
3793 of 7435
The Bell Curve of Programming Wisdom: From Simple Loops to Abstract Factories and Back
CS Fundamentals Post #4134, on Jan 30, 2022 in TG

The Bell Curve of Programming Wisdom: From Simple Loops to Abstract Factories and Back

Why is this CS Fundamentals meme funny?

Level 1: Simply Put – It’s Like Following a Recipe

Imagine you’re helping cook dinner. A beginner chef might say, “Cooking is basically just checking things and repeating steps.” For example: if the water is boiling, add pasta. Stir for 5 minutes. If the pasta is soft, take it out. They’re using a simple rule (if) and doing some actions over and over (stirring in a loop). Now picture a student from chef school (someone with a bit more knowledge) who insists on a super fancy recipe – they start talking about emulsification, molecular gastronomy, and bring out 10 different tools. They’ve made the process really complicated for what could have been a simple meal. Finally, imagine a master chef watching both of them. The master smiles and says, “Cooking really is just checking and stirring – if it needs salt, add some, and keep tasting as you stir.” The master chef and the beginner oddly agree on the simple approach! In the end, making dinner or writing code, the basics are the same: you make decisions (if something is true, do this) and you repeat actions (for each item or until you’re done). The joke in the meme is that both the newbie and the wise old programmer see the task in its simplest form, while the person in the middle is stressing over lots of unnecessary complexity. It’s funny because it reminds us that sometimes the simplest explanation or method really is the best – even though we often learn that only after trying a much more complicated way in the middle.

Level 2: Back to Basics – Ifs, Loops & Jargon

For someone newer to coding, let’s break down what all this means. The meme’s catchphrase “coding is basically just ifs and for loops” points to the basic building blocks every beginner learns. In programming, an if statement is a way to make a decision: “If a condition is true, then execute some code (otherwise maybe do something else).” It’s like saying, “If it’s raining, then take an umbrella.” Computers need these yes/no branches to handle different situations. A for loop is a way to repeat actions. For example, “for each student in the list, print their name.” It’s like saying, “For every cookie in the jar, eat one” – a repetitive task done for each item or until some condition is met. These two concepts – making choices and doing repetitive tasks – are fundamental in every programming language. When the meme’s characters say “just ifs and loops,” they’re referring to these core ideas of control flow: selection (ifs) and iteration (loops).

Now, why is that funny or notable? Because in reality, modern programming involves a lot more around those basics: we have complex frameworks, libraries, and concepts to manage big software projects. The middle character in the meme is overwhelmed by (or proudly brandishing) a bunch of those advanced concepts/jargon. Let’s decode some of the scary-sounding terms plastered around him:

  • S-expressions: This stands for symbolic expressions. It’s a simple way to write code as data, famously used in the Lisp programming language. Imagine writing everything in parentheses, like (+ 1 2) to add 1 and 2. That’s an s-expression. It’s a very minimalist, foundational syntax from the early days of AI research (John McCarthy’s Lisp in 1958). Why would our mid-level friend be yelling "s-expressions"? Possibly to show he’s dabbled in Lisp or thinks in very theoretical terms. To a newcomer, it’s just a fancy way some languages represent code.

  • Virtual inheritance: This is a feature in C++ (an older but powerful programming language known for its complexity). In object-oriented programming, inheritance lets one class (a blueprint for objects) reuse code from another. But with multiple inheritance (when a class inherits from two classes that both inherit from one base class), you can get something called the “diamond problem” – basically the same grandparent class duplicated. Virtual inheritance is a C++ trick to ensure there is only one shared instance of that grandparent class, solving the duplication. It’s an advanced OOP concept that most beginners won’t encounter until much later (if ever). Seeing it in the meme just signals “here’s some intricate C++ stuff that mid-level devs might obsess over.”

  • “a monoid in the category of endofunctors”: Don’t panic! This phrase is infamous in programming circles, almost an inside joke. It’s a highfalutin way some academics define a monad. Monads are a concept from functional programming (especially in Haskell) used to handle things like computations that might fail or have side effects, in a structured way. But explaining monads often intimidates people, and someone once quipped that a monad is just “a monoid in the category of endofunctors”. This explanation, while mathematically precise, sounds like gobbledygook to almost everyone else. In simpler terms, a monoid is just a set of things with a way to combine them and an identity element (like how adding numbers has 0 as the identity and combining is just addition). An endofunctor is a concept from category theory (a branch of math) meaning roughly a transformation that maps a structure back into itself. Put together, that phrase is defining a structure where you can do certain operations... but honestly, you do not need to understand that to program! The meme is poking fun at how the mid-level dev is spouting this super theoretical definition – something a beginner would never say, and an expert wouldn’t bother saying in day-to-day work either. Bottom line: It’s an extremely fancy description of a concept that, in practice, comes down to doing things in sequence with checks (again, not so different from having some ifs in loops in the code logic).

  • git blame myself: Let’s break this one down. Git is a version control system that developers use to keep track of code changes (and collaborate). The command git blame <file> will show you, line by line, who last modified each line of a file – essentially assigning “blame” (or rather, authorship) to every line of code. It’s used when you’re curious who wrote a piece of code (maybe to ask them about it or to curse their name when debugging 😅). The phrase “git blame myself” is a humorous way to say: “I ran git blame to see who wrote this bug... and it turns out it was me!” Most developers have experienced that sinking feeling when they realize a mysterious bug was actually introduced by their own past self. In the meme, it’s one of the thoughts swirling around the stressed mid-level guy’s head – he’s aware enough to use advanced tools like Git blame, and perhaps he’s overly self-critical, taking blame on himself. It underscores a kind of anxious overthinking: not only is he over-complicating code, he’s also overthinking his own mistakes. A beginner might not even know about git blame, and a senior knows not to beat themselves up too much, but a mid-level might be in that state of constant self-blame and imposter syndrome.

  • AbstractSingletonProxyFactoryBean: What a name, right? This is practically a meme inside a meme. It’s a real class name from the Spring Framework (a popular Java framework for enterprise applications). The name is so absurdly long and stuffed with design pattern jargon that it’s become a running joke about over-engineered code. Let’s dissect it: “Abstract” often means it’s a base class meant to be extended; “Singleton” implies only one instance of this class should exist; “Proxy” suggests it’s controlling access to something else; “FactoryBean” indicates it’s a factory (creates objects) and specifically a kind of Spring Bean. Phew! In short, this thing is an object that helps create proxies for singleton beans... which even for many Java developers sounds overly convoluted. People often cite it when complaining that some frameworks or libraries have too many layers of abstraction with unhelpfully verbose names. In the context of the meme, dropping “AbstractSingletonProxyFactoryBean” is signaling: enterprisey overengineering alert! It’s the kind of thing a middle-tier dev might mention either to brag (“I worked with Spring, I know big words”) or to justify complexity (“We need an AbstractSingletonProxyFactoryBean here to manage these objects”) when maybe a simpler solution exists. A newbie wouldn’t know this term (thankfully), and a veteran likely rolls their eyes at it.

  • The C++ code snippet (inline constexpr auto yield_if = [](bool b, auto x){...};): This snippet is an example of modern C++ complex syntax. To unpack it step by step:

    • inline constexpr auto yield_if = ...; – This declares a variable yield_if that is constexpr (meaning it can be evaluated at compile time if needed) and auto means the compiler will deduce its type.
    • = [](bool b, auto x) { ... }; – This is assigning yield_if to be a lambda function (the [] indicates a lambda). The lambda takes a bool b and a parameter x of any type (auto x makes it a template parameter, so the lambda is generic). Inside the lambda, it does:
      • return b ? maybe_view(std::move(x)) : maybe_view<decltype(x)>{};
      • This is a ternary operation (condition ? result_if_true : result_if_false). If b is true, it returns maybe_view(std::move(x)). If b is false, it returns an empty maybe_view<decltype(x)>.
    • We don’t even need to know exactly what maybe_view is; likely it’s some template that creates an optional-like view of a value. The key is: this function will conditionally wrap a value x in some container if b is true, or give an empty container if b is false.
      In plain terms, yield_if is a fancy utility that yields a thing if a condition holds. But think about it – couldn’t you do the same with a simple if statement when you need it? Absolutely. For instance:
    if (b) {
        return maybe_view(x);
    } else {
        return maybe_view<T>(); // an empty maybe_view of type T
    }
    

    would accomplish the same when writing an actual function. The lambda approach is more abstract and allows you to pass yield_if around as a function object, but it’s arguably over-engineered for most purposes. The meme uses this snippet as a concrete example of how a mid-level or highly enthusiastic dev might inject complexity: instead of solving the problem in a straightforward way, they create a generic “clever” one-liner. A beginner wouldn’t know how to write this at all, and a senior might question if it’s necessary to be this fancy. The mid-level dev though is excited to use new C++ features like constexpr and lambdas, perhaps to show prowess. It’s a classic scenario: “Look, Ma, no hands! I wrote it in one line with templates!” — which might impress some, but might make others quietly sigh.

Now, connecting this to a junior developer’s perspective: If you’re newer, hearing someone rant about monoids, proxies, or seeing code like that C++ snippet can be bewildering. You might think, “Am I supposed to know all that to be a good programmer?” The reassuring (and funny) part of this meme is that even the most experienced developers often circle back to emphasizing fundamentals. The KISS principle we mentioned stands for “Keep It Simple, Stupid” – a reminder not to overcomplicate when unnecessary. YAGNI is another mantra: “You Aren’t Gonna Need It.” It means don’t add functionality or complexity for things that might happen in the future; focus on what you need now. The middle guy in the meme violates these principles by dragging in every concept under the sun. The sage on the right implicitly follows them, boiling things down to what’s truly needed: those basic ifs and loops that accomplish the task.

Early in your career, you might actually write very simple code because that’s all you know. And guess what – that’s fine! It’s more important that code is clear and works. As you learn more, you’ll certainly encounter times to apply advanced techniques, but a big part of experience is learning when not to. The comedic bell curve suggests that a beginner and an expert, despite the huge gap in knowledge, sometimes make surprisingly similar choices for a problem – precisely because the expert has learned to value simplicity just like a beginner does (though the expert can back it up with deeper understanding). The middle stage is an important learning phase, but this meme is a playful reminder: don’t get so lost in complexity that you lose sight of the basic building blocks that make everything work. After all, every complicated algorithm, every fancy framework, eventually uses plain if checks and loops somewhere in its guts.

Level 3: KISS vs Overkill

This meme brilliantly captures a common developer experience: as programmers gain experience, their perspective on complexity often traces a bell curve. On the left end, a newbie (depicted by the goofy happy Wojak) confidently says, “coding is basically just ifs and for loops.” That’s a beginner’s innocent oversimplification — after all, early programming lessons revolve around if conditions and for/while loops. It’s not wrong, but it is incomplete. Move to the middle of the curve: the average developer has learned about design patterns, fancy language features, theoretical concepts, and big frameworks. They’re now overthinking everything, spewing out terms like a walking CS textbook: “s-expressions! virtual inheritance! monoids! AbstractSingletonProxyFactoryBean!” 😵 This middle-phase developer sees every project as an opportunity to apply every pattern and paradigm they’ve learned, sometimes all at once. Finally, on the far right, the seasoned expert (the hooded sage figure) comes full circle and echoes the newbie: “coding is basically just ifs and for loops.” But when seniors say that, it’s with a world-weary wisdom behind it. They’ve seen countless fads and complexities come and go, and they know that at the heart of reliable software are simple, well-understood constructs. In other words, they embrace the KISS principleKeep It Simple, Stupid.

The humor here stems from the extremes agreeing on the same statement for completely different reasons. The junior says it out of ignorance (they literally don’t know many constructs beyond basic conditionals and loops). The senior says it out of experience (they know that even the most elaborate system boils down to fundamentals, and that unnecessarily fancy code is a liability). Meanwhile, the poor soul in the middle is trying so hard to be “smart” that they’ve ended up complicating everything. This is a gentle jab at overengineering and the phase many developers go through where they use ten-dollar words for ten-cent ideas. The meme calls out that “68%” middle slice of developers who might scoff at the newbie’s simplicity – “Hah, coding isn’t just ifs and loops, you sweet summer child, it’s about monads and factory beans and lambda expressions!” – only to eventually learn the hard way that over-complication can be worse than simplicity.

Real-world software teams see this dynamic a lot. For example, imagine a feature that needs to process a list of orders and flag those over a certain amount. A junior might write straightforward code with a couple of if statements and a for loop over the orders. It might not handle every edge case and it might be a bit naive, but it’s understandable. Now an intermediate developer, excited about their new knowledge, might swoop in and refactor this simple code into a labyrinth of abstractions: implementing a Strategy Pattern with an OrderProcessorFactory, introducing a generic MonoidAccumulator (because they just read about monoids on a blog), pulling in a functional programming library to use monads for error handling, and sprinkling in some meta-programming with C++ templates or Java reflection. Suddenly, a 10-line clear solution becomes a 100-line multi-class architecture. It’s “technically” more flexible or theoretically pure, but debugging it is a nightmare and newcomers can’t understand it. This is classic YAGNI in action – “You Aren’t Gonna Need It” – the intermediate dev added lots of hooks and indirections for hypothetical future features that never materialize. In contrast, a senior engineer reviewing the code might chuckle and say, “Why not just keep the original simple loop and a couple of if checks? It was fine.” The senior would trim away all those excess layers, perhaps leaving something not too different from the newbie’s approach, albeit with a bit more polish or necessary error handling.

The mid-level jargon listed in the meme parodies common sources of over-complexity in our industry:

  • “git blame myself” – This one is a bit of self-deprecating humor. The git blame command is used to find out who wrote a particular line of code (often to track down who to ask about a bug). Seeing a bug and realizing via git blame that you yourself wrote the code is a humbling rite of passage. By overlaying “git blame myself” on the frazzled mid-level character, the meme hints that the overcomplicated code we write often comes back to haunt us. It’s a subtle nod to the regret that intermediate devs feel when their clever solution breaks and they realize they have only themselves to blame.

  • “AbstractSingletonProxyFactoryBean” – This mouthful is a famously absurd class name from the Java Spring framework (specifically from older Spring versions). It’s practically a meme on its own, often cited in blogs and talks as an example of needlessly convoluted enterprise design. Breaking it down: Singleton Proxy Factory Bean – it’s a Bean (a Spring-managed object) that is a Factory (creates objects), acting as a Proxy, implemented as a Singleton… 😮 In short, it’s an over-engineered helper class to generate proxies for other objects. The name reads like someone tried to cram every design pattern (“Singleton”, “Factory”, “Proxy”) into one. This is a perfect symbol of that mid-tier enterprise overengineering mindset: instead of a simple config or a straightforward class, you end up with an AbstractSingletonProxyFactoryBean. Senior devs love to joke about how ridiculous this is – “AbstractSingletonProxyFactoryBean” sounds like a boss you must defeat in the Dungeon of Enterprise Java. It represents how mid-level developers (and framework authors) sometimes stack abstraction on top of abstraction, losing sight of simplicity.

  • The C++ lambda snippet with inline constexpr auto yield_if = ... exemplifies the inclination to use the latest language wizardry for something trivial. A seasoned C++ programmer sees that and goes, “Why not just write an if inside a normal function?” The mid-level dev, however, is proud of this single-line generic “elegance” that uses a lambda (an inline anonymous function), constexpr (so it can run at compile time for constants), and templates (auto parameter making it generic) – all to conditionally wrap a value or produce an empty result. It’s clever, it’s technically cool C++17/20 usage, but it’s arguably harder to read and maintain than an explicit if/else. This reflects a classic conflict: clever vs. clear. The expert knows that clever code can be a maintenance hazard. The meme’s enlightened figure would likely refactor yield_if into a plain old function with an if – because when someone else (or your future self) debugs it at 3 AM, straightforward code is a lifesaver.

  • “s-expressions” and “a monoid in the category of endofunctors” are somewhat different flavors of complexity: one from historical language design and one from theoretical FP math. The mid-level character dropping these terms is showing off breadth of knowledge. It’s the equivalent of the coworker who just read a blog titled “Understanding Monads with Category Theory” and can’t resist mentioning it in the next design meeting, or the one who dabbled in Lisp and insists that all modern languages are inferior because “they don’t treat code as data like Lisp S-expressions do.” The senior has likely heard it all before. They might appreciate these concepts in the right context, but they also know when such discussion is overkill for the task at hand.

The bell curve meme format itself is a satire of how opinions shift with expertise. Often, beginners and experts share a similar outlook (sometimes a simple or unorthodox one), whereas intermediates cling to complexity. This pattern appears in many fields, not just coding. In programming, it’s especially relatable: many of us recall a stage where we might have laughed at the notion “it’s all just ifs and loops” – because we were in the thick of learning about OOP design patterns, algorithm optimizations, or functional programming magic. It felt like coding was so much more than those primitive pieces. And indeed, professional software development does involve more – architecture, scalability, readability, etc. But the irony is, as one gains even more experience, you start valuing simplicity in those fundamentals. You learn that a simple solution is not “stupid” if it works and is maintainable; it’s brilliant in its own way. There’s a famous quote (often attributed to Einstein): “Everything should be made as simple as possible, but not simpler.” The far-right character embodies this mindset. They aren’t literally saying software has no complexity – they’re saying that even when solving complex problems, your approach should boil down to clear, fundamental steps. Or as another adage goes in engineering: “Complexity is the enemy of reliability.” The experienced dev has been bitten by that truth enough times to prefer a plain loop over a convoluted template metaprogram any day, unless there’s a VERY good reason.

In terms of developer culture, this meme resonates as a nod and a wink. The senior vs. junior developers contrast here isn’t to mock juniors – it’s more to poke fun at the phase in the middle where a lot of us (yes, seniors too, back in the day) were a bit overzealous. It’s cathartic humor: we can laugh remembering when we insisted on using a pattern or new language feature everywhere, or invented an abstraction that in hindsight was ridiculous. The calm hooded figure on the right is almost the Zen master of coding, channeling the Zen of Python’s first rule: “Beautiful is better than ugly. Simple is better than complex.” They’ve internalized the YAGNI principle and the KISS principle, and perhaps they’ve read “Clean Code” where Uncle Bob basically says avoid cleverness, write simple code.

Ultimately, the meme is funny to developers because it exaggerates a real phenomenon. We’ve all met the intern or fresh grad who miraculously (and sometimes accidentally) writes a chunky procedural script that, while not elegant, gets the job done with basic constructs. We’ve also met (or been) the mid-level dev who objects, “But we should implement an event-driven, polymorphic, fully decoupled system here using dependency injection and maybe throw in a monad!” And we’ve watched a grizzled lead dev gently shake their head and say, “Let’s not overthink this — a couple of ifs inside a loop will do.” It’s that knowing laugh at ourselves and our colleagues: the realization that, after climbing the mountain of abstraction, we often descend back to the valley of simplicity. And standing there is the junior, blissfully unaware, who already had simplicity from the start. The circle completes, and it’s basically just ifs and loops. Classic.

Level 4: Monoids to Machine Code

At the most theoretical level, this meme hints at a deep truth in computer science: no matter how fancy your abstractions (like monads or virtual inheritance), ultimately everything boils down to basic control flow – decisions and repetitions. In formal CS terms, any Turing-complete system can perform selection (making choices, e.g. an if statement) and iteration (repeating actions, e.g. loops or recursion). In fact, the structured program theorem (Böhm-Jacopini, 1966) proved that sequence, selection, and iteration are enough to implement any algorithm. So when the enlightened hooded figure says “coding is basically just ifs and for loops,” there’s a grain of technical truth: these two constructs (conditional branches and loops) are foundational building blocks of all software. High-level code, when compiled, turns into machine instructions that are essentially “jump if condition X is true” (that’s an if) and “jump back to start of loop if not done yet” (that’s a loop). Even the most esoteric functional programs or complex object hierarchies get broken down by the computer into these primitive operations. It’s like peeling away layers of abstraction – at the core, it really is just yes/no decisions and repeating steps, executed amazingly fast.

Consider the meme’s notorious phrase floating above the frenetic middle character: “a monoid in the category of endofunctors.” This is category theory jargon used to formally define a programming concept called a monad (common in Haskell and functional programming). In plain math: a monoid is an algebraic structure with a single associative operation and an identity element (think of how addition (⊕) on numbers has 0 as an identity, and (a ⊕ b) ⊕ c = a ⊕ (b ⊕ c)). An endofunctor is a transformation (functor) from a category to itself; a monoid in the category of endofunctors roughly means an endofunctor equipped with certain operations that behave like that monoid. If that made your head spin – that’s the point! This hyper-abstract description is beloved by academics trying to sound profound, but at the end of the day a monad in code is typically just a way to chain computations (with "if this is valid, do that, otherwise skip") – which, you guessed it, boils down to conditional logic and repeated application of an operation. So even this lofty mathematical construct reduces to a controlled flow of data: checks and loops (or recursive calls) under the hood. The meme humorously juxtaposes that abstruse definition with the simplest programming view: “just ifs and loops.” It’s saying: beyond all the intimidating theory, programming at its core is still about doing something when a condition is met and doing something multiple times.

The other terms flying around the mid-curve character also have deep roots but simple ends. S-expressions, for example, come from Lisp (one of the oldest high-level languages, from 1958). Lisp code is written in parenthesized lists – these symbolic expressions represent both code and data uniformly. Lisp’s entire syntax is extremely minimal (basically just parentheses and atoms), relying heavily on recursion and conditional expressions under the hood. It’s an elegant theoretical idea: code as data, with a simple core – but to someone unfamiliar, “s-expressions” sounds like arcane lore. Virtual inheritance in C++ is another solution to a theoretical problem – the “Diamond Problem” of multiple inheritance – ensuring only one copy of a base class is present. This is achieved by complex compiler mechanics (vTables, pointer adjustments) but ultimately, at runtime, whether you use virtual inheritance or not, the program is still doing memory lookups, jumps, and loops. Even the inscrutable C++ template-lambda snippet in the image:

inline constexpr auto yield_if = [](bool b, auto x) {
    return b ? maybe_view(std::move(x)) 
             : maybe_view<decltype(x)>{};
};

– despite its modern C++ cleverness – is fundamentally creating a decision: “if b is true, produce a view of x; otherwise produce an empty view.” It’s a compile-time fancy way to do what a basic if would do at runtime. Compile-time metaprogramming, template magic, constexpr tricks – they generate efficient code, sure, but conceptually they save you writing an explicit if/else by letting the compiler handle it. The joke is that an over-engineered solution often hides the simple branch or loop that is really happening.

In summary, from the lofty heights of category theory down to the circuits on a silicon chip, the spectrum of computer science abstractions still relies on fundamental logic. The bell curve meme format shows the “low-IQ” character and the “high-IQ” character agreeing on the blunt statement because both extreme perspectives (naive and enlightened) recognize this foundational truth, each in their own way. The left doesn’t know any better; the right knows there isn’t actually anything better at the most basic level. Coding = control flow. Everything else – lambda calculus, monads, inheritance, frameworks – is built atop those roots. The humor (especially for those of us who’ve trudged through theory classes or read dense C++ template code) comes from realizing that after all the intense abstraction, you often circle right back to the simple essence.

Description

This meme uses the IQ Bell Curve format, also known as the 'Midwit' meme, to illustrate the journey of a software developer's understanding. On the left side, representing a low IQ score, a simple-minded Wojak character (Brainlet) states, 'coding is basically just ifs and for loops'. In the center of the curve, representing the average majority, a crying, stressed Wojak character is overwhelmed by a barrage of complex technical jargon, including 's-expressions', 'virtual inheritance', 'git blame myself', 'AbstractSingletonProxyFactoryBean', 'a monoid in the category of endofunctors', and a snippet of C++ code. On the far right, at the highest IQ level, a serene, sage-like hooded Wojak character calmly states, 'coding is basically just ifs and for loops'. The meme humorously critiques the tendency for mid-level developers to get lost in unnecessary complexity, while beginners and seasoned experts converge on the simple, fundamental truths of their craft. It reflects the Dunning-Kruger effect, where true expertise often leads to a profound appreciation for simplicity

Comments

47
Anonymous ★ Top Pick The difference between the junior and the architect? The junior thinks two 'for' loops are enough. The architect knows it's just one 'if' statement, but bills for the complexity of a distributed state machine to justify their salary
  1. Anonymous ★ Top Pick

    The difference between the junior and the architect? The junior thinks two 'for' loops are enough. The architect knows it's just one 'if' statement, but bills for the complexity of a distributed state machine to justify their salary

  2. Anonymous

    A developer’s lifecycle: begin with if/for, spend a decade reinventing them as monoids wrapped in AbstractSingletonProxyFactoryBeans, retire after realizing you’ve just built a distributed, cloud-native version of the same two keywords - only slower and with a Kubernetes invoice attached

  3. Anonymous

    After 20 years, you realize the junior who said "it's just ifs and loops" and the architect who designed AbstractSingletonProxyFactoryBean both solved the same problem, but only one of them is still maintaining their code

  4. Anonymous

    Career arc: spend ten years learning enough category theory to justify your abstractions, then spend the next ten deleting them back down to ifs and for loops

  5. Anonymous

    After 20 years of architecture astronautics with AbstractSingletonProxyFactoryBeans and monoids in the category of endofunctors, you realize the junior was right all along - it really is just ifs and for loops. The difference is now you know *which* ifs and *which* loops actually matter, and you've got the scars from every unnecessary abstraction layer to prove it

  6. Anonymous

    Proves the real production IQ sweet spot is 'ifs and loops' - extremes just multiply the tech debt monoid

  7. Anonymous

    After 20 years I'm back to 'coding is just ifs and loops' - only now the ifs are constexpr templates behind AbstractSingletonProxyFactoryBean and the loops are monadic binds over s-expressions; git blame still resolves to me

  8. Anonymous

    All those monads, factories, and constexpr ranges compile to cmp/jmp inside a loop - the rest is an invoice

  9. @affirvega 4y

    Coding is just telling computer how it should calculate

    1. @emil_wislowski 4y

      Coding is just telling the computer which transistors to turn on/off

    2. @x24R3 4y

      No fucking way

  10. @Bodziek 4y

    Coding is just telling sand how to think.

  11. @emil_wislowski 4y

    coding is telling the little gnomes how to turn the switches on

    1. @RiedleroD 4y

      Pratchett would like to have a word with you

      1. @emil_wislowski 4y

        😉

  12. @saidov 4y

    Coding is shit

    1. @emil_wislowski 4y

      it depends on the coder

      1. @saidov 4y

        No, you’re just a simple builder

      2. @RiedleroD 4y

        and on the preexisting code

        1. @emil_wislowski 4y

          and the author ot the preexisting code

  13. @saidov 4y

    Not an architect

    1. @RiedleroD 4y

      architects build design houses. stop calling yourself stuff you aren't lol

      1. @saidov 4y

        A good information system is as complex as internals of the house

        1. @RiedleroD 4y

          *a system that keeps the devs paid well. I say, make the code as simple as possible. Take stable dependencies instead large chunks of code. Then you don't need a 'software architect'.

  14. @saidov 4y

    What I mean is that coding is boring, not a creative process. Planning, analysis and design are all that matters

    1. @RiedleroD 4y

      not a creative process? Fair, if you use any modern language, aye. Boring though? I disagree.

      1. @saidov 4y

        I caught myself spending 80% of my time to actually plan and design, 10% was spent on implementation and debugging

        1. @RiedleroD 4y

          then you're perfect as an architect, but very inefficient nonetheless.

  15. @Roman_Millen 4y

    Well, technically if we're to go low-level, coding is about IFs and GOTOs — since each loop is basically GOTOing to the "loop code start" as many times as the counter implies.

    1. @sylfn 4y

      imperative moment

      1. @karim_mahyari 4y

        And how would you exactly compile functional code to instructions?

        1. @sylfn 4y

          functional machines which evaluate functional code directly

          1. @karim_mahyari 4y

            Is there one of those built? Never heard of them

            1. @sylfn 4y

              dont know either, did no research on this topic

              1. @karim_mahyari 4y

                Fair enough

  16. @abstract_factory 4y

    knees shook when I saw endofunctors

  17. @dsmagikswsa 4y

    What is difference between the left and right people in the picture?

  18. @s2504s 4y

    Слева июнь, справа синьер. Оба понимают что сила в простоте. Один по наивности, другой умудренный жизненным опытом. И только мидл творит дичайшую дичь

    1. @sylfn 4y

      wut speak english please (native russian admin) Please add English translation of non-English text or use only English so everyone can understand what is written Untranslatable jokes should be marked as such (or try to explain meaning)

    2. Deleted Account 4y

      Junior on the left, Senior on the right. Both understand that strength lies in simplicity. One out of naivety, the other wise by life experience. And only the middle creates the wildest shit

      1. @RiedleroD 4y

        did they really just explain the joke? wow

        1. Deleted Account 4y

          who they?

          1. @RiedleroD 4y

            the russian guy

            1. Deleted Account 4y

              oh, yes

      2. @dsmagikswsa 4y

        Thank you for your translation. Sir

        1. Deleted Account 4y

          uh...np

  19. @sc0rsch 4y

    It's basically just address/compute instructions and loops with jump conditions

Use J and K for navigation