M. Schirp: "I personally feel no big love for Ruby"

Interview with Markus Schirp, creator of the popular tool Ruby Mutation Testing and related gems and speaker at Ruby Russia 2018
19 September 2018   652

Markus Schirp is entrepreneur and post Ruby freelance developer and consultant, "exorcist of dynamic language." The creator of the popular tool Ruby Mutation Testing and related gems. DataMapper and ROM core team alumni, speaker at Ruby Russia.

Markus Schirp
Markus Schirp

The first question is about Mutant. What’s the main things about it? What your speech will be about, at Ruby Russia?

I will present the backstory of the Mutation Testing tool Mutant. The idea is to make the audience familiar with the key concepts of this tool. The audience will be made aware about the different levels of coverage, their meaning and value.

It will shed some light on some areas of the Ruby language which people are typically content with but shouldn't. Because Ruby language is often basically a fancy way to shoot yourself in the foot.

What’s the story of development of Mutant?

It’s actually myself getting hooked up on a project called DataMapper, and its next iteration DataMapper 2 that later turned into ROM. The project lead Dan Kubb to write a Relational Algebra library called axiom to back these new developments. And he wrote this axiom library with a strategy he calls ‘Developing with Constraints’. Featuring lots of metric tools and Mutation Testing.

The mutation testing tool of that time, was called Heckle and had various operational and conceptual flaws. At one specific moment I was like “Skrew it, I will not even attempt to fix Heckle. Let’s just write a new one and address all the Mutation Testing scaling problems we have in DataMapper 2”

This was 5 or 6 years ago, mutant went through several iterations meanwhile. All of these iterations where not driven by my own desire to write open source but by need of commercial projects I was contracting to. So the development of mutant is driven by my consulting activities.

Each time I go into a new Ruby project, I feel a need to be sure about a specific piece of code. And Mutant is the tool I use for this.

So, commercial clients want to use Mutant?

Yes, a sign of this is that all the features you see are the common features commercial clients requested over the last years. There are some features that are not in the public version, because the client did not give me the right to put them into the open source. But sometimes client says: “No problem if someone will benefit from this” which I really like.

At the moment I’ve left DataMapper 2 I’ve never wrote a feature just for fun. Just side effects of the commercial use.

I personally feel no big “love” for Ruby language, it’s just a tool for me. Mutant is a way to make Ruby more efficient. Mutant is hard to get start with but then it helps you a lot. This learning curve is something to address.

It’s totally OK. When you use a free gem...haha!

95% of free gems are just a hobby side projects. They are not ready for commercial use. The authors make them out of their personal interest. And I do not blame them for this.

I advise development teams in a commercial background to be aware of this property when pulling stuff from RubyGems.

I’ve only read the README file of Mutant at GitHub. But I really don’t understand what I should do.

That’s the reason I have to spend some time writing the readme or spend some time writing a more entry level documentation.

I was silent in the community for like 3 years for private reasons. I got two more kids and I moved to a different country.

Ruby Russia is the first time I’ve accepted an opportunity to speak again. I want to use the time I spend on preparing the talk and the worksop as material source for more documentation.

You will start to prepare it now, right?   

I’ve started, but I’ve started backwards. I did not start with the slides, instead I’ve created the workshop material. Working myself backwards to the slides.

The idea is to have the workshop based on a real world example taken from an open source project that uses rails and rspec.

As far as I understand, you’re using another programming language instead of Ruby.

That’s not really true. I use Ruby a lot but only if there is a commercial reason to do so. And this reason typically only exists when rescuing legacy applications that are about to collapse under their own code weight.

In such a scenario one cannot go in and simply replace Ruby in one big step. Incremental refactoring / strangling of the Ruby code is my main work. And during this process I have my hands at Ruby a lot, and here Mutant is my main tool to anchor refactoring / change cycles.

What languages do you prefer also?

Mostly Haskell. To me currently it’s at the optimum equilibrium between production usability and work to achieve a correct program that has business value.

