Communication And Programming

One of the most important changes in how software development happens these days is that developers also have to be reasonably competent at communication. The days where software development used to be an isolated/sheltered activity is going away and not being good at communicating yourself well will increasingly become a handicap for good developers.

  1. A lot of learning now comes while a framework or a platform is being used. You need to know how to raise an issue and public/OSS projects often require developers to meet standards for reporting issues.
  2. The project manager as a layer of defense is also an increasingly unreliable one. Developers are now more exposed to clients or management a lot more and they need to have the ability to both articulate what they think and also comprehend well enough what the client/manager is trying to say.
  3. There are real costs associated with developers being unable to comprehend what is required and communicate what they are trying to do. The direct cost is a lot of frustration and delayed deliveries. The indirect cost is that effort is spent on trying to fix the fundamentals where as the same effort could have been spared for improving the product a lot more.
  4. Development is a lot more distributed these days, which means you should know how to write better commit logs, better comments in code. From things that were at the fringes of the software development world these factors have now moved to the core.

Unfortunately, the computer science education frameworks have not kept up with this change and it will cost a lot of otherwise great developers good opportunities.  A developer who is familiar with a distributed mode of working will find it easier to find better work and fit in also better. 

It is not very difficult to train yourself for this. There are thousands of open source products/frameworks that are developed in the open. Even with zero experience, you can start contributing to them and start learning the tools of the trade, beyond what is normally covered in a typical software development course or a computer science degree.