Since I am currently working as a researcher for a University, I was asked to provide what I think the ten most important skills for students to have when they are looking to join the work force. I have originally written this as concrete skills, such as: JavaScript, Excel, ArcGIS. I’ve realized that this kind of list would lead people to focus on nice bullet points that they can put on their resume, but misses the point that a person is hired to solve a problem, not to write code in JavaScript.
I recently read Soft Skills: The Software developer’s life manual, and that probly influenced my perspective on this. I also came across a thread on Hacker News where the comments revolved around gaining some more business skills along with programming skills.
These are just some ideas I had and I kind of stretched it so I could make it into ten skills. Let me know what you think, and I can update them!
Top Ten Skills for the Job Market
- Documentation
- Not only should you document how something was done, but also how someone can replicate the same methods.
- Debugging
- It is important to look at any process, determine what may cause errors, and have a systematic approach to fixing issues. Fix only one issue at a time, so you can determine which fix solved which problem.
- Testing
- Once a process is complete, document a set of steps that can be run (either manually or automatically) so its functionality can be verified by you or other people on your team. It will also help with debugging when an unexpected change breaks the system.
- Communication
- Translate complex ideas into simple explanations that can be explained to people above and below you in the process. If something is too complex to explain, break it into smaller tasks until it is something easier to explain. This is applicable to data reporting as well.
- Modularization:
- Any large task can be broken into smaller parts that will allow the above four steps to be implemented. If you are having trouble with any of the above four steps, try breaking apart a task even further. This is a judgment call and will depend on your experience and the experience of you team members.
- Understand Standard Business Systems
- Most business systems can be described as “CRUD”, (Create, Read, Update, Delete), or “ETL”, (Extract, Transform, Load). Each system may seem to be completely unique, but most systems will be similar to established business systems. Build off of existing systems as much as possible before customizing the processes. This will make it much easier for new people to learn the system, to find tools that solve 90% of your goal, and to find other tools that can extend your system.
- Design Patterns
- Along with Business Systems, developers need to implement smaller functions to integrate existing tools. Many of these functions have been created and researched; it is usually not required for you to create your own new algorithm if something already exists. It is important to understand existing basic algorithms and what tools are available to you. There is almost no reason to implement your own algorithm when others exist, you will inevitably miss an edge case.
- Flexibility
- Systems will change and programming languages will change. Be flexible and open to work on many systems. You will learn new ways of doing things if you try something from a different perspective. This is where modularization and standard algorithms help a lot. It’s easy to translate small routine tasks to a new system, and gives you more time to focus on the core customizations.
- Time Management
- It is important to understand that your time has a dollar amount associated with it. If you manage it properly, you can get a lot more done within a workday and prevent needless overtime. Your job is to create value for the company, whenever you’re working on a task. You must think, “How is what I am doing now creating value?”
- Demonstrable Skills
- It is easier to transition to a new company if you can “hit the ground running”. Many skills can be learned on the job, but it is important that you have a foundation on which you can build. Demonstrable skills show that you have learned the basics and are ready to apply them or enhance them with new skills. They also show where your personal education has been focused and what strengths you have.