| Re: Survey: What led you to functional programming? |
|
 |
|
 |
|
 |
|
 |
Group: comp.lang.functional · Group Profile
Author: Jon HarropJon Harrop Date: Sep 19, 2008 18:06
Benjamin L. Russell wrote:
> A) Your chronological evolution in programming languages; e.g. (in my
> case):
Off the top of my head:
1982 Sinclair BASIC
1983 BBC BASIC
1984 6502 assembler
1986 Pascal
1987 ARM assembler
1992 C
1995 C++
1996 StrongARM assembler
1996 UFI
1997 Standard ML
1998 Bash
1998 Make
2000 Mathematica
2003 Cg
2004 OCaml
2005 Lisp/Scheme
2006 Java
2006 Python
2006 Ruby
2006 F#
2007 Haskell
2007 Scala
2008 Brainf*ck
2008 CIL
2008 LLVM IL
I made extensive use of Mathematica during my PhD in computational chemistry
(2000-2004) which taught me about the power of term rewriting in the
context of mathematical computing and led me into functional programming.
OCaml was the first primarily functional language that I made significant
use of and, despite trying many others, I never left OCaml. My main
interests were technical computing and visualization/graphics.
F# is my next favorite FPL, with different trade-offs to OCaml but capturing
the essence of its productivity.
All of the other languages are worth learning for the diversification they
give but I do not find any to be practically useful except Mathematica
which still excels in its specific domain (primarily graph plotting).
The worst languages I have ever learned are probably C++ and UFI. C++ simply
is an abomination that tried and failed to capture benefits from other
languages. UFI was an awful DSL derived from BASIC and C that we used for
soft real-time logging of over 8,000 transducers across the Wytch Farm oil
field in Dorset despite the fact that its stdlib call could not even obtain
the current time reliably. UFI serves as a lesson that even a northern
monkey can make a lot of money with naff home-grown technology by selling
long term support contracts to large companies.
Perhaps the most surprisingly interesting language is Brainf*ck, which makes
an excellent introduction to parser, interpreter and compiler writing due
to the remarkable simplicity of this language and the existence of several
fascinating demo programs.
I think one of the most interesting tangential topics to study is
misconceptions surrounding programming languages:
. "Homogeneous syntax is a requirement of macros." - Lisper
. "Enforcing purity improves reliability." - Haskeller
. "Erlang's characteristics are ideal for parallel computing." - Erlanger
. "Processes and message passing can replace a concurrent GC in the context
of parallel computing on multicores." - OCamler
. "Reference counting always collects at least as soon as garbage
collection." - C++er
. "Mainstream programmers cannot handle functional programming." - Java-er.
Finally, although I agree that learning one paradigm can impede the learning
of another, I believe this is only true for your first paradigm shift. Once
you realise there are lots of paradigms out there, I think you go out of
your way to learn more about them and to avoid becoming stuck in a rut
(e.g. procedural in the 1980s, object oriented in the 1990s and functional
in the 2000s).
|