The best way to learn Scala depends on what you know already and the way you prefer to learn things. You will find there are a variety of different resources you can use to speed up the whole process. These include books, tutorials, training courses, presentations, and of course the Scala compiler for practice. Many people find a good combination is to have one of the Scala books at hand and to start right away trying the examples with the Scala Compiler. On the other hand, you may want to get started without a book or take a Scala training course. In that case, you will find on this website resources to help you get right on with the task but, as you may expect, in a somewhat more disjointed way.
As your knowledge of Scala grows, you will find there is more advanced material and a very friendly Scala community at hand to help you. They all share a passion for Scala and welcome newcomers warmly. Many have written helpful material for programmers new to Scala, will respond to emails asking for help or are sharing neat new techniques, advanced concepts or tools in one of several Scala forums or personal blogs. Perhaps join a Scala user group close by. 
To know more, just select one of the options below according to your existing experience:
Many things you already know from your Java experience directly carry over to the Scala environment. Scala programs run on the Java VM and are bytecode compatible with Java, so you can make full use of existing Java libraries or existing application code. You can call Scala from Java and you can call Java from Scala, the integration is quite seamless. Moreover, you will also be able to use familiar development tools, Eclipse, NetBeans, or Intellij  for example, all of which support Scala. So you have far less to learn.
Many top-notch programmers and industry leaders have been captivated by Scala. They have already created a growing range of books on Scala  for you to choose from. Many people prefer the organised structure of a good book to guide them through their learning process but typically like to complement this with hands on practice running the code examples with the Scala compiler. To do this you will need to install the Scala compiler .
Scala supports OO and Functional programming styles. You do not need to know any functional programming languages in order to learn Scala. Most of the books and learning materials will introduce you to the concept of passing functions to methods just like other variables, and other functional language features, like immutability, that make the support of multi-core concurrency much easier.
While you wait for a book you will find the following resources useful:
If you are a Scala programmer looking for more examples and help, you will a list of useful resources by following this link . You may want to check out the community resources  too, or browse the list of the available documentation on this page .
If you have no Java experience and are coming from these languages, then you will need to learn about the Java ecosystem. However, many concepts such as closures, passing functions, type inferencing or generics will already be familiar to you. Since Scala makes full use of the Java libraries and runs on the JVM you would probably find it useful to have a book on Java and the Java libraries handy: Scala code can call Java code and Java code can call Scala code, and some of the basic concepts and APIs in the two are related. In order to discover Scala and its features, you will probably need one of the Scala books , and the Scala compiler . You will also find useful some of the introductory resources  available on this website.
If you are a C# programmer, you may find the series "Scala for C# programmers" by Ivan Towlson on flatlander quite helpful:
If you come to Scala from a functional programming background, you will find most of the more advanced functional programming style familiar. Scala integrates OO and functional programming together into one uniform language environment. By the very nature of this integration, the syntax is a little more complex than in pure functional languages. Scala supports OO programming in a very natural way, and you can use a purely functional programming style if you prefer. Since Scala makes full use of the Java libraries and runs on the JVM, you will probably find it useful to have a book on Java and the Java libraries handy: Scala code can call Java code and Java code can call Scala code, and some of the features of the two are related. In order to discover Scala and its features, you will need one of the Scala books , and the Scala compiler . You will also find the introductory resources  available on this website.
If you are a language researcher, you will find "Programming in Scala" , the book by Martin Odersky et al, a good place to obtain a general overview of the language. You will find papers, talks, and other academic-related material on Scala, including in-depth discussion of the formal and theoretical aspects of the language, as well as implementation details, in the Language Research  section of this website. More introductory material on Scala can be found in the resources  section of this page, above. For an in-depth view of the technical details of the language, you may also find of interest the Scala Language Specification .
Nearly all of the material existing for Scala assume that you already have some programming experience and are familiar with the basic jargon. If you have never done any programming, you may like to consider starting with Java first, as there is a large amount of beginner material available. You may then want to progress to Scala from there. If you're impatient, however, it is entirely possible to start directly to Scala; in that case, we would recommend you find someone to help you setting up the Scala compiler and an IDE on your computer. The book "Beginning in Scala" would then be a good companion to start with; you can find further details on that and the other books here .
|Introduction ||Learn Scala ||In the Enterprise ||Research ||Community ||Compiler |