Welcome to Skills Required for Software Engineering.After watching this video, you will be able to differentiate between hard and soft skills, describe the hard skills needed by a software engineer, and describe the soft skills needed by a software engineer. Hard skills are the practical skills needed to perform a particular role, so for a software engineer these will be the technical skills they need to design, build, maintain, and repair software solutions. Hard skills are learned skills. In the case of software engineering, they are usually learned in a school, college, or university environment, or by studying online courses, diplomas, or certificates. Alternatively, they can be gained from years of experience in the field. Hard skills are quantifiable, so it’s easy to measure whether an individual can demonstrate a particular skill and to certify them in that skill. Commonly required hard skills in the software engineering sphere include programming languages, version control, cloud computing, testing and debugging, monitoring, troubleshooting, Agile development, and database architecture. Soft skills on the other hand are less tangible. They are your personal characteristics and interpersonal skills. They’re the non-technical skills that are part of your personality and as such, are harder to define, quantify, or certify than hard skills. Because they’re not linked to a particular business though, they are easily transferable between roles and across industries. The job requirements for any role will be a combination of hard skills and soft skills. So, let’s look at some of the hard skills that are relevant to a software engineer. Software analysis and design skills are essential for a software engineer. You need to be able to analyze your users’ needs through a variety of methods and then design effective solutions that meet those needs. You also need to be able to develop those solutions. Computer programming and coding are essential development skills. While some job roles require a specific language and/or toolset, employers will sometimes welcome you with experience in any language but expect you to cross-train into their preferred language. The coding bootcamp website, Coding Dojo, states that some of the most in-demand languages are currently Java, Python, C#, and Ruby. An understanding of a variety of frameworks and object-oriented principles are also key skills for a software engineer. While you’d hope to always create flawless solutions, it is likely that at times your code will either not work or not work in the way that you intended. You need testing skills to determine whether your code meets the functional specification of the solution and if it’s easy to use. And when your code isn’t working as expected, you need debugging skills to work out why. When your solution is complete, you need deployment skills to distribute it to your users. These could include shell scripting, containers, and continuous integration and continuous delivery (or CI/CD) tools. You’ll also need monitoring skills so that you can review the performance of your solutions and troubleshooting skills to resolve any issues that may occur. So now let’s look at the soft skills of a software engineer. Teamwork is a key soft skill. Software engineers work in a variety of teams, some based on the project they’re working on and some based on their specific role. If you’re practicing Agile development, you may also work in small teams known as squads. And you might also work closely alongside another developer in pair programming. Working in teams enables you to take advantage of each individual’s strengths as well as providing opportunities for you to gain new knowledge and skills. You’ll need to be able to communicate with a wide range of stakeholders in your project – from technical colleagues to non-technical personnel. For example, you may need to ask: your peers for support and ideas, your manager for guidance and direction, your client for clarification of their needs, and your users how they’d best interact with your solution. Software solutions are often time-sensitive projects and as such, your managers will be keen that you meet their deadlines. Managing your own time is imperative to ensure that you don’t cause delays to others waiting for your work. And with increasing numbers of teams working across time-zones, what could previously only seem like a small local delay can create a whole day of lost time for someone located elsewhere in the world. Software engineers need great problem-solving skills to succeed. You need them: in the design phase to work out how to create an appropriate software solution, in the development phase to work out the code required to perform the task required, in the testing and debugging phase to locate and resolve any bugs, and throughout the lifecycle of the software to manage any issues that may arise. And when those issues do arise, you need to be adaptable to meet the changing needs of the project. Examples of changes include: Your client requesting a change or addition to the functionality, Your manager requesting you to move onto a different area to meet a looming deadline, Or your user requesting an alternative method of achieving a specific task. And finally, you need to be open to feedback on your work. Most software teams use some type of peer review system where peers review each other’s code. This helps enforce any corporate standards and improves the code. In a junior role, you’re also likely to have a mentor who’ll provide feedback and pointers where you can improve. And your stakeholders will provide feedback on pre-release and final versions of your solution. Accepting all of this feedback in an open and welcoming way ensures that your solution becomes the best that it can be and that you progress in your role. In this video, you learned that: a combination of hard and soft skills are essential to a software engineer. Hard skills are measurable, learned skills such as: Programming, testing, and troubleshooting, And, soft skills are your personality and characteristics, such as communication and problem solving.