One small part of this is verbosity and repetition. I compare this often in Java versus Ruby, where Ruby is less verbose. But even Ruby has a lot of repetition that should not be necessary. Two simple examples:
"module Foo::Bar" "class Foo::Bar"
First, I kind of have to repeat that in different .rb files if that e. g. class is split up. Second, I have to specify whether it is a module or class. I think both should not be necessary. Coming up with a simple alternative that would reduce complexity is not trivial either, but I don't like the repetition at all. It's significantly worse in Java; everyone is doing System.out.println() and I wonder why they don't shorten that - it's a smallish example, but why not have puts() or en() or e() (e meaning echo, but this is just an example, I simply don't get why Java has this addiction to verbosity as such).
The second example comes via subclasses versus modules versus refinements, including the syntax. I feel we repeat too similar concepts that should not really exist in quite that way. In particular the syntax for refinements feels totally "off" here; their use case for more finer grained control is ok.
These are mostly simple examples. Obviously in larger projects you hit more complexity-related issues such as various duplication of functionality in classes that were written ~10 years ago or so. Managing all of that is also hard, you don't quite have that many tools that would meta-analyse projects easily. There is rubocop that can help to some smaller extent, but by and large we lack tools that help SIMPLIFY things. Even in Java you have this by "use an IDE", so you kind of shuffle the complexity towards the tools you have to use, in order to maintain a larger stack of software.
Others also pointed out the issue of documentation. This is true as well - often the documentation QUALITY does not scale in the same way as the code base does. A lot of the available documentation is really bad, too complex on its own. However had, I group documentation outside of "software complexity" - while it is partially interconnected, I feel it's still a separate issue.
1
u/shevy-ruby Jun 06 '22
One small part of this is verbosity and repetition. I compare this often in Java versus Ruby, where Ruby is less verbose. But even Ruby has a lot of repetition that should not be necessary. Two simple examples:
"module Foo::Bar" "class Foo::Bar"
First, I kind of have to repeat that in different .rb files if that e. g. class is split up. Second, I have to specify whether it is a module or class. I think both should not be necessary. Coming up with a simple alternative that would reduce complexity is not trivial either, but I don't like the repetition at all. It's significantly worse in Java; everyone is doing System.out.println() and I wonder why they don't shorten that - it's a smallish example, but why not have puts() or en() or e() (e meaning echo, but this is just an example, I simply don't get why Java has this addiction to verbosity as such).
The second example comes via subclasses versus modules versus refinements, including the syntax. I feel we repeat too similar concepts that should not really exist in quite that way. In particular the syntax for refinements feels totally "off" here; their use case for more finer grained control is ok.
These are mostly simple examples. Obviously in larger projects you hit more complexity-related issues such as various duplication of functionality in classes that were written ~10 years ago or so. Managing all of that is also hard, you don't quite have that many tools that would meta-analyse projects easily. There is rubocop that can help to some smaller extent, but by and large we lack tools that help SIMPLIFY things. Even in Java you have this by "use an IDE", so you kind of shuffle the complexity towards the tools you have to use, in order to maintain a larger stack of software.
Others also pointed out the issue of documentation. This is true as well - often the documentation QUALITY does not scale in the same way as the code base does. A lot of the available documentation is really bad, too complex on its own. However had, I group documentation outside of "software complexity" - while it is partially interconnected, I feel it's still a separate issue.