Code Fugue

software development blog of calvin bottoms

  • Music Update

    Hey, I’m trying to step away from social media, which has reminded me that I have this blog. My musical life has picked up a bit in the last couple of years, and I thought I would throw out an update here just for fun.

    more...
  • OH: Confessions of a Tweet Thief

    Most of my developer friends who have achieved any amount of public recognition or notoriety have reported experiencing some measure of impostor syndrome. They feel that they have garnered a reputation that surpasses their actual level of competence and contribution. It always brings me great comfort to hear this, because I feel the same way. Or am I just pretending so that I’ll feel more like one of them? 😉

    more...
  • Nodevember 2016

    I just got done with Nodevember 2016, where I saw some great talks, caught up with some old friends, and made some new ones. I also had a fun time hanging out in person with some of my LeanKit co-workers who work remotely, and I work with the greatest people in the world, so that’s always wonderful. I had the privilege of presenting a new talk I called “Arts and Sciences: Programming Music on the Web.” I had a fabulous crowd who were so onboard and engaged, and they made it so much fun! If you were there, thank you for making it such a blast!

    more...
  • F-Words Slides

    Thanks to everyone who came to my "F-Words" talk on functional programming terms at CoderFaire Tennessee. Here are the slides.

    more...
  • Partial Application vs. Currying

    Is the entire world of aspiring functional programmers generally confused about partial function application and currying, or is it just me? I like to feel well-informed when I think to myself that these two are not the same thing, but I still couldn’t tell you what the difference is. To me they are like Bill and Ted on their Excellent Adventure; I know them when I see them, but I don’t know which is which. I have just decided it is time to dive in and get this straight. So here we go.

    more...
  • Magic Not in the Monad

    I am recently coming to grips with a foundational misconception I have been entertaining about monads, possibly since I first heard the term. I am not a category theorist, and I first encountered monads in the context of functional programming. For me the monad has always been shrouded in mystery and sporting a reputation of being very difficult to understand.

    more...
  • Rebuilding Haskell in C#: Functors

    Look out; I’ve been digging into Haskell again. I enjoy learning about Haskell, but more than that, I enjoy learning to think in a functional way. Haskell is a particularly good language to facilitate that, as it is arguably the most functional of functional languages. It boasts “pure” functionality, and while some might believe that means it is of no practical use, I think it makes it pretty cool.

    more...
  • Polyglot Survival Guide: Erlang, Haskell, F#, and Elixir

    Lately I have been bouncing back and forth between Erlang and Haskell, two profoundly significant functional languages that I find both very different and very similar. They are very different in their philosophies and thought patterns, particularly around data types, but both being non-LISPy functional languages, they have enough similarities that I sometimes having trouble keeping them straight when I am coding. So I have started a simple list here cataloging some of their differences side by side. I imagine I will continue to add to it over time. Please comment to let me know what other features or constructs you might like to see added here.

    more...
  • Elixir: Language Love Child?

    Different programming languages, like different people, have their strengths and weaknesses. Some are simple; some are complex. Some are friendly to the programmer; some are friendly to the processor. Some cater to brilliant minds; some cater to other minds. I have spent a significant portion of my development career writing code in C#, which is accurately described as a general purpose language. It aims to be able to do most anything, rather than to be the best at any one particular thing.

    more...
  • Moops! Haskell, IO, and the Bubble Boy

    I recently set out to get Haskell connected to a PostgreSQL database. The task ended up having almost nothing to do with PostgreSQL and everything to do with Haskell’s militant stance on functional purity. I chose to use HDBC since it appeared to be the most vanilla approach. Before I even got to the point of trying to open a database connection, I was confronted with a philosophical conundrum not too different from the sound of one hand clapping.

    more...
  • Anatomy of a One-Liner: FizzBuzz in Haskell

    In the NashFP group, a gang of functionally inclined Nashville area geeks recently organized by Bryan Hunter, we decided to share implementations of the classic FizzBuzz problem in various functional languages. I took my first shot in Scheme and then decided it was time to dust off my Haskell. On my first attempt I waded through the syntax enough to get something working, but it included several named functions and was clearly more code than was necessary to solve the problem. As I began to look for ways to shorten it, I remembered that a year or two ago Bryan had written a FizzBuzz implementation in Erlang that was short enough to tweet. Obviously this became my new goal.

    more...
  • Roman Numerals Kata in Ruby, Take II

    Last week I posted a screencast of my take on the Roman Numerals kata in Ruby. It was Corey Haines who encouraged me to do that, and he was gracious enough to take the time to watch it and offer some suggestions. We both thought it might be interesting if I did another iteration of it and discussed the changes. His two main concerns were that (1) it would have been nice to see the pattern extracted sooner and (2) there must be a way to introduce the zero case without blowing up all the tests.

    more...
  • Geek Ballet: Roman Numerals Kata in Ruby

    For a while now I’ve been a fan of code kata screencasts set to music. The musical accompaniment accentuates how beautiful code can be, and frames it to be appreciated as an artistic endeavor, even though it is still a logical exercise. I think of it as geek ballet. Corey Haines first introduced me to this art form, and he recently encouraged me to try one of my own, so here it is. It was more work than I expected, but it was good fun, and I learned a lot. In the same way that writing about any subject forces you to understand it better, demonstrating how to practice forces you to practice more.

    more...
  • Set-Based Operations: They're Not Just For Databases

    What do you think of when you hear the term set-based operations? I have always thought of that as a database concept. Set-based operations address or operate on multiple data elements, seemingly in parallel, as opposed to iterating through and executing operations one by one. I was introduced to this concept in the context of SQL in relational databases, and it was a struggle at first. My brain was more naturally predisposed to think in terms of iterating over a list, doing one thing at a time.

    more...
  • Problems Already Solved

    Somewhere I recently heard someone say something like, “Programming is easy; all the interesting problems have already been solved by mathematics.” I was a bit taken aback by this at first, but it got me thinking about what problems I am solving when I write code. When I’m programming, am I more often addressing a real-world problem, or some kind of software problem? How much of my code is spent on converting, transforming, serializing, deserializing, logging, formatting, validating, and error handling? Usually too much to be very interesting. It’s all plumbing, but what I really want is water.

    more...
  • Compassion-Driven Development

    I have been developing software for a pretty long time now. I have worked on a lot of systems in a lot of different environments. In several of these places my orientation process included a visit to the place where the end users were, a call center or client site or whatever, to see what they did and how they used the system. Oddly enough, this usually happened once when I first started, but pretty much never again.

    more...
  • Underwater

    Remember on Fear Factor when they used have people go underwater and pick a lock or solve a Rubik’s cube or eat some disgusting animal part? Did you ever think about how you would approach that challenge? I always think about these things. I don’t know why, because I will never be on one of those shows, but if I were, I would have thoroughly considered my approach.

    more...
  • On Software and Music - In With the Old

    As one of the many software developers who are also musicians, I have always been fascinated by the frequent bundling of the gifts and passions for these two endeavors and what they have in common. I have always said that writing code and writing music feel a lot like the same process to me, like they’re using the same parts of the brain. Music and code are certainly similar in many ways. Both need structure and coherence. Each work must be unique in some way, or it is meaningless. Both must follow some set of rules. What set of rules to follow is a creative choice. Sometimes you can even make up your own rules, but failure to follow them will pose a threat to the cohesion of the work. Once the rules are established, you may occasionally, carefully, and mindfully, make some real magic by breaking them.

    more...
  • We Want the Func! - Moving Toward Functional Programming

    In the last year I have heard/read where Uncle Bob has been talking about discovering the twenty-six-year-old treasure of a book The Structure and Interpretation of Computer Programs. It happened enough times that I decided to check it out. The book is available free of charge here. The language used in the book is Scheme, an implementation of Lisp. I hadn’t written or read any Lisp since college, but even then I really liked it.

    more...

subscribe via RSS