(March 14, 2015 at 7:01 pm)I_am_not_mafia Wrote: I voted Java but only because it is open. It was a close thing as I don't like the way Java is developing and Mono exists now.
My job currently involves Java and Spring. I have been programming Java on and off since 1999. My last job was C#, which I had never used before and it certainly has some nice features. The job before that was Java and exposed me to Spring for the first time. I considered Spring a con. Programming became a matter of writing XML config files yet the config files never changed. Direct Inject / Inversion of Control was nice in theory but useless in practice.
But what I really hate is how magic is becoming more prevalent. Not just Java but C# as well. I understand the temptation to cut down on boilerplate code and to have things happen as if by magic, it does make development much faster. But in practice 90% of software engineering is maintenance of existing software and eventually all that magic more often than not needs to be removed to find out why it is messing up. The first three months of my current job has required me to take deprecated Java / Spring code and remove most of the old XML to make it auto-magical with annotations. It's certainly made the code simpler, but I'm sceptical as to whether it's actually the right way to go. I can't shift the suspicion that the correct way to do it is to dump Spring (and Java and C#) and do something new from scratch.
My programming language of choice is C++. I love code to be explicit.
I agree with much of what you said, particularly about "magic". I had to be dragged from my C comfort zone to Java/Spring kicking and screaming. I do find some disagreement with your position on IOC, though. It's useful for injecting runtime dependencies at appserver startup, and failing early if a resource is not available, rather than at runtime. In addition, instantiating expensive singletons early is preferable in my view. From a performance standpoint, it's useful, but not a panacea.
As is said frequently, the right tool for the job - and IOC has been a boon for the kind of work I so (mostly server-side RPC APIs).