2020 - current
essays
2015 - 2019
books
talks
- Optimism and the Growth Mindset from NDC Conferences
- Optimism II from DevDay
- JavaScript Combinators from DevDay
- Optimism from Nordic Ruby
- JavaScript Combinators, The Six Edition from NDC Conferences
- First-Class Commands: An unexpectedly fertile design pattern from NDC Conferences
essays
- Exploring Regular Expressions, Part II: Regular Languages and Finite-State Automata (2019)
- Exploring Regular Expressions and Finite-State Recognizers, Part I (2019)
- A Brutal Look at Balanced Parentheses, Computing Machines, and Pushdown Automata (2019)
- Ayoayo and Linear Recursion (2019)
- Structural Sharing and Copy-on-Write Semantics, Part II: Reduce-Reuse-Recycle (2019)
- Exploring Structural Sharing and Copy-on-Write Semantics, Part I (2019)
- Alice and Bobbie and Sharleen and Dyck (2018)
- Pattern Matching and Recursion (2018)
- Ruby's Hashes and Perl's Autovivification, in JavaScript (2018)
- Why Y? Deriving the Y Combinator in JavaScript (2018)
- To Grok a Mockingbird (2018)
- The Eight Queens Problem... and Raganwald's Unexpected Nostalgia (2018)
- A Trick of the Tail (2018)
- Recursion? We don't need no stinking recursion! (2018)
- More State Machine ❤️: From Reflection to Statecharts (2018)
- How I Learned to Stop Worrying and ❤️ the State Machine (2018)
- Truncatable Primes in JavaScript (2017)
- Closing Iterables is a Leaky Abstraction (2017)
- A Sequence Problem (2017)
- What's a Transducer? (2017)
- Having our cake and eating it too: "Using iterators to write highly composeable code" (2017)
- foldl, foldr, and associative order (2017)
- Turing Machines and Tooling, Part I (2017)
- The Lumberjane Song (2017)
- Time, Space, and Life As We Know It (2017)
- Why Recursive Data Structures? (2016)
- From Higher-Order Functions to Libraries And Frameworks (2016)
- Anamorphisms in JavaScript (2016)
- From Mixins to Object Composition (2016)
- Why Are Mixins Considered Harmful? (2016)
- The Hubris of Impatient Sieves of Eratosthenes (2016)
- “We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris” (2016)
- “Programs must be written for people to read, and only incidentally for machines to execute” (2016)
- First-Class Commands (the annotated presentation) (2016)
- This is not an essay about 'Traits in Javascript' (updated) (2015)
- JavaScript Mixins, Subclass Factories, and Method Advice (2015)
- super() considered hmmm-ful (2015)
- An ES6 function to compute the nth Fibonacci number (2015)
- Solving a Coding Problem with Iterators and Generators (2015)
- Getters, Setters, and Organizing Responsibility in JavaScript (2015)
- Extension Methods, Monkey-Patching, and the Bind Operator (2015)
- Method Advice in Modern JavaScript (2015)
- Method Decorators in ECMAScript 2015 (and beyond) (2015)
- Using ES.later Decorators as Mixins (2015)
- Purely Functional Composition (2015)
- Functional Mixins in ECMAScript 2015 (2015)
- Prototypes are Objects (and why that matters) (2015)
- Classes are Expressions (and why that matters) (2015)
- De Stijl: How necessary are var, let, and const? (2015)
- OOP, JavaScript, and so-called Classes (2015)
- Carnac the Magnificent (2015)
- Hilbert's Grand JavaScript School (2015 Edition) (2015)
- Left-Variadic Functions in JavaScript (2015)
- Partial Application in ECMAScript 2015 (2015)
- The Symmetry of JavaScript Functions (revised) (2015)
- (unlikely to be) The Last Word on Interviewing for a JavaScript Job (2015)
- Interviewing for a JavaScript Job (2015)
- Lazy Iterables in JavaScript (2015)
- The Quantum Electrodynamics of Functional JavaScript (2015)
- Tail Calls, Default Arguments, and Excessive Recycling in ES-6 (2015)
- Destructuring and Recursion in ES-6 (2015)
2020 - 2014
code
- HashLife in the Browser, computing qudrillions of generations of Conway’s Game of Life in a browser.
- allong.es, a library for writing ES5 in a functional style.
- oscin.es, a library for playing with combinatorial logic puzzles such as those found in To Mock a Mockingbird
books
- JavaScript Allongé (ES5)
- CoffeeScript Ristretto (pdf)
- Kestrels, Quirky Birds, and Hopeless Egocentricity
talks
- The Art of the JavaScript Metaobject Protocol: Duck Typing, Compatibility, and the Adaptor Pattern from Nordic JS.
- Javascript Combinators from NDC Conferences
- The Art of the Javascript Metaobject Protocol from NDC Conferences
- Invent the future, don’t recreate the past from Future JS
- The Not-So-Big Software Design from
wroc_love.rb
. - I have a good feeling about this - Why tooling is poised to make the jump to hyperspace from Web Rebels
- The Rebellion Imperative from Øredev
essays
- Why Why Functional Programming Matters Matters (2014)
- Fun with Named Functions in JavaScript (2014)
- 600 Months (2014)
- Chickens And Pigs (2014)
- I Can't Find Good Salespeople (2014)
- A JavaScript Constructor Problem, and Three Solutions (2014)
- Greenspunning Predicate and Multiple Dispatch in JavaScript (2014)
- Structs and ImmutableStructs (2014)
- Repost: Captain Obvious on JavaScript (2014)
- How to Trick the Gullible into Learning a New Programming Language (2014)
- JavaScript Values Algebra (2014)
- Mixins, Forwarding, and Delegation in JavaScript (2014)
- Class Hierarchies? Don't Do That! (2014)
- Future JS (2014)
- Writing OOP using OOP (2014)
- A Programmer's Story (2014)
- At home with the Bumblethwaites (2014)
- Private Methods In Ruby (2014)
- Prototypes Are Not Classes (2014)
- The New JavaScript Problem (2014)
- Type-Fu Fighting (2013)
- Defactoring (2013)
- The Predicate Module Pattern (2013)
- Leaky Greenspunned Abstractions (2013)
- I hated, hated, hated this CoffeeScript (2013)
- It's a Mad, Mad, Mad, Mad World: Scoping in CoffeeScript and JavaScript (2013)
- Yes, JavaScript is a Lisp (2013)
- Unfinished Work #1: Bind-by-Contract (2013)
- Happy Birthday To Me (2013)
- Functional's Greatest Accomplishment (2013)
- Inelegance (2013)
- config ||= config (2013)
- Did you ever take that test yourself? (2013)
- When FP? And when OOP? (2013)
- Explicit vs. Clever (2013)
- High Level Trampolining (2013)
- Trampolines in JavaScript (2013)
- My Literate CoffeeScript Blogging Workflow (2013)
- The Interview (2013)
- Zee Hackenbush Bird (2013)
- Arity and Partial Function Application (2013)
- Six Questions (2013)
- Counting Crows (diversion) (2013)
- A Surreal Encounter with a Winged Elephant (2013)
- A long time ago, in a village far, far away (2013)
- What's the difference between Currying and Partial Application? (2013)
- Two Brief Points About CoffeeScript 1.5 (2013)
- Implementing the Sieve of Eratosthenes with Functional Programming (2013)
- Hilbert's School Closed for Discriminatory Practices (2013)
- Hilbert's Grand JavaScript School (2013)
- Twenty Thirteen (2013)
- Better to leave it in the social sphere (2013)
- Solving the "Drunken Walk" problem with iterators (2013)
- The "Drunken Walk" Programming Problem (2013)
- Tortoises, Teleporting Turtles, and Iterators (CoffeeScript) (2013)
- Tortoises, Teleporting Turtles, and Iterators (JavaScript) (2013)
- Classes vs. Prototypes in JavaScript (2013)
- Practical Applications of Partial Application (2013)
- Effective JavaScript Reviewed (2013)
- Function and Method Decorators (2013)
- The Madness of King JavaScript (2013)
- More than you ever wanted to know about "this" in JavaScript, Part I (2013)
- More Combinator Recipes in JavaScript: Partial, Bound, Send and Fluent (2012)
- Combinator Recipes for Working With Objects in JavaScript (2012)
- Duck Programming (2012)
- Williams, Master of the COMEFROM (2011)
- Software's Receding Hairline (2011)
- OOP practiced backwards is "POO" (2010)
Selected older works
code
- andand, the Maybe monad in idiomatic Ruby
- JQuery Combinators, composition-oriented tooling based on combinatory logic
- You Are ‘Da Chef, aspect-oriented programming tooling for Underscore projects
- rewrite_rails, add syntactic abstractions like
andand
and String-to-Block to Rails projects without monkey-patching - ick, an ad hoc, informally-specified, bug-ridden, slow implementation of half of Monads, written in ES5
- String#to_proc, a port of the String Lambdas from Oliver Steele’s Functional Javascript library
books
talks
- Beautiful Failure from CUSEC
- Bullshit from Unspace Interactive
essays
These creative works are licensed under a Creative Commons Attribution-ShareAlike 4.0 International License except where copyright is otherwise asserted.