Take the 2-minute tour ×

Are you a functional programmer?

By that I mean

  • employed full time
  • paid by someone else
  • using a recognized functional language (Haskell, Scala, Erlang, F# etc, not just using FP techniques in an imperative language like Javascript)

If so, what do you do, and how did you get there?

share|improve this question
I'm not one, and I don't know if you'll find someone who is here, but I do know that those rare beasts exist. The generally work on finance and related areas building models, or in communications. Any area in which high degrees of parallelism are important. –  Apalala Mar 22 '11 at 1:41
@Apalala: Indeed. If you see one in the wild, take a picture –  Rob Agar Mar 22 '11 at 1:52
Nope ... I'm definitely a dysfunctional programmer. :-) –  Stephen C Mar 22 '11 at 4:19
@Rob Agar, in your list of "functional" languages only Haskell is more functional than Javascript, others have a comparable semantics and set of functional features. –  SK-logic Mar 22 '11 at 10:38
@SK-logic: To be honest, Haskell is the only functional language I have any hands on experience with. Apart from Javascript, that is :) –  Rob Agar Mar 22 '11 at 13:19
show 3 more comments

closed as not constructive by Dynamic, Mason Wheeler, Robert Harvey, gnat, Walter Jan 2 '13 at 23:00


5 Answers

I am employed full time as a functional programmer by a company that design tools that are used by quants to analyze stocks, bonds, and portfolios, and I get to work on the open source functional programming libraries that we use.

I mostly work in Scala and Haskell, but in the past I have also done paid consulting in Erlang.

How did I get here?

I abandoned college to do programming at Ford and to run a very early internet startup out of my basement back in 94. I transitioned to working at the regional internet service provider that was hosting me, doing misc. systems programming, and eventually transitioned to CTO. Along the way I became involved in the demo scene, and licensed technology to game companies.

I also spent a lot of my spare time obsessing about how to design better programming languages, but sadly I lacked knowledge of the state of the art in that area. I became heavily interested in concurrency and proving the correctness of code, unfortunately, my world-view was somewhat distorted, and I only thought of the latter through the lens of Hoare triples and separation logic.

By the time the dot-com crash hit, we were a nationwide DSL provider and my resume was too mismatched to find work, between the lack of formal education and the glut of senior management experience.

Licking my wounds I went back to college and binged through a bunch of degrees as quickly as I could. While I was working on my second Masters I discovered Haskell, and I had more or less a religious conversion experience. Here was a language that had solutions to many of the things that I had been trying to express in my pet language projects backed by a much more sound theory than any of the ad hoc solutions I had come up with to date.

I binged obsessively through Types and Programming Languages, everything I could find on substructural logic and pure type systems, and read every paper I could find on functional programming for the better part of a year.

Because it is relevant to the conclusion, I'll sermonize a bit. Along the way I spent a lot of time obsessing about how category theory and functional programming interact. This has led to a lot of interesting and surprisingly practical applications for Kan extensions, the Yoneda lemma, etc. But ultimately, what I like about functional programming is that with fine grained control over side-effects, parallelism and concurrency are vastly easier to reason about. I like to go as far out into theory as I can drag kicking and screaming back into practice. Object-oriented code sprinkles synchronization points across your entire codebase, due to the existence of objects that have mutable state. Pure functional code on the other hand provides far fewer choke points.

After that, the economy recovered, and my resume was no longer so mismatched. I moved to the coast to do defense contracting for a few years, and started doing consulting on massively-distributed systems and functional programming.

My current position came about when a couple of folks from ClariFi came out to see a talk that I gave at the Boston Haskell user group on how one can use monoids in purely functional code to increase opportunities for parallelism.

They went and implemented that solution, and brought me in to do consulting, and later offered me enough to lure me away from the defense contracting world and to convince me to come on board full time.

Now, I spend a lot of time on the clock working on scalaz, the main scala functional programming library. It adapts many Haskell ideas such as monads, etc. to Scala, but more interestingly, it has no real legacy code base and pile of books to support, so it has been able to fix many of the historical accidents and warts of the Haskell Prelude.

Others built scalaz before I even learned scala, but there is a lot of overlap between the communities, and it was based fairly heavily on work that I did in Haskell, so it has been a very smooth transition.

