Recently a colleague of mine posed this question. Well, specifically his question was, “what software development skills will be valuable for college students to know if they wanted to pursue a career in cloud services and/or application development,” which after thinking about my reply, I realized could be condensed to the question that’s the title of this blog post.
So what makes a good cloud developer? Here are a number of the key attributes, skills and personality traits that I think are essential:
Critical Thinking Skills: Any developer worth their weight will have good critical thinking skills. I’m talking about being able to take a vague concept, business process or problem and break it down into logical components. I would hire a person with excellent critical thinking skills who has little to no experience with a particular language but had a strong work ethic over another candidate who had experience with the language but relied on Google to find code snippets or design patterns for everything.
Attitude: To dovetail to the previous item, if you’re a critical thinking jerk, I’ll pass. I have yet to find someone who is so incredibly amazing at what they do that they can be the office jerk and get away with it. No thanks. I’d rather someone who is slower or less experienced, yet works hard and does so with a good attitude.
Communication: This skill transcends development – being able to communicate clearly both in verbal and written forms is incredibly valuable. Often developers are required to do more than just develop – including gather requirements (listening), coordinate testing, gather and solicit feedback, announce new features, collaborate with coworkers, work with customers and present to stakeholders. Not only will having good communication skills help you be successful at your job, you will also have power to clearly state your position and have a better chance of shaping direction on projects through key decisions.
Constantly Learning: Don’t settle for one language, learn and conquer them all. This will not only make you more marketable, but will also give you additional options when approaching a problem. The pace of technology is accelerating. Unless you keep learning and adapting to new technologies, systems and concepts you will soon find yourself behind. In sales, you are taught to Always Be Closing (ABC); for developers it is Always Be Learning.
Data: Experience with one or more relational databases (MySQL, SQL Server, Oracle, etc) and relational data concepts. Pretty user interfaces are great, but they’re useless without the data behind them to drive the applications. Knowing how to structure data as well as consume it will help you be a better developer. Additionally some working knowledge of XML would be important, especially when working with web services.
Web Services: Cloud development becomes really useful when connecting one or more services or datasets either between cloud vendors or from a cloud offering to an internal system. To do this you will need a working knowledge of web services (REST or SOAP) – how to write them and how to consume them. You can rapidly accelerate the time to delivery of a solution by leveraging existing services in the cloud and knowing how to quickly integrate with them is essential.
There are a lot of items listed above, more than I expected when I first set out to answer the question. Some of them are more important than others, however I think that someone who can master the skills listed would clearly distinguish themselves among their peers in the job market and find themselves working on very interesting software projects.
I would love to hear what people think about this list. I expect there will be some who take exception or find things I have omitted, so feel free to comment and let me know what I missed.
Finally, I like to think that being a good developer (cloud or otherwise) is like being a good carpenter. You may start off doing a specific task on a job site, eventually building very basic, functional homes, but over time you will acquire the tools and skills to build incredibly complex structures. Go and build something today.