Thinking in FP vs OOP for large scale apps => Re: [plt-scheme] Imperative programming : missing the flow
Are you more interested in getting someone's account of using FP for a
"real world enterprise project" or in hearing what folks thing about
what Scheme offers over "OO alone"?
I can comment on the latter, but not the former.
"Enterprise projects" are usually about moving data around, modifying
it, analyzing and reporting on it. Yes, it is difficult and has real
problems, but then again, after you've done a few successful projects
you realize that while it is to be taken seriously, it is not rocket
science.
One big goal for "enterprise folks" is to mitigate their risk, and one
way to do that is to implement systems that are maintainable by just
about anyone. That way, if folks leave, and documentation disappears,
and the system lasts for years longer than expected (all of these
things *will* happen), then said company can get a reasonably priced
individual off the street and have them working on the reasonably
quickly. One way to do this is to limit your programming language to a
small set of abstractions because although you end up with a lot more
code just to express something, and it will be more difficult to
understand, said person off the street *will* be able to understand
it, and then maintain it. "Enterprise languages" are all about
limiting abstractions to make it easier to make commodities out of the
developers. This makes a lot of sense. Add to this excellent tools to
"get the job" done of representing data (JPA or ADO.NET), UIs (Swing,
JSF, ASP.NET, Winforms), and every transport layer in between, and
you've got a reasonably good investment in the longer run. From this
angle, a more expressive language would offer more productivity gains,
but would decrease the available pool of resources to maintain that
system.
Perhaps this is why you here more about LISP-like languages being used
at startups and in niche areas.
That said, you *can* use LISP-like languages to solve your problems,
and generate the implementation of your solution in your desired
"Enterprise" language.