Here's the think about academic-y types coding: The code is a means to an end, rather than the product itself. I'm guessing most people on this forum have an software engineering background, and probably care more than the average programmer about writing quality code and avoiding WTF's. You're steeped in code through school, and writing code is integral to a CS degree in the way math is integral to a physics degree. (Yes, I know CS != software engineering, but that still seems like a common enough degree->career path).
I'm not in academia, but I'm more scientist* than software engineer. I try to write sane, elegant, comprehensible code, but sometimes time pressures force me to do some ugly, ugly things to meet deadlines. I care about my code quality more than most of my peers, but the analysis I'm doing is always more important than code I might only use for one specific project.
I'm not going to defend that code as good code. However, the time of a scientist is finite, much like everyone else. If you suggest giving them stronger programming backgrounds, then you'll have to forego some other knowledge and skills. "Because we've always done it that way" isn't a great rationale, but "Because it's time-consuming to transition to a more modern language which few astrophysicists have even a passing familiarity with for marginal benefits" sums up the situation pretty darned well.
*Statistician, AKA "data scientist", as the current buzzword goes.