Hello, friend 👋, and welcome to your journey into the Scala programming
Scala Works aims to be your guide to help get started in the Scala 3
ecosystem. It started with one person with a crazy idea, but now that you're
here it's two - we're already stronger together! We, as a community, aim to be
open in hearing your challenges, frustrations, and tips to make working with
Scala as drop-dead simple as possible.
We are geared do drive forward Scala 3 - the latest version of the language. Scala 3 was a big overhaul, and you could even say it's a new language! But don't despair, because most of the language was refined from Scala 2 to 3 - concepts and mechanisms are outlined a bit different, but generally map between the two straightforwardly.
One complete overhaul from 2 to 3 was the meta-programming/macro system. These are incompatible between the two versions, however the macro system for Scala 3 is much more developer friendly, and gives people like us new superpowers!
One thing we are going to use our new super powers for, are build some slim frameworks/libraries using Scala 3's meta-programming that allow us to take "project skeletons/scaffolds/templates" to the next level, and automate them at the code level!
Who is Scala Works for?
Scala is a wonderfully flexible language, and we're not here to tell you what is "right" - because ultimately what is right, is between you, your team, and your projects. If you've already figured that out, then don't take our suggestions as gospel or an attack.
We will talk authoritatively about code style, formatting, structuring, etc... but please know this comes from a place of education and not a authoritarianism. We aim to provide a collection of best practices, not the definitive collection of best practices to help port your experience in other programming languages to Scala.
With that in mind:
We aim to be for:
- People who are new to Scala, that don't have their own "style" opinions yet
- People who are looking for a broader idea of "style" out there
- People who just want to adopt a style, and get coding
We do NOT aim to be for:
- People who already have developed their own "style" and prefer to do their own thing.
- People completely new to programming (but see the Learning Scala section for links)
What does Scala Works do?
Or, I should say will do, as we grow:
We, as a community, aim to provide a set of standard, best practices, and "generally good advice" with things like:
.gitignorefiles that consider all current Scala tooling
.scalafmt.conffiles to give you a style that keeps your codebase standard
.scalafix.conffiles to keep your codebase clean
project structurerecommendations, to keep your codebase consistent
project templatesthat you can use that have all of the above already set up for you.
Standard. Clean. Consistent. It's amazing how far this can go to make your codebase more approachable to everyone on your team.
We would also like to provide some slim frameworks/libraries that wrap (and not re-invent) functionality from existing, excellent Scala libraries, in order to provide good ergonomics around what we think are some "core, essential" frameworks that every developer newly entering the ecosystem expects. With these frameworks, one can learn the underlying tool without worrying about the edge cases, and get to work. We think these include:
- HTTP/Web Server (REST and GraphQL)
- Front Ends (SPAs)
- Static Site Generators
- CLI tools
Building applications isn't worth much if you can't ship your code. We also aim to provide advice for:
- General build/deployment strategies
- CI/CD strategies
- The platforms for Scala (JVM, ScalaJS, Scala Native)
I've set up some topics in GitHub Discussions - feel free to join in the discussion!
We're sure you'll pick up knowledge along the way, but there are already a great number of absolutely amazing resources on learning Scala. There is a great list here on Scala's site.
With that in mind, we don't want to duplicate that effort. We're here to help you use Scala, and abstract utilities "up the stack", so the initial boilerplate you might get stuck in can get out of the way.
Saying that we're new, and growing is currently an understatement, but feel free stay tuned as we start to set up more resources!