1. 22 Apr 2015 Swift Makes Programming Easy!

    When Swift was announced last June, I noticed a curious reaction: Many people posted that they now planned to write a native app, since Swift made writing native apps easier. It’s a sentiment I still see expressed from time to time on programming forums, and every time it surprises me, since I have long found that it was not Objective-C that made writing iOS and OS X programs “difficult”; rather, the complexity of writing applications for those platforms lies in the platform itself. After spending ten months working with Swift and writing a book, it seems like a reasonable time to express my thoughts on the subject: Does Swift making programming easier? 

  2. 3 Feb 2015 Tabs vs. Spaces: A Treatise

    The programming world is full of epic battles. Mac vs. PC. iOS vs. Android. Vim vs. Emacs. One of my favorites is the epic battle concerning source code file indentation: tabs vs. spaces. It’s one of my favorites not only because it seems to be one that evokes the greatest passions, but because I started out firmly on one side but switched over, and in doing so, developed what I find to be a well-reasoned argument for my decision. 

  3. 15 Jul 2014 Thoughts on Swift

    I was invited to give an informal talk about Swift at ThoughtWorks by my friend Kyle yesterday. As a functional programming aficionado, I wanted to give a high-level, executive summary of some of the functional programming features found in Swift. Historically, OS X and iOS development has been done in a very object-oriented style, but I think Swift offers some exciting avenues for taking a more functional approach to OS X and iOS development. My talk was titled “Functional Programming in Swift”, and I was lucky enough to have a receptive audience to my attempts at persuasive speaking. I’m also writing a book on Swift for Wiley, so it was great to take some of my material for a test run. 

  4. 29 May 2014 Modeling States and Transitions in Relational Databases

    One common problem in software development is how to model states and the transitions between them in a database—essentially, to persist a finite state machine. The quintessential examples of this problem are version control systems, which save the state of files over time, allowing users to examine the exact state of those files at any given point in their history. We can think of the contents of files at various points in time as states, and the edits that were made to those files as the state transitions

  5. 25 May 2014 Clojure: A Retrospective

    Going into college, I (sort of) knew exactly one language: VBScript. Four years later, with a shiny BA in Comp Sci in hand, I had added five to my repertoire: Java, C, Objective-C, Python, and Ruby. A year out of college, I’d added another, Scala; I knew Erlang and Haskell well enough to muddle my way through a codebase. But then a funny thing happened: I stopped learning new languages. Since 2009, I’ve learned none.