this post was submitted on 24 Aug 2025
281 points (97.3% liked)

Programmer Humor

38016 readers
167 users here now

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

Rules:

founded 6 years ago
MODERATORS
 
top 50 comments
sorted by: hot top controversial new old
[–] Kazumara@discuss.tchncs.de 24 points 6 days ago (11 children)

The python version seems buggy as fuck. Depending on which year you run it it's off by 1-3 days

[–] dumples@midwest.social 7 points 6 days ago (1 children)

Python does have a year option that they are not using. Depending on the application I would use 365 for a year to get a consistent number of days.

[–] sunshine@lemmy.ml 8 points 6 days ago

I did look up the help for that function to make this meme but I must have missed that option. in my defense I've only been using Python for like 10 years

load more comments (10 replies)
[–] illusionist@lemmy.zip 23 points 6 days ago (1 children)

Looks like one is defined as years and one as days. 10 years does not necessarily equal 365 times 10.

[–] kureta@lemmy.ml 4 points 6 days ago

In fact, it would never equal 365 * 10 days.

[–] HelloRoot@lemy.lol 14 points 6 days ago* (last edited 6 days ago) (2 children)

Edit:

To clarify, I looked at existing online ruby code and gave it a small test for readability. It may be outdated, use uncommon syntax, bad practice or be full of individual developer quirks - I wouldn't know. I did that because I wanted to highlight some weaknesses of the language design that turned me away from ruby years ago. https://en.wikipedia.org/wiki/Principle_of_least_astonishment


Yes, very nice. But here comes the ugly;

[1,2,3].map(&:to_s)

oh ok, a bit hieroglyphic, but I can figure it out, seems like '&' means element and ':' means what I do with it.

files = `ls -1`

Aaah so a backtick is for strings? WRONG!!! IT EXECUTES THE FUCKING COMMAND!!!

ARGF.each { |line| puts line if /BEGIN/ .. /END/ }

What the hell is | and / ? Oh but I guess .. is a range like in other languages, but what would be that range??? WRONG! I!!T'S A FLIP FLOP!!!

%w{a b c}     # array of strings
%i[foo bar]   # array of symbols
%r{https?://\w+}  # regex
%x(ls -1)     # run shell command

Ah, just memorize which letter to use by heart and that % is for type and that [ = { sometimes. But { unequal to { other times.

if line =~ /ERROR/
  warn $~.post_match
end

=~ neat!

$~ dafuq???

At this point I feel like ruby devs are just trolling us. There are always multiple ways to do the same thing. Every example from above also has a tidy and readable way to do it. But the alternative ways become progressively more shorthand, unreadable and unintuitive.

[–] beyond@linkage.ds8.zone 21 points 6 days ago* (last edited 6 days ago) (2 children)

Aaah so a backtick is for strings? WRONG!!! IT EXECUTES THE FUCKING COMMAND!!!

To be fair this is what they do in Perl and shell scripts (and in PHP too), so it's not unexpected behavior in that world.

[–] HelloRoot@lemy.lol 8 points 6 days ago* (last edited 6 days ago)

I'm way happier debugging "200 char wide class name + 50 line of boilerplate" code written in java that verbosely and expressively does the same thing compared to deciphering single symbol hieroglyphs in shell esque scripts where I have to pay attention which way the ticks are pointing.

[–] Tanoh@lemmy.world 8 points 6 days ago (2 children)

Yeah, you could very well argue that JS and others that use it for weird interpolated strings are the weird ones here.

load more comments (2 replies)
[–] barubary@infosec.exchange 4 points 6 days ago (1 children)

Does Ruby require the use of [] and {} there? Because those %w/%i/etc things look like custom quoting operators and at least in Perl you can use any delimiter you want: qw(a b c) is a list of strings, but so are qw+a b c+ and qw;a b c;.

[–] danielquinn@lemmy.ca 12 points 6 days ago (1 children)
from datetime import datetime
from dateutil.relativedelta import relativedelta

print(datetime.now() + relativedelta(years=10))  # 2035-08-24 12:02:49.795177
load more comments (1 replies)
[–] ArcaneSlime@lemmy.dbzer0.com 8 points 6 days ago (1 children)
10.years.ago
On.a.cold.dark.night
There.was.someone.killed
'Neath.the.town.hall.lights
There.were.few.at.the.scene
Though.they.all.agreed
That.the.slayer.who.ran
Looked.a.lot.like.me
[–] AnarchistArtificer@slrpnk.net 3 points 6 days ago (1 children)
load more comments (1 replies)
[–] HiddenLayer555@lemmy.ml 2 points 6 days ago* (last edited 6 days ago) (1 children)

How is this implemented? Is it just functions and the language assumes the first parameter is autofilled with variable.function syntax?

[–] vga@sopuli.xyz 5 points 5 days ago* (last edited 5 days ago) (2 children)

Ruby is object-oriented, modelled after Smalltalk mostly. So

irb(main):001:0> 10.class
=> Integer

So you'll just have implement the method "years" on the Integer (or something more generic like Numeric) class and then "ago" on whatever class the years method returned.

You might imagine that you can do something like 10.years().ago() in python but the parser prevents you:

>>> 10.years
  File "<python-input-0>", line 1
    10.years
      ^
SyntaxError: invalid decimal literal

Doesn't seem like it would have to prevent it, back in ruby:

irb(main):001:0> 10.0.class
=> Float

Ruby is a pretty cute language in my opinion, and I find it sad that python kinda drove over it.

load more comments (2 replies)
load more comments
view more: next ›