mrb : home

A List of Lists: NYC.rb 2013.03.12

I had the pleasure of giving a small talk to a great crowd of developers at NYC.rb recently. It's different than the typical meetup talk - instead of the group's topic, I talked about some things I was excited about at the time. I decided to turn the meager 'slides' that I had into a blog post - I hope you learn about something you'll enjoy!

List One: Three Books You Should Read

Books are my favorite things. I am constantly pursuing them, acquiring them, and digesting them, and I always want more. I love getting people excited about books that I'm immersed in, and in this case I chose three titles that might be attractive to programmers. The headings for each title are terms I used on the slides to give the main 'thrust' behind each recommendation.

Rethink Everything

Concepts, Techniques, and Models of Computer Programming by Van Roy and Haridi

I've already written about how important I feel Van Roy and Haridi's work is on this blog. I chose "Rethink Everything" because it's clear that existing developers can learn quite a bit from reading this book - in addition to supplying new information, it helps you understand things you already know in a deeper and broader way. Van Roy and Haridi push you to investigate the complex relationships between various programming paradigms and is truly enlightening.

Click here for more information.

Revisit Ruby's Roots

Functional Programming for the Object-Oriented Programmer by Brian Marick

Recently a group of developers at Paperless Post have been going through this book as part of an internal book club. It's been awesome to see how both new day to day Object Oriented programmers and those with deeper OO roots react to solving problems in a functional way. It made me think that the group at NYC.rb would enjoy it too. "Revisit Ruby's Roots" is a call to think about using Ruby functionally and to understand the deeper ideas behind powerful data structures with expressive interfaces. This book, like CTM and The Art of the Metaobject Protocol before it, does a lot to draw connections between Functional and Object Oriented programming.

Click here for more information.

Get Under The Hood

The Garbage Collection Handbook by Jones, Hosking, & Moss

If you want to know Ruby deeply, to "Get Under The Hood," you have to try to understand its Garbage Collector. If you want to understand Garbage Collection, you have to read this book. The amount of research that has been done into this area of Computer Science is staggering, and there are still advancements being made - some which blur the line between hardware and software. Jones, Hosking, and Moss explain an extremely complex area of study in a straightforward, digestible way. You don't need to read the whole thing, but the first few chapters alone are worth it.

Click here for more information.

List Two: Ten Minimalist Albums You Should Program To

A broad, flexible term to refer to a lot of different kinds of music, 'minimalism' is not a single genre. Minimalism is an underlying philosophy in the composition, performance, and structure of music and sound, and it typically has a few specific characteristics, including repetition in structure, compositions with extended durations, and effects to warp time. I've chosen ten albums I think people would enjoy, and assigned each a tongue-in-cheek 'occasion' that might go well with the suggested recording. Where possible I've provided a YouTube link to the music, but of course, any albums still in print are worth purchasing.

The Feature Push - Charlemagne Palestine "Strumming Music"

You need to get that code out the door. You can't wait to :shipit:. Might I suggest 52 minutes of alternately dissonant and melodic pulsing frantic piano playing? I might.

Click Here for the music on YouTube.

The Careful Refactor - Aphex Twin "Selected Ambient Works Vol. 2"

The dark art of the code refactor requires the calming, warm embrace of analogue techno music. In this case, there is no one I would rather hug than Richard D. James.

Click Here for the music on YouTube.

Architectural Decisions - Steve Reich "Music for 18 Musicians"

You can't believe your luck. You're going to fucking design something. Holy shit. You better take some Steve Reich with you, you'd be lost without it.

Click here for the music on YouTube.

The Picky Algorithm - Hermann Nitsch "Harmoniumwerk"

Nothing says "don't interrupt me" like the sound of an Austrian conceptual artist (known for painting with animal blood and holding live bacchanals) leaning on a harmonium for an hour.

Click here for the music on YouTube.

Cross Browser Testing - Oval "Systemisch"

Times are tough. Embrace the glitch. Cross Browser Testing just isn't the same without gorgeous landscapes created from the sounds of failing technology.

Click here for the music on YouTube.

Monday Hangover - Basic Channel "Quadrant Dub"

When you need to get back on your feet, some atmospheric, abstract dub flavored techno music really helps. Get your head straight, get some fluids in you, and you'll be fine.

Click here for the music on YouTube.

Greenfield Rails Application - Terry Riley "Persian Surgery Dervishes"

Your life is full of promise. A gorgeous river of organ drenched in tape delay awaits you as your journey starts.

Click here for the music on YouTube.

Code Review - Jon Gibson "Two Solo Pieces"

I have to admit that the "Code Review" header on this one makes no sense, but really you should check this album out - it was published by Philip Glass's Chatham Square label and it's beautiful.

Click here for the music on YouTube.

SOAP/XML Legacy System Integration - Laraaji & Brian Eno "Day of Radiance"

The name of the beast that shall not be spoken. "Day of Radiance" can effuse joy into even the most dire of occasions. Recommended for any time you have to do that one thing you just can't stand doing.

Click here for the music on YouTube.

Hack Day - Jim O'Rourke "Happy Days"

Beautiful, inventive, and inspiring even after more than 15 years. Acoustic guitar gives way to an immense drone that could definitely clean your nugget well enough to make your wildest dreams a reality.

Click here for the music on YouTube.

List Three: Five Projects You Should Check Out

GitHub's volume of code is growing at an incredible rate, and keeping up is impossible. I thought I'd choose some projects I've been interested in lately in my personal pursuits, plus some practical choices for Ruby developers.

pattern-match - Pattern Matching in Ruby

Pattern Matching is a functional programming syntax construct that allows for complex assignment and conditional semantics to be expressed in a compact way.* It's not a native feature of Ruby like it is for Erlang, Haskell, etc., and this library has an interesting take on introducing it to the language.

*Note: Pattern Matching is complex. This sentence is my shot at explaining it briefly. Wikipedia says it's "the act of checking a perceived sequence of tokens for the presence of the constituents of some pattern."

Click here to check out the repo.

miniKanren.rb - Relational Programming Engine

miniKanren is a "embedded DSL for logic programming," that is very interesting and fun to play around with. I've done some work to clean up this Ruby port, in hopes of getting more Ruby developers interested in Relational Programming.

Click here to check out the repo.

damp.qwalkeko - Code History Queries for Java

In an effort to expose the good habits of one programming sub-community to others, I thought I'd talk to the Ruby developers about the tools that Java developers are working on to make understanding their code easier. This project, still being developed, allows for a query language to be used to ask deep questions about your code base that take into account how your code has changed over time - it accesses your Git repository. A query to ask "show me when I changed method x" or "show me all of the times I've pulled a method up from a subclass into superclass" are possible. It's very interesting to think what it could do for developers in other languages as well.

Click here to check out the repo.

TCS Ruby - A Performance Oriented Ruby Fork

Some very interesting work has been going on in this fork of Ruby which I stumbled across last year. I know of a few different Ruby shops that are experimenting with it, and it's very promising. It's a good reminder that Ruby is just C code - that you can understand it if you try, and that changing it is a good thing.

Click here to check out the repo.

rblineprof - Next Gen Ruby Performance Tool

Aman Gupta at GitHub is working on some performance tools again (lucky us!) and this line profiler for Ruby is especially cool. I recommend making this kind of profiling available on your site - there are some clever ways to allow you to profile any route that you want in your app (e.g. for a logged in admin, if they pass a specific secure param, generate the profile page) - line profilers are extremely helpful for tracking down performance issues.

Click here to check out the repo.

That's all I got! Thanks for checking out my lists.