Talented Coder or Software Engineer

Michael Tran (mytee)
10 min readMay 7, 2018

Genius vs standard

Ask yourself a question: “Why all apps from Apple are very common, no fancy at all?

Sometimes, you find your job application hit a coding test. From the look of the job spec and code test, you can tell who proposed the job spec and what he looks for.

If the job spec asks for multi skills, multi roles, multi products and the code test is quite challenging, required high skills of coding. You can be certain that the one who listed the job is a coder and he definitely is looking for a coder. Remember the issues we discussed in “Rock climbing or high way” article? We know coder is always seeing coder, in his eyes only coder existed. He doesnt appreciate the engineers and their works to his eyes are always overdone. He values them with his vision that limited with his observation, mentality and experience. With hammer and nails he can put two pieces of wood together in 5 minutes, why need some metal frames that take extra work?

Have you worked out the metaphor yet?

The Metaphor

coder = handyman.

talented coder = very skillful handyman.

The facts

Engineer can do some handyman work, not the same way, and not as fast as a skillful handyman can.

Handyman -regardless of skills- cannot do engineer work as the background training and qualification are different.

Handyman mentality, logic and solution are driven by personal experience.

Engineer solution is based on standard, planned methodology.

Coder looks at doing the product .

Engineer looks at the way to do the product.

Coder does thing that can be changed best by himself.

Engineer does thing in the way that other engineers can understand and change it themselves.

In short, handyman is more productive, but his work is best maintained by himself.

The story

Say, you had a skillful coder in place, and he started working on the coding. Very impressed, you see the app showing, screen after screens; feature after features. The app released after 1, 2 years coding. You are happy. Happy? Wait! Lets look at this story again.

You know how coder is coding? you know how he codes like? any documentation? any comment? any standard applied?

No! All coders learn by experience. They spent countless days and nights in coding, they love coding, experiments, new coding techniques. The applications and the fancy result are their passion. In the same way, coding standard, readiness, maintenance are not the main focus. If you ask, they will say yes, but they dont pay great attention in them. Why? because it is coder mentality. They only get excited at the skills and end result.

If you looked at this coder codes, you will find a whole spaghetti. Not that he doesnt want to do it in the right way, he cannot with his mentality driven. You force him, he can do it in few days, but when the pressure come up, he will go back to his spaghetti coding style. That is coder’s nature. You cannot make a handyman become an engineer.

What if he walked away after 2 months? not too bad! you could get a new staff in, takes say 2, 3 weeks learning -the system, the application, the existing work- and continue. You feel sad a bit for that 3 weeks time as the new developer has not been productive. In a way, you paid 3 weeks for nothing.

What if he walked away after 11 months? Now it is bad. The new staff will take 4, 5 weeks to be somewhat productive. Some codes are too confused for him, some are spaghetti work if the previous developer didnt follow software standard.

What if he walked away after the product released? bad news! You will need to do it from beginning.

Watch out! If you still not see the picture, you might as well get in place another skillful coder. The story will be beginning with the same sad ending. Someones can do the same mistake many times.

The risk

You will find coders with programming short courses or self learning are often very talented, but their coding style is not standard. The best people who can make the change in their code are themselves. No proper comment, no software engineering practice, no proper document. They can be very productive but also destructive in the same time.

Why? This brings to the company the biggest risk: Technical Staff dependency.

1- After they left. It takes ages for someone who can step in and continue the work properly.

2- The damage of spaghetti code will make the product very buggy. By fixing a bug in one place will produce new bugs in other places. Some of them are very mysterious.

3- Project planing is inaccurate. You cannot do proper plan with ambiguous bugs or issues. You cannot do estimation on something uncertain. We call it “ ghosts in the shell” for the mysteriously pop in and pop out bugs. They will show up in a number of Springs and/or persistently in backlog.

The team

How the handyman works in your team when you are team leader?

Scene 1:

If he is not very skillful, he can go with the team, in a passive way, you give him a task, he did it well only his coding style is spaghetti. Can you work with it? yes, if you give him a standalone component, a blackbox. You dont have to worry about his mess. You know one thing for sure it will be buggy. You expect that he will be mad with his own work and will do it again from beginning one day. I saw this many times.

Scene 2:

He is very skillful, your young team members will realise it. They even compare your coding skills with his and easy worked out you are not as good as that coder. That genius eventually implied that you are an idiot and he is much smarter than you are. Can you work with it? Yes, give him stand alone projects that wont affect main project like admin tools, landing page, logs analyzing and alert... those require high level of coding and low maintenance.

The boss

What if the coder is your boss?

It is very unlikely, because the coders only look for coders. They dont want engineer, they dont like engineer. Not that they cannot work with engineers, but deep inside they know they are not in the same class, and they hate it. As we discussed in “Rock climbing or high way”, you dont want to be there in the first choice.

Someones are born to marry. The salesman boss will marry the skillful coder. The salesman boss says: “I dont care how you do it, but I want the product now”.

The coder says: “It is done, I released it”.

Loop here

repeat until they rebuild it from scratch {

The boss says: “There are bugs”.

The coder says: “I fixed it, tested, released it”.

The boss says: “New feature, do it now”.

The coder says: “I did it, tested, released it”.

}

