

Most of my career was spent working for small shops that provided custom software for small-ish clients. The absolute number one skillset required was the ability to talk to clients, understand their business and figure out what they needed the software to actually do. Not only are these skills not taught in Computer Science programs, it’s never even suggested that you might possibly need them at some point in your career. In my opinion, this is why CS types cling so tenaciously to a rigid division of labor in software development: they want somebody else to do this and then hand them a well-written requirements document.
For me, developing applications was a joy … but only when I was left completely alone to do everything by myself. Such opportunities were just becoming rarer and rarer.