The way I see it there are 3 core skills that are important in corporate software engineering environments, understanding logical trees, finding solutions to obscure problems on the internet, and making sure you write the right solution to the problem.
These can be split into:
* Reading Comprehension + Persistence
**Understanding and Writing logical trees**
Understanding and writing logical trees is the primary filter in programing jobs. If you cannot comprehend and create complicated logical trees you will not be able to do the job. It is less difficult than logical proofs in an introductory discrete math class in university. The difficulty is that logical constructs are what we work with and there are very many of them.
The most popular logic problem used in software engineering interviews is called FizzBuzz. This is a pretty simple problem that is comparable in complexity to problems you will encounter as a software professional.
*Write a program that prints the numbers 1 to 100.
For each multiple of 3 print Fizz instead of the number and for each multiple of 5 print Buzz instead of the number. If a number is a multiple of both 3 and 5 print FizzBuzz.*
While the problem is pretty simple if you cannot work your way through it in half an hour interviewers will confidently assume that you are not capable of doing the job.
**Finding solutions to obscure problems on the internet.**
The second big skill is, “finding solutions to obscure problems”, luckily for the modern day programmer 95% of all problems have a solution on the internet. Whether that problem is accessible via google or hidden on github and stackoverflow.com is something you will have to figure out.
Sometimes finding that solution may take hours of trawling the internet and reading through the source code of dozens of dependencies. A software engineer needs to be able to persist through the search despite there being no apparent progress and the high probability that the actual issue is a small oversight that you thought was irrelevant and then forgot about.
These problems tend to be either compiler errors or figuring out how to get a library to do what you want.
**Making sure you write the right solution to the problem.**
The last big skill is making sure you write the right solution to the problem. Typically, software is used to automate internal business processes or to sell products to customers. The people who currently perform these processes manually or sell to customers are not software experts. They are business process or sales experts. Its our job as the Software Engineers to interpret the requirements of the business and turn them into explicit logical steps that fulfill the business need. This is a difficult problem and people who can do it well are rewarded.
One of the big problems in corporate software development is that the people who can deal with logical trees and have the persistence to struggle with a compiler all day are not abundant in the skills required to understand what the business wants or needs. And since extracting the business requirements in sufficient detail can be an arduous process companies will often hire Project Managers and Product Owners to deal with it.
We have gone over the most important skills for a corporate software engineer, dealing with logical puzzles and trees, searching for obscure answers to problems and building the right solution to the business problem. Hopefully, this gives you an idea of what is needed to be a successful Software Engineer.