Daniel Spiewak
Who is Daniel Spiewak?
Vell, Daniel’s just zis guy, you know?
Less vaguely, I’m a software developer at Novell. I’m working specifically on Novell Pulse, which is a real-time collaborative framework based on Lift (yes, I am working on an app which uses Scala in production). I enjoy writing, talking to my sister and beach volley ball (not necessarily in that order).
Scala vs Clojure?
That’s a hard question to answer when posed in isolation like that. Personally, I love Scala. I use it for all of my personal projects and research work, but I won’t pretend that it doesn’t have its flaws. For example, it’s a functional language on paper, but I don’t think it goes far enough in pushing immutability and functional idioms (e.g. I would have preferred the original := operator for assignment, rather than overloading =). Scala is also a bit lacking in the way of next generation concurrency frameworks (such as STM).
These are both areas in which Clojure excels. Clojure is purely-functional except in areas which involve concurrency control (such as agents or STM). Clojure also has a wide range of very powerful concurrency control mechanisms. It doesn’t support actors (out of the box), but I think that agents more than make up for this deficiency. As a Lisp, Clojure is far more concise than Scala (except when working with partially-applied functions and currying). Its syntax is also much simpler and a bit more orthogonal. However, that simplicity comes at the cost of a somewhat unconventional feel. Most developers are quite intimidated by Lisp in all its parenthetical glory. When I talk to people about Clojure, the discussion almost always finds its way to this point.
One very important point is that Scala is much closer to Java than Clojure is. As a result, Scala’s interop with Java is almost completely seamless. It’s not that Scala has a solid bi-compatibility layer, it’s that Scala classes are exactly Java classes and vice versa. Scala APIs are (almost) always usable from within Java, and that usage is usually indistinguishable from plain old Java method calls. I cannot stress how important this kind of interoperability can be. It allows Scala to leverage the entire Java ecosystem without any “context shift” in a compatibility layer.
Clojure of course runs on the JVM, and it does have very tight integration with Java. However, that integration is very definitely a compatibility layer for all but the most trivial of applications, meaning that Clojure applications using Java APIs are immediately recognizable as such. Going from Java into Clojure is even worse, involving some rather ugly class generation and adapters. It’s doable, but no one would call it “seamless”.
Farorite Language: Ruby/Java/Scala/Clojure ….?
They all have their good points. In terms of what language I really like best on its own merits (as in, the syntax and semantics), I’m going to have to say Haskell. It’s really a beautiful, beautiful language that other language designers would do well to emulate. However, by virtue of its extreme purity, Haskell is forever confined to the wastelands of deep academia. In fact, even academics will often shun Haskell in favor of less confusing languages like SML.
For practical applications on a large scale, I like Scala. Unfortunately, due to a lack of tooling and a paucity of developers, Java is often a better fit for projects. On smaller-scale projects (particularly scripts), I always use Ruby. It’s somewhat more concise than Scala for most things (if only due to a lack of type annotations).
What does your typical day look like?
Following breakfast, I usually indulge in some of my RSS feeds and catch up on Twitter. Sometime around 9a, I log into IRC and begin my work day. Novell doesn’t have an office in Wisconsin, so I work from home, collaborating with the rest of the Pulse team in Boston, New York and Provo. Depending on what I’m working on, I may just work my way through Bugzilla. However, I often have a larger project still simmering from the previous day (or even week). I spend most of the day coding, but if I ever get stuck and need to consider the design space, the Michigan lake front is only two blocks away and makes for a very nice place to walk and ponder.
What do you do in your free time?
It varies. I’m currently finishing up a research paper on generalized LL parsing in a functional combinator framework. I’m also working on a presentation for OSCON 2010. Sometimes I pick up Okasaki’s Purely Functional Data Structures and try my hand at implementing a data structure or two. This is usually a very enlightening experience. I’ve also been known to enjoy a video game from time to time (Xbox and PC).
Current favorite apps?
iOS: Trillian, Twitter for iPhone (nee Tweetie), iBank, Last.fm, Dropbox
MacOS X: Firefox, Dropbox, Terminal, Quick Search Box, Git, Time Machine, VMware, LaTeX, JollysFastVNC
There are others, but I think these are probably at the top of the charts for now.
What OS do you prefer?
Depends on what I’m doing. In general, Mac. I really love the fact that I can break out the terminal any time and hack away with shell scripting. For much of what I do on a daily basis, the shell is vastly more efficient than any GUI could be. I’m also extremely fond of Linux. My work laptop is running Ubuntu 10.04, and my servers are running Gentoo. Linux file systems just blow Mac and Windows completely out of the water. However, Linux’s usability leaves something to be desired. I want to spend my day getting work done, not tweaking and debugging my laptop’s video drivers.
Small picture for your Workplace?
My workplace is a bit cluttered with two laptops and a desktop (not to mention a phone), so it would be a bit tricky to squeeze in a picture.
Name something that has inspired you recently?
Okasaki’s Purely Functional Data Structures. I also was immeasurably inspired by the other attendees at SLE 2009, last October. Really, really, really smart folks.
What do you prefer (and why)? Freelance work or full time employment?
Full time, no question. Freelance is fun, but it doesn’t have the same stability and the team atmosphere is very different. Also, freelance work isn’t really sustainable in the US due to our abysmal tax laws.
What are your personnel projects and goals for 2010?
Well, for one thing, I’m planning to finish up that research paper. I’d also like to speak at some more conferences this year. I greatly enjoy presenting and sharing my limited knowledge, and conferences are always great for the networking and getting to hob-knob with other developers.



Very interesting read, thank you Daniel.
Really great article.
>> Also, freelance work isn’t really sustainable in the US due to our abysmal tax laws.
Where can I read details about taxes?