Hacker News new | past | comments | ask | show | jobs | submit | eeperson's comments login

The major things from Scala that I find useful are:

- higher kinded types

- null in types

- for comprehensions

- macros

- opaque types

- implicits/type classes

- persistent immutable collections

- EDIT named & default params


This always seemed strange to me. If your team can't be trusted not to make spaghetti in a monolith, what stops them from making distributed spaghetti in microservices? In theory the extra work of making an API call would give you smaller bowls of spaghetti. However, once you add some abstraction to making these calls it seems like developers are empowered to make the same mess. Except now it is slower and harder to debug.


> This always seemed strange to me. If your team can't be trusted not to make spaghetti in a monolith, what stops them from making distributed spaghetti in microservices?

It's far harder to update multiple services to handle requests they should not handle, let alone update a deployment to allow those requests to happen.

Walls make great neighbors, just like multiple services make teams great at complying with an architecture constraint.


> Walls make great neighbors

I think you're trying to solve a communication problem with a technical solution, which is a recipe for trouble.

If multiple teams working on interdependent components can't communicate well enough to keep from stepping on each other's toes, imposing technical barriers probably isn't going to make things better. Especially once you inevitably realize that you put the walls in the wrong place and functionality has to move across borders, which is now a major pain because you've intentionally made it hard to change.


> If multiple teams working on interdependent components can't communicate well enough to keep from stepping on each other's toes, imposing technical barriers probably isn't going to make things better.

But it actually does, and there is a lot of data to prove it. When you have a big project and a bunch of teams, the first thing you build is boundaries / walls. Then you get to defining interfaces between interdependent services. And this frees them up to get hacking on their modules in parallel - without stepping on each others' toes. Communication would have definitely helped, but it is way easier for smaller teams to own and operate their services and try to get a big organization plough through a big mess.

That said, microservices are just one way to solve a problem, and not always the right way. But there is always a place where you would look at the problem, the organization that is tasked to solve it, and it would fit just right in.


been there, done that.


> It's far harder to update multiple services to handle requests they should not handle, let alone update a deployment to allow those requests to happen.

I'm not sure I follow this. Doesn't this just mean that it is harder to make changes? Why would it be harder to make bad changes and not harder to make good changes?

> Walls make great neighbors, just like multiple services make teams great at complying with an architecture constraint.

I'm not sure I follow this either. Why would multiple services make teams great at complying with an architecture constraint?


It doesn't have to be. If your devices support HDMI-CEC[0], then you can turn on 1 device and everything sets itself up. For example, I can turn on my PS4 and it automatically turns on the TV and sets the correct input.

[0] https://en.wikipedia.org/wiki/Consumer_Electronics_Control


My Samsung TV "smart" feature overlays for 1+ minute when using HDMI-CEC.


Couldn't a malfunctioning sync process undo a soft delete as well?


Null is more ambiguous than an explicit conflict. If there is literally no record, even of the delete action then there's no timestamp for last write wins.


Why do you feel that Scala has just as much historical baggage? Isn't the whole point of the Scala 2/3 split to remove historical baggage.


Although beware, those pull through sharpeners are notorious for doing a terrible job sharpening knives. They take off far more material than needed and tend to produce an edge that isn't very sharp. YMMV.


I’m aware.

The context here is someone who does little cooking and just wants a sharp knife three times a year.


You could use a weight combined with pulleys or gears to get a faster acceleration.


Yes, a large part of Scala 3 was explicitly about improving ergonomics and making language features clearer to use. Some examples of this are:

- Greatly improved error messages [1]

- Revamped implicit syntax that makes it more straightforward to declare type classes and extension methods. [2]

- Simplified support for macros [3]

[1] - https://www.scala-lang.org/blog/2020/05/05/scala-3-import-su...

[2] - https://dotty.epfl.ch/docs/reference/contextual/type-classes...

[3] - https://docs.scala-lang.org/scala3/guides/macros/index.html


Taxes can work if they are also combined with a dividends [1].

[1] - https://en.wikipedia.org/wiki/Carbon_fee_and_dividend


Canada's carbon pricing works this way (though, technically, it's not a tax) and, generally, has popular support. The rebate varies between provinces and is calculated along with your tax refund.


You may want to read the article. This is different than carbon permits[1]. This is about carbon pricing[2], which appears to be much more effective.

[1] - https://en.wikipedia.org/wiki/Carbon_emission_trading

[2] - https://en.wikipedia.org/wiki/Carbon_price


Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: