Essays on engineering, leadership, Ruby, and systems thinking.
A tornado flattened my town in 2011. What I learned that night still shapes how I show up to work today.
Content Warning: Death of a Ruby community member I woke up this morning to receive the news, among...
Perhaps my personal favorite recommendation for learning to program Ruby like a Rubyist, Eloquent...
What is diligence? What does it mean to be diligent? It's a subject I've been reflecting on a good...
Introduction Memoization is a common technique in Ruby, but alas it's one with a few...
After a number of conversations over the past few years with several other engineers who have moved...
At the end of RailsConf this year Jonan and Ruby Central launched the Ruby Central Membership Program...
Defining a standard for implementing pattern matching interfaces in Ruby, originally from the 2021...
Content Warning: Death of a Ruby community member We have lost a great man in the Ruby community in...
Victor Shepelev (Zverok) has just landed an extremely useful feature in Ruby, Data.define. You can...
On Promotions Ah yes, that time of year has come again, and with it come some of the most...
To understand recursion, you must first understand recursion. Cute, but perhaps not the most useful...
Most of my writing on autism tends to pertain to software engineering in some regard, and while I...
In the last article I was not being quite honest when I said that regex would not work when trying to...
Have you ever wanted to edit Ruby code programmatically? Perhaps change one bit of text to another,...
I had alluded to this post a bit earlier on Twitter, and in the Ruby bug tracker, but wanted to more...
dry-rb is a fascinating set of tools and libraries, but their usage may not be readily apparent. Why...
Javascript comes with this lovely little spec called Fantasy Land that defines certain type classes...
For those who don't know me, I'm autistic. I've been a developer for the better part of a decade. I...
This is a series meant to explore the potential future of the Ruby programming language by visiting...
It's the time of year again, and with it comes a bundle of new Ruby 3.1 features getting approved and...
Ruby is, by nature, an Object Oriented language. It also takes a lot of hints from Functional...
Introduction For those coming from other languages with for loops the concept of each,...
Polished Ruby Programming is a recent release by Jeremy Evans, a well known Rubyist working on the...
Interviewing in tech is hard, especially when you're just getting started. Years ago when I was getti...
Introduction Enumerable. Debatably one of, if not the, most powerful features in Ruby. As...
Introduction Before we get into larger modules like Enumerable there are some very interes...
Introduction We've just covered the idea of Block Functions, Proc Functions, and Lambda Fu...
Introduction This is the start of a series on Ruby Pattern Matching, the goal of which is...
Introduction Ruby is a language that uses multiple paradigms of programming, most usually...
Introduction Triple Equals (===) in Ruby is one of the most powerful features in the entir...
Introduction Recently I've released a new gem, Matchable, which introduces class-level mac...
Pattern Matching in Ruby 2.7 and 3.0 can be an odd concept to read about, and an even stranger one to know how to use. This is another use case, this time to solve a Tic-Tac-Toe game
Pattern Matching in Ruby 2.7 and 3.0 can be an odd concept to read about, and an even stranger one to know how to use. This is a detailed example of a more complicated use-case of pattern matching to solve for scoring poker hands
With the advent of Ractor and Fibers we've hit the limits of mutable types. We're going to need some new patterns, and with that comes some interesting observations on the nature of parallel structures.
An exploration into Ruby 2.7 and 3.0 features applied to Advent of Code Problems
A few months ago I'd announced my promotion, and in some of the replies I was asked what exactly I did to get to this point. This post covers my evolution at Square and how I've gotten to this point, as well as what I plan to do from here.
Autism can lead to obsession, and it isn't unusual that this evolves into expertise after enough practice, but how can this be leveraged effectively at work?
In our series on new Ruby 3.0 features we continue with the new Set literal syntax.
People on the spectrum have a lot to share, but sometimes that sharing becomes a rapid information dump rather than something understandable by anyone else. How can someone on the spectrum mentor effectively, given this? These are a few of my strategies.
In our series on new Ruby 3.0 features we start with the anonymous Struct, ${}.
Along the theme of exploring FP concepts and interesting ideas we're taking another look at monoids in a specific sense: with clocks!
What does it take to become a Senior developer if you're on the spectrum? What does it look like once you're there? This is but one experience among many, but perhaps one that can help.
A new twist on a classic holiday poem with cartoon lemurs and fun to match
There exist some deeper magics and patterns in Ruby, this series will take a look at ideas from FP and how they can be applied.
There's a myth that autistic people behave poorly, and that it's excusable because they're autistic. That's far from the truth.
What does it mean to be successful? Turns out that's complicated.
How various forms of method decoration work in Ruby
So you've seen map, filter, reduce, and other functions, but how do they work behind the scenes? Let's take a look
How my illustrated talk, "Tales of the Ruby Grimoire", was created.
Dark tales of Ruby magics from beyond what any sane Rubyist would teach in a book of legends, opened by a particularly curious young lemur named Red.
With the recent debate over the 10x engineer, I see people like myself destroyed in pursuit of the myth. The danger is real, inhibitions are low, and many will burn out in the process.
Lessons I wish I had learned when I was a new and Junior developer years ago, in the hopes that they'll help others avoid some of the same mistakes.
Stripe just released a new Ruby Static Typing library named Sorbet, let's take a look into it
A pipeline operator has been added to Ruby, but not quite the one we'd expected
Ruby 2.7 — Pattern Matching — Destructuring on Point Now that pattern matching has hit...
Ruby 2.7 — Pattern Matching — First Impressions Shall we grab a sneak peak at what Pattern...
Ruby 2.7 — Numbered Parameters Ruby 2.7 is coming out this December, as with all modern...
A comprehensive guide to every TracePoint event in Ruby — line, class, call, return, raise, block, thread, and fiber events with practical examples.
Ruby 2.7 — Enumerable#tally Christmas has come and passed, 2.6 has been released, and now...
An introduction to TracePoint in Ruby — what it does, how it works, and practical examples of tracing code execution.
A look back at 2018 — conference talks, open source projects, articles written, and adventures had.
Benchmarking different approaches to implementing select with reduce — push, shovel, and pure plus.
Thoughts on on-call culture, operations during the holidays, and building sustainable practices for engineering teams.
Tips for pasting multi-line code into Pry, including using edit and pbpaste on Mac.
Taking operator abuse further with method_missing and custom proc coercion to build expressive DSLs.
Exploring Ruby 2.6 Proc#compose for function composition and Enumerator#chain for lazy enumeration.
Abusing Ruby's proc coercion and operator precedence to create expressive functional combinators.
A recap of favorite talks from RubyConf 2018, including Reducing Enumerable and other highlights.
Part five of Reducing Enumerable — Cerulean teaches Red how to implement tally_by using reduce.
Part four of Reducing Enumerable — Violet teaches Red how to implement find using reduce.
The finale of Reducing Enumerable — Scarlet reveals the true nature of reduce and Red's journey comes full circle.
Part three of Reducing Enumerable — Indigo teaches Red how to implement select using reduce.
Part two of Reducing Enumerable — Chartreuse teaches Red the secrets of implementing map with reduce.
Exploring new Enumerable and Enumerator features in Ruby 2.6, including to_h with blocks and Enumerator chaining.
The personal story behind the lemur illustrations — autism, mentorship, and how a group of lemurs became a symbol of hope.
Implementing destructuring in Ruby using blocks, allowing methods to accept both keyword arguments and objects.
Reading through Eloquent Ruby Chapter 2 — choosing the right control structure, with modern Ruby updates.
Reading through Eloquent Ruby Chapter 1 — writing code that looks like Ruby, with notes on what has changed since 2011.
An introduction to transducers in Ruby — composable algorithmic transformations decoupled from their input sources.
Behind the scenes of creating a fully illustrated conference talk about reduce for Southeast Ruby 2018.
A developer challenge to build a table of contents generator from HTML headers, with multiple solution approaches.
Representing Tak board game moves as functional transformations in JavaScript.
Understanding closures in Ruby — how functions can capture and remember their surrounding context.
Functional approaches to flow control in Ruby, moving beyond exceptions to monadic error handling.
Using eval to dynamically compile Qo pattern matches into native Ruby for near-vanilla performance.
Part two of the Xf series, exploring Traces for recursively searching and transforming values in deep hashes.
Introducing Xf, a Ruby gem for transforming deep hashes using functional scopes inspired by Haskell lenses.
A playful taxonomy of developer archetypes represented by different colored lemurs and their programming philosophies.
The story behind creating Qo, a Ruby gem that brings pattern matching and fluent querying using triple equals.
Exploring a Ruby proposal to add triple-equals predicate methods to Enumerable for more expressive filtering.
Implementing sorting and stateful Enumerable functions using reduce, including quick sort and group_by.
Exploring the lesser-known features of Hash constructors in Ruby, from default values to block-based initialization.
Continuing the reduce series with no-op and boolean Enumerable functions implemented in terms of reduce.
Every Enumerable method can be implemented with reduce. A beginner-friendly introduction to this powerful concept.
A deep dive into Ruby's triple equals operator and the surprising things you can do with it.