# I am the Watcher. I am your guide through this vast new twtiverse.
# 
# Usage:
#     https://watcher.sour.is/api/plain/users              View list of users and latest twt date.
#     https://watcher.sour.is/api/plain/twt                View all twts.
#     https://watcher.sour.is/api/plain/mentions?uri=:uri  View all mentions for uri.
#     https://watcher.sour.is/api/plain/conv/:hash         View all twts for a conversation subject.
# 
# Options:
#     uri     Filter to show a specific users twts.
#     offset  Start index for quey.
#     limit   Count of items to return (going back in time).
# 
# twt range = 1 8
# self = https://watcher.sour.is/conv/2uxogza
@eaplmx I'm pretty biased because I've been using scala as my language of choice since 2013 or so πŸ˜†

Whatever documentation issues there were in the early days have long since been addressed, in my opinion. Martin Odersky, the original creator of the language, is in academia and regularly publishes academic articles on scala and its theoretical underpinnings along with his students. So, if you're into that sort of thing, there's lots of theory to read. Since it's typically a top-20 or top-30 language in various language surveys, there's a lot of StackOverflow activity about it, meaning more nuts-and-bolts practical stuff. The major libraries and frameworks nowadays tend to be very well documented (I've never used play and cannot speak to that one).

Scala doesn't look anything like java. You could write scala that looks like java if you want, in the same way that you could write C that looks like java if you want. But idiomatic scala is not like java, and generally the OO facilities in scala are not used (in my experience anyway). You can compile scala to Javascript and run it in a browser, or to native machine code--it's a distinct language with the JVM as only one of its compilation targets.

Where I stand is that I refuse to use a language that doesn't have a sound, well-described theoretical foundation anymore. I've been burned too many times learning languages that lack a clear foundation (*cough* python *cough*); I think this inevitably leads to a lot of wasteful hacking and confusion. I also very much want functional programming constructs to have first-class language support, without being forced to always use them forever like you would in a language like Haskell. It's also nice to have a big ecosystem of existing code to use if you need it. Scala satisfices on all those criteria, and has a bunch of other nice features besides, so I stick with it. It's definitely not for everyone, but 🀷
@abucci What do you mean by Python lacking a clear foundation?
@lyse I said that directly after
> Where I stand is that I refuse to use a language that doesn’t have a sound, well-described theoretical foundation anymore.

There's no "theory of python" as far as I've been able to find (I'd be happy to be pointed in that direction though if it does exist). Scala is based on Dependent Object Theory. Haskell is based on Algebraic Datatypes and monads. Etc. python's a mish-mosh of imperative programming, object oriented programming, functional programming other stuff. That doesn't mean it isn't useful. It just means that for me personally, I don't trust it the way I trust a language based on a firm theoretical foundation.
@abucci Well, there is the Zen of Python https://peps.python.org/pep-0020/ But I don't know how current it is.
@abucci Hm. Lots of languages offer different programming styles. Anyways. @eaplmx Yep, that's a good start. It's still valid in my opinion. But I fear abucci is looking for some more hardcore stuff. :-)
@lyse well, if you're going to go there, then every Turing-complete language can support any construct from any other Turing-complete language. That's not a very helpful way to look at it, though. Each language makes some constructs easier to do than others. Even a trivial algebraic data type in java will be dozens of lines of code, whereas in scala you can make one in a handful of lines of code and in Haskell it's often a one-liner, because those languages are tuned to doing that and java isn't.
Been following this Yarn for a bit over the last few days and its getting kind of interesting... πŸ˜… I _think_ one of the most important things for me as I get older and less capable of learning new things (+being blind) is readability.

> Code is read much more often than it is written.

That being said, a language's design is also extremely important and it is important that it is also a consistent design. Language design is hard πŸ˜… It took this guy months to get a concurrency model built for the programming language tau but he finally did it and I _think_ its brilliant ! πŸ₯³
Been following this Yarn for a bit over the last few days and its getting kind of interesting... πŸ˜… I _think_ one of the most important things for me as I get older and less capable of learning new things (+being blind) is readability.

> Code is read much more often than it is written.

That being said, a language's design is also extremely important and it is important that it is also a consistent design. Language design is hard πŸ˜… It took this guy months to get a concurrency model built for the programming language tau but he finally did it and I _think_ its brilliant ! πŸ₯³