

Why Scala is a must-learn language even if you don't plan to use it. - amichail

Learning Scala teaches you the state of the art in programming language design.  So even if you don't plan to use it, at least you will be familiar with advanced programming language concepts that you may not have learned at university.
======
ricky_clarkson
I think Scala is a must-learn language IF you plan to use it. If you're on the
JVM, and for some reason CAL doesn't work for you then Scala might well be the
best thing available.

However, for learning interesting and useful stuff, I'd probably point people
more towards Haskell.

------
marketer
I tried using liftweb for a project once, but was discouraged by the heavy
dependency on maven. Also, liftweb is undergoing huge churn, especially in the
database modeling.

~~~
jorgeortiz85
(Disclaimer: I'm a liftweb committer.)

I'm sorry you were discouraged by maven. I've found maven to be a huge
productivity boost, especially when compared to the alternatives. Though I'll
admit it's mostly "black magic" to me. Half the time I don't know what exactly
it's doing. But since it "just works", I find it really doesn't matter that
much that I don't understand it.

Also, most of the "churn" is in new features. There are 6-12 production apps
running off of lift's trunk, so check-in's very, very rarely break backwards
compatibility. There is an effort to re-work the ORM layer and make it much,
much more powerful (it'll be much more than just ORM). This work is proceeding
cautiously though. There will be ample warning before the old ORM is
deprecated and thrown out.

If you want to give lift a second chance, I'd encourage you to use the mailing
list as a resource (liftweb@googlegroups.com). People are very friendly and
generally very willing to answer questions.

~~~
marketer
That's cool that you're a committer, I think scala/lift are very promising,
and look forward to using them in the future.

If everything is working well, maven can be a huge productivity boost. I'm
sure the decision to use maven was to make the learning curve smaller. But I
get an uneasy feeling when maven is being used for every aspect of the
project, including creating it, compiling it, running it, updating the
libraries, deploying it, importing to eclipse, etc...

The best way to use maven is to set up a stable local repository, and be
_careful_ when you update them. Archtypes can be upgraded server-side on the
fly, and this can cause problems if you're not careful about versioning.

By default, however, people won't set up local copies of maven repositories.
And despite the best intentions of liftweb.org, and ibiblio.org, neither
organization has a vested interest in your project, and they suffer from
downtime frequently. liftweb was down for over a day at one point. You
couldn't create a blank project template, or update the dependencies. It's a
risky dependency.

------
paulgb
Scala looks cool and all, but how is it better than ocaml, haskell, etc.?

That isn't rhetorical.

~~~
amichail
It's more familiar to Java programmers and uses the Java platform. You can
learn its advanced concepts incrementally starting from a familiar base. Also,
it doesn't force you to program in a functional manner as with Haskell.

~~~
bcater
But I LIKE functional programming.

~~~
paulgb
Me too, but I _don't_ like being forced to program functionally if I feel
imperative programming would be more readable, efficient, or fast. Certain
tasks are more suited for functional programming than others.

That said, I don't mind languages like Haskell where imperative programming
doesn't fit in well conceptually. It's just that I wouldn't use languages like
that for everything.

------
davidw
How so?

~~~
amichail
Some things that you could learn:

* important concepts such as f-bounded polymorphism, covariance, contravariance, implicit parameters and methods, etc.

* traits that solve the diamond problem with multiple inheritance

* functional programming concepts including monads

* advanced concurrency concepts via the actors library

* pattern matching via case classes and extractors

* that type inference can make you highly productive in a statically typed language

~~~
anamax
> * important concepts such as f-bounded polymorphism, covariance,
> contravariance, implicit parameters and methods, etc.

The fact that those are important concepts in Scala doesn't make them
important concepts.

> traits that solve the diamond problem with multiple inheritance

There are lots of solutions to the diamond problem. The fact that scala uses
traits doesn't make traits important.

> * pattern matching via case classes and extractors

Again, so what?

Scala is full of elegant mechanisms to solve problems that resulted from
design choices. The elegance of those mechanisms or their importance to scala
doesn't make them important. After all, one might reasonably have made
different design decisions, making them irrelevant.

~~~
amichail
Many people are not aware of the issues. This would be a learning experience
for them that starts from a familiar base.

~~~
anamax
Not so fast.

The claim was that scala is special. However, the argument doesn't support
that claim. It's a list of "me-toos" and hyperbole.

For example, every language with multiple inheritance has some mechanism to
deal with diamonds. Type inference is useful/interesting, but it doesn't
result in "highly productive".