The Haskell Type checker can guarantee many properties already, properties I’d have to fight for hard in Ruby.

There are also some great other languages, or language extensions upcoming. Dependent types will push “correctness after passing the type checker” to the next level.

Do you think Ruby and Rails have future?

Ruby and Rails have a perceived low entry bar helps people to get to the point of having a business. As long as people think Ruby and Rails have this property there is a future.

So, a little heretic statement but Rails deterministically produces applications which cannot grow anymore because of inherent complexity, language and framework choices. But its okay to buy into that tech debt if you have a business reason to do so. Just have a payment plan ready.

Yes, sure. What do you think about Rust?

Conceptually, I really like it. But I have not use it a lot right now. I had no real reason as the projects I’m on could not play out its strength, compared to other choices I had.

I’m doing backend development mostly. Or let’s name it “mass RPC with domain logic”. Here it’s more important I can guarantee a specific program is correct and secondarily efficient. Rust is computationally very efficient, but to be efficient it requires to manage more low level details by hand. This takes time I better spend on optimizing the high level IO pattern (grouping RPCs, minimizing round trips etc, verifying transactional properties, ...) before I optimize the individual primitive via a language that gives me tight control to do so.

If I were on a more computation heavy subject, like a video codec: Rust would be the tool I choose.

And the last question. What can you advise for a newbie programmers?

As a new programmer, find a pet project and align this pet project with non programming interest of yours to keep engaged for a long enough till learning programming has a positive return of investment.

Very interesting! And maybe it's working, haha!

Haha, yes, that’s how I got started.

Great advice! Thank you for the interview! Will see you at Ruby Russia.

Meet Markus and ask a question in person at Ruby Russia 2018!

Questions were asked by Mikhail Morgunov, developer from Evrone.

Charles Nutter. How to move your Ruby project to JRuby and why

Charles Nutter works on JRuby and JVM language support at Red Hat.
03 October 2018   565

— How did you get into programming and into Ruby world?

— In 2004, I was working at a government contracting firm as a Java Enterprise Architect. I was in charge of a large mainframe conversion for the United States Department of Agriculture, which meant I spent a couple weeks a month in the Washington D.C. area. One of those trips coincided with RubyConf 2004, and since a close friend had been recommending I look at Ruby, I decided to attend. So there I was sitting in a Ruby conference without ever having learned Ruby...and I understood every piece of code, every example. I was amazed and vowed to find a way to bring Ruby into my Java world.

— Which projects are you working on now?

