My first non-trivial program I was paid to write, was as a summer intern my sophomore year of college. It was a Zephyr client built using eXene reading raw UDP packets sent to it from the FoxNet. This was “way back” in 1994. This introduced me to some amazing researchers and put me on my current career path! Up until then I was thinking of specializing in HCI and in asked for a recommendation to work on the Garnet project that summer, but got convinced to work on the Fox Project instead.

After the Fox Project I did an internship at Bell Labs the following year working on documentation generator that produced the documentation for the yet to defined SML Basis. From the years of 1994 till I escaped graduate school and got a real job in 2001, my primary language of choice was Standard ML. This means I had 7 years of pretty hard-core functional programming experience before functional programming was “cool”. Hard-core functional programming includes writing garbage collectors, network stacks, compilers, UIs and theorem provers in functional languages.

Since 2001 I have gotten paid to program in more traditional languages like C, C++, Java, C#, Perl, and Python. So it’s been 15+ years in the real world. I’m recounting my seven years of hard-core functional programming before with a bit of nostalgia. I remember conversations of the sort “This functional programming stuff will never be practical. It seems to work because the researchers have a massive 64MB of memory on their machines. On machines with 16MB it swaps like mad.” It seems today even the relatively spartan Google page causes Microsoft Edge to use 348MB. The increase in processor speed and memory in the last few years is hard to imagine. It also seemed to have provided the functional languages and programming a chance to see main stream adoption. However, I’d like to let you in on a small secret. For the last 15+ years even though I’ve been programming in non-functional languages. I’ve been structuring all my programs as functional programs! So I’d like to say I’ve got 22+ years of functional programming experience under my belt.

There is old sayin that “… the determined Real Programmer can write FORTRAN programs in any language.” This is true for any determined real functional programmer. So those of you new the game, let me attempt to condense two decades of experiences in into a few simple points that will hopefully be enlightening if not thought provoking.

Real functional programmers…