Senior Devs on New Languages: Just C with Extra Steps
Why is this Languages meme funny?
Level 1: Same Candy, New Wrapper
Imagine you have a favorite candy bar, something classic that’s been around forever. Now suppose a new candy comes out that all your friends are excited about – it has a flashy wrapper and a cool name. You ask your wise old grandpa what he thinks of this new candy, and he just chuckles and says, “Ha, it’s basically the same chocolate I’ve known for years, just in a shiny new wrapper.” 😏 You’d probably giggle at how he isn’t impressed at all. In this scenario, the old candy is like the C programming language (simple and well-known), and the new candy is like a trendy new programming language (with fancy extra features). Grandpa’s reacting just like the senior developer in the meme: he’s seen so many candies (languages) come and go that he isn’t dazzled by the new packaging. It’s funny because the younger people are all hyped up thinking it’s something completely new, but the older, experienced person sees it as “the same old thing with some extra decorations.” The humor comes from that gap in excitement – one person is saying “Wow, amazing and new!” while the other is saying “Meh, I’ve seen this before.” In simple terms, the meme is joking that new tech ideas are often just old ideas dressed up in a new way, and it makes us smile because we’ve all experienced a situation like that in everyday life.
Level 2: Extra Steps Explained
Let’s break down what’s going on in this meme in simpler terms. The question being asked is: “What does a senior developer think of a new programming language?” And the answer (on the meme image) is a joke: “It’s like C but with extra step.” To understand the humor, we need to know a few things:
C: C is a very old and influential programming language (created in the early 1970s). It’s considered a low-level language, meaning you have to manage a lot of things yourself (like memory). C is powerful and fast because it’s close to how the computer’s hardware works. Many other languages are based on or inspired by C. In fact, the syntax (the way code is written) of popular languages like C++, Java, C#, and JavaScript all traces back to C in style. So, when someone says “X is like C,” they usually mean the new language shares similarities with C or its descendants.
“New programming language” hype: In tech, there’s always a “new kid on the block.” It might be Go, Rust, Kotlin, or whatever is trendy. Each new language promises to make developers’ lives easier or programs run faster/safer. Language adoption is the process of developers learning and starting to use these languages in projects. There’s often excitement among newer developers to try the latest language, while older developers might be a bit hesitant (either due to the learning curve or skepticism from past experiences).
The phrase “with extra steps”: This basically means “with more things to do” or “with additional complications.” It originates from a Rick and Morty joke where the character Rick mocks something by saying it’s just a normal thing “with extra steps” (implying those steps are unnecessary). In the context of programming languages, calling a new language “C with extra steps” is a tongue-in-cheek way to say the new language isn’t fundamentally new; it’s just adding more rules or layers on top of something old. Extra steps could refer to extra layers of abstraction, more code that runs behind the scenes, or additional formalities the language requires.
Why a senior might say this: A senior developer is someone with a lot of experience (many years of coding). Seniors have likely learned and used multiple languages over their career. When asked about a brand new language, a jaded or sarcastic senior might downplay it. Part of it is humor and part of it is perspective. They’ve seen patterns repeat. For example, a senior who’s seen C evolve to C++, then to Java, and so on, might genuinely notice that each new language borrows a lot from its predecessors. So they respond in a snarky way, like “Eh, nothing special, just C with some extra stuff thrown in.” It’s kind of like a chef saying, “This new recipe? It’s the same basic soup, just with extra seasoning.”
Modern languages and C’s lineage: Many modern programming languages indeed have a lineage that involves C. Either they use C under the hood or they were designed as an improvement to C. Let’s demystify that:
- C++ was literally described by its creator as “C with Classes.” It started as a extension of C.
- Java and C# have syntax that looks a lot like C/C++ (curly braces, similar loops, etc.) but they introduce things like automatic memory management (so you don’t manually manage memory as you would in C).
- Python and JavaScript don’t look like C syntax, but their interpreters (the programs that run Python/JS code) are themselves written in languages like C or C++. So in a way, they rely on C at the core to function.
- Many new languages compile down to machine code in a process similar to C. Some even first convert code into C or use tools built for C. (For instance, LLVM is a compiler framework originally for C/C++, now used by Rust, Swift, and others to produce efficient code.)
So the senior’s statement has some technical truth: new languages often add something on top of C or on top of what C can already do. Those additions are the “extra steps” – things like garbage collection (automatic memory cleanup), stricter type checking, or a virtual machine that runs the code. These make programming safer or easier in some respects, but they can also make the language heavier or more complex behind the scenes.
The humor and context: The meme uses a screenshot from Rick and Morty. In that image, Rick (the scientist with blue hair) is explaining something in a very matter-of-fact and dismissive way to two alien characters (and Morty, his grandson). The top text says “When you ask senior about new programming language,” setting up the scenario. Rick’s caption “It’s like C but with extra step” is the punchline. For many developers, this is funny because it’s a stereotype: ask a grumpy experienced dev about a new trend and they’ll reduce it to “basically the old thing we already know, with some pointless fluff.” It’s an example of DeveloperJokes where the comedy comes from a shared understanding – in this case, the shared idea that new programming languages aren’t as revolutionary as their fans claim.
To a newer developer or someone learning, this meme might also be a light caution. It hints that learning the fundamentals (like how C works, or more generally how computers execute code) is important, because even shiny new languages will rely on those fundamentals. C represents those basics – manual memory, simple structures, raw speed. The “extra steps” represent the more advanced features – which are useful, but secondary.
Imagine you’re just starting to learn programming (Learning is one of the categories here). You might be overwhelmed by how many languages there are (Python, Java, C, C++, JavaScript, Ruby, Go, Rust, etc.). This meme is basically an experienced dev saying: “Don’t panic. A lot of these languages are similar at the core.” It’s both a joke and a bit of wisdom. The joke is that the senior is over-simplifying (Rust, for example, is not just C – it has a very different approach to safety). But the wisdom is that if you know the concepts in C (like variables, loops, memory, functions), you have a head start understanding many other languages. The syntax and “extra steps” differ, but they’re variations on a theme.
In summary, at this junior-friendly level: The meme is a funny way of saying “All these programming languages aren’t as different as they seem.” A senior developer uses a cartoon reference to humorously dismiss a new language, implying it’s mostly the same old ideas with some new twists. It’s poking fun at the hype around new languages, and it resonates in the tech community because we often see history repeat itself in the realm of programming. The takeaway for a learner is: every new tool has its bells and whistles, but a lot of core principles carry over – so learning those well (and maybe a dash of healthy skepticism) will serve you in the long run.
Level 3: Reinventing the Wheel
For experienced developers, this meme hits on a classic bit of DeveloperHumor: the idea that every shiny new programming language is really just a remix of ideas we’ve seen before. The caption shows Rick Sanchez (from Rick and Morty) dismissively explaining a “new programming language” to Morty and some aliens. Rick’s line “It’s like C but with extra step” perfectly captures the senior_dev_snark attitude. Seasoned devs have lived through waves of LanguageWars and fads – from C to C++ to Java to JavaScript to Go to Rust and beyond – and they tend to become jaded by the constant hype. When you’ve been promised “this will solve all your problems” a few too many times, you start responding with “Yeah, sure… heard that before.” The meme is funny because it exaggerates that cynicism: Rick (the senior) reduces a complex new technology to basically the same old thing, just more convoluted. It’s the ultimate veteran eye-roll.
Why is this combination of elements so humorous to developers? First, there’s the pop-culture crossover: Rick and Morty is a show beloved by many tech folks for its wit and cynicism. Rick’s character is a hyper-intelligent, world-weary scientist who has literally seen it all (across infinite universes, no less). Putting Rick in the senior dev’s shoes is spot-on – he’s exactly the type to call out something trendy as trivial. The phrase “with extra steps” is actually a reference to a Rick and Morty gag: Rick mocks a convoluted heist plan by saying, “It’s like a heist movie, but with extra steps!” That line became a meme template. So here we have a rick_and_morty_reference repurposed for programming: the new language is just an old idea (C) with extra fluff. The juxtaposition of a serious engineering topic (language design) with a goofy cartoon screenshot makes it DeveloperMemes gold. It’s an in-joke that blends real tech skepticism with a laugh.
From an industry perspective, the meme is poking fun at language proliferation and the fatigue that senior engineers feel about it. There’s a well-known pattern where every few years a new language is hailed as “the Java killer”, or “the next big thing to replace C++”, or “the language to rule them all”. And yet, the venerable workhorses like C and C++ stick around, and the new languages often end up coexisting rather than truly replacing anything. A senior dev who’s been around the block has witnessed multiple “revolutions” in programming. After you see Java come (promising “write once, run anywhere”), then C# (“Java, but from Microsoft’s side”), then scripts like Python and Ruby (“simplicity and productivity over speed”), then JavaScript eating the world (with Node.js, even on the server), then Go (“C for the 21st century, with goroutines!”), then Rust (“C++ without the memory bugs!”) – you start to notice a cycle. Each time, the marketing claims sound familiar. The specifics differ (garbage collection here, borrow checker there), but it often feels like we’re solving similar problems with new syntax. So the veteran joke is that we’re just reinventing the wheel again and again, slapping a new name on it each time. Or as Rick sums it up: “unnecessary extra steps.” It’s a humorous oversimplification, of course. Each new language does bring genuine improvements or trade-offs. But emotionally, a lot of seniors feel like, “Here we go again – another ‘game-changer’ that’s 90% old ideas and 10% syntactic sugar.”
Consider real-world scenarios in software teams. A junior dev might come excitedly to the team: “Hey, this project would be so much easier if we use [newLanguage] – it’s fast and has great features!” The senior engineer, responsible for maintaining the system and knowing its current stack, might reply with something akin to the meme: “[newLanguage]? Psh, that’s basically just [oldLanguage] with a different coat of paint.” For example, a conversation could be:
Junior: “We should really rewrite this service in Go, it’ll handle concurrency so much better!”
Senior: “Go? That’s just C with garbage collection and some opinionated formatting. We can do threads in C just fine.”
It’s a bit dismissive, but it comes from experience. They’ve weathered the new_language_hype cycle and know that adopting a new language isn’t a magic bullet. There are trade-offs: performance quirks, learning curves, ecosystem maturity, interoperability issues – things a newcomer might not see amidst the excitement. The joke in the meme is how bluntly that nuanced skepticism gets expressed: zero tact, maximum sarcasm.
We also have to appreciate the kernel of truth that makes the joke land. Many modern languages really do inherit a lot from C. In fact, a huge subset of popular languages use C-like syntax (curly braces, semicolons, similar control structures). And most of them either compile to machine code in a style similar to C, or they interface with C libraries, or their runtimes are written in C/C++. Here’s how a grizzled dev might cynically summarize a few languages:
- C++ – Promised to be “C with Classes.” Essentially, it’s C with an object-oriented layer (and a lot of added complexity like templates). A senior might say it gave us stronger type safety and OOP, but introduced its own extra steps (constructors, destructors, vtables) that sometimes just made debugging harder.
- Java – Billed as the C++ killer: “write once, run anywhere.” It removed manual memory management by adding a garbage collector (an automatic memory cleanup thread) and runs on a virtual machine. A skeptic’s take: “Java? Yeah, that’s C++ with a training wheel (the JVM) strapped on – no pointers for you, and enjoy the GC pauses.” It’s safer, but you pay in overhead and lost some low-level control.
- C# – Microsoft’s Java-like answer. A senior could joke: “C#? Basically Java in a suit and tie.” (It’s remarkably similar in syntax to Java/C++ because that helped developers transition – again, not as novel as advertised.)
- JavaScript – Originated for web pages, now everywhere. It has C-style curly braces but is dynamically typed and single-threaded. Rick’s voice: “JavaScript is like C’s goofy younger brother who doesn’t strictly type-check anything and sneaks into all the parties (browsers).” In other words, familiar syntax, wild runtime behavior. And funnily, the fastest JS engines (like V8) are written in C++ – circling back to “it’s C under the hood.”
- Python – Syntax is very different (no braces, whitespace indentation), but a ton of Python’s performance-critical parts (like NumPy, or the interpreter itself) are implemented in C. A senior might shrug: “Python is great for quick scripts, but when it needs to go fast, guess what it calls? C libraries. It’s basically a friendly face on C and Fortran numerics.”
- Go – Designed by Google folks who were tired of C++’s complexity. It feels like a simpler, cleaner C in many ways (manual memory management gone, no complex templating, built-in concurrency with goroutines). The cynic: “Go? That’s C for hipsters – you traded manual memory for a garbage collector and got some concurrency tricks, but under the covers it’s doing the same old things.” (They might actually like Go’s simplicity, but won’t admit it publicly 😉.)
- Rust – The hottest “C replacement” in systems programming. Rust offers memory safety without a garbage collector (through strict compile-time checks). A seasoned C/C++ dev might grudgingly respect it but jest: “Rust is just C++ with a strict nanny. Sure, it prevents mistakes, but you spend extra time pleasing the borrow checker – those are the extra steps to avoid the bugs I used to catch (or cause) at runtime.” Rust’s compiled output is as low-level and efficient as C’s, it’s just doing heavy analysis and insertions at compile time to enforce safety.
All these snarky summaries boil down to the same sentiment: modern_language_vs_c often comes down to trade-offs, not brand-new capabilities. The meme exaggerates by implying the extra steps are unnecessary, reflecting that frustrated tone seniors get when they’re asked to learn yet another syntax that ultimately does what they’ve already been doing. The truth is seniors might actually appreciate the advancements (who honestly enjoys debugging segfaults all night?), but it’s developer humor to exaggerate the downsides. It’s a bit of a coping mechanism – laughing about how every “innovation” still carries some of the old problems or just shifts them around.
There’s also an undercurrent of learning fatigue in this. Experienced devs have spent years mastering languages and then suddenly the industry buzzes about a new one. It can feel like, “Ugh, do I have to go through being a newbie again for something that’s basically rehashing what I know?” So calling it “C with extra steps” is a defensive little joke – it downplays the new thing so the senior can pretend they’re not missing much. It’s funny because it’s a mix of truth and sour grapes. Everyone kind of knows the new language does introduce useful improvements, but we also know the veteran isn’t entirely wrong: the core concepts – variables, loops, data structures, CPU ops – remain unchanged. In any case, this meme resonates because practically every dev, at some point, has heard an older colleague say “Bah, X? It’s just Y with z.” It’s a rite of passage in DeveloperInJokes. When you find yourself saying it, congrats – you’re officially the grumpy senior dev in the room, and you’ve earned the right to drop Rick Sanchez quotes in design meetings for a laugh.
Level 4: All Roads Lead to Assembly
At a deep technical level, this meme riffs on the reality that all programming languages eventually boil down to the same fundamental operations. The senior developer’s quip “It’s like C but with extra step” hints at the idea that no matter how fancy or high-level a new language is, under the hood it’s turning into machine code very similar to what C would produce. C is often called a portable assembly language – it’s just a thin layer above writing raw CPU instructions. Modern languages add abstractions (memory management, type safety, concurrency features, etc.), but those are essentially extra steps in translation before the CPU gets its orders. In terms of computer science theory, any Turing-complete language can emulate any other. This means from a computability standpoint, new languages rarely enable fundamentally new things – they just provide different ways to express or safeguard the same computations. No matter if you write a loop in C or in a high-level scripting language, at the processor level it’s doing the same jumps and arithmetic; the new language just auto-generates a bunch of that grunt work for you (the steps you don’t see).
To illustrate, many modern programming languages are built on top of frameworks and engines that were originally designed in C or C++. A lot of “new” languages piggyback on the LLVM compiler infrastructure, which itself was initially created to optimize C/C++ programs. So even a cutting-edge language like Rust or Swift ultimately relies on an engine that’s doing heavy lifting much like a C compiler would. In fact, some language toolchains literally use C as an intermediary. Historical example: the first C++ compiler (Cfront by Bjarne Stroustrup) didn’t output native machine code – it output C code. You’d write fancy new C++ classes, and Cfront would translate them into plain C, which then got compiled by a C compiler into assembly. So C++ really was “C with extra steps” in a very literal sense! That extra step made it possible to leverage existing C compilers to produce executables. It’s a pattern that has repeated: many languages have been implemented by translating into another established language or ISA. It’s a pragmatic shortcut (why reinvent the wheel, or the compiler back-end, right?).
Today’s high-level languages often insert multiple layers between your code and the hardware. For example, a Java program compiles to Java bytecode, which runs on the Java Virtual Machine (itself a program often written in C++). A TypeScript program compiles to JavaScript, which then gets JIT-compiled (Just-In-Time) by a JavaScript engine (like V8, written in C++). A Python script is executed by the CPython interpreter (written in C). Each of these translations and runtime frameworks are the “extra steps” Rick (the senior dev) is scoffing about. From the veteran’s perspective, all those layers ultimately funnel down to the same low-level operations that a C program would use — just with more indirection. It’s like building a tall tower of abstractions on top of a foundation that’s still firmly in C/assembly land.
// Hypothetical compilation pipeline for a new language:
MyLang source code --[MyLang compiler]--> C code --[C compiler]--> Machine Code (binary)
// In the end, the CPU only sees the machine code, regardless of the original language.
This “all languages reduce to assembly” concept is why an old-timer might smirk at new language hype. They know that behind the slick syntax and promises, the code is manipulating memory, branching, and looping just like C did in the 1970s. Sure, the extra steps can provide benefits – memory safety, easier concurrency, fancy type systems – but those steps also often add runtime overhead or complexity in the compiler. There’s a well-known principle in systems design that abstractions aren’t free (sometimes called the abstraction penalty). Those additional runtime checks, garbage collectors, or interpreter layers are CPU instructions and memory operations that C might leave up to the programmer. The meme humorously reduces all that to “unnecessary steps,” reflecting a kernel of truth: at the silicon level, nothing magical is happening that a C program couldn’t do – it’s just being done for you, behind the scenes.
On a theoretical note, the meme also hints at the Church-Turing thesis reality of computing: any computation done in a high-level language could be accomplished in a low-level one given enough effort. The difference is in how easily we can write it and how many safeguards we get. A senior engineer, especially one who has delved into compilers or studied language design, recognizes these new languages as layers on a common core. The snarky tone (“with extra step”) comes from that deep understanding that ultimately all our code runs on the same hardware, so new languages often just shuffle where the complexity lives – sometimes moving it from the programmer’s burden (in C you manage memory manually) to the language implementation’s burden (in say Go or Java, a garbage collector process runs for you – an extra step at runtime). In summary, at this level we’re basically nodding along with Rick: under the fancy paint job, every new engine is still combusting gasoline. The meme exaggerates to be funny, but it’s grounded in the truth that a seasoned systems programmer sees: all roads in code lead to the same binaries. And if there’s one thing a grizzled engineer hates, it’s too much indirection – whether in office management or in code execution, every extra layer is just another thing that can break at 3 AM.
Description
This is a two-panel meme using a popular format from the animated TV show 'Rick and Morty'. The top panel has the text: 'When you ask senior about new programming language'. The bottom panel shows the character Rick Sanchez explaining something to his grandson Morty and a green alien character, with the subtitle text reading, 'It's like C but with extra step'. This meme humorously captures a common sentiment among seasoned senior developers who have seen numerous programming languages rise and fall. The joke is that many modern, high-level languages are fundamentally built upon the same core principles pioneered by foundational languages like C, with the new features, syntax, and paradigms being merely 'extra steps' or layers of abstraction on top. It reflects a cynical, reductive, but often relatable perspective on the tech industry's constant hype cycle around new tools that often solve old problems in slightly different ways
Comments
22Comment deleted
It's all just C until you see the node_modules folder, then it's C with 1.5GB of extra steps
Every “next-gen systems” pitch ends the same: C’s semantics, a 500 MB toolchain, two layers of YAML, and a guarantee that if it segfaults, at least the compiler feels bad about it
After 20 years of watching languages promise to 'fix' C's problems, you realize they're all just adding syntactic sugar to the same memory management nightmares - except now with dependency hell and a 500MB runtime thrown in for good measure
After two decades of watching 'revolutionary' languages emerge, senior engineers develop a superpower: the ability to instantly recognize that Rust is C with borrow checking, Go is C with garbage collection, and most 'modern' languages are just C wearing increasingly elaborate safety equipment. It's not cynicism - it's pattern matching at scale
Every new language pitch is “C but safer” - translation: undefined behavior swapped for a 4GB toolchain and a build that needs its own SRE
New language demo: “It’s C, but with a runtime, a borrow checker, generics, and a 300MB toolchain that still ends up calling malloc; the extra step is pretending it isn’t C.”
New langs? C with extra steps to forget segfaults exist - until the optimizer undoes it all
Everything is like c but with extra steps Comment deleted
C is 💩 tho Comment deleted
Only retards have this opinion Comment deleted
Developer time costs more than processor time Comment deleted
except when it doesn't Comment deleted
Of course, for plenty of applications Comment deleted
honesly, this is why we can't have nice things and have electron Comment deleted
Haha, well, I wouldn't quite go that far. I'm not a massive fan of electron apps, but there's a saving to made in having the same language for serverside, frontend, and native applications. Once you are doing something important, or have funding, you should be considering replacing it though. *looks at discord with distain* Comment deleted
well, you don't have to, if it works it works, noone cares if it doesn't sync with system or looks like shit Comment deleted
Retards Comment deleted
Yeah, that's why that message was followed with Börgඞr: except when it doesn't Deer Spangle: Of course, for plenty of applications Comment deleted
Though I suspect C won't hold that low level throne forever either. Rust is always making headway. But that's a different discussion Comment deleted
in that discussion i also state that c is never going away, either, bc it can target more hardware Comment deleted
Similar was said of cobol Comment deleted
ok then Comment deleted