this post was submitted on 22 Oct 2023
371 points (100.0% liked)

Programmer Humor

852 readers
5 users here now

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

Rules:

founded 5 years ago
MODERATORS
 
top 45 comments
sorted by: hot top controversial new old
[–] davel@lemmy.ml 42 points 11 months ago (1 children)

Thief. Writing code is for chumps, and the more code you right, the more of a chump you are.

[–] tiredofsametab@kbin.social 9 points 11 months ago (1 children)

Writing code is for chumps, and the more code you right, the more of a chump you are.

So you're the one in there wronging up my code?

[–] davel@lemmy.ml 6 points 11 months ago* (last edited 11 months ago)

It’s too late now to wright my wrongh ¯\_(ツ)_/¯

[–] lwhjp@lemmy.sdf.org 42 points 11 months ago

TDD

const max12 = (x, y) => {
    if (x === 1 && y === 2) {
        return 2;
    } else if (x === 7 && y === 4) {
        return 7;
    } else {
        return x;
    }
};
[–] kewko@lemdro.id 20 points 11 months ago (2 children)

Mathematician 2 kinda blew my mind, kinda obvious, just can't believe I was never taught or thought about it.

[–] mac@lemm.ee 3 points 11 months ago (1 children)

Lost me when it used Math.abs after calling math.max a their

[–] MBM@lemmings.world 3 points 11 months ago

