News for hackers. Stuff that matters.
Re:Principle of Least Astonishment by threatofrain on Monday April 06, 2020 @02:33PM (#22796439)
Yukihiro Matsumoto, creator of Ruby:

> Everyone has an individual background. Someone may come from Python, someone else may come from Perl, and they may be surprised by different aspects of the language. Then they come up to me and say, 'I was surprised by this feature of the language, so Ruby violates the principle of least surprise.'

> Wait. Wait. The principle of least surprise is not for you only. The principle of least surprise means principle of least my surprise. And it means the principle of least surprise after you learn Ruby very well. For example, I was a C++ programmer before I started designing Ruby. I programmed in C++ exclusively for two or three years. And after two years of C++ programming, it still surprises me.

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.