I came across a blog post criticizing aspects of Scala: http://blog.joda.org/2011/11/real-life-scala-feedback-from-yammer.html I’ve thought about it a bit and I’d like to share my take on the criticisms.
First off, the criticism of SBT doesn’t hold a lot of water for me personally. SBT isn’t the simplest build tool out there, but it gets the job done in my experience. Build toolchains are a convenient place to hook on a lot of responsibilities but I don’t think that’s a good idea in general.
As far as training goes, if you believe you’re using the right tools, then it’s worth it to take the time to help good people get up to speed on those tools. I’m okay with funky code in the system because funky code is a part of the learning process and I think there’s always learning to be done in software.
Regarding complexity, I expect there’s a trade off between expressiveness and complexity. I think the less code you have to write to express your thoughts, the more maintainable it is in general (not a concept to be taken to extremes). The question is whether the complexity is worth the effort to learn/master it.
Writing highly performant code is an art in any language and there are always caveats that go along with it. Focusing on those aspects every time you write code is a premature optimization. I suspect there’s lots of ‘ugliness’ in the performance sensitive parts of most systems.
Should everybody be using Scala? Absolutely not. The points are valid and may be enough to turn off some from using Scala but I think the trade offs are worth it.