So ultimately, I get paid to work on a mishmash of open- and close- sourced code, much of which was based on my own choice of abstractions.

There are worse jobs.

TL;DR I got here through a mixture of real world experience, contacts, academic credibility, community involvement, a lot of open source software development, and consulting.

share|improve this answer
Based on this rant and your penchant for type theory the TL;DR should be more like "Be nuts. Be absolutely mind numbingly insane." I'm still on the undegreed real world experience portion. I guess my next step is to go back to college for 8 years? Oof, I think I'll stick with working with stupid people on bad code leaving the FP thoughts in a dream. –  Jimmy Hoffa Jan 3 '13 at 0:06
add comment

At my last job we were writing simulations, most of the code was in C for number crunching, with bash and perl for glue, but there were a few bits and pieces written in Lisp and Haskell. Currently I'm doing algorithm design and prototyping, and again mostly working in C and C++, but I've used a fair bit of Haskell in my last couple of projects.

I never tried to look for jobs specifically where I could use functional programming, but I do try to look for jobs that let me use the best tool for the job, and empower me to decide what that tool is.

share|improve this answer
May I ask what you were simulating? –  Rob Agar Mar 23 '11 at 0:37
add comment

I have been paid to program in G (LabVIEW) for many years. You can argue whether or not it's a real functional programming language (or even a real language), but the mindset needed to program in G is the same as that needed for other functional programming languages. As a data acquisition engineer I found that G (LabVIEW) was the best language for the job, especially since most of the DAQ hardware we used came from National Instruments (NI).

To get a job like that you need a reasonable background in electronics and instrumentation. NI offers demo versions of their latest LabVIEW offerings and there are user groups throughout the country where you can get free hands-on demonstrations. There aren't as many job openings looking for LabVIEW expertise as there are for more traditional languages, but they are out there--do a search on monster.com.

Also, there are many people who are paid to develop complex spreadsheets. While spreadsheets are not usually included with programming 'languages', they can perform the same tasks that are usually assigned to typed programming languages, especially typed functional programming languages. I suspect you'll find a lot more 'spreadsheet programmers' in accounting and other financial areas, but they can be useful in other areas as well.

share|improve this answer
add comment

Yes (partially).

I work for a major financial institution. Our codebase is mostly Java, but we are starting to do some development in Scala. Scala serves very well as a "better Java". Right now we are using it mostly when we want to use Actors to manage concurrency. We are only using it for backend code, and haven't tried doing a web app with Lift yet.

Since seamless interop with Java is a must, our only other viable functional language choice would be Clojure. As much as I love Clojure, Scala just makes a lot more sense for us. A team full of uninitiated Java programmers can pick up Scala MUCH faster than Clojure.

share|improve this answer
add comment

No. I'm a programmer employed full-time by someone else, but I don't use a functional language and I've really never seen the point of using one. I use functional techniques when they would enhance my work, and when they wouldn't, I do something else instead. I enjoy the flexibility of being able to do that, whereas too many functional languages make the same mistake as Java--thinking that there's only One True Programming Paradigm and making tasks that don't fit that paradigm painful.

share|improve this answer
Ruby in particular is fabulous for this in my opinion. Haven't personally seen another language that quite so deftly mixes OOP and functional programming in a way I can wrap my head around. –  Matthew Scharley Mar 22 '11 at 0:15
@Matthew Scharley: Scala actually has a really good mix as well. –  davidk01 Mar 22 '11 at 0:53
@davidk01 @Matthew They are both really good mixes, but Ruby leans more towards the OO world, and Scala leans toward the functional world. –  dbyrne Mar 22 '11 at 4:22
What languages are you talking about? All the Lisps are extremely multi-paradigm, F# allows all your imperative and OO tricks, OCaml and even SML are also quite flexible. Among the popular languages only Haskell is a radical one-right-way thingy. My main development language is Lisp, and I'm doing pure functional stuff no more than 15% of the time - the rest belongs to the other paradigms, including another 15% of imperative. –  SK-logic Mar 22 '11 at 10:35
Haskell + C is a good functionl + imperative pair. Since I know well that you hate C, theres also C# + F#, and I bet others have FFI's or support for some type of procedural programming (F# in particular does) –  alternative Apr 20 '11 at 18:25
add comment
