this post was submitted on 17 May 2025
260 points (99.2% liked)

Programmer Humor

23290 readers
1873 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 2 years ago
MODERATORS
 
top 44 comments
sorted by: hot top controversial new old
[–] jenesaisquoi@feddit.org 24 points 7 hours ago (1 children)
[–] JCpac@lemmy.today 41 points 4 hours ago (1 children)

No, it's Javascript, keep up

[–] sorter_plainview@lemmy.today 37 points 12 hours ago (1 children)
[–] skisnow@lemmy.ca 11 points 9 hours ago

That one wasn't the one I had issues with, since the concept is essentially the same across all languages. We say it's false because we can't conclusively say that it's true. Same as the reason why null != null in SQL.

[–] powermaker450@discuss.tchncs.de 13 points 10 hours ago (2 children)
[–] Valmond@lemmy.world 7 points 7 hours ago (1 children)

I'd say C too because that's the only one that would be True in a normal programming language and this is javascript so...

[–] Remavas@programming.dev 1 points 31 minutes ago

It's not true in a normal programming language. If it is true in yours, you should stop using it immediately.

[–] modeler@lemmy.world 1 points 6 hours ago

Can't be C, C is the true path.

[–] jaark@infosec.pub 51 points 14 hours ago (5 children)

I'm no expert and I know that javascript is full of wtf moments, but please.. Let it be B

It's not gong to be B, it's it.

[–] ImplyingImplications@lemmy.ca 51 points 14 hours ago (1 children)

It is true. Math.min() returns positive Infinity when called with no arguments and Math.max() returns Negative Infinity when called with no arguments. Positive Infinity > Negative Infinity.

Math.min() works something like this

def min(numbers):
  r = Infinity
  for n in numbers:
    if n < r:
      r = n
  return r

I'm guessing there's a reason they wanted min() to be able to be called without any arguments but I'm sure it isn't a good one.

[–] bss03@infosec.pub 27 points 13 hours ago (1 children)

So, the language isn't compiled (or wasn't originally) so they couldn't make min() be an error that only a developer saw, it has to be something that the runtime on the end-user system dealt with. So, it had to be assigned some value. Under those restrictions, it is the most mathematically sound value. It makes miniumum-exactly-2(x, min(<...>)) be exactly the same as min(x, <...>), even when the "<...>" has no values.

As a developer, I see a lot of value in static analysis, including refusing to generate output for sufficiently erroneous results of static analysis, so I don't like using JS, and the language that I tinker with will definitely have a separate compilation step and reject the equivalent of min(). But, if I HAD to assign something like that a value, it probably would be a representation of infinity, if we had one (probably will due to IEEE floats).

HTH

[–] hades@lemm.ee 4 points 4 hours ago

The language not being compiled has nothing to do with error handling. You could have a min function that operates on dynamic arrays (e.g. std::min_element in C++ or min() in Python).

[–] CameronDev@programming.dev 31 points 14 hours ago* (last edited 14 hours ago) (1 children)
Math.min() == Infinity
Math.max() == -Infinity

Wtf is going on JS...

edit: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min

Its the min value of the input params, or Infinity.

[–] wise_pancake@lemmy.ca 9 points 12 hours ago* (last edited 12 hours ago) (2 children)

Math.min.length is 2, which weakly signals that it's designed to handle at least two parameters

Why would they even define this value?

Note: I’m not a js dev, do most functions have length?

[–] CameronDev@programming.dev 11 points 12 hours ago (2 children)

I am also not a JS dev, we possibly aren't brain damaged enough to understand the perfection.

[–] Venator@lemmy.nz 2 points 1 hour ago (1 children)

Most people don't use JS because they think it's perfect... they use it because it's the language that works on web browsers... or because thier coworkers made something in it... or because the library that does what they want uses it...

[–] CameronDev@programming.dev 1 points 1 hour ago

For such a terrible language, it really has staying power...

[–] peoplebeproblems@midwest.social 7 points 11 hours ago (1 children)

I develop with JS? All I can say is I need more brain damage to understand where is out

[–] sp3ctr4l@lemmy.dbzer0.com 5 points 10 hours ago

Just keep developing with it, you'll get CTE soon.

[–] bss03@infosec.pub 1 points 11 hours ago

