I always used to tell people I'm an artist impersonating an engineer. I've never really felt like an engineer - let alone a good engineer. But I will never call myself a developer -- more on that in a minute.

Over the years, I must have had some daemon process running in my head that somehow managed to piece together the seemingly unrelated bits of engineering knowledge together without me really paying attention, because lowe and behold, one day I started to "get it". I am an engineer, first from what I know, and second from what I've learned and burned.

So let's talk about how to "get it" and get a job getting it.

Usually the first gate of high salaried engineering positions is good old fashion algorithm analysis. Get the basic data structures/types and complexities memorized to impress the desk jockies. Next pick a language, laser focus on the APIs, and try to implement the algorithm structures without using libraries.

I've interviewed dozens and dozens of engineers, and we always like to see that you know CS.

Next up -- we expect you to have some battle scars that only being in the trenches of engineering can give you. Learning the lessons on why and how you do things a certain way --- the common problems engineers face -- and the conclusions and solutions that have arisen out of them.

Also, have a narrative -- a story about your engineering background.

And stop calling yourself a developer! -- in some ways this simple word exposes your mentality -- let me explain why:

Developer in engineering land is another word for "hacker" -- e.g. someone who doesnt understand the nuances of programming, the finesse of refactoring, and the triumph of code that scales.

Dont be a hacker -- someone who brunt forces their way through a problem without the knowledge, wisdom and experience of doing things "more better".

The flipside is that most engineers start their careers as hackers... that is until we are not.

Once you begin to understand how chemistry, physics, math, number theory, language, and algorithms all tie in together to make this fantastical yet painful world of computing, you will know that you have gone down the right path.

Next??

Do you know what happens in memory when you execute a compiled program vs a high-level script? Do you know how code compiles, do you know what compilation is, do you know what an assembler is? Do you know what language theory is, regular expressions, turing machine, Alan Turing, finite state machine? Do you know what computation is, or how to manipulate bits and bytes to encode anything under the sun? Do you know the tenets of a solid API contract? What REST is? What HTTP is, TCP? DO YOU KNOW WHAT A POINTER IS?? Do you know what garbage collection is, do you know, do you know, the difference between ISAM and InnoDB?

There is a huge chasm between developer and engineer and you have to show that you've bridged the gap. It's like the difference between a jock and an athlete. One is faking it, the other one is making it.

All of this fundamental knowledge says nothing about the soft skills you'll need for success -- collaborative development, sharing code, translating business objects into engineering tasks, communicating effectively, etc. etc.

There is so much to KNOW and EXPERIENCE, but it's not impossible.

Learn all the things. Get your hands grubby, have some battles, tell a story. Above all else show that you can code, that you play nicely with others, and you make good engineering decisions.

This is all from the hearth of my engineering home. Others may have a different perspective, but this is mine, and if you sit in front of me and I interview you, this is all in my head and I'm 10 steps ahead of you when you need to be one step ahead of me. What does Potassium have to do with any of this? You tell me.

Finally, don't be a hacker (longer than you have to)

All else fails, fake it til you break it.

Bye, and Good Luck.