News for hackers. Stuff that matters.
Re:Principle of Least Astonishment by edbrown23 on Monday April 06, 2020 @04:00PM (#22797186)
For what it's worth, I don't think ruby achieves this goal either. I've been programming full time in Ruby for nearly three years and things like this [1] still surprise me. Ruby feels less surprising than C++, sure, but that's a pretty low bar to clear.

[1] https://makandracards.com/makandra/46939-ruby-a-small-summar...

Re:Principle of Least Astonishment by loopz on Monday April 06, 2020 @04:25PM (#22797444)
Principles of least surprise (or astonishment), is one of cornerstones of Ruby. However, the language itself is dynamic, so take the end result with a pinch of salt: The language's OO syntax is beautifully simple, incredibly easy to structure into classes/mixins and have tons of useful libraries, to write code with. Not always so much for reading code, refactoring or discerning what REALLY goes on in a Rails application..
Re:Principle of Least Astonishment by gregkerzhner on Monday April 06, 2020 @04:44PM (#22797658)
I think there is a great middle line for a language that is easy to work with, and provides enough safety to be maintainable for a long time. Environments like C++ and enterprise Java miss this middle line by being too cumbersome. However, Ruby equally misses this middle line, just in the other direction - it's too simple and dynamic leading to lack of maintainability in the long run. The best solution will be somewhere in between.
Re:Principle of Least Astonishment by skrebbel on Monday April 06, 2020 @04:57PM (#22797783)
In my opinion, Kotlin, C#, and TypeScript all come pretty close.
Re:Principle of Least Astonishment by jolmg on Monday April 06, 2020 @04:40PM (#22797607)
My pet-peeve in ruby:

  '//'.split('/') # => [] instead of ['', '', '']
  '/'.split('/') # => [] instead of ['', '']
  ''.split('/') # => [] instead of ['']

  '//'.split('/', -1) # => ['', '', '']
  '/'.split('/', -1) # => ['', '']
  ''.split('/', -1) # => [] instead of ['']
In comparison:

  "".split("/") # => [""] in javascript
  "".split("/") # => [""] in python
Re:Principle of Least Astonishment by drewcoo on Monday April 06, 2020 @05:46PM (#22798214)
But if "instead of" means "I expected," doesn't that also mean that Javascript and Python don't do what you expected?
Re:Principle of Least Astonishment by ithkuil on Monday April 06, 2020 @06:15PM (#22798422)
JS & python both have:

'//'.split('/') => [ '', '', '' ] '/'.split('/') => [ '', '' ] '',split('/') => [ '' ]

so they indeed produce what parent expected.

Re:Principle of Least Astonishment by simplify on Monday April 06, 2020 @09:44PM (#22799651)
To be fair, blocks, procs, and methods are fairly fundamental to Ruby. After a bit of study, they stop being surprising. I'm sure there are other examples, though.