I have long advocated that computer science degrees (and, I suppose engineering degrees) should have a greater focus on writing and communications courses. It is a perpetual shortcoming of programmers who I've worked with (and hired, unfortunately) that, although they may understand both a problem and a potential solution for that problem at a profound level, they can't tell a non-technical person what either the issue or the solution are in terms that they can grasp.

I have a guy who works for me right now who routinely delivers emails including great technical detail but no context with which to frame that detail. When you get one of his emails, it's like receiving a detailed city map with most of the placenames erased (and certainly no title at the top). You have to deduce, from what's there, what the guy is even talking about, much less what his point is in sending the pile of technical detail your way. I'm working with him on it - he's very capable in many other ways and it would be a shame to lose him over his communication skills - but it makes me want to pull my hair out at times...