Software developers are an intriguing mix of artist and engineer. This is what makes them so creative, but is also the root cause of an epidemic in today's applications--poorly engineered code.
The problem is that software development is not treated like other engineering disciplines. The core concepts are taught, but the rigor is not required prior to becoming a professional. Universities teach courses on cryptography and algorithms, but almost none teach quality or security as part of their software engineering or computer science majors.