That is an interesting post that spurred a lot of discussion months back.
David Pollack has a good follow up to that article that goes into some more
detail about that post:

http://goodstuff.im/scala-use-is-less-good-than-java-use-for-at-l

The focus is really on the culture of programmers and different types of
programmers and which ones Java, PHP, or Scala might be best suited for. He
ends it with this comment:

Oh... and all you wicked smart people who are pushing the boundaries (or
think you will) with data size, event frequency and real-time stuff, you'll
find Scala to be a dream come true and there will be nothing like it that
you've ever used (okay, except maybe Haskell).  So, come, build your cool
thing on Scala and succeed.

That's exactly where opennlp.ml should be. And, it is perfectly possible to
have such a library be written in Scala but provide a Java API to it, like
Akka <http://akka.io/> does. (Incidently, Akka is a good reason to use
Scala, though one can use it with Java too, just more painful that way.) In
fact, opennlp.ml would have to be written that way since the first "user"
of it would be the OpenNLP toolkit.

Also, there is a good discussion involving David Pollack and Dick Wall here:

http://www.infoq.com/articles/barriers-to-scala-adoption

Regarding the title of the original blog post ("Yes, Virginia, Scala is
hard"), Dick Wall notes that:

Yes, but I would choose to expand the title to "Software Development is
hard" or perhaps "Vigorous software development is hard". When you set out
to complete a project or write a system, you have a problem to solve.
Chances are that if it is something good and new, it's going to be pretty
hard. The complexity of the delivered item will be dictated to some degree
by the problem to be solved, and that complexity bar will be about the same
height no matter how you tackle it.

Choosing a language with more power is the first way you can get a boost on
reaching that bar. Choice of libraries is the next, and the remainder you
fill in yourself. In Java, the power is (by modern standards) fairly low,
leaving a larger gap to reach the bar. Most people fill in with libraries,
e.g. JPA, Wicket, Spring or perhaps full blown Java EE. These bring their
own significant complexity to the project (not to mention their own
learning curve). Then the work begins on the final part, the custom work
necessary to reach the bar.

If you are writing something like a web application, the chances are that
the libraries available (of which there are many in Java) will get you
almost all the way there, albeit with a significant investment in learning
the libraries the first time you do it. If the task is something a little
less commonplace, perhaps a scientific or mathematical project, or just
some totally new idea or approach, you have even more to do. At this point
you want the most power, flexibility and expressiveness you can get, and
that comes back to the language you choose.

I have found the value that coding in Scala brings has far outweighed the
effort to learn it and its complexities (which I greatly enjoyed learning
about, and continue to enjoy learning about). I now pretty much have to
stop myself from gagging when forced to write code in Java.
David notes in that:

If you're doing some form of event processing (trading floor, sports
betting, near-real-time data analysis, social networking), Scala is a huge
win over Java. If you've got complex, distributed systems, Scala and
immutability is a huge win. In these scenarios, the costs of using Scala
(learning curve, poor tooling, etc.) are small in comparison to the
benefits of Scala (immutability, composability, good event processing,
excellent libraries/frameworks that provide a starting point for these
kinds of systems.)

Again, the nature of many machine learning algorithms makes this a good
fit. Add to that the existence of systems like Spark and relatively new
front-ends for Hadoop such as Scrunch and Scoobi, which makes developing
MapReduce algorithms w/ Scala much nicer and far far preferable to the pain
of coding them up in Java.

Note that these discussions are from many months ago. The Scala ecosystem
has continued to evolve, including continual improvements to IDE support
for Scala development with Eclipse (and probably for Intellij as well).

I would also note that Java lacks a truly wonderful feature of languages
like Scala, Python, Clojure and others: a REPL that allows you to try out
code snippets interactively. This is a great way of testing example code
before actually putting it into your system, knowing that it will work.
It's also a great teaching tool for people new to the language.

FWIW, here's Aliaksandr's example in Scala, which can be tried out in the
Scala REPL.

(List("I", "l", "v", " ", "P") zip List(" ", "o", "e", "F", "!")) map {
case(x,y) => x+y } mkString

Once you get functional programming, it is truly painful to do without it!

Jason

On Mon, Jan 2, 2012 at 2:51 PM, Aliaksandr Autayeu
<[email protected]>wrote:

> An interesting post about Scala:
> http://goodstuff.im/yes-virginia-scala-is-hard
>
> Jason, by the way, from what I saw following your link, I might love Scala
> as much as... StringJoin @@ (MapThread[#1 <> #2 &, {{"I", "l", "v", "
> ", "P"}, {" ", "o", "e", "F", "!"}}]) (that's in Mathematica language) but
> I would consider the article above, keeping in mind the audience of the
> project.
>
> Aliaksandr
>
>
> On Thu, Dec 29, 2011 at 6:46 PM, Aliaksandr Autayeu <
> [email protected]> wrote:
>
>> IMO, Java advantage is that of being a standard de-facto, with mature
>> tools, infrastructure and other things. I'm sure, there are many cool toys
>> out there (git was a cool toy once, and SVN is still a standard de-facto in
>> many places), but ease of use of OpenNLP (standard Java without excessive
>> dependencies + maven) is an enormous advantage of OpenNLP in most of my use
>> cases.
>>
>> Aliaksandr
>>
>> P.S. The link is a nice collection of material!
>>
>> On Thu, Dec 29, 2011 at 6:27 PM, Jason Baldridge <
>> [email protected]> wrote:
>>
>>> I'd really like to use Scala in the opennlp.ml rewrite, for reasons I've
>>> already stated on the list. My thinking on this is to do the first
>>> reorganization for opennlp.ml in pure Java, make a release, and then
>>> starting mixing in Scala. I've been happily mixing Scala and Java on a
>>> number of projects without much fuss. However, I do so in the context of
>>> using SBT (simple build tool), rather than maven (SBT can read Maven
>>> declarations, FWIW). It is quite straightforward to use, and I'm now
>>> using
>>> Eclipse with the Scala IDE for Eclipse to build Java/Scala projects - so
>>> it
>>> should be straightforward for others to get up and running with it.
>>>
>>> I'd be interested in hearing whether anyone has any particular concerns
>>> or
>>> objections about this plan. Also interested in hearing whether anyone is
>>> particularly keen on the use of Scala.
>>>
>>> BTW, if you haven't seen much of Scala before, I have some very gentle
>>> introductions (aimed at first time programmers) for getting started with
>>> it
>>> on my blog. You can find links to the posts, plus to lots of other
>>> resources here:
>>>
>>> http://icl-f11.utcompling.com/links
>>>
>>> --
>>> Jason Baldridge
>>> Associate Professor, Department of Linguistics
>>> The University of Texas at Austin
>>> http://www.jasonbaldridge.com
>>> http://twitter.com/jasonbaldridge
>>>
>>
>>
>


-- 
Jason Baldridge
Associate Professor, Department of Linguistics
The University of Texas at Austin
http://www.jasonbaldridge.com
http://twitter.com/jasonbaldridge

Reply via email to