You can definitely tell how old it is because both Rust and 3D printed guns have gotten way better.
And TypeScript is just the JavaScript sword, but with a cheap leather hilt.
And C# now can be taken off the donkey and mounted on a penguin and works rather well.
Now i can’t get that picture out of my head. Its amphibious too!
It’s a heavy duty hilt that’s easily detachable by a small recessed switch labeled “any”.
(It does its job very well as long as you don’t opt out of using it)
Except the tool you use to build the hilt in the first place has 100 permutations of settings, and most of them kill you on the spot.
I’ll take .tsconfig and .webpackrc over C#
.config
files every day of the week.
because it makes it (type)safe to use…!
Also C# (or should I say the .net framework) is now cross platform, which wasn’t really the case when I first saw this meme.
This joke made sense when instead of .net you could only use Mono with C# on other platforms, which wasn’t very good at the time.
Yes, especially when you’re running linux, and the project you started on windows that uses serial ports suddenly doesn’t work any more and you wonder why.
Hint: The events for serial data received didn’t fire under mono, for reasons.
I hosted my personal site using Mono over 10 years ago now and it mostly worked well. I contributed some code to Mono to fix a few edge cases where their behaviour deviated slightly from Microsoft’s.
Of course, I couldn’t actually look at Microsoft’s shared source code when doing that, so I had to just observe its outputs. At the time, Mono code had to all be clean-room implementations, since Microsoft’s shared source program, where they released parts of the .NET Framework 4.x source code publicly, had a very restrictive license that didn’t permit reuse (it wasn’t open-source). Even just looking at the code meant you couldn’t contribute to Mono.
I was very happy when .NET Core was announced and switched to a beta of 1.0 as soon as I could.
Mostly right. Microsoft showed off how .NET 1.0 worked on FreeBSD but it was absolutely pointless since they didn’t provide commercial licenses to run it on anything else but Windows until .NET Core.
And Python’s migration to 3.x is more or less complete. Took a while (15 years since 3.0), but it’s to the point where migration is not a common topic of conversation.
Perhaps a paper hilt. It’ll trick some people into thinking it’s safer but as soon as you begin using it you realise it still has all the same problems as before.
I don’t know, man. I migrated one of my libraries and found 3 bugs just from that. It’s prevented a number of other bugs and issues too.
Through long and weary travels,* I bring the gift of source preserved by the workers of the great archives: https://web.archive.org/web/20140831164530/http://bjorn.tipling.com/if-programming-languages-were-weapons
* (they weren’t that bad honestly, a kind soul that took the journey 9 years ago made mine much shorter)
Thank you! The original source of truth! 💎 As IT people, this is part of our culture and should be transmitted. 🤣
It seems the image is a screenshot of the original page, slightly upscaled, but since the source page includes links to larger images we can make the HD remaster. Shotgun not me.
C++ and ruby are weird, especially since C is somehow considered a reliable rifle. Rust betrays it’s age
C is reliable in the sense that your C program reliably has memory leaks and security holes.
Unlike your Java program amirite.
The benefit of java is that you didn’t write the security holes in your software.
Programmers can trust language security features too much…
Of course, they’re nice to have and really can make things easier to implement securely but it’s still very easy to introduce security problems or bugs into any code. This is just an unsolvable problem of writing imperative code. All imperative code will reliably have memory leaks (even in Java!) and security holes because no compiler can check to see if you thought of everything.
And large and complex compilers/interpreters with these security features can end up introducing their own security problems or bugs in the process of implementing them.
I’m just tired of people entirely dismissing languages like C because they don’t have these features. Especially when the operating systems their code runs on and their languages may even be implemented in C!
Buffer overflows were last seen on the OWASP top 10 list in 2004. Favoring of anything else over C for most things is a pretty obvious reason why. A language change destroyed an entire class of bugs.
because no compiler can check to see if you thought of everything.
We can try to get closer to that with better language design. You’ll never get there but I think there are obvious benefits as to why you’d want to do that.
I write way less bugs in Rust than I have in Java or C++, and that’s mostly thanks to the language design.
I’m just tired of people entirely dismissing languages like C because they don’t have these features. Especially when the operating systems their code runs on and their languages may even be implemented in C!
Because that code has been review and re-reviewed and patched by experts in the field for years. You’re not gonna write a backend for an app with short deadlines in C because that would be absolutely fucking insane.
Right tool for the right job. C is a stupid choice for most modern apps but it’s indispensable for embedded stuff
It’s a “tool for the job” game. I don’t trust a junior developer to write a login system. I’ve found security flaws in login systems written by senior developers who “know what they’re doing TM”. Unless I’m the expert in a given domain, it’s better to trust something written by those experts.
For the record (since it’s fixed anyway), I discovered a common login timing vulnerability on one of our production systems that had been in place for nearly 15 years. Luckily we didn’t have enough traffic for anyone to notice it before me.
I don’t trust Masterlock, so I’m gonna make my own lock out of duct tape, then tape scissors to the door to use as the key.
As does C#. The Windows-specific parts are not the parts most developers will use these days.
I took it as the donkey being .NET
C# is .Net though. It’s only syntax without it.
I think it’s definitely a dig at windows, because that used to be the primary issue with c#, you could only really target windows and you could only write it using windows. You could run .net framework applications on Linux, but it was a lot of work and it really underperformed (which would fit the timeline of 2015, when this comic was first posted). Now with .net core you can make a self contained executable that can run on anything.
You can even compile to a native executable these days I believe so you don’t have to have the .net runtime installed or bundled.
2015? I’m sure last time I saw this it was way before 2015
The M1 Garand is known for having a problem during reloading where you have to stick your thumb in a slot that’s about to shut very hard. There are techniques to avoid getting pinched, but “Garand thumb” is a well-known phrase among vintage rifle enthusiasts.
This fits C very well.
Agree. That one didn’t age well…
And does anything require Python v2 anymore? I work almost exclusively in Python and haven’t run into that in many years.
Python v2 was sunset in 2020. So only legacy software.
Someone should tell Ubuntu (or Debian, I’m guessing).
C is a knife. The basic thing you can build weapons (programming languages) with.
Or a screwdriver?
Yes. Knives can also be used as screwdrivers for fasteners with a “blade” or “flat” head.
It’s a screwdriver without a head because you have to build it yourself
You are confusing C with UNIX
same difference
C is very reliable. It works almost everywhere with very little resources or overhead and many of the most fundamental parts of our systems (that have to work reliably) are written in C. Many of the languages in that image are even implemented in C.
If you want to write portable, fast, and simple code C can help you with that if you use it in the right way.
The old joke is that C++ is an octopus made by nailing legs to a dog.
So it should probably be a rifle-chaku made by connecting two Garands with a chain.
C# vs Java is also really weird since C# started out as basically a Java clone.
I watched Jon Gjenset’s stream where he implemented the beginnings of a BitTorrent client in Rust and of the four hours about 25% of it was spent wrestling with quirks in serde and reqwest.
It was pretty discouraging watching a pro have to fight the ecosystem so hard.
How long ago was this? I think the ecosystem got waaay better in the last 1-2 years. 3-4 years ago it was rough but shit still worked with a bit of trouble.
Two days ago lol
Eh, that’s unfortunate. Yeah the whole ecosystem is still a bit wonky, probably more wonky than most popular languages but tbh I rarely used a stack that just worked out of the box, it almost always took some dicking around, I’d rather do the dicking around with a language that doesn’t always seem to work against me.
Old enough they still know Prolog.
And before the time people actually talked about the multidimensional clusterfuck that C become.
Well, to be honest C is still C, but it’s children have run mad.
C changed from the 90’s to now. It got a lot of syntactic improvements, and a ton of semantic madness.
Our C is not the same as the last generation’s.
–std=c99
It doesn’t change the madness. Just the syntax.
It’s not as common any more, but there’s still things using logic programming languages (Prolog and similar) even today.
Java uses it in the type checker. From the JVM spec:
The type checker enforces type rules that are specified by means of Prolog clauses.
There’s some other compiler and NLP (natural language processing) use cases for it too. I’ve seen some companies use it to define restraints for their business logic, which isn’t too different from the type checker rules use case.
It’s definitely fallen out of common use though.
We did Prolog in university - actually it was one of the two languages we had to learn in CS, the other one being Pascal.
I always considered Prolog a pain in the ass and unsuitable for anything bigger than a piece of homework due to the “we don’t do loops, we have tail recursion” making the code unnecessary complex and hard to read. On a list of Write-Only languages I’d rate it a few steps below Perl.
Tail recursion is just fancy way to loop.
There’s a few things it’s very good at, but anything outside of that tends to be painful.
I also used Pascal and Prolog in university, in my first year. That was… 15 years ago now. Wow.
I’m using Prolog in university right now. And Scala :(
It’s a pretty good representation of Rust, being 3d printed means that it’s the only gun where you can’t shoot yourself in the foot
[flips safety off[
But it can just blow up in your face
Yet
(?(bruv(,(problem(a(got(you(,(Oi)))))))))
In Clojure it could be
(-> Oi , you got a problem , bruv ?)
It’s funny because people describe PowerShell as powerful, but really they mean it’s also a hammer to mash everything with. “Powerfull!”
Powershell suffers from the typical Microsoft problem: Ignore for decades, and then go completely over the top with it.
I see Powershell as a nuclear bomb. It is extremely powerful and complex and barely anybody uses it because of it.
Isn’t powershell just bash but for windows?
Powershell is so much more than bash, not in a derogatory way.
It’s a full fledged object oriented programming language, and it’s written in .Net I believe. You can integrate tons of plugins to manage your whole infra (exchange, Cisco, AD, VMware etc), just from the Powershell shell.
I hate it because it’s slow, clunky and overly complex for its prime use, which is scripting.Yes and no. They serve roughly the same purpose.
I actually hated Powershell until I was forced to work on some automation scripts with it and realized that it’s actually pretty cool.
Bash is good for quickly doing something in the terminal but for longer script files I prefer PS now. It feels much more modern and has a less janky syntax.
Funnily enough the reason I had to use it was to make my scripts cross platform between osx, linux and windows.
People tend to hate on PowerShell but it’s cross-platform these days, and far easier to write than shell scripts once you understand the syntax.
You can pipe objects between functions, rather than just string streams like in Bash. Often there’s no
cut
,sed
,grep
, etc needed as what you want is probably a property on an object.It’s not just a basic scripting language like Bash. It’s built on top of .NET, so most of things you can do in C#, you can also do in PowerShell (and if not, you can call into C# code).
It’s especially popular for administration of Windows systems - if there’s anything you want to do on a Windows system, it’s likely there’s a PowerShell module for it.
I use PowerShell to mass smash unblock DLLs in Windows 10
“perl was probably useful once”?!
I’m willing to bet a TON of medical and banking data is still making its way through perl today. (I’m not necessarily saying this is a good thing, but I have years of experience in healthcare IT).
For that matter, there are still folks out there coding, professionally, in FORTRAN.
Thing is, back then, we didn’t know any better. Software was a commodity, and both the people who wrote it and the people who bought it had grown up in a time before the internet, before SaaS; people whose parents who, if they made things, made widgets.
Back then, you could write a piece of software, and it was done. Then you sold it, and moved on. If the old software had bugs, if they weren’t catastrophic enough to cause a lawsuit, buyers learned to live with them. It was too bad; you already shipped the tapes. And few companies employed their own software developers unless they were software development companies. Man pages have a BUGS section, and that’s because there’s no intention to ever fix those bugs, because that software is done.
Software today is never finished. Our first reaction if we see a project with no recent releases is that it’s abandoned, or dead, and certainly that it’s worse than a project with recent commits to the repo. Github is a huge culprit in reinforcing this mentality, but mobile app platforms (stores and OSes) are terrible about this, too. Google constantly changes the Play store in ways that force developers to tweak their apps lest they become incompatible, booted, or get flagged as being “old” a.k.a. “inferior.”
Yet, still, there’s so much software out there that’s complete. An institution may hire a developer to come in and make a change, but it’s usually a contract one-off; it’s more like taking your car in to have the starter replaced. Those systems are going to continue keeping “dead” programming languages (commercially) alive for years to come.
I use perl for that stuff (mostly automation) that’s a bit too complex for bash, but doesn’t need a proper project. Modern people would use python for this kind of thing. But, I’m too old to change!
and perl is orders of magnitude faster than python for document parsing
When it comes to surprising behavior, Perl isn’t any worse than JavaScript. Which admittedly isn’t a great comparison for either language. Most of the bellyaching around Perl has to do with regular expressions, but every other language out there picked up Perl’s regex syntax in a mostly verbatim way (PCRE).
Perl is still as good an interpreted language as any of the others tbh.
Most of its “problems” are cosmetic, which is probably why Python ended up being its successor in many fields.
Given the choice between brutalist and Fisher-Price architecture, most people are going to opt for the latter even if everything’s effectively the same inside.
Perl is a language for programmers. This turns out to be a terrible idea. Everything actually works the first time, so you move on, and you’re left with the sloppiest inscrutable stream-of-consciousness mess that someone banged out whilst working through the problem.
Perl is the only language where you can write more code than you read.
That’s a problem with no coding standards, peer review, etc.
write_good_code() or die(qw(enough rope to hang yourself));
or
die unless write_good_code();
I spent my career writing COBOL. Sad not to see it on the list. I think it would be a shield you can bash people with; clunky but effective
Cobol as a shield would also fit with it inexplicably still be in popular use long after anyone expected!
What’s that I hear? It sounds like Grace Hopper cackling from the grave…
Python V2/V3??? How old is this thing? Not even Debian comes with Python 2 these days.
Not even Debian comes with Python 2 these days.
It was only removed 9 months ago
OP was technically correct, the best kind of correct.
Wheres assembly? Lol
Assembly is a scrapheap with every sort of technology imaginable but it’s all broken. Could be an iron man suit, or you could just grab a length of rebar.
Assembely is a pile of iron ore. Make what you want with it.
It’s a musket. A really powerful one but you gotta do everything manually.It also comes disasembled and requires hours of work to be built.
Assembly is a revolver-style footgun with a speed loader. In just five cycles it blow your entire leg clean off.
It’s a box of unassembled weapon parts.
I like the other response here
assembly is a gauss gun… you just have to manually align the magnets
Where is verilog?
LISP is most accurate
I, too, have met Richard Stallman.
(I kid. Mostly. He’s amazing in so many ways, but he’s a little off sometimes.)
Fuck a bunch of 50000 pixel tall images
back in my day that took 3 hours to download
And someone would pick up the phone 30seconds from the end, and there was no resume!
there was no resume!
IMO the HTTP
Range
header (the thing that lets you resume downloads) was one of the best innovations back then. It let the client tell the server where to start the download from, and how much of the file to download. This means it also let you speed up downloads by downloading multiple pieces in parallel. I used to use a program called GetRight and loved it.We still split up downloads like this today. These days, internet connections are often fast enough that you can’t reach full speed with a single connection, so speed tests and things like Steam will open multiple concurrent connections for their downloads to maximize download speed.
In my day it looks like shit
Yeah, fortunately rust and go married since then
This reminds me of shooting yourself in the foot in various programming languages