— My primary role is as co-lead of JRuby. This also means supporting several side projects like our native-library backend (Ruby's FFI library is maintained by us using this backend on JRuby) and our String encoding subsystem (an elaborate port of the logic from CRuby). I also do much of the outreach to the community and try to make sure our users are getting their issues addressed. There's always plenty to work on!

— Which one would have the biggest general impact from you opinion?

— I like to think that JRuby, while not the most popular JVM language, has at least helped to change the JVM platform. Because of our collaborations with Sun Microsystems, Oracle, and others, we have solid dynamic language support at the JVM level along with many other projects to support alternative languages. The JVM today is a much more hospitable home for non-Java languages than it used to be, and I hope we've played some small part in that change.

— Which languages are you writing on in your everyday life? Which one do you like most? Why?

— Most days I write in a mix of Ruby and Java, since JRuby is implemented using both. I like both languages for different tasks. Ruby is a better language for building applications that need to evolve and adapt quickly. Java is a great language for writing high-speed, reliable libraries and services. JRuby gives you the best of both worlds!

— Do you like to program in Java?

— I do, especially with all the language improvements that have been added recently, like lambdas (closures or blocks in Ruby) and the new "var" syntax for declaring local variables when the static type is unambiguous.

— What do you think about Rust?

— Rust is a great language! I did a lot of C++ development in my college years, and I can tell you right now if I'd had Rust available then I would have used it. I'm especially jealous of the static-typed ownership model, which helps avoid thread-safety issues like races and data corruption. I hope to see other languages adopt this pattern in the future.

— What do you think about the Ruby language perspective? Is it or its community dying?

— After all these years working on JRuby, I do still love Ruby syntax and the Ruby way of doing things. However I worry that the language is held back too much by limitations of its primary runtime. JRuby has been fighting to make true parallel threading a reality for Ruby developers, but still today the vast majority of Ruby services are run using multiple isolated processes, wasting tremendous amounts of CPU and memory resources. I believe this is due to the C API for writing Ruby extensions being so large and so invasive...it prevents many improvements -- including parallel threading -- from being developed. Hopefully we'll see this change some day.

— Which upcoming or not well-known features of Ruby language would rush in future?

— I look forward to strings becoming immutable-by-default, as they are in most other languages. Parallel programming would be much simpler if more of Ruby's objects supported pure-immutable or "deep freeze" semantics. It's a bit like the Rust ownership model...if you're going to be sharing an object across threads, choose the version of that object that you know can't be modified anymore. This extends to arrays, hashes, and just about every other mutable object in Ruby: we need to make it easier to lock down mutable data.

— Could you give me an advice on how to move my ancient monolithic project to JRuby? And should I?

— The first question really is whether such a move would benefit you. There's many good reasons to consider a move to JRuby:

  • Reducing CPU  and memory costs in a shared hosting environment by utilizing JRuby's true parallel threading
  • Deploying a Ruby application into a JVM-heavy environment, such as used by larger financial or government organizations
  • Needing access to libraries that only exist on the JVM, or that are more portable or scalable on the JVM than their Ruby or C equivalents
  • Getting a little performance boost out of CPU-heavy or concurrency-heavy applications.

— I would say if your application is scaling well and not costing you too much today, perhaps you don't need to make a move. But if you decide you need more out of Ruby, here's the process for migrating:

  • Do a clean bundle of your application, paying special attention to C extensions you may be using. You can also do this bundling *on* JRuby, and then deal with missing or unsupported libraries one by one.
  • For each extension, search for a JRuby equivalent. We have some pages on the JRuby wiki to help with this. Most popular libraries have JRuby versions. If no JRuby version exists, you may look for a pure-Ruby version (it might be fast enough on JRuby) or a JVM library (in Java or Scala or Clojure or whatever) that could be used as a replacement.
  • Once your bundle completes, you should have a working JRuby application! We've worked very hard on compatibility, and try to be responsive if users find new issues, but a successfully-bundled application is expected to work.

The steps beyond this involve deciding how to take advantage of your newfound power: how many threads to throw at a given server, what you're going to do with all the money you're saving, etc.

— What should nowadays students learn to become good programmers?

— When I was at university, my earliest computer science courses used the Scheme language, a Lisp-like functional language that's great for teaching the fundamentals of programming. I still recommend that serious new programmers work through at least some of the Structure and Interpretation of Computer Programs book from MIT. Beyond that, I'd say learn as many different and unusual languages as you can; they'll all give you new ideas and new ways to look at programming problems.

— How do you keep yourself motivated for programming? Have you ever been "burned-out"?

— Burn-out is a real problem in our industry, and working in open source brings with it huge amount of stress. We've all felt that way sometimes...too much work to do and not enough time to do it, missing out on time with family and friends, ignoring our own health so we can fix one more bug. These days I try to center myself by keeping up with hobbies: playing video and board games, learning to play guitar, studying foreign languages, and traveling around the world to meet new friends. There's always this nagging workaholic telling me to get back on the job, but I'm learning how to maintain the right balance.

— What do you think about Russia and what do you expect of the upcoming RubyRussia event?

— I love Russia, and my speaking trips the past few years have been some of the most rewarding of my life. This will be my fourth visit, having been to Saint-Petersburg, Moscow, and Novosibirsk (!!!) previously. I'm looking forward to returning to Moscow and meeting the RubyRussia community I've heard so much about!

Questions by Dmitry Matveyev PM at Evrone https://www.facebook.com/matveyev.d