Published: 09/16/2020

A friend of mine recently got in touch with me, I was catching up with him and we were talking about our lives and careers. He’s struggling to make a living without much clear direction, I suggested he should become an engineer because the starting salaries are really good and you can build cool stuff. He’s a creative so it makes a lot of sense.

He posed the above question to me. I answered, with a question:

Suppose Santiago was a shepherd. He sold a bunch of his sheep to his friend, then he sold, 10% of his flock, 6 sheep to a merchant in town. He took the proceeds to travel a journey to find a lost treasure near the pyramids of Egypt. How many sheep did he have in his whole flock?

Yes, that is Santiago from the Alchemist. This is a basic word problem, to solve it, you need to use basic Algebra.

Y is the size of the flock,
y * .1 = 6

X is the number of sheep he sold to his friend
y - 6 = x 

Y is the flock size, .1 is 10% in decimal form and 6 are the number of sheep that Santiago already has. It becomes a simple problem from here:

y * .1 = 6
(y * .1)/.1 = 6/.1
y = 6/.1
y = 60

His flock was 60 sheep

y - 6 = x
60-6 = x
54 = x 

He sold 54 sheep to his friend

I told him, if you can solve that problem, you can be an engineer. Why?

Why can you be an software engineer?

I argue that if you can solve the above problem you have the basic skills to move from joe plumber to joe programmer. Here’s why:

  1. Solving word problems are a lot like solving real business problems. You need to analyze the problem and determine some kind of out come. It’s logical, step by step, algorithmic thinking.
  2. “Coding” is only one part of the job, sure for some people it’s 80-100% of the job, but it’s not the only thing. Back when I was doing “Agile” scrum development, I would routinely spend 2-3 hours a day in meetings. I wasn’t even in management. Often times, developers spend a part of their time: reviewing requirements, asking for clarification, writing tests, arguing with QA and writing some code.
  3. Reading comprehension is vitally important. If you can solve the above problem it shows that you understand the problem and know how to translate it into a solution. Reading is important and often overlooked by many developers. I can’t count the number of times a senior colleague came to me when the answer was easily explained in the documentation!
  4. You spend most of your day reading code, trying things and debugging, more then you will (normally, unless it’s a new product) writing a bunch of new code. Thingy X has to work with Thingy Y and can’t break feature A or B while using C. That sort of thing.

What are the basic competencies a developer needs?

  1. Ability to read, understand requirements and work with a team to build those things.
  2. Ability to work on a team and with other people.
  3. Ability to program in 1 language, ideally several.
  4. Ability to think logically.
  5. Ability and desire to learn & grow

If you have the desire to learn and grow, the ability to read and work with other people and finally knowledge of at least 1 language; probably would be good to know a framework too. Then you can become a professional software engineer.

You probably won’t be building software systems to shoot rockets into outer space, or solving biomedical research issues; you’ll probably join the corporate rank and file building next generation APIs, data storage and learning all the buzz words of your new industry. You can make a lot of money and you can have a lot of fun doing it.