Yea,

I have consistently advocated using Scala with strong coding
standards - standards that are actually believed in and enforced.
I have referred to it as OO Scala, Scala which is strong on the
Java-like Object-Oriented features plus functional programming
in-the-small, but refrains from using functional programming
in-the-large, many of Scala's "functional goodies" and advanced
type capabilities (and if any of these really have to be used, they
should be approved by the group and be documented in detail).

The reasons for Scala and using it with limitation are:
 Scala is a better Java and
 The use of Scala's "advanced features" must be controlled so that
  code is understandable, maintainable and, most importantly, so that
  one can access the existing programmer labor pool and not have to
  limit one self to the very small number of FP programmers out there.

Those who advocate the use of Scala's advanced features on large
projects are really advocating that Scala be only a niche language.

Richard

On 01/18/2011 11:02 PM, Liam Clarke-Hutchinson wrote:
Hey mate,

I code Java for my day job, and write my fun code in Scala. I just love the
flexibility of Scala combined with the power to use all my existing Java
libraries. That said,
I don't see Scala overcoming Java anytime soon because it offers developers
_too much_ freedom. I had a real bad time using
http://dispatch.databinder.net for a project, because it fully utilized a
lot of Scala features to offer a really shit API. Java makes everyone
conform to a base level while preventing soaring, and it's a base level
that's sane. And when it comes to writing  business code, as in "Code that
makes money", Scala's freedom doesn't offer overly much compared to Java's
enforced conformity.

Don't get me wrong, I<3 Scala, but while half of me wants to use it at
work, the other half is terrified of what the Java developers who write
Spring code like this:

<bean id="something class="java.lang.String">
     <constructor-arg index="0">
         <value>${someProperty}</value>
     </constructor-arg>
</bean>

Would do with the power of Scala at their finger tips. (PS, that's real
Spring code that I saw (and refactored) today.)

On Tue, Jan 18, 2011 at 5:33 PM, richard emberson<
richard.ember...@gmail.com>  wrote:

I originally mentioned the Kuhn book in the context of the politics of
change.  Altering the focus, you brought up *the truth* as the view
held by those resisting change, which I believe is not the larger
insight to be gained from his book.  It is still my contention that my
original interpretation is valid; Scala faces resistance to change and
the structure of that resistance, maps into those structures
identified by Kuhn.

Using a term you earlier used, I think it would be naive to believe
that entrenched business forces will stop the emergence of a new,
major development language. Such forces were aligned against C, C++
and Java, but the forces were overcome.  In each case, rational
examination of the languages revealed advantages as well as
non-rational forces, such as Sun's marketing and glitter in the case
of Java, strengthening the prospects of the language's adaption. I
hope we can both agree that change will come.

But, I do not believe the change will be revolutionary but, rather,
evolutionary. A language that evolves from an existing ecosystem has a
much greater likelihood of becoming significant than a green field
language.

I paint and sculpt as well as do mathematics and physics and, for me,
language selection is far closer to math and physics than to the play
of colors or shape and form. I, thus, do not agree that choosing a
programming language is an exercise in artistry, but rather, its a
more rational process.  And, if beauty is involved, then it is
scientific beauty and not artistic beauty.  Are you Picasso? Maybe
even Mondrian? Hopefully, not Pollock.

Concerning the languages you listed as "the way forward", an important
criteria must be: where are the programmers coming from?  One can wait
for a new generation or one can see if any existing programmers will
migrate from their current language to a new language.  Some language
usages from the web:
    Java         18%
    C            16%
    C++           9%
    Python        6%
    C#            6%
    Objective-C   3%
    Ruby          2%
    Lisp          1%
    Scheme       ~0.5%
    Haskell      ~0.3%
    Scala        ~0.3%
    Eiffel<0.1%
    Clojure      ~0.0%

So, where might future Haskell or Clojure or Eiffel or Scala
programmers come from?

# So, what about Eiffel?

Eiffel (with DbC, "design by contract") is a 25 year old language and
its usage stats are down in the noise - well below Scala, Clojure and
Haskell - and showing its age. Hard to see a ground swell of C or Java
programmers switching to Eiffel.

