Tuesday, July 21, 2015

The Gap Between a Developer/Programmer and a Software Engineer

I am by far not the authority on this but at this point I am more of the former, but have some glimpse of the latter, and hopefully will be able to move over.

Most of the time these are interchangeable but what I am really talking about is the difference between programmers at places like banks (IT) versus the ones at tech companies (CS) like Google.

I have never worked at a tech shop but recently spoke to an interviewer at Bloomberg,  a finance company but whose life blood is mostly in the technology and we did talk about what tech shops look for in general.

The former companies don’t see technology as their life blood (developers are under traders,  bankers, …), even though they should. I mean if the systems fail, all hell would still break loose so you would think they hire good developers and keep them happy and productive. But most of the time it seems we are the first to get cut, the last to get any rewards, and have to deal with clunky systems and bureaucracy… They also hire a bunch of code monkeys (as my friend likes to put it) and domain experts, people "really good" at just one thing which they have been doing for many years. 

The majority though aren’t much of an expert…  just old. Doing something for many years does not automatically make you an expert or even good at it. Furthermore, do you really want someone who cannot keep up with the times or evaluate and adopt new technologies that are would increase efficiency or create new innovations?

Tech companies, again from what I've heard, understand that technology is their life, blood and they need their systems to work perfectly... 99.999% of the time... and at a much larger scale. 

The systems I work on are tiny and with users who have no better options (we’re a mini monopoly).  How many users does Google handle per second? And how much competition do they have?

In addition, they innovate like crazy…  code monkeys do not innovate… For innovation, you need engineers, who are unhindered by constant bureaucracy (we have a lot of that, takes forever to get things done). And at that scale, they better know how to optimize like crazy too (algorithms and data structures). 

...so if I want to fall into the 2nd group, I’ve got my work cut out for me. I don’t think I am a code monkey, as I constantly look for ways to improve our systems (using new technologies) and fix inefficiencies when I see them. But currently without Algo. and DS, I cannot think at their scale, where tiny inefficiencies that I may overlook, become huge problems... 

As I told the interviewer: at the scale I work at… list.Sort() is good enough… at a tech companies it rarely is.

But there may be another element: the subjects also provide building blocks and frameworks that may be very helpful for creating new technology.

I think I am pretty good at making  1 + 1 > 10… An engineer with his knowledge can make  1 + 1 > 100 or maybe  1,000,000….