All functions built with function name(args) { body } syntax have a length based on the form of args. Other ways to create functions might set length (I'm not sure). Most of the functions provided by the runtime environment to have a length, usually based on the number of "required" arguments.

[–] sp3ctr4l@lemmy.dbzer0.com 7 points 10 hours ago* (last edited 10 hours ago) (3 children)

I also am not familiar with javascript anymore....precisely because of this, exact, insane bullshit.

B... and/or C... evaluating as FALSE are the only things that... should even kind of make sense, according to my brain.

Though at this point in my life, I have unironically had a good number of concussions and contusions, so ... well you'd think that would help with JS development.

Javascript is insanity, and I am still convinced it is at least 40% responsible for Notch losing his goddamned mind.

'null' is somehow an object. because fuck you, thats why!

Is... 0 == '' ... is that two single quotes ' ' ?

Or one double quote " ?

If... it is one double quote... that wouldn't even evaluate, as it would just be an empty string without a defined end...

But if it was two single quotes... that would just be a proper empty string... and because of forced type coercion, both 0 and '' are FALSE when compared with ==, but not when compared with ===, because that ignores forced type coercion...

https://www.w3docs.com/snippets/javascript/when-to-use-double-or-single-quotes-in-javascript.html

Oh my fucking god WHY?!

Just fucking use one special character to delimit strings!

Don't have two that don't work together and also behave differently even when you pick just one of them... GraaaghhH!

brb, figuring out where Larry Ellison lives...

[–] jaark@infosec.pub 4 points 4 hours ago* (last edited 3 hours ago) (1 children)

I don't think my sanity can take all of these explanations.

Though I just spotted one that's worse than null being an object ..

typeof NaN
"number"

I mean, come on.. it's even in the fucking name!

Edit - fixed capitalisation in 'NaN'

[–] zarkanian@sh.itjust.works 1 points 1 hour ago

Douglas Crockford has a whole chapter of these in his latest book. There's also this classic video.

[–] Zos_Kia@lemmynsfw.com 3 points 8 hours ago (1 children)

Notch? The guy who codes in java?

[–] sukhmel@programming.dev 2 points 2 hours ago (1 children)

That's just short for JavaScript, isn't it?

[–] Zos_Kia@lemmynsfw.com 1 points 21 minutes ago

Java is actually twice faster cause the name is twice shorter

[–] traches@sh.itjust.works 2 points 7 hours ago

It’s pretty easy to avoid all of these, mostly by using ===. Null being an object is annoying and is one of the reasons ‘typeof’ is useless, but there are other ways to accomplish the same thing.

JavaScript has a lot of foot guns, but it’s also used by literally everyone so there is a lot of tooling and practice to help you avoid them.

[–] moomoomoo309@programming.dev 21 points 14 hours ago* (last edited 14 hours ago) (1 children)

It's C, NaN is never equal to itself in floating point, that's not just a JS thing.

[–] entropicdrift 9 points 13 hours ago (1 children)
[–] 0x0@lemmy.dbzer0.com 17 points 12 hours ago

No, it's JS

[–] KindaABigDyl@programming.dev 10 points 14 hours ago (2 children)

Fun fact, even tho B is False, Math.min > Math.max is true

[–] CameronDev@programming.dev 14 points 13 hours ago

That is not a fun fact. How do I unsubscribe :D

[–] lunarul@lemmy.world 5 points 11 hours ago

But B is true

[–] mmddmm@lemm.ee 21 points 12 hours ago (3 children)

The one option that is mandated by an ISO standard.

Besides, if max and min are going to have a value without any parameter, it has to be exactly those Javascript uses. Unless you have a type that define other bounds for your numbers. And null always have a pointer type (that is object in Javascript), for the same reason that NaN always have a number type.

The only one that is bad on that list is D.

[–] FooBarrington@lemmy.world 8 points 10 hours ago (1 children)

typeof null === "object" was actually a bug in the early implementations, and they decided to keep it in the spec: https://2ality.com/2013/10/typeof-null.html

(see the comment from Brendan Eich)

[–] gnutrino@programming.dev 13 points 7 hours ago* (last edited 7 hours ago) (1 children)

Tony Hoare: "Introducing NULL was a billion-dollar mistake"

Brendan Eich: "Hold my undefined"

[–] FooBarrington@lemmy.world 12 points 7 hours ago

We had one null, yes. But what about second null?

[–] owsei@programming.dev 8 points 11 hours ago (1 children)

Maybe D is too single quotes 0 == ''

[–] ByteJunk@lemmy.world 2 points 7 hours ago

"This comparison appears to be unintentional"

[–] StopSpazzing@lemmy.world 5 points 12 hours ago

D...Deez nutz!

[–] entropicdrift 24 points 13 hours ago (1 children)
[–] Brahvim@lemmy.kde.social 3 points 13 hours ago

Probably B?