Wednesday, September 9, 2020

What I want in a new Software Engineer

 Chatting with a potential new hire, I wrote this, and wanted to share it with the world.

What skills would you be looking for in a new software engineer?

The ability to get stuff done. Concrete working project experience is nice. In my career all the CS theory stuff about data structures is 10% of the job, and sometimes an important 10% and it's good to know that stuff, but being able to apply it is what really matters.

I like to have a live-coding portion of the interview process to make sure that someone isn't all talk and can actually make a computer go. In a 45 minute interview session I give a puzzle that can be aced in 10 minutes, done well in 20, and most people get it within 30 minutes. Then we chat about the design tradeoffs and how it could have been done cleaner for proper code and optimizations and things like that.

Extended ramble

Above was the core point; below is the appendices.

Don't get stuck in one data structure. I've seen people who only program in (javascript, ruby, perl) who think of every problem in terms of a hash/dict object. You should also be comfortable with arrays, multi-dimensional arrays, trees, heaps, linked lists.

You should be able to recursively descend a tree, but also loop over an array. Be able to think about a four level nested for-loop over data. Understand what it would mean to put an if statement at any level of that.

Underlying operations can matter. An SQL lookup is not O(1) just because you don't see what's going on inside.

Well structured code is wisdom. Some people have a talent for it, more likely it will come with time and reading and writing lots of code. I should not expect a junior hire to do this great, and I should try to be a gentle mentor and use my 25 years of experience to say, "it might be better like this..."