Software Engineering
Sam Lau  

Software engineering is not about coding – Why you will not be replaced by AI?

Recently, the AI hype is shocking the whole software industry. Every software engineer is talking about the possibility of being replaced by AI. The introduction of Devin, proclaimed first AI software engineer, certainly does not ease our mind.

I have been giving it some thought and reflecting on what exactly software engineering is with my experience. I don’t think the core of software engineering is about writing code, which AI is claiming to be able to do. I think there are certain skill sets that we as software engineers possess that can not be easily mimicked by AI, at least this or next generation of AI.

What is software engineering?

I believe the core of software engineering is solving problems with software. Writing code and deploying code is just a mean to the end. Company does not pay software engineers to write code. They hire software engineers to solve problems that some customers are willing to pay money to solve.

So, what are those skillsets that I think we have but AI don’t? I am going to break it into 2 main categories.

Logical skills – Thinking is hard

The first part I call the logical ability to problem solving. This include the ability to understand a problem. It is very often that what was ask to be solved is not the actual problem to be solve. This require an understanding of the problem space or domain to recognize the real issue.

This also include the ability to break down a high level problem into smaller sub problem. Users may be facing problem but that problem is usually high level and need to be broken down in order to be solved. That is something we do all the time, dissecting a problem a solve it piece by piece.

Moreover, there is the ability to foresee into the future. It is the ability to not just solve the problem right now but also foresee thing that could happen and prevent it in the first place or leave room to extend in the future. This is the ability to see the big picture. That’s way we talk about extendibility and maintainability. That’s not just about code but also the architecture of the system, how data is designed and so on.

Social skills – People are hard

The second part is people. People is the source of all problems and it is often the hardest part in software engineering. Machines are accurate and do whatever you told it to. The hard part is speaking the machine language. Human are fussy and hard to understand. You would be surprised by how much of software engineers’ work can be solved by just talking.

One of the import skill is just listen and clarify. I can’t tell you how many time I worked on something I believe is what the user want, only to realize I was wrong after I almost finish my work. This can be avoided just by listening carefully what the requirement is and ask for clarification along the way. One of the best lesson I learn is never write a single line of code if you are in doubt. Ask for clarification and only work on it with a clear enough picture

The other social skill is the ability to say no. I find so many engineer lack the ability to say no. They will say yes to whatever land on their plate. This link back to the ability to see the big picture. There are things that can be done but should not. There are things that should be done but not now. The ability to prioritize and say no to request will not only makes you but also your solution more healthy. Feature creep is a thing and a good product is not just a soup of endless features. Knowing when to say no and how to say no is one of the hardest skill in software engineering.

Conclusion

I think the development of AI is exciting and promising. However, It seems a bit too early to say it will replace software engineer. I can see it being a powerful tools and reduce the number of “code monkey” jobs. If you are serious about software engineering, I would not be too worried. If you don’t think you are there yet, practicing the above skills will surely get you there.