Commercial Users of Functional Programming 2006

CUFP 2006

The goal of CUFP is to build a community for users of functional programming languages and technology...

abstracts and slides

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

Not 10 minutes ago...

I was reading the Jane Street Capital slides. I guess I had to eventually, since GMail is constantly reminding me that they're hiring:)

  • Excel is the most widely used functional language out there.
  • Attempts to rewrite key infrastructure in C# had stalled
  • Too verbose
  • Too complex
  • OCaml was easier to review and reason about
  • I seem to be able to reason about the piecewise function definitions within Haskell and other FP languages. I don't have to litter my code with conditional logic.

I think I've come to the conclusion that I'm too stupid to feel good about code that I write in C# or Java. I just don't grok everything-that-exists-in-the-universe-is-in-a-class. Is it a packaging mechanism sometimes, or is it suppose to be a real object this time?

For whatever reason, I seem to be more comfortable with methods outside of data structures, in the Dylan or Lisp CLOS style.

Everything is an object... sort of

The problem you may be having is because of those languages. Because of the way those languages are typed, you sometimes (often actually) have to coerce things into classes that aren't related in any way besides having a union of their interface.

For example, a car can drive, a tractor can drive, heck even a plane can drive but a plane is certainly not a type of car. The only thing they have in common (that applies in this example) are the wheels. So in a language like Java, if you need to drive a bunch of different drivable things from point A to point B you have to either make functions for each kind or make sure they all are derived from some ridiculous class like "ThingsWithWheels".

In a language like smalltalk you don't make things related if they are not. Objects passed to a function simply have to provide the expected interface. And if you prefer a typed language I think at least Ocaml determines correctness by interface instead of type as well.

Everything is an object but

Everything is an object but objects don't need classes.

I like static typing, I guess.

So I've found myself wanting refactoring tools for Java and C# that would help me manage Interfaces so I could extract "drive" from the car, truck, and airplane. Of course, that requires I have the sources and can recompile the world. Or, that I build a bunch of wrapper classes that implement IDrive. [Edit: And also leads me to maybe have CLOS-style generic functions rather than methods on classes and instances?]

(Is there a common duck-typing rebuff to the static-typed complaint that "cowboy, artist: draw!" is just plain dangerous? Is is the same-old answer of "unit tests"?)

Underinformative Joke

The whole "draw" thing mostly serves to remind me of something that I already knew, namely that "draw" absent any other information is a bit ambiguous. Big deal. In actual code, it's probably either a cowboy object or artist object doing the drawing, and so the "right thing" will happen by definition. If the result is unxpected, then we'd need to know how we wound up asking a cowboy to draw when we expected an artist—a question that may or may not have anything to do with static vs. dynamic or nominal vs. structural typing.

Namespacing issue

Seems to me this has more to do with the frequent conflation of namespaces with dispatching and inheritance for languages with single dispatch than anything else. If image:draw is a separate message or generic function from weapon:draw, there's no problem, even in an untyped language (like CLOS).

The glaring omission I see

The glaring omission I see to this point is the Ruby (on rails) 'revolution'. I'd think that would be the canonical example of a popular web developement fp language. However I suspect actual commercial use may be a bit rare even today. Please correct me if I'm wrong or if anyone knows of any corporations (besides 37 Signals) using the Ruby platform. So, invite the guys from 37 Signals?

An aside: first post, woohoo! Ahem...

Ruby is not a functional programming language

The conference was titled "Commercial Users of Functional Programming Languages".

The Wikipedia entry for Functional Programming states:

"Functional programming is a programming paradigm that conceives computation as the evaluation of mathematical functions and avoids state and mutable data."

Ruby is an imperative language with OO features and is chock full of state and mutable data.

My first post too :-).

CUFP 2007

On the same topic, CUFP 2007 is now official, and I'm a committee member.
If you have any suggestions on who to invite, I'd like to hear them.

CUFP 2007

I don't know the best people to invite. The people behind or using the following would be very interesting though.

GNU R:
Stats oriented general purpose language used in bio and finance fields.

Allegro Lisp:
Commercial Lisp by Franz with interesting features such as AllegroCache and AllegroGraph.

Kdb+:
Language designed and implemented by Kx Systems for large scale data analysis in finance. Apparently used in all the major banks.

Sawzall:
I don't know if it counts as a functional language or not. Google's scripting language for large scale parallel data analysis.

CUFP Next Year

I was at CUFP this year and found it very interesting. A lot of people were saying 'how do we get Commercial FP more widely known' and all that...

