Me too. Python is a lot like perl. You can do anything you want in it. Which can make it unmaintable. Even the first time it is developed on a team. For the mediocre programmer (lots), even when they are writing alone, but over several weeks.
It takes discipline to limit oneself to one style of programming. Even there, there is no guarantee that later teams won’t have the same discipline. If we were Haskell programmers or even Scala, the problem would look worse. Monads are an impossible concept in those languages. Python takes those intractable problem and makes it worse.
Clojure (any lisp) can be used in an undisciplined manor. It still requires a much greater level of discipline to use. Which will make for better systems. Unfortunately, the requirement is you need more than mediocre programmers in the first place. For large corporations that offshore a lot of maintenance it makes it harder to find contractors that can pull it off. Good programmers are good programmers and not cheap. They are cheaper in other countries, but not that much cheaper. Experience in functional programming and lisps aren’t common on the ground. That will make them more expensive.
Having said that, good programmers (can) always create better products. That leads to systems that are more robust and need less maintenance. That equation is too close to long-term-thinking. The people that reach senior management generally can’t master that skill. So talent is undervalued. They’d rather pay $million tomorrow than a penny today. Largely because they’ll be gone when catastrophe happens. Look to Fukushima or Deepwater for perfect examples of that.
Clojure can be easier to reach the ideals of the Haskell programmer. The architect and programmers need to understand the basics of category theory to pull that off. A skill most Haskell programs don’t use. They create Monads, Scala has bunches of libraries to that have pre-built structure. It isn’t as robust as using concepts category theory but it’s close enough for them. They are hideously complex. Clojure is much easier to apply the concepts. Programmers of that level aren’t common on the ground. Good programmers are expensive. See the remarks about senior management above.
Clojure plus ClojureScript is better [my opinion] for systems development. Monads are often brittle. The initial development can be elegant. Those 2am wakeup calls often break the model. At that point, the system won’t recover. Clojure patterns are more elastic. Then I’ve been using lisps on and off for four decades and less than a half decade of putzing with Haskell and a year of putzing with Scala (which I’ve decided isn’t worth the time). ClojureScript in particular allows us to get much closer to the advantages of Python that those languages.
MIT gave up on scheme because one can teach the the theory behind programming with Python. It’s too easy to mix and match paradigms which makes is less suited for teaching theory. Lots of kids come into MIT knowing Python and more can use it to get part time jobs helping out on web sites during and immediately after school. So there’s less impedance getting students into the class to begin with. Again, my opinion, but I think MIT would have been wise to start with Clojure/ClojureScript rather than Python. I don’t know if that would have been true at the time they switched away from Scheme. Now that beginning class is more applied than theory, I doubt there is a chance they can go back. I’ve only been using Clojure for awhile. I don’t know what is was like five years ago. The people at MIT would have a clue. I’m just projecting.
I think your comment on how using Clojure is improving your Python is common. Rather than using every programming patterns that are built into Python, you learn to take a functional approach. It’s made you a better programmer. That’s almost always happens.
Clojure doesn’t have the best tooling. Too many people are Emacs users, they don’t really get the point. Most CommonLisp environments are better that way. They are expensive, especially if you add on all of the web progrogramming libraries. I’m spacing the name, but there was a computer & OS that was designed for AI applications in the 80s, that had a great environment. It would have been great if the tooling people had used a good Smalltalk system for awhile. Those had the best environments I’ve used. Python doesn’t have the ability to build a Smalltalk quality system. But Clojure has the opportunity to get a lot better. Debugging sucks in general. It doesn’t not close to Eclipse/Java. It was designed and built by Smalltalk programmers, which might be why. I think that’s part of the reason Python is better at the things you’re missing from Python.
There have been a few recent announcements about tools that are addressing some of the hot loading advantages of Python. I don’t have any experience with them. If you learn more, I’d be interested in hearing from you.
Have you looked into Clara? I have a feeling that could really help bridge the gap.