Puede obtener una primera impresión al visitar Simply Scala donde tiene un intérprete en línea disponible.
Un clásico absoluto es Scala for Java Refugees que fue escrito originalmente para personas procedentes de Java, pero será bastante útil para usted, teniendo en cuenta lo similares que son los conceptos básicos de C#/Java.
No es necesario que aprenda Java primero, pero debe tener instalado y funcionando el kit de desarrollo/tiempo de ejecución de Java.
Luego vaya a http://www.scala-lang.org/downloads y descargue el paquete apropiado para su sistema operativo (siempre prefiero las versiones nocturnas de Scala, tienen más correcciones de errores que la última versión estable).
Después de eso, ejecute el Scala REPL que es básicamente "Simply Scala fuera de línea" (Simply Scala también usa el Scala REPL detrás de las cubiertas). Incluso muchos programadores de Java usan Scala REPL para prototipos de cosas primero.
Si prefiere libros para aprender, puedo recomendar Programming in Scala (2nd edition) de Martin Odersky (si comienza desde el punto de vista del diseño del lenguaje y quiere el "libro de referencia"). Hay otros como "Programming Scala" que están más dirigidos a principiantes, por así decirlo, pero personalmente encontré que "Programming in Scala" es excelente y he aprendido Scala con solo ese libro.
Una buena manera de iniciar Scala es trabajando con las clases de colección. .NET ha agregado algo similar últimamente con LINQ y métodos de extensión, por lo que será fácil de recoger para usted.
Un pequeño ejemplo para empezar:
//Define a class with some properties
case class Person(name: String, var age: Int, spokenLanguages: String*)
//Create some persons
val joe = Person("Joe", 42, "English","French","Danish")
val doe = Person("Doe", 23, "English","German")
val don = Person("Don", 11, "Italian","French","Polish")
val bob = Person("Bob", 17, "German")
//Access a property
joe.name
//Don had his 12th birthday!
don.age = 12
//Put the persons into a list
val persons = List(joe, doe, don, bob)
//Divide the list into minors and adults
val (minors, adults) = persons.partition(_.age < 18)
//Get the total age of all persons
val personsTotalAge = persons.map(_.age).sum
//Return a list with only those speaking English
val englishSpeakers = persons.filter(_.spokenLanguages.contains("English"))
//Same as the example above.
val englishSpeakers2 =
for{ person <- persons
language <- person.spokenLanguages
if language == "English"
} yield person
No soy tan fluido en C#, pero creo que muchas cosas puede tener un aspecto similar a la suya.
Algunos ejemplos de soporte XML de Scala: no será necesario comenzar con Scala (y de todos modos java sí
//The shoppingCart for breakfast
val shoppingCart = <list>
<item><name>Tomatoes</name><price>0.30</price><amount>4</amount></item>
<item><name>Eggs</name><price>0.15</price><amount>10</amount></item>
<item><name>Bread</name><price>2.20</price><amount>1</amount></item>
</list>
//How much does it cost?
val total = (shoppingCart \ "item").map(i => (i \ "price").text.toDouble * (i \ "amount").text.toDouble).sum
//This is a Symbol
val sym = 'SomeSymbol
//I'm too lazy to use Strings for XML! (Example for implicits)
implicit def symbol2string(symbol: Symbol) = symbol.name
//Now I can use Symbols too!
val total = (shoppingCart \ 'item).map(i => (i \ 'price).text.toDouble * (i \ 'amount).text.toDouble).sum
Lea Programming Scala, muy buen libro :) –