Scala has a very wide surface area, and it can be as simple or complex as you want it to be.
Written in a certain way, it's that different from writing Python 3 with PEP-484 type annotations. You can easily write Python-like code and just get things done. :)
Concurrency-wise, you can implement any concurrency model you want on top of it, and, personally, I find immutability + Task-like implementations (Monix, ZIO, IO, etc.) easier to understand than CSP, but that's just me. There's also actors & channels & threads & anything else you could want.
What's cool, though, IMO, is that once you need more power than just Pythonic Scala gives you, it has one of the most powerful type systems in the world; you can verify as much as you need to, and refine things over time. It's not a language that hamstrings you once you do need more power.
Scala gets its bad reputation from that huge surface area and flexibility, though. There was a period (2009ish, maybe) where the Scala community was having a field day with its flexibility via custom operators like '<<++>>' and implicit conversions and untyped actors that made it impossible to figure out what was going on. It was like using the worst of Erlang with the worst of Haskell with the worst of Java. I'd say they've matured past that entirely, though; in 2020, it's one of the nicer and more practical languages, ecosystem, & communities IMO. Scala is made for getting things done.
I think that's the main problem. Everyone writes Scala differently. In Go pretty much everything is quite similar. In JavaScript people also write things differently, like any other language really, but in Scala it is compounded.
Is there a concrete example of the Python-like code vs the more complex ones? I appreciate the help.
I'm thinking what language next should I pick up. It is either OCaml or Scala.
> Is there a concrete example of the Python-like code vs the more complex ones? I appreciate the help.
Haha this book is going to be 400 pages of concrete examples. It's not out yet, so you'll have to take my word for it for the next few weeks while the last round of reviews and editing are incorporated into the manuscript. If you're interested, put your email down and I'll let you know when it's ready!
I've been wanting to learn more Scala and this book seems perfect! I'm definitely going to buy it when it comes out. The website mentions that there's a PDF download of the free chapters, but I can't seem to actually find it. Do you have a direct link?
This isn't helpful for you if you're trying to pick one, but I find OCaml and Scala somewhat complementary for my tastes:
Scala is a pretty great investment for services, big data, etc. It has a robust ecosystem.
However, the compiler is slow, and startup time can be slow (and Graal and Scala Native just aren't options yet), and if I want to make some tool that gets called fast in a loop or deploys as a "small", native binary, OCaml is nice alternative which I prefer to the only other compelling entry in this area, Go.
Experts' code looking like beginners' code is not a good thing! If better learning a language doesn't make your code clearer and more concise, the language isn't pulling its weight.
This is really neat! Have you considered an ML-like module system, with functors and such? I'd be curious if they could be connected with Erlang's processes somehow :)
Cannabis, although I find it's easy to accidentally dive deep on something I didn't mean to on it -- I find combining it with coffee prevents me from getting too focused on one thing. YMMV.
I don't think the issue here is due to static typing, but due to the age and complexity of the language implementation. It's not trivial to figure out how all of those extensions interact with each other and your changes.
Basic HTML Gmail hasn't changed in years and works perfectly fine for all of my needs for gmail: reading and sending emails. I find the current UI to be quite unusable, but at least there's still the basic html option.
Yep it's great. It loads way faster than IMAP would, I can see more than 40 emails on my screen at one time, and it has a very nice practical 2000s aesthetic with no unnecessary whitespace.
Anecdote: I recently purchased a laptop which came preinstalled with Windows 10. After trying 6 different Linux distributions -- Ubuntu, Fedora, Mint, Manjaro, Suse, MX Linux -- and none of them working (issues ranging from the installer not working to being totally unable to boot after the install to frequent freezing), I gave up and have gone back to Windows. I think I could've made Gentoo work with enough effort, but I don't have the patience for Gentoo that I used to.
I mean, maybe my experience would've been different with a different laptop, or maybe I could've put more effort in, but this is what stops Linux from being a daily driver for me. I don't want to spend all of that time just trying to find a distribution that works, followed by even more time trying to keep it working.
I disagree with Windows' direction more and more. I very much want to like Linux and use it as a daily driver -- I tried 6 popular distributions trying to get just one to work! -- but the reality of it stops me. If this is what someone who wants to use Linux experiences, how will it ever be able to catch on for regular desktop use?
(The best experience was with MX Linux. The hardware compatibility wasn't ideal; installing proprietary nvidia drivers broke the boot; power usage was kinda poor relative to Windows; but overall, I was able to at least use it.)
New laptops (or hardware in general) need a while to get going in Linux, I've noticed.
My mom got herself a new laptop while she was here to visit me, I installed Ubuntu on it, Wi-Fi kept crashing. It wasn't really stable.
Due to an unfortunate chain of events, her laptop spent another half a year with me, before she came back over to pick it up. I wiped it clean, reinstalled Ubuntu again, and now everything was working fine.
As a long time fan of Gentoo, I felt very at home on FreeBSD, and quite liked how everything in it worked. I remember my frustration was more around software and hardware issues. In the end, it wasn't Linux; I felt left in the cold if I ever wanted to use something that wasn't made for FreeBSD.
FreeBSD itself was a pleasure and I wish I could use it more. I've not found a linux distribution I've found quite as nice.
> The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.