Math.Sqrt((x-y) * (x-y)) (I've actually seen someone use this)

[–] Artyom@lemm.ee 2 points 11 months ago (1 children)

I've been staring at it for 10 minutes and I'm still not convinced it works.

[–] uberrice@feddit.de 2 points 11 months ago

Simple, really. Abs(x-y) is the difference between the two numbers, absolute, so positive value. So, adding abs(x-y) to the smaller of the two numbers turns it into the bigger number. Plus the bigger number, now you have 2 times the bigger number

[–] neosheo@discuss.tchncs.de 17 points 11 months ago (1 children)

Thief gang. Why stand on shoulders of giants if you're not using it to your advantage?

[–] Shhalahr 16 points 11 months ago

Procrastinator.

Okay, but seriously: "Thief". Why reimplement it if it’s already available in the language?

[–] driving_crooner@lemmy.eco.br 14 points 11 months ago* (last edited 11 months ago) (1 children)

Mathematician 3

Max(x, y) = floor(ln(e^x + e^y))

[–] neeeeDanke@feddit.de 1 points 11 months ago* (last edited 11 months ago) (1 children)

so 0.3 ~= 1-ln(2)=max(1-ln(2),1-ln(2)) = floor(ln(2*e^(1-ln(2)))) = floor(ln(2)+(1-ln(2))) = 1 ?

That would bee engeneer 2, not Mathematician3 xD.

Just out of curiostity, what was you Idea behind that?

[–] driving_crooner@lemmy.eco.br 2 points 11 months ago* (last edited 11 months ago) (1 children)

Guess only work with integers, specially for the floor function that is going to give you an integer at the end everytime.

Not my idea, learned it somewhere while doing college in an statistics class. The idea is that the exponential function grow really fast, so small difference on variables become extreme difference on the exponential, then the log function reverse the exponential, but because it grew more for the biggest variable it reverts to the max variable making the other variables the decimal part (this is why you need the floor function). I think is cool because works for any number of variables, unlike mathematician 2 who only work for 2 variables (maybe it can be generalized for more variables but I don't think can be done).

For a min fuction it can be use ceiling(-ln(e^-x + e^-y))

[–] neeeeDanke@feddit.de 2 points 11 months ago* (last edited 11 months ago) (2 children)

to be fair it does seem to work for any two numbers where one is >1. As lim x,y--> inf ln(e^x+e^y) <= lim x,y --> inf ln(2 e^(max(x,y))) = max(x,y) + ln(2).

I think is cool because works for any number of variables

using the same proof as before we can see that: lim,x_i -->inf ln(sum_{i/in I} e^(x_i)) <= ln(|I|) +max{x_i | i /in I}.

So it would only work for at most [base of your log, so e<3 for ln] variables.

[–] driving_crooner@lemmy.eco.br 3 points 11 months ago (1 children)

After searching a little, I found the name of the function and it's proof: https://en.wikipedia.org/wiki/LogSumExp

[–] neeeeDanke@feddit.de 2 points 11 months ago* (last edited 11 months ago) (1 children)

thanks for looking it up:).

I do think the upper bound on that page is wrong thought. Incedentally in the article itself only the lower bound is prooven, but in its sources this paper prooves what I did in my comment before as well:

for the upper bound it has max +log(n) . (Section 2, eq 4) This lets us construct an example (see reply to your other comment) to disproove the notion about beeing able to calculate the max for many integers.

[–] driving_crooner@lemmy.eco.br 1 points 11 months ago

I just remembered where I learned about that function, in this course on convex optimization that unfortunately I never had the opportunity to finishing it but is really good.

[–] driving_crooner@lemmy.eco.br 2 points 11 months ago (1 children)

I don't have a mathematical proof, but doing some experimental tests on excel, using multiple (more than 3) numers and using negative numbers (including only negative numbers) it works perfectly every time.

[–] neeeeDanke@feddit.de 2 points 11 months ago* (last edited 11 months ago)

Try (100,100,100,100,100,101) or 50 ones and a two, should result in 102 and 4 as a max respectively. I tried using less numbers, but the less numbers you use, the higher the values (to be exact less off a deviation(%-difference) between the values, resulting in higher numbers) have to be and wolframAlpha does not like 10^100 values so I stopped trying.

[–] snowcatridge10 14 points 11 months ago (1 children)
[–] marco 4 points 11 months ago

And not feeling one byte bad about it :p

[–] Eufalconimorph@discuss.tchncs.de 13 points 11 months ago (2 children)
#define max(x,y) ( { __auto_type __x = (x); __auto_type __y = (y); __x > __y ? __x : __y; })

GNU C. Also works with Clang. Avoids evaluating the arguments multiple times. The optimizer will convert the branch into a conditional move, if it doesn't I'd replace the ternary with the "bit hacker 2" version.

load more comments (2 replies)
[–] bstix@feddit.dk 9 points 11 months ago* (last edited 11 months ago) (1 children)

And then your customer changes their mind. Instead of two numbers, they will now input three numbers. How easy will it be for you to change your code?

And then the customer changes their mind. Instead of three numbers, they will now input any series of numbers. How easy will it be for you to change your code? And why didn't you already do this is the previous step?

And then the customer changes their mind. Instead of any set of numbers, they will now input numbers and text. How easy will it be to change your code?

And then the customer changes their mind. They now have no idea of what they're sending you or if they're even sending you anything. Nevermind the code now, you already did that in the previous step, right? How easy will it be to explain what you're invoicing them for?

[–] Natanael@slrpnk.net 6 points 11 months ago (1 children)

How easy will it be to explain what you're invoicing them for?

By the hour I presume

[–] bstix@feddit.dk 1 points 11 months ago

If only you'd done the most bloated and well documented function first, you could have saved yourself the time and your client for the money.

I mean this is the kind of shit my boss would argue about. Why pay for the first attempts that didn't work.. blabla bla. He always ends up paying but it's always such a hassle.

[–] wethegreenpeople@sopuli.xyz 9 points 11 months ago

Engineer I guess... Thief is the objectively better enterprise programmer option but I don't know why I always forget about it and just write a ternary ¯⁠\⁠_⁠(⁠ツ⁠)⁠_⁠/⁠¯

[–] cybirdman@lemmy.ca 8 points 11 months ago

Master Thief const { Max: max } = Math;

[–] PeriodicallyPedantic@lemmy.ca 7 points 11 months ago* (last edited 11 months ago)

If thief is actually an option, then thief.

Otherwise probably procreator or engineer 😅😬

Edit: errrrr that was supposed to say "procrastinator" 😬dyac

[–] peyotecosmico@programming.dev 6 points 11 months ago

I'm in this post and I'm offended.

[–] Moxvallix@sopuli.xyz 6 points 11 months ago

I’m number 11.

[–] drew_belloc@programming.dev 6 points 11 months ago

I'm the first and the last, it depends on my mood

[–] maegul@lemmy.ml 5 points 11 months ago* (last edited 11 months ago)

Otherwise, realistically, I’m prob the worst of all worlds … the procrastinator waiting/hoping to be the pair programmer that has hopefully remembered to just be the thief.

[–] TonyToniToneOfficial@lemmy.ml 4 points 11 months ago

Last one should be // still a student

[–] 13@masto.bg 4 points 11 months ago (1 children)

@coja I am the engineer because I forget about Math.max existence

[–] Tolookah@discuss.tchncs.de 3 points 11 months ago

Engineer likely ends up with the smallest code. Though the hit to execution time for a branch sucks. (Pipelines and such)

Bit hacker will take the least execution time because of pipelines, but it needs more comments. Maybe something like // trust me, this works.

[–] crandlecan@mander.xyz 3 points 11 months ago

I'm mostly lost and in over my head

[–] writeblankspace@lemm.ee 3 points 11 months ago

Thief, or Procrastinator.

[–] cpw@lemmy.ca 3 points 11 months ago

Max11 is all my code. Why doesn't it work????🤔

[–] GTG3000@programming.dev 3 points 11 months ago

Why use const max = (x, y) => x > y ? x : y instead of function max(x, y) { return x > y ? x : y } ?

[–] scroll_responsibly@lemmy.sdf.org 1 points 11 months ago* (last edited 11 months ago)

my $max = $x > $y ? $x : $y;