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

Programmer Humor

38058 readers
43 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
[–] Korne127@lemmy.world 43 points 1 week ago (1 children)

Never worked on Ruby, so I definitely cannot judge it, but that syntax looks so uncomfortable…

[–] mesamunefire@piefed.social 20 points 1 week ago (1 children)

It can be nice to read but try debugging something like this is a horrible experience.

I had 5 years of ruby on rails experience before jobs decided on other Lang's. Its still not terrible persay but it hurts when you have multiple of these "smart" objects doing really silly things and debugging it all.

[–] zurchpet@lemmy.ml 4 points 1 week ago (2 children)

I programm in Ruby since 2006.

In my opinion it has some of the best debugging tools available.

What was the horrible part you experienced?

load more comments (2 replies)
[–] Semi_Hemi_Demigod@lemmy.world 31 points 1 week ago (5 children)

And the best part is the Ruby way accounts for leap years.

[–] deadbeef79000@lemmy.nz 21 points 1 week ago

Well, 365 * 10 certainly doesn't ;-)

[–] eager_eagle@lemmy.world 10 points 1 week ago (1 children)

I prefer the one on the left because it's evident it doesn't account for leap days, while I'd be questioning whether the one on the right does.

[–] Diplomjodler3@lemmy.world 4 points 1 week ago* (last edited 1 week ago) (3 children)

I'll give it a shot. Looks a bit kludgy and I've been typing this on my phone while sitting on the toilet. What am I doing with my life?

from datetime import datetime 

now = datetime.now()
year = now.strftime('%Y')
month = now.strftime('%m')
day = now.strftime('%d')
tenyearsago = datetime(year-10, month, day)
print(tenyearsago.strftime('%d.%m.%Y')
load more comments (3 replies)
load more comments (3 replies)
[–] Kazumara@discuss.tchncs.de 25 points 1 week 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 1 week 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 1 week 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 1 week 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 1 week ago

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

[–] HelloRoot@lemy.lol 14 points 1 week ago* (last edited 1 week 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 1 week ago* (last edited 1 week 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.

[–] Tanoh@lemmy.world 8 points 1 week 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)
[–] HelloRoot@lemy.lol 8 points 1 week ago* (last edited 1 week 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.

[–] barubary@infosec.exchange 4 points 1 week 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;.

[–] waldfee@feddit.org 13 points 1 week ago (4 children)

crystal is another language that's apparently quite similar to ruby, with the difference of being compiled and staticly type-checked, and I just love it's ruby like syntax. I believe the equivalent code for this in crystal would be Time.local - 10.years

load more comments (4 replies)
[–] danielquinn@lemmy.ca 12 points 1 week 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 1 week ago (2 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
load more comments (2 replies)
[–] Cat_Daddy@hexbear.net 7 points 1 week ago (2 children)

Ruby is awesome. Finding out that everything is an object, and because of that you can do things like in your example (10.whatever), is hilarious coming from other languages.

[–] Ephera@lemmy.ml 5 points 1 week ago (5 children)

By the way, it isn't actually necessary for everything to be an object to make this work. The language just has to define 10.whatever() to be syntactic sugar for whatever(10). Some languages, like Python and Rust, have an explicit self parameter on their methods to help illustrate this.

But yeah, a bunch of languages decided to special-case their objects instead, for whatever reason.

this is very true but i gotta defend my object-oriented languages here (real object-oriented, not c++-style object-oriented). there's a lot of way cooler stuff you can do with ruby or groovy or smalltalk that you just can't do with rust, for example. objects aren't special cases, the entire system is supposed to be implementable in itself. obviously the machine code itself can't be objects but the good languages do their best to mask that.

load more comments (4 replies)
load more comments (1 replies)
[–] GammaGames@beehaw.org 4 points 1 week ago (2 children)

Does that work? Might be enough to convert me

[–] skisnow@lemmy.ca 12 points 1 week ago* (last edited 1 week ago) (1 children)

I was on a project a while back that used Ruby, and what I concluded was that cute things like that look good at first glance if you're skim-reading some already-correct code, but are pretty much a net wash in terms of writing or debugging code.

It's not unusual for people to think that code would be better if it scanned like regular English, but the problem is that English is woefully imprecise and doesn't always correlate to what kind of operations get run by the code, and so you still end up having to learn all that syntax and mentally process it like any other programming language anyway, but now you've also got a bunch of false friends tricking you into thinking they do one thing but actually they do another.

(also, the bulk of the text in that python example is the import statement, which is like... ok so what, it's not like Ruby doesn't have its own dependency hell problems)

[–] GammaGames@beehaw.org 5 points 1 week ago

I had to modify some ruby a few years ago, I don’t remember liking it! Once I understood the syntax it wasn’t terrible to work with but I still wasn’t a fan of the syntax

[–] sunshine@lemmy.ml 6 points 1 week ago

it works in Ruby on Rails but not in bare-naked Ruby, if that gives you a hint of how the language's architecture makes things easy for you and also might stab you in the back one day.

load more comments
view more: next ›