When I was an undergraduate, I changed my major to applied mathematics because I was interested in software development and scientific computation. I lost most of that interest because of RSI injury. Furthermore, I was surprised to learn that software development is not considered an academic activity, but rather something that is done by the industry. The typical Dr. Six-pack wants to get a "package" that does what he wants to do, and will only roll up his sleeves to write a program when absolutely necessary. The work invested in writing the program doesn't have academic value unless it leads to publications. As a result most such programs are of poor quality and are hardly a contribution to the software engineering aspect of things. Another way to describe the paradox that I am alluding to is as follows: compared to the software work that I used to do, theoretical research is a mental vacation.
Now this situation does not really create any problems for Dr. Six-pack. He will write a program that runs, make his pretty pictures, and publish his papers. It creates problems elsewhere. There is a great need, in scientific computing, for software infrastructure. In other words, software that enables you to write software. The industry compensates this need by inventing new programming languages, like the recent Fortran variants. Also, mutually incompatible scientific scripting languages.
What is really needed is infrastructure for scientific computing in the C programming language, and infrastructure for linking up with a universal LISP like programming language. When I started developing software for my graduate work, there was no such infrastructure. Now, the work in this page, combined with GSL and Lush are pretty much what I intended, although more work remains to be done.
My bottom line is that the best software can only be written by the person who will use it to get his work done. The best software is never written by someone with a product to sell. It is therefore necessary for the specialist to have professional software engineering skills, and for his efforts to be recognized by the academic community. Of course, that can't happen if his peers are not also professional software engineers. Furthermore, it is not reasonable to consider a software package published, unless it is freely available under a license compatible with GPL, and it is documented.
To be specific, when I talk about professional software development, I am thinking along the lines of software like TeX and Emacs and the GNU coding standards. To be sure, software development can be justified in academia, if you invent a new algorithm. Nevertheless, there are old algorithms that need to be reimplemented in C, or interfaces to the C programming language must be developed for previous Fortran implementations. Finally, there is a lot of documentation that has to be written. Who do you think will do all this? A thousand drunk monkeys?