this post was submitted on 08 Jun 2025
520 points (97.6% liked)

Programmer Humor

36482 readers
32 users here now

Post funny things about programming here! (Or just rant about your favourite programming language.)

Rules:

founded 5 years ago
MODERATORS
top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 9 points 6 days ago* (last edited 6 days ago) (1 children)

I was working on a C code base with classes, inheritance, and polymorphism, all done by hands and macros.

Something like

typedef struct s_some_class {
    void (*method)(this *s_some_class);
} t_some_class;

Overall, learning C was the best enabler in my whole career. For instance I was learning Python by tinkering with CPython VM, so when I see these ‘WAT’ quircks I know exactly what’s up.

[–] [email protected] 4 points 6 days ago (1 children)

Interesting, how did they do inheritance? Something like void *super? Also why not switch to CPP if you wanna do OOP?

[–] [email protected] 2 points 5 days ago (1 children)

In general, 'classes' declarations were done with macro. I don't remember the exact code — something akin to

BEGIN_CLASS(A, Parent);
CLASS_MEMBER(a...)
END_CLASS();

The project had started before C++ existed, and the switch would be too costly. It's not just OOP part, also reflection mechanism with bindings to the homemade scripting language, and multi-platform UI library. It was a gem of its time.

[–] [email protected] 1 points 5 days ago (1 children)

That sounds like quite a challenge to maintain, to speak in euphemisms ;)

[–] [email protected] 2 points 5 days ago

Revolutionary technologies of the '80 make me appreciate modern programming languages and especially tooling much more.

[–] [email protected] 80 points 1 week ago* (last edited 6 days ago) (21 children)

Partially unrelated to the meme, but I find it almost malicious how some python keywords are named differently from the nearly universal counterpart of other languagues.

This/self, continue/pass, catch/except and they couldn't find a different word for switch so they just didn't implement it.

It's as if the original designers purposefully wanted to be different for the sake of it.

[–] [email protected] 3 points 6 days ago (1 children)

List and Array terminology also bothers me ... Why not just call it an array?

[–] [email protected] 1 points 4 days ago (1 children)

But python lists are not like the base arrays in other languages. They function more like List<> or vector (C++ had to be special) and are named appropriately.

[–] [email protected] 1 points 11 hours ago

Ahh thank you for that information! In all seriousness, I appreciate you correcting my ignorance.

[–] [email protected] 65 points 1 week ago (1 children)

pass and continue are absolutely not equal (pass is a noop, and python has a continue keyword that does what you think), and switch is called match like in many other languages. except is weird though.

[–] [email protected] 11 points 1 week ago

"except" is also used in Pascal (or at least the main derivatives of it), but not sure if that's older than its use in Python or not.

[–] [email protected] 22 points 1 week ago (1 children)

I read that self as a keyword also has quite a history. It was already used in Smalltalk, an OOP language from the early 80's.

[–] [email protected] 15 points 1 week ago (2 children)

Isn't self not actually a keyword? Like you can name the first variable in a class method anything and it will behave like self.

[–] [email protected] 17 points 1 week ago (1 children)

You could use "this" instead of "self". And if you want a lynch mob of Python programmers outside your house, make a push request with that to some commonly used package.

[–] pastermil 13 points 1 week ago (2 children)

I think there will be a lynch mob of git users outside your house for calling PR as "push request".

[–] [email protected] 10 points 1 week ago* (last edited 1 week ago) (1 children)

I've been wondering about the noise.

Edit: turns out, they weren't there to lynch me. They just gave me a two hour lecture on proper usage of git.

load more comments (1 replies)
[–] [email protected] 8 points 1 week ago

only github users. git itself doesn't have PRs, and other forges call them different things. gitlab calls them merge requests, pico calls them patch requests...

load more comments (1 replies)
[–] sjmarf 17 points 1 week ago (1 children)

Python does have a switch statement now, actually. And yes, they went out of their way to call it something different - match.

https://docs.python.org/3/tutorial/controlflow.html#match-statements

[–] NichtElias 11 points 1 week ago (1 children)

match isn't just equivalent to switch though, so in this case it actually makes sense to call it something different.

[–] [email protected] 1 points 4 days ago

This is very true. Match statements are much more powerful that switch statements in any other language.

For instance:

  • matching objects very specifically
  • if conditions within case statements
  • pulling variables from inside of the object directly.
