Programming F# – Official Cover

Edit 8/19: You might notice, the cover is no longer a jellyfish. While I know this is a slight disapointment for some – including myself – trust me when I say I have a plan to remedy this. Stay tuned! 

So as it turns out my petition for a kickass cover was ultimately unsuccessful. But the good news is that I’m not suck with something neither cute nor cuddly. Instead I got a Jellyfish, after spending some time thinking about it is pretty good. (Though certainly not as awesome as a hydra.)

Jellyfish Facts

  • Jellyfish can be found in every ocean. Therefore, in the time if trouble they can call on the nine pirate lords for help. Much like F# being able to use nine different programming paradigms and styles:
    • functional, imperative, object-oriented, metaprogramming, scripting, concurrent, reactive, declaritive, and awesome. (Yes, ‘awesome’ is a programming paradigm… and Haskell doesn’t support it.)
  • Jellyfish do not have a brain or central nervous system. Just like F#… umm… you don’t need a nervous system to write world-class applications?  Let me get back to you on this one…
  • The real reason I’m excited about having a Jellyfish on the cover is that they can Sting and Kill you. Like F#, Jellyfish are deadly.

So anyways, this October be on the lookout for Jellyfish Book!

Programming F#: Rough Cuts Version

Comments (22)

  1. Thank you for submitting this cool story – Trackback from DotNetShoutout

  2. Indy says:

    I like the cover and the metaphore of the jellyfish. The only thing though, according to the latest National Geographic’s article jellyfish is the favorite meal of the giant leatherback turtle. Perhaps the turtle deserves a consideration for the cover since it is deadly to the jellyfish. Just kidding!

    Anyway, I’m an F# enthusiast, doing mostly C# development for my day-job. I’m currently reading ‘Expert F#’ and have to admit that certain parts of it take more than one pass to understand.

    I’m looking forward to your book publication. Good luck.

  3. snk_kid says:

    Your sly "awesome" comment is a bit immature and only hurts the F# community.

    I like both F# and haskell but it seems as though you don’t quite comprehend the awesomeness of Haskell’s type system.

  4. ChrSmith says:

    I’m well aware of Haskell’s awesome type system, but I needed a programming language to beat on.

    "C# doesn’t have it" doesn’t work because there are already a lot of things C# doesn’t have that F# does – function values, algebraic data types, etc.

    "Java doesn’t have it" doesn’t work for more obvious reasons than C#. The same is true for PHP, C++, and others.

    Perhaps Python would have been a better choice; though I have empirical evidence that Python does in fact support ‘awesome’

    I appreciate your comment. But I assure you that I in no way am trying to criticize Haskell.

  5. DanF says:

    Hey Chris, you mentioned meta-programming in F#. How does that work?

    I’ve been programming in Common Lisp lately so I’ve gained a new appreciation for it — can F# compete or is Clisp the leatherback turtle? 😛


  6. DanF says:

    I should point out, I mean can F#’s meta programming facilities compete with Common Lisp’s macros.

    Don’t want to start a language holy war.

    I read up a bit on the "F# quotation" business and it looks really awkward compared to Clisp’s… still curious to read your take on it.

  7. ChrSmith says:

    F# doesn’t support CLisp macros, but rather enables metaprogramming through two mechanisms.


    Quotations allow you to write F# code and by getting the quoted form of that code reason about it. You can analyze the code, for example in Expert F# quotations are used to analyze floating point operations to calculate the loss of precision. Very cool. You can also use F# quotations to dynamically create code, for example in my book I have a sample where given a mathematical function quotations are used to generate the derivative of that function symbolically.


    The other way F# can do meta programming is through reflection – dynamically loading and invoking types, inspecting attributes, etc.

    These methods of ‘metaprogramming’ may be disappointing to some who are used to CLisp macros or even some of the mind-bending things you can do with C++ templates. However, F# is a very young language. We might be able to add more capabilities in the next release.  (Post Visual Studio 2010.)

  8. nome says:


    Maybe that’s the intention?

  9. Rick Minerich says:

    Yeah, the cover kind of grosses me out to look at.

  10. ChrSmith says:

    Totally, it really grossed me out as well… but that’s why I like it. If it were like a toad or cat or something it wouldn’t be memorable. You see a giant, gangly jellyfish – that thing is burned into your brain 🙂

  11. Jon Kale says:

    That’s not a jellyfish. Any fool can see it’s Chthulu, fresh from his aeons-long wait in R’lyeh.

    I leave it to the reader to draw his or her own conclusions about the editorial direction at O’Reilly…

  12. Ken says:

    How does F# compare to Mathematica?

  13. grahamsw says:

    It can sting and kill you! Enough said.

    F# is a power tool – which as Jeff Alger said (of C++) can also be a great way to lose fingers. Hopefully it’s one of these ones that causes ridiculously disproportionate pain. (Because that would bear a fair resemblance to my learning experience.)

    I also think you win the "Scariest O’Rielly cover ever" award. Which is pretty damn awesome.

  14. Ken says:

    So, actually, it was a serious question: is anyone familiar with both the programming environments of F# and Mathematica and, if so, what are the comparisons that come to mind?

  15. ChrSmith says:

    I used Mathematica a bit in college but definitely don’t consider myself an expert. From what I recall F# and Mathematica are two very different tools for solving very different problems.

    Mathematica can be though of as an interactive tool for exploring mathematical-style problems, which happens to support programming. F# is a general purpose programming language, that happens to support data exploration.

    While the FSI window feels in many ways like a limited Mathematica session, it doesn’t support saving ‘state’. That is if you introduce several values in an FSI session, you cannot save that session and load it at a later time like you can in Mathematica.

    However, while you can write applications that have UIs, connect to databases, do file IO etc in Mathematica F# provides a much better experience. Both at the library level – from .NET – and at the programming language level. (Since F# was ‘built’ for that.)

    If you want to do math / physics, stick with Mathematica. If you want to write programs, check out F#.

    Does that help any?

  16. Ken says:

    Yes indeed it does. Many thanks!

  17. Ken says:

    You did so well with that question, here is another. Are there any examples of using MSMQ from F#? I am trying to get my feet wet by doing something familiar, eventually ramping up to doing new things with the language.

  18. ChrSmith says:

    Unfortunately, I haven’t seen any MSMQ + F# examples out there, but it shouldn’t be difficult to write one. But porting a C# MSMQ sample to F# should be a straight forward process.

  19. sonorancellist says:

    Those wack invertebrates will sting you!  Old school!

  20. Scott says:

    That’s *clearly* the FSM.

    Flying Spaghetti or F#, you be the judge.

  21. rei says:

    I set this as my MSN picture, and my friends were perplexed as to what a musical note has to do with programming, and what programming has to do with jellyfish.