I am trying to acquaint myself with different types of languages to understand the areas in which each one of them is extremely good at. So far, I have dabbled into C - a procedural language, C++ & java - static typed Object Oriented languages and groovy - a dynamic typed Object Oriented language.

Every programming language has probably been started to answer a need. And I presume every language is extremely good at at least one thing because of which it becomes a standard in a specific area or field. Like C, C++ have become standard in areas like browser or game development. Python in the Linux world for its easy scripting ability, Java in the enterprise world, etc.

Now I am interested to learn a functional programming language like Clojure or Lisp. So, where are functional programming languages used in real world scenarios? I don't think that one would use Clojure or Lisp for developing applications or UIs. So on what kind of projects should I indulge into after going through the basic tutorials and learning resources to get a brief understanding about the implementation of functional programming? And do you strongly recommend on One language in specific, like say clojure?

Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise.
If this question can be reworded to fit the rules in the help center, please edit the question.

5

"And I presume every language is extremely good at at least one thing because of which it becomes a standard in a specific area or field" That's not generally true. It's a dangerous assumption to think that languages are somehow "specialized". A few languages have niches, but it's not true in general.
–
S.LottFeb 6 '12 at 14:43

6

"I do not how and where to start." What prevents you from starting with the tutorials? Can you explain why the tutorials for these languages aren't helpful or useful?
–
S.LottFeb 6 '12 at 14:45

"C++ & java" have very, very little to do with each other.
–
DeadMGFeb 6 '12 at 15:07

May i sak you what really intrigued you to learn Clojure or Lisp apart from the reason that they follow Functional Programming paradigm?
–
MaxoodFeb 6 '12 at 15:07

3

When you say "real time" do you mean "real world" by any chance? That would seem to make a bit more sense in the context of this question.
–
sepp2kFeb 6 '12 at 15:08

7 Answers
7

Erlang is a programming language used to build massively scalable soft
real-time systems with requirements on high availability. Some of its
uses are in telecoms, banking, e-commerce, computer telephony and
instant messaging.

There is a great lecture series on Functional Programming by Stanford University.You can check them on YouTube.

I would advise you to look into Scheme rather than LISP. Scheme is a modified version of Lisp with further enhancements. Scheme is mostly used for academic and training pourposes. It is a great language if you like to do research in thoretical compueter science.

Applications:

Google App Inventor for Android uses Scheme, where Kawa is used to compile the Scheme code down to byte-codes for the Java Virtual Machine running on Android devices.
Elk Scheme is used by Synopsys as a scripting language for its technology CAD (TCAD) tools.

Bryan O'Sullivan, founder of mailrank.com (which was acquired by Facebook) built the entire server side of this software in Haskell. He presented on this at Strange Loop 2011, video and slides are available online.

The same guy wrote a book called Real World Haskell. Several people mentioned programming tutorials. This one may be quite appropriate to your interests (I like the Erlang suggestion as well).

I know from friends in finance that the quantitative trading firm Jane Street uses OCaml to implement its trading strategies. They have a page where they talk about why, along with links to talks on the subject.

Although Common Lisp is only partly functional(it also supports OOP and procedural, as well as anything you wish to implement your self, or with a library), it's a very pragmatic language, and extremely powerful in the hands of a competent programmer. I actually use it to write web apps with the excellent RESTAS framework.

And the commercial python project that I'm working on right now will eventually be supplemented by services written in lisp(RESTAS as suggested by its name is excellent for RESTful services).

I'd suggest diving into the compilers (for either general purpose languages or DSLs) - this is where functional programming is in its best. There will be many interesting and useful things to explore, from ADTs and pattern matching on one side of a spectrum to the Lisp macros on the other side.

Hume (Higher-order Unified Meta-Environment) is a strongly typed, mostly-functional language with an integrated tool set for developing, proving and assessing concurrent, safety-critical systems. Hume aims to extend the frontiers of language design for resource-limited systems, including real-time embedded and safety-critical systems, by introducing new levels of abstraction and provability.

Hume is a functionally-based programming language developed at the University of St Andrews and Heriot-Watt University in Scotland, and named after the 18th Century philosopher David Hume. It targets real-time embedded systems, aiming to produce a design that is both highly abstract, yet which will still allow precise extraction of time and space execution costs, so allowing programs to be written that will execute under guaranteed bounded time and space constraints.

Hume is unusual in combining functional programming ideas with ideas from finite state automata. Automata are used to structure communicating programs into a series of "boxes", where each box maps inputs to outputs in a purely functional way using high-level pattern-matching. It is also unusual in being structured as a series of levels, each of which exposes different machine properties, which is highly unusual.