The coder life circle

How you become a coder? Some coders come from programming short courses or Tafe training, where they get training to gain the skills. As you recalled, coders only want to improve the skills. After the basic knowledge, they jump into coding days and nights and then become expert in coding.

Can people from formal training in software engineering become coder? yes! definitely. In four year of software engineer course in uni, you can find students who are very high mark in coding, programming subjects and low mark in analysis, design, architect. Those are coder tendency. When they finished uni, joined a company, leaded by coders, they will drop everything they learned in uni and become coder.

Few of them eventually found the product is not ideal and recalled something about the software engineering subjects they have learned, then more or less correct themselves. This however is quite rare. Dropping standard is much easier than establishing standard.

Can a Software Engineer also be good coding even not to be a handyman? Yes. In many cases, the team lead must have good coding skill, team members also will develop coding skill. However, with the intention of the uni training, the team member must stand on the engineering ground to build up the coding skills. They must grow in healthy balance. They must do thing in the right way.

I can suggest a typical IOS engineer who is also a genius in coding. Tsutsumi Shuichi, https://medium.com/@shu223 . Lets look at his code in http://github.com/shu223. Very deep knowledge in IOS at kernel level and very standard way of coding, he did thing in the right way. Look at his work, you will see that you dont have to be fancy to be a genius.

Why software engineer?

Ask yourself a question: “Why all apps from Apple are very common, no fancy at all?” Because they know the problem of fancy genius. They lost heap of money on that genius risk. They keep emphasize the standard in every single seminar and workshop. Even Apple keep asking for standard and employing graduated uni software engineers for the standard, why dont we?

Things in common and great about the uni graduated are: They are greatly common! The universities produce mass production for the engineers. They look the same, they learn the same subjects, they get same training, they speak same languages, they write same languages. What they got from uni is international standard. They understand each others with same methodologies, technologies, UML, DBMS, scheme, charts…

The most important fact is they can replace each others. When you need new staff, the software engineer can be real quick become productive, if the one left has followed standard. When you want more staff, the new guy can easy trained because the work are following the standard, which is what he already trained in uni.

In short, they are like the caps for the milk bottles. They can fit on any bottle with standard size. They also know to follow the standard software engineering methodologies which ensure you work will be in safe side.

Do we need genius coder?

For quick and fancy product, yes. They can do thing use once and thru away products wonderfully.

For thing you dont want maintenance, then the coders do best.

For version 1.0, when you dont have your team, then best to get a coder to do it as contractor. You will build a team and do version 2 from beginning. It is not worth debug and maintain the coder work.

Can we use the skillful coder’s work? Yes. I often download, learn some excellent work from the experts via Github. With high respect, I change a bit — just a bit- to be sure it still works, and learn some advance coding techniques from it. Those that require more than 100 lines of code changing. I stay away, simply because these genius work are too … genius!?.

Do I want to improve my coding skills? Yes, I do. I read book, many books. I attend seminars, workshops from Apple. I paid for my teams to go there. I also download the sample codes from genius and learned a lot from them. I never stop leaning. However, I do the genius coding … at home.

Guys! Do it at home. Do the fancy apps to sell under your name. Dont apply the fancy technique to company commercial apps. Dont bring you genius things to work. The company and your team will suffer non-standard effect.

No fancy, the app still works perfectly matching the specs. With fancy, it comes with bugs. Why should you do it? Why you want to bring extra debug work for your team?

In the old days, people would be proud to have the genius coders in house. Since nobody like to pay twice for the same product. The companies eventually found that the coder work always lead to rebuilding the product from scratch.

There are significantly differences in the job advertisement and interview when people look for software engineer or coder. The first one is for qualification, experience and skills. The second one is for the skills.

Dont we need the genius?

No. We dont want genius coder when we want to build a team of software engineers to do thing in the right way. Remember the fact: Only genius coder can edit his own code effectively. The genius coders always do thing in their way which is always the hard way. No. You want the products extendable and maintainable.

The genius coder: I can do it from A to Z in short time.

The software engineer: I can build many reusable components that form many products. We do once, reuse in many products.

The genius: My coding skills are great.

The engineer: The coding guideline is the coding must be readable and maintainable.

The genius: My code is very talented. People look at it and impress with the impact. One line can do many things.

The engineer: Every file must be less than 400 lines of code for easy understanding. Every module must have comment in the standard. Express your logic in clear statement. If 1 line can do 10 things, write 10 lines to do 10 things to make them readable.

The genius: My code is wonderful, real fast in performance, using low level coding.

The engineer: Remember you write the code for someone to debug. Stay with high level and clear coding, no fancy.

As you can see, the mentality of both sides are totally different. The articles “Do the right way with component” and “Do the right way with teamwork” emphasize the advantage of team work and components.

The question we need to ask is “What do you want to build? A tree house or a house? a log or a building?”

According on your answer, you will need engineer or handyman.

Are you a coder? then go for coder, because the engineer wont agree with you if he is a pro.

If you are an engineer, then you can decide, based on the development phase of your project. You need a team of engineers to build the project in proper way, or you want something quick with handyman skills and build it again in future.

Further question, do you want a team of developers, or a group of individual coders? They are entirely different.

--

--