> In Java you're going make similar choices. which collection implementation am I going to use? Which hash implementation am I going to use? and so on
I've never seen a case where that choice was important; you can just use ArrayList and LinkedHashSet everywhere. Whereas the python examples are actual tradeoffs, and your code will be worse if you pick them wrong.
> you have a think more about designing it (abstract classes, interfaces) and refactoring is harder.
Disagree. Refactoring is easier in Java because your IDE can tell you what's broken (and even make a lot of changes for you); in Python you have to hope your test coverage is good enough.
> you're likely going to be using some dependency injection framework for Java. Do you use Spring or Guice? ( Most likely)
Choice of libraries is important in any language, and IME it's much more possible to get it wrong in Python. I have a perfectly good website backend from a few years ago, only it's built on TurboGears which is now defunct. PIL was about as big and popular a Python library as they come, but I understand it's now unmaintained. There are about 5 different XML parsers, in Python as it is in Java.
> If you use spring, do you use annotations or XML schema? If you use annotations how do you structure it? What's the scope of the bean classes? The list goes on and on.
Those are choices you make, but you make them once at the start of the project, and again it doesn't matter so much if you get them wrong because you can trust that all the options will be maintained for a while. In Python with no explicit IoC container you still have to solve the same problems, so you end up making the same kind of decision again and again.
> I've never seen a case where that choice was important; you can just use ArrayList and LinkedHashSet everywhere
You shouldn't. Sometimes you should be using CopyOnArrayList. that's one example.
> Refactoring is easier in Java because your IDE can tell you what's broken
It's harder because there's more code to sift through and it's easier to have bad design.
> Choice of libraries is important in any languag
It's not really the choices of libraries that's the big killer in Java. It's the freedom of usage of those libraries. Spring is a good example of this.
> Those are choices you make, but you make them once at the start of the project
This is easy to say for veterans. Not so much for newbies.
I've never seen a case where that choice was important; you can just use ArrayList and LinkedHashSet everywhere. Whereas the python examples are actual tradeoffs, and your code will be worse if you pick them wrong.
> you have a think more about designing it (abstract classes, interfaces) and refactoring is harder.
Disagree. Refactoring is easier in Java because your IDE can tell you what's broken (and even make a lot of changes for you); in Python you have to hope your test coverage is good enough.
> you're likely going to be using some dependency injection framework for Java. Do you use Spring or Guice? ( Most likely)
Choice of libraries is important in any language, and IME it's much more possible to get it wrong in Python. I have a perfectly good website backend from a few years ago, only it's built on TurboGears which is now defunct. PIL was about as big and popular a Python library as they come, but I understand it's now unmaintained. There are about 5 different XML parsers, in Python as it is in Java.
> If you use spring, do you use annotations or XML schema? If you use annotations how do you structure it? What's the scope of the bean classes? The list goes on and on.
Those are choices you make, but you make them once at the start of the project, and again it doesn't matter so much if you get them wrong because you can trust that all the options will be maintained for a while. In Python with no explicit IoC container you still have to solve the same problems, so you end up making the same kind of decision again and again.