Jan Lelis

Ruby is Full of Surprises

Ruby Unconf 2018

00:00:20.590 Alright, thank you for showing up.
00:00:30.730 As I've already announced, this is not the most serious talk, but I hope you enjoy it.
00:00:38.670 The theme of my talk today is "Ruby is Full of Surprises." In the past year, I've been documenting some challenges I've encountered, and what I've started is called "Using Credit Ruby It Is Aquarius." It's something unique that Ruby does.
00:00:54.420 I will be posting new episodes and articles this month, so check it out. Now, what is this? It’s a presentation in which I want to begin with something simple: every programmer should be able to write a program, regardless of the Ruby language’s difficulty. By the end of your journey towards mastering programming, you should feel comfortable.
00:01:24.710 To ensure your syntax is correct, you can use the Ruby 'minus C' option to check the syntax of your programs. When you do this, Ruby won't run the code; it will just validate its syntax.
00:01:32.910 This validation led to a project that I submitted for the Ruby core competition, which encourages developers to explore the boundaries of the language. The competition aims to highlight the potential surprises within Ruby.
00:02:19.259 Now, how many of you have heard of the principle of least surprise? It means that you shouldn’t be surprised by the behavior of your programming language. Matz, the creator of Ruby, wrote an essay about what constitutes a beautiful programming language.
00:02:39.630 For example, he mentioned that if you're familiar with other languages, Ruby feels similar because it has constructs like if-statements and while-statements that you recognize. However, learning Ruby requires you to be aware of its idiosyncrasies, such as using class instance variables instead of class variables.
00:03:10.380 Knowing these details can help you avoid surprises, but it also means you need to understand Ruby quite well to navigate its complexities.
00:03:29.700 Recently, I encountered some esoteric Ruby code that left me perplexed. It printed the 'Foo' symbol using unfamiliar syntax. The intricacies of this code demonstrate how Ruby can surprise even experienced users, evidencing its depth.
00:03:50.000 In the discussion about Ruby's features, we also explore something as simple as string splitting. We use regex to determine where to split strings, which is a common operation in Ruby. When using capture groups within regular expressions, the behavior can yield surprising results.
00:04:12.620 For instance, using multiple capture groups can produce unexpected outputs. This demonstrates how a simple task can sometimes have complex outcomes in Ruby.
00:04:30.000 Another fantastic example can be found in the successor method, which increases a number stored in a string. For example, the successor of the string '4' would yield '5'. However, questing the successor of a string containing '9' can lead to surprising outcomes.
00:05:09.360 The behavior of Ruby can be confusing because it often deviates from standard expectations, especially with methods and their interfaces.
00:05:43.540 A remarkable feature is the 'script lights' feature, which can recreate an object with all source code. This feature can be a point of confusion, especially when considering how to activate it.
00:06:40.750 To activate this feature, you must provide an object with an empty hash. When you call a file using this activated feature, the hash gets populated with the source code, further showcasing Ruby's unexpected behaviors.
00:07:41.800 Next, let's talk about constants in Ruby. We tend to learn that classes can be instantiated while modules cannot; however, constant assignment in Ruby is a dynamic process. This means we can swap constants and still achieve results that might seem contradictory.
00:08:05.000 You might be surprised to discover that Ruby allows us to modify how we structure our code, creating opportunities for unique results. The ability to manipulate constants can lead to unexpected behavior.
00:08:42.800 Interestingly, you can remove core constants like 'Object', and Ruby will still function, but you'll lose some typing conveniences.
00:09:00.000 This exploration of Ruby's flexibility highlights how dynamic and sometimes confusing it can be, especially concerning historical reasons for its design.
00:09:31.860 Additionally, Ruby's syntax can produce surprising results; for instance, there are options for the IRB (Interactive Ruby) that allow for enhanced output representations. This capability can aid during development, providing deeper insights into your code.
00:10:18.330 While experimenting with Ruby, one can find surprising syntax that behaves differently than expected, such as reversing strings in unconventional ways.
00:10:40.440 You will often discover that Ruby is full of unexpected behaviors and surprises. With each new version, Ruby continues to evolve, raising questions about what new features may bring.
00:11:09.350 For example, proposed features like infinite ranges and support for uppercase Unicode characters could drastically change how we write Ruby.
00:11:50.000 Ultimately, the journey through Ruby continues to be filled with lessons that challenge our definitions of convention and expectation.
00:12:08.000 Thank you all for your attention, and I hope you learned something new today!