Well Joel Spolsky helped write Excel (the commercial FP) and Paul Graham is the commercial uber-king of Lisp. Inviting one or both of them to give a keynote would boost the status of the conference and drag in some unexpected punters seing as they are two of the most famous tech-bloggers with a non-academic following.

I'm all commercial and not at all FP and all the bits of ICFP between the Erlang fringe at the beginning and CUFP at the end went straight over my head (or would have done if I hadn't legged it...).

The worry about finding the functional developers

I would love to hear some comments from attendees about the ease of finding developers.

My unhappy recommendation? Understand what advantages would bring a functional language, and map these over to a domain specific language implemented in a traditional language. Although this does leave you with complex algorithms, it allows you to grow your company.

Back to the Want Ads of Yesteryear

Jane Street Capital caught my eye because they advertise via Google and I'm subscribed to a bunch of functional language mailing lists. So when I see one of their want ads, it's typical of the form

"(Lisp | Haskell | OCaml | Clean | ML | F# | Scheme) programmers welcome", with the language dependent on what Google thinks I'm reading.

So that's a bit of a contrast to the typical Java ad, where 38 years of framework x experience and 53 years of framework flavor of the month experience needed.

Now whether it's working for them, I have no idea.

My unhappy recommendation? Understand what advantages would bring a functional language, and map these over to a domain specific language implemented in a traditional language. Although this does leave you with complex algorithms, it allows you to grow your company.

I disagree that investing the resources into developing and maintaining a DSL, that will be limited in its functionality and just because it was written in C++?, will work out better than training someone who has some experience in functional languages to program OCaml.

Certainly from this

Certainly from this functional programmer's perspective, the difficulty is not in finding functional programmers but in finding companies who will employ them. :-) There's a real shortage of such outside of Academia. When I was looking for jobs if I'd seen one asking for functional programming languages I'd have sent them a "Please sir, can I have an interview?" email in an instant. (Actually I did find one, but they also required lots of experience with hardware description languages).

As an alternative to DSLs, hybrids like Nice or Scala might be a good idea. They're enough like Java or C# that programmers with no functional experience can use probably 75% of their features without blinking an eye, yet you can still use functional features when you need them.

(Of the two, I prefer Nice, but unfortunately it has a little while to go before it's ready for serious use. It currently lacks working visibility modifiers and TCO).

people & momentum

afaict what Nice currently lacks is volunteers to work on the language tools.
Why do you prefer Nice over Scala?

For the first, I'm

For the first, I'm attempting to get to grips with Nice's compiler etc. and will hopefully be starting some work on it once I do (strictly I'm planning a project that builds on the existing Nice compiler, but it will involve working on some of the language tools on the way there). We'll see as to how well this pans out.

My preference to Nice over Scala is partly one of exposure - I've played around with it more than I have with Scala - and partly due to a general mild preference for most of its features. Also I'm increasingly enamoured of Nice's multiple dispatch and the way its type system works.

Can anyone give me hints

Can anyone give me hints about where to post FP related jobs? I'm not interested in monster-like sites ('cos I believe people who dabble in FP don't look for jobs there) but groups/sites where some quality response can be expected. LtU itself, I suppose, one such group :) .. but its not quite in the spirit to post job ads here.

Monster

When I was looking, I did look for fp on monster. I think any developer who is into fp is likely to perform at least one such search since typically job search is quite a long process.

Hints

comp.lang.functional is one place (here's a search for "job"). You could also try ads on Google - at least, the other regular FP job advertisers do, linked to appropriate keywords.

Hmmm - google ads are

Hmmm - google ads are probably the best way out I guess - Jane Street style. comp.lang.functional has had only a couple of job postings in the past 2 years - one of which is Jane Street.

Joel On Software

Try the Joel on Software jobs board. We advertised there and got some very high quality applicants (one worked on the first implemtation of C++ iostreams). We were after C++ exclusively (one of the reasons I'm no longer with that company...), but I reckon it'd be a good place to find functional programmers as well.

Specificity

"FP related job" sounds nebulous. I think you can find a good place to post an Erlang, Lisp, Haskell, or Ocaml job (for examples) without too much trouble if you're offering some specific type of work.

It is fairly specific, but

It is fairly specific, but adding more detail would just make my posting itself a job ad :) At the risk of doing that, we're actually looking for scheme programmers with a passion for the visual arts - photography, video editing. Python/Ruby programmers are cool too :P

The reason is that the editing "styles" that ship with our product are now specified in muSE - a scheme dialect.