#
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!
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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 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.
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.
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.
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.