[–] [email protected] 15 points 1 week ago (1 children)

PHP naming "::" a Paamayim Nekudotayim is also pretty infamous.

When I'm designing shit, I'm pretty zealous about borrowing terminology from anything even vaguely related to avoid this.

[–] [email protected] 1 points 6 days ago (1 children)

PHP weirdness and inconsintencies never fail to amaze me.

On the bright side, I found my first StackOverflow answer that would fit exactly the same on Linguistic Stack Exchange.

https://stackoverflow.com/a/59259755

[–] [email protected] 1 points 5 days ago* (last edited 5 days ago) (1 children)

Absolutely cursed, lol.

So not only did they decide to randomly include Hebrew in their language, because I guess they were feeling kabbalistic, but they got the Hebrew wrong. In what way does any of that increase usability or even make them look competent?

It reminds me of the INTERCAL manual, which was a joke:

This precedence (or lack thereof) may be overruled by grouping expressions between pairs of sparks (’) or rabbit-ears (").

[–] [email protected] 0 points 5 days ago (1 children)

include Hebrew in their language, because I guess they were feeling kabbalistic

... or because the developers were Israeli: https://en.wikipedia.org/wiki/Zend/_(company)#History

[–] [email protected] 1 points 5 days ago

Yeah, that's not actually a good reason though, unless you're developing a Hebrew programming language for Hebrew speakers. I made a bit of a joke about it, yes.

load more comments (16 replies)
[–] [email protected] 53 points 1 week ago (1 children)

TBF the last two bullet points are verbose descriptions of the thing it means in C++, Java, and Python too. It's just that in JS, "this" can also be used in other places.

But yeah, in practice, every time I write JS I want to throw my hands in the air and shout "this is bullshit", but never know what "this" refers to... :D

[–] [email protected] 10 points 1 week ago

Yeah that's fair, though it also discusses that whole prototype thing that JS has going on

[–] WolfLink 45 points 1 week ago (2 children)

In Python, self is not a keyword, it’s a conventional variable name. You can replace all instances of “self” with “this” and your code will work the same.

[–] [email protected] 7 points 6 days ago (1 children)

Lua might have been a better choice, since self is special in lua.

[–] diemartin 6 points 6 days ago* (last edited 5 days ago) (1 children)

Kinda.

Lua defines it implicitly only when you use the

function foo:bar(a, b, c) -- note the colon

syntactic sugar, which gets translated to

function foo.bar(self, a, b, c) -- note the period

In all cases, self is a regular variable name. You can even redeclare a new local with that name even when the old one is in scope.

Edit: some typos

[–] [email protected] 3 points 6 days ago (1 children)

I don't see how what you said is inconsistent with me saying "self" is special in lua. Note that I did not say it's a keyword.

[–] diemartin 2 points 5 days ago

Derp, I misread.

[–] [email protected] 7 points 1 week ago

Python is just distancing itself from JS.

[–] [email protected] 29 points 1 week ago

Sweet dreams are made of this

[–] [email protected] 24 points 1 week ago (1 children)

Rust: Borrow handler got mad at you for asking

(I'd assume)

[–] [email protected] 19 points 1 week ago (1 children)

It's either a reference to an object instance, or the instance itself (depending on whether you specified &mut self, &self or just self).

[–] [email protected] 13 points 1 week ago

Don't forget Self, the type of self.

[–] [email protected] 14 points 1 week ago

Alternative image for C: Mr. Incredible: "A PARAMETER IS A PARAMETER!"

[–] [email protected] 12 points 1 week ago

My JS:

Ah, you mean that?

[–] [email protected] 9 points 1 week ago (5 children)

In Python you can use this as a variable name

[–] [email protected] 8 points 1 week ago* (last edited 1 week ago) (5 children)

In Python you can use 🍆 as a variable name.

Edit: oops, guess I was mistaken, you can use most Unicode but emojis are not valid.

[–] [email protected] 10 points 1 week ago (1 children)

Just going by the reputation, you probably can do this in JavaScript

load more comments (1 replies)
[–] [email protected] 9 points 1 week ago

Edit: oops, guess I was mistaken, you can use most Unicode but emojis are not valid.

That actually seems even more arbitrary. Like, do they just hate fun?

load more comments (3 replies)
load more comments (4 replies)
load more comments
view more: next ›