Is the Scala 2 version of the Coursera course going to still be available?

I’ve just volunteered to facilitate a group of folks at my company who want to learn Scala. The intent is to help people with other programming background learn how to work in our backend.

My theory is that we should use the Coursera courses – they’re well-reviewed, and about as “official” as it gets. But I know that the Scala Center has been working to rewrite those in Scala 3, and that’s not actually ideal here: our backend code probably won’t even start migrating to Scala 3 until the second half of 2021, so teaching Scala 3 to these new students is probably going to cause more confusion than benefit. We’ll get to Scala 3 in due course (as it were), but for now I think we should stay focused on Scala 2.

So the question is, is it still possible to do the Scala 2 version, or has that been withdrawn? I haven’t played with the MOOCs hands-on yet (I’m of the “grab a manual and dive into code” school of language learning personally), so I don’t know how the setup works.

Due to budget timing, we need to buy the licenses soon, so any guidance folks can provide would be helpful. Thanks!

2 Likes

I’m currently doing the Scala 2 courses at Coursera and have found them very useful. The STD LIB and Scala Tutorial at https://www.scala-exercises.org/ is also good for getting a grasp of Scala’s breadth. I have not found a lot of good youtube sources yet, although Martin Odersky’s talks always gives me better understanding of programming in general. I would highly recommend expensing a couple of books on the topic. They will probably give you the best overview of the language. The 3rd edition https://www.amazon.com/Programming-Scala-Updated-2-12/dp/0981531687 might do well for you. Since Scala 3 is maintaining backward compatibility it shouldnt be an issue.

Hello!

The Scala 2 version of the Coursera courses will be available for sure until Scala 3.0.0 is released (so, not before 6 months I would say).

Ideally, the next step would be to update them to Scala 3 so that newcomers learn the new way of doing things. My hope is that we would not have to publish both versions (Scala 2 and Scala 3) in parallel and that people following the Scala 3 version would be able to work with Scala 2 codebases with no troubles.

However, as your post suggests (and some discussion we had on gitter), it seems that several people are worried that it would not be so easy to work with Scala 2 if you learn Scala 3. I would like to understand better why this is the case. From my point of view, almost all the concepts you learn in Scala 3 are still valid in Scala 2 (our courses don’t mention very advanced concepts such as polymorphic functions, type lambdas, existential types, implicit function types, etc.). I see several differences between Scala 3 and Scala 2, but they are mostly superficial in my opinion:

  • optional braces: as the name suggests, braces are optional, which means that we teach both syntaxes anyways (with and without braces)
  • quiet control structures require minor syntactic adaptation (e.g. if (b) x else y vs if b then x else y)
  • enumerations are easy to translate in terms of sealed traits and case objects
  • implicit parameters and given instances remain the same core concepts, and it’s easy to translate from Scala 2 syntax to Scala 3 syntax and vice versa
  • implicit conversions use a slightly different syntax
  • extension methods are the feature that requires the most significant changes between Scala 2 and Scala 3 since they are modeled in fundamentally different ways.

Please let me know if you see anything that I missed, and more importantly if you think I underestimate the amount of effort to mentally switch from Scala 3 to Scala 2.

If the community tells us that keeping both versions of the course in parallel for a couple of years is important for them we will take this into account.

2 Likes

As the one who brought this up in Gitter: I think this is a really serious matter for those of us in larger Scala-centric companies.

My scenario is that, starting in January, I’m going to be facilitating a couple of classes of folks who are learning Scala for the first time. Many of these are going to be relatively junior engineers, and the goal is to get them to the point where they can potentially work in our backend codebase.

That codebase is, obviously, entirely Scala 2 at the moment – more importantly, I expect it to be mostly Scala 2 for some time. We have hundreds of Scala repos, some of them very stable and mostly in maintenance mode, so I expect Scala 3 adoption to be gradual. My guess is that the serious Scala geeks (eg, me) will start to port to Scala 3 late-2021, but I would expect some projects to take at least a year after that, maybe longer, depending on their available time and appetite for new-and-different. (Frankly, the fact that 2.13.4 and 3.0 can interoperate is deathly critical for us – if it wasn’t for that, I suspect we would never get to 3.0 at all.)

That being the case, these new engineers are mainly going to be looking at Scala 2 code, and I’m sorry: the notion that you can learn Scala 3 and just quickly pick up Scala 2 looks off-base to me. It’s a senior-engineer viewpoint, going “these concepts are basically the same”. Junior engineers see syntax first and foremost, and Scala 3 looks like a very different language than Scala 2. Many concepts have a different look-and-feel, especially the hardest concept, implicits. If you already know a dozen languages, sure – the mental translation isn’t too bad. If this is your second language, though, that’s a serious barrier.

IMO the Scala 3 course is likely to be a poor choice for relatively junior engineers who need to be diving into Scala 2, which is going to be a large fraction of the audience for a while yet. It’s intellectually interesting and all, yes, but as a practical training course it’s the wrong tool for the job: we need something that is more closely focused on the problem at hand, which is getting junior engineers up to speed and able to work in a Scala 2 environment.

And honestly, I would expect it to be frustrating as hell for them to be put through a course, and then told, “and now you’re going to work on code that looks dramatically different from what we just taught you”. I would expect to lose some of them in that transition, completely negating the point of the exercise.

That’s why I brought the question up on Gitter: if the only Coursera option was Scala 3, I was going to have to find an entirely different course and platform for training our new folks. (Which I would prefer not to do: the Scala Center Coursera course is generally the best-reputed, so I would prefer to use it.)

So I would strongly urge y’all to leave the Scala 2 version of the course up on Coursera for at least a year after the release of Scala 3. Many larger shops like ours are going to need some time for the Scala 3 transition and are going to be onboarding more new Scala engineers in the meantime. We’re still going to need that course for a fair while…

2 Likes

Hi @jducoeur and thank you for bringing this up.

I work at the Scala Center and I am supporting Julien in the Education Department.

You mention a “course” but we maintain several ones on Coursera.
We are working on upgrading them, but as with your codebase, it is going to be a gradual process.
The first two are going to be “Functional Programming Principles in Scala” and “Functional Programming Design in Scala” for which we are targeting the first trimester of 2021.

In order to maintain consistency with the specialization, the courses that are currently published will be upgraded to Scala 3 and maintain their previous url (coursera.org/learn/progfun1 and coursera.org/learn/progfun2). However we will create new courses with the Scala 2 version of the material, so that content remains available while Scala 3 gains on popularity.
This is a technical detail related to how coursera works.

Okay, cool – that sounds like it’ll work great. I don’t much care what the URLs are, just that the “legacy” Scala 2 material is available for a while, during the transition period. Thanks!

2 Likes