I read the post "Don’t Call Yourself A Programmer, And Other Career Advice" on the weekend. It is mostly aimed at permanent employees at companies, although I thought there were some useful takeaways for contractors as well.
Below is my summary of the points that resonated with me:
- Engineers are hired to create value for the company, not to write programs. There is big demand for jobs that add value to an organisation, but aren't that interesting. The programs are a means to an end - the end being doing something that reduces costs, or doing something that increases profits. So your only goals are to add revenue and/or reduce costs.
- It's better to work for a Profit Centre rather than a Cost Centre.
- Language isn't too important; A good programmer can pick up a new language fairly quickly. In my experience, if you work as a contractor you will mostly need to have at least 6 months of demonstrable experience at the particular language your client is using to get the job.
- Networking is important, as most jobs are given to people as a result of networking, rather than a cold job application. A good agent will help to mitigate this.
- Study negotiation! "It is a little disconcerting that negotiation skills are worth thousands of dollars per year for your entire career but engineers think that directed effort to study them is crazy when that could be applied to trivialities about a technology that briefly caught their fancy."
- The most important professional skill is communication. This means being able to communicate effectively in memos, emails, conversations, meetings, and presentations.