The report summarises developers' expectations for Scala 3 and their view on the future of Scala.
Get in PDFThe survey was conducted from November 20 to December 20, 2020. 671 software developers from 69 countries around the world took part. Some questions were only shown to respondents based on their previous answers. For example, questions concerning Scala 3 migration plans were only shown to those who said they are planning to migrate.
Among our respondents, the biggest groups come from the United States and Poland, with 102 and 86 developers, respectively.
45.8% of the respondents started their journey with Scala 5-10 years ago. Just 10.7% declared themselves as relatively new to Scala, meaning they’ve been using it for less than 2 years. This indicates that the Scala community might not attract enough new programmers who want to link their future with the Scala language.
However, as the largest group started with Scala more than 5 years ago, it seems that those who did start their adventure with Scala, stayed with it for a long time.
Developers first use Scala as a hobby to later choose a professional career with it. 45.3% of our respondents have been coding in Scala professionally for 2 to 5 years and only 2.5% for longer than 10 years.
Again, it would be great if our community could attract more new developers and provide an influx of fresh blood. On the other hand, we have a lot of tenured developers, who stick with Scala, and given the liquidity on the IT job market, this can only be a good sign for the language.
Many experienced developers stick with Scala. Given the liquidity on the IT job market, this is what makes the Scala community, and the language itself, strong.
Almost half of the responders (48.6%) are members of in-house teams in large companies that hire more than 150 people. Only 6.7% are freelancers.
Scala has entered the enterprise world. It is not the language used only by consultancies and development shops anymore. Big companies tend to build their own Scala developers teams. We can link this with the popularity of Big Data and ML adoption in enterprises, the popularity of Scala among companies from the FinTech sector, and also a need for development of these firms' backend applications in-house.
Of all of the respondents, 91.7% use Scala to develop backend applications, 70.2% to build APIs, 59% to build web applications and 56.6% to develop distributed systems.
Scala is a prime language for backend applications, APIs and distributed systems, because it offers a lot in terms of creating abstractions and hence modelling various business domains. It is especially useful in the field of distributed data-processing systems.
As a surprise came that only 32.3% of the respondents stated they use Scala to build BI / Big Data applications and just 18.5% leverage it in Machine Learning (ML) and Data Science. Nevertheless, right behind Python and R, Scala is known for being a prime programming language for tinkering with data, especially Big Data and ML.
What industries do Scala Developers work in? The majority of the respondents chose the answer “other”. FinTech came second being a choice of 30.8% developers.
FinTech projects are usually long-term, large software projects that operate on vast amounts of data where Scala is a good choice. Using Scala can save resources and allow modelling difficult business domains precisely with the use of more complex abstractions that come with the functional aspect of the language. The event sourcing model, which is closely tied with immutability and functional programming, is a natural fit for many financial institutions.
This is another area where the mix that Scala provides: a familiar language, not departing too far from Java, with the functional capabilities, might prove to be a winning combination.
Top FinTech software companies use Scala and keep in-house Scala development teams. The event sourcing model, which is closely tied with immutability and functional programming, is a natural fit for their needs.
Not surprisingly, scalatest got first place. It is the de-facto standard for testing in Scala. There are other libraries which try to innovate in this area (munit and zio-test), but still scalatest keeps strong.
The compiler does a lot of checking for us when programming in Scala, but we still like to do our testing in the areas automatically verifiable!
Second place goes to cats, the Swiss army knife for functional programming in Scala. If you have a Scala project, chances are high that you are using cats or cats-effect directly or indirectly, through a dependency.
This might be because you need an abstraction for collections or effects, such as functors or monads, or you might use cats for the data types, such as the always useful `NonEmptyList`.
Last but not least, we’ve got Circe. As we all know, parsing JSON is the favorite activity of every Scala programmer (probably applies to other languages, as well).
Circe seems to strike a good balance between compile-time generation of encoders/decoders and user friendliness. Other libraries that are popular in that category include play-json and json4s.
In the HTTP domain, Akka HTTP still leads the way, but http4s and Play are close behind. Tapir and endpoints4s provide additional functionality to these servers.
This is complemented by sttp client on the client side. When on the topic of webapps, database access is an always popular theme. Doobie and Slick seem to be the most popular options across the developers who answered our survey.
We shouldn’t forget about concurrency libraries, a domain that is especially well handled in Scala. Here, we’ve got the long-time champion - Akka (along with Akka streams, Akka Cluster and Akka persistence) - the actor library that is one of the authors of Scala success. But we also have alternatives: the already mentioned cats effect with fs2, Monix, scalaz and ZIO.
A very popular entry, which we didn’t originally include as an option in our survey is Spark. There are a lot of Spark developers out there who are using Scala, and they shape a large portion of the ecosystem.
Finally, we have some handy everyday tools, which make our lives easier. This includes Monocle, quicklens, chimney or enumeratum.
Scala is not only a scalable and flexible language, but also an ecosystem that provides you with choice.
We’ve got mature and popular stacks, either focusing on `Future` as the representation of side-effects, or on “functional”, lazy constructs such as `IO` and `Task`.
Whichever of that is better suited for you, your team and your task – libraries to quickly implement the most common functionalities will be there to help you.
We’ve got mature and popular stacks, either focusing on `Future` as the representation of side-effects, or on “functional”, lazy constructs such as `IO` and `Task`.
Whichever of that is better suited for you, your team and your task – libraries to quickly implement the most common functionalities will be there to help you.
We’ve got close competition between Cats, Zio, and Akka. These represent the main three stacks that are used across Scala today. Seems like a lot of people are happy with their choice - which can only be a good sign!
There are some libraries with which developers struggle. It seems that Akka and Slick are the tools which people love and use, but also at times have a hard time understanding.
When it comes to Akka, maybe there’s a niche for an online Akka-centered course or a refreshment of the Akka books available? Akka has evolved a lot throughout the years, and there are significant improvements available, such as typed actors, but because it is not a new library, some of the existing material is outdated.
Read about Akka on SoftwareMill blog.
Another pain point seems to be Slick. As with Akka, the library is both used and liked, but also could potentially use more material on the documentation side. It hasn’t seen a lot of development lately, so probably more maintenance work would also be of good service to the community.
First of all, the majority of people who answered are happy with their current choice and state of Scala libraries, and didn’t mention an area that is not well-covered. Good job, library authors!
It seems that you have satisfied users!That said, there’s always room for improvement. When it comes to specific pain points almost none mentioned any specific existing libraries, but rather more general areas, which could be improved. Hence this shouldn’t be read as picking on any of the existing work, but rather showing where the next step in making Scala the best platform for application development might lie.
WORKING WITH DATABASES
The most popular area is very down-to-earth, and corresponds to a problem any developer writing backend or desktop application in Scala faces every day: working with databases. People have mentioned both relational databases, specific implementations (MySQL or PostgreSQL), but equally often NoSQL databases, such as MongoDB and as-a-service offerings by cloud providers. This also includes issues such as schema evolution and migrations, which need to be addressed in almost every application.
GRAPHICS AND UI LIBRARIES
This might be a surprise, but the second most popular topics are graphics and UI libraries. People have mentioned creating data visualisations, general graphics, 3D graphics, as well as creating graphical user interfaces. The web might be popular, but it seems there’s still a large market for traditional applications, with a traditional UI. Indeed, not a lot of libraries seem to be tailored towards solving these problems. Maybe a new niche for functional programming using Scala?
MACHINE LEARNING AND DATA SCIENCE
The third area is Machine Learning and data science. Scala is a popular choice in this community, due to Spark, but it seems people want more! The topic is quite wide, as it includes both deep learning, through NLP to interactive, explorable data sets. How about a numpy/scipy equivalent for Scala?
DOCUMENTATION
But libraries solving specific problems are not everything. Many people pointed that better documentation and examples are a much needed addition to the existing, already excellent libraries. An emphasis has been made on working code examples and scaladocs. A great area for new contributors!
JSON PARSING
The favourite topic of every seasoned Scala programmer: JSON parsing also makes a significant appearance. And not only that: XML, CSV, YAML, scientific data formats and general data serialisation and deserialisation also fall into this category. Some have mentioned general schema libraries for data format compatibility, though is a general solution possible? However, despite a number of developments, this remains a popular pick.
FP PURITY
Same for web libraries / frameworks, and more generally an integrated set of libraries, forming a coherent development platform. Not as popular as the other ones, but these areas also have significant presence. There have been concrete suggestions, like “Play with FS2”, and more general ones, pointing towards pure functional programming. “Spring for Scala” or “SpringBoot-like” set of libraries have also been mentioned, putting an emphasis on interoperability, no boilerplate for writing simple services, and in some cases FP purity.
SECURITY AND UNIFIED OBSERVABILITY APPROACH
Two related topics are security (with authentication and authorization), together with a unified observability approach, which includes logging, metrics, and tracing. The last functionality has also been mentioned in combination with the integrated development platform we discussed earlier. A cross-cutting concern, which needs to be properly addressed in our community!
Surprisingly, hardly anybody mentioned build tools, and tooling also wasn’t mentioned often. It seems that these two areas are quite well covered. We asked about libraries, but still got some suggestions on how to improve the Scala compiler, mainly through better error messages.
No mention of compiler performance, but again, that wasn’t really in scope of the question.Finally, some other of the more interesting suggestions:
▪️ concurrency: still hard, maybe async/await would make it a bit easier?
▪️ background job managers
▪️ distributed streaming, purely functional clustering
▪️ command-line applications
▪️ Kafka libraries: good Scala APIs covering both normal Kafka consumers as well as Kafka Streams
▪️ Enums, value types - this might be solved with Scala 3
▪️ File I/O
How active is open source community around Scala?Half of the respondents stated that they are actively engaged in Open Source projects. This is a very good indication that Scala Community is focused on creating better technology, nicer tools and user-friendly work environments with the spirit of OSS cooperation.
Let’s keep up a good work!We also believe in this and are committed to building a “Simple Scala Stack” — a step toward a better Scala ecosystem that could use simpler or better thought-through APIs.
The projects that attract most contributors across our respondents are ZIO and Akka. This is mostly in line with the most liked libraries out there. And probably shouldn’t be surprising: both ecosystems are growing and hence there’s a lot of work to be done around them.
A vast majority of the Scala Developers who completed the survey will be migrating to Scala 3. 78.2% answered yes and 19.2% answered not sure. Only 2.7% are certain they won’t be migrating. This is not a surprise as Scala 3 will introduce an improved and safer type system, better implicits and compilation speed.
97.4 % of developers is planning to migrate or is considering migration to Scala 3.
Scala Developers want to keep up with changes in Scala, but 42.5% of them do not have a specified timeframe for the migration yet. This is understandable, as there’s no definite timeline yet, the developers and teams are waiting for the libraries and tools essential for them to migrate first.
Our respondents expressed worries connected to Apache Spark and how it will adjust to Scala 3, and mentioned it as the main blocker. On the other hand, 27% want to migrate asap, or already started the migration, mainly in their open source projects, with commercial projects to follow. Scala 3 can expect many early adopters!
Apart from the obvious “all”, most people pointed out the founding blocks of the major Scala stacks: the Akka family, cats & Cats-effect, Play, ZIO, and Spark.
While Scala3-compatible builds for cats and ZIO are already available, migrating Akka and Play might take a longer time. An especially fragile component is Spark. Historically, it took many months for the data processing library to be migrated across minor Scala versions (for example from 2.11 to 2.12), so skepticism around a potential upgrade of Spark to Scala 3.0 is well-founded.
The scene here is quite similar to what we’ve seen when we asked about libraries that are currently in use. Cats, circe, ScalaTest, and Akka take the top spots. Hence, it doesn’t seem as if the Scala 2 to Scala 3 migration would be used to somehow radically change the stack that’s used in projects currently. This might still happen - but because of library availability (if a certain library isn’t available for Scala 3, out of necessity this will mean migrating to another solution). Once again, it turns out that Scala developers are quite content with their choice of libraries and frameworks.
Our respondents definitely have a good overview of what’s coming up in Scala 3! Every feature got at least a mention. Many people enumerated not a single, but a whole list of features. This shows that people are not only aware of the changes to the language, but also that they are keen to use them in their projects.
The biggest hope for Scala 3 is centred around the simplification of the language.
Simplification of the language takes many forms:
▪️ people expect code to be simpler, due to simpler syntax and removing some of the Scala 2 warts.
▪️ people hope that the language will be easier to learn, explain and introduce to teams, which are not yet experienced with Scala or functional programming.
Maybe somewhat surprisingly, the second most popular answer to our question on what’s the biggest migration benefit was very pragmatic - staying up to date. This has of course numerous variants. For example, one motivation here is keeping up with the ecosystem for easier maintenance and preventing tech debt. Another is keeping up developer excitement, “being cool” and staying on the bleeding edge.
That said, if we combined the votes for all the Scala 3 features, they would easily outnumber all other answers. But since we have them separated into rough categories, let’s look at what features are most anticipated.
BETTER TYPE SAFETY
As a type-safe language, better type safety and type system improvements have the lead here. Especially union types, and possible easier error handling, spark high hopes. However, opaque types were also a frequent entry. Enums as better ADTs also have been quite often pointed out.
BETTER IMPLICITS
Aside from type-system related features, people look forward to better implicits - so that they are easier to understand, discover, and debug. This somewhat intersects with compile errors in general.
COMPILATION SPEED
A “non-functional” requirement that was also very popular, is compilation speed. Whether Scala 3 meets this goal remains to be seen, however as the compiler implementation is brand new, building on the vast experience from the previous generations, we might hope that even if the initial releases don’t offer a significant improvement here, there’s good groundwork to improve on this aspect in the future.
METAPROGRAMMING
Finally, metaprogramming, binary compatibility (due to TASTy), optional braces have also been featured, along with a number of answers which simply stated: “all of the features of Scala 3”.
Learn Scala 3 Macros tips & tricks in this blog post.
We saw 3 major concerns among people who are not yet sure when (and if at all) they will migrate to Scala 3.
1️⃣ The biggest concern is backwards compatibility. Before any migration can begin, the ecosystem has to catch up. Many popular libraries will migrate quickly, but some of the more niche ones will take some time. And in some cases, libraries probably won’t migrate at all, making the migration of an existing codebase significantly harder.
2️⃣ Another reason for holding off with Scala 3 migration is Spark and Flink. It takes time for these popular big data toolkits to migrate to newer Scala 2 versions, hence the expectation is that migrating to Scala 3 will take a long time as well.
3️⃣ The smallest groups of responders pointed out that Scala 2 is good enough, or that there’s no clear benefit, these have been in the minority. And of course, ultimately this decision is in many cases up to the business, as it must fit within the business objectives of the project at hand.
44.1% of respondents are taking part in Scala training in order to build and refine their development skills.
As Scala 3 update comes in, a bit more, 60.9% of developers would like to take Scala 3 training or organize it for their team.
Overall, Scala Developers are avid learners and a vibrant community which share technical knowledge and enjoy learning from each other. Want some Scala content? Check out SoftwareMill Tech Blog.
If not Scala, then what?
It seems that the language that most of our respondents would like to use instead, or in addition to Scala, is Rust. Low-cost abstractions, functional features, speed and safety seem to be attractive traits to Scala programmers, even despite the lack of automatic memory management.
Go comes in second, and Kotlin - the language perceived as the main competitor of Scala - is only third, with half the votes of Rust. Hence it seems that the real competition for Scala is elsewhere, at least among people who are already working with the language. I would suspect that Kotlin might indeed fill the “better Java” niche, while Scala will compete in the functional programming arena.
Haskell is also quite low. This might be surprising - judging by popular opinion, many people would like to migrate to Haskell but they don’t, because the Scala market offers more jobs. But is that indeed so? Looking at the numbers, this migration path is not at all so obvious.
But all in all, the majority of Scala programmers want to remain with the Scala language and the ecosystem.
And join other Scala Enthusiasts for monthly programming and tech insights.
Get in PDF