Eiffel's grasp exceeded what could be supported; its notion of
"contract" was so big, it was hard to find a wrapper around it all.
Category Theory may provide for a pragmatic approach to reasoning
about interfaces (contracts) which might not encompass all possible
rely/guarantee predicates, but many.  As such, the three laws of
Monads from Category Theory might yield a more coherent, reasoned
approach to DbC and interface design.  Curiously, this has been
discussed by the author of Scala as a possible approach to adding DbC
to Scala. For the Scala-CLR binding there is native support for such
constructs while for the Scala-JVM binding, it would have to be done
with code.


# So, what about Haskell?

Haskell is the flag ship FP testbed which has been out there for close
to 20 years. There are no large enterprise applications written in
Haskell. It has certainly not taking the programming world by storm
whatever its merits.  In addition, for Haskell, and all FP languages
for that matter, the world view required is not shared by most people,
Folks do not see the world as math functions (program mangers and
customers certainly don't); functional programming in-the-large is an
unnatural mapping of external objects and relationship to a FP design.
(That said, Category Theory is being used more in Physics and
non-computer Mathematics as a means of providing some guidance by
helping to find higher level relationships between areas of research,
but those are rather rarefied endeavors.) Again, where are the
converts to Haskell coming from?  Just an occasional graduate student.


# So, what about Clojure?

Clojure is an interesting case; its immutable data structures are a
strength but as soon as you allow users to call into Java libraries
any program-level reasoning due to such data structures are suspect -
an issue with any FP language which is not 100% pure.  In addition,
where is the pool of potential converts?  Clojure is a rather large
leap for the 20% of programmers using Java (or for that matter for the
20% using C/C++) Converts would likely come from the Lisp (1% usage)
and Scheme (usage levels in the noise) community.

As an aside, I had considered porting the Clojure runtime to Scala.
There would have been many advantages over the Java-based
runtime, e.g.:
  Scala with its immutable data structures would be a good fit,
  Scala's coming parallelized data structures targeted to
    multi-core environments saving the Clojure group much development
    effort.
  Scala would have given the Clojure community delimited continuations
    which the Scheme folks would like and understand.
But, such a port, while interesting and I would certainly have
learned Clojure, would not have appreciably increased the number
of Scala users - so I choice Wicket.


# So, what about Scala?

I recently came upon a discussion of Joshua Bloch's "Effective Java",
its list of recommended practices and how they map into Scala.
Curiously, in each case, the article pointed out that Scala made
simpler or completely eliminated the need for the "Effective Java"
better-coding-practice. So, if one thinks that "Effective Java" makes
sense, so does, at least at the level of the recommendations, a switch
to Scala - the state of art has moved on from Java. As I have been
advocating, Scala is a better Java; switching from OO Java to OO Scala
is relatively easy and certainly Java's warts have become very
glaring.

As with any language and development team, one needs development
standards. In this, Scala is no different than Java, C++, C, etc.  To
not let programmers use Scala because one don't trust them and that
the team's development practices are not being followed or are
inadequate is not a problem with the language but rather with those in
positions of authority and/or respect for failing to set the proper
environment.

Scala does allow users to access the existing, significant base of
Java libraries so that a whole universe of supporting libraries does
not have to be re-created for Scala.  Also, if the use of its
functional and extended type capabilities are controlled, it offers a
relatively easy migration for the average Java programmer (or any of
the other OO languages listed above - a large pool of potential
converts).


The rate of change is increasing, A 100 years ago, change occurred much
slower than today.  The establishment 100 years ago, those forces that
resist change as described by Kuhn, suffered few consequences for
their recalcitrance.  But, now, change on the order of a few years is
the new constant, and it is only getting shorter (we are, in fact,
approaching the singularity).  So, yesterday's guru, technical
innovator is today's stick-in-the-mud detractor - unless one rises
above the recurring drama Knuth discussed.  Now a day, one might say,
Go Meta young man or become a Dunsel.


Quis custodiet ipsos custodes



--
Quis custodiet ipsos custodes

Reply via email to