Mindset
Coder's Mindset
By, Akash Mehta

Drawings Credit: Piyusha Gupta

  • November 21, 2022

Two developers walk into a shop to buy a very fancy lamp each. This lamp has multiple brightness and color settings and has a Bluetooth connection, speaker system, and so on.

Smart lamp technology

The first developer is a meticulous person, so the moment he gets home, he picks up the manual and starts reading the booklet, but finds out that it's in German, so he decides to enroll in German classes.

He searches around and finds out that the only German class in his area is 30 minutes away by car. So, he decides to buy a car and start taking driving lessons. He joins the nearest driving school and starts to learn how to drive. On the first day of driving school, he accidentally drives over a nail and is forced to do a wheel change.

But being the kind of person he is, he decides that before he does a wheel change, he must learn the basics of physics involved in the process. So, he leaves his car and starts to look for the nearest university.

A month goes by and the two developers meet up for drinks.

The first developer asks the second developer, saying "So, how far have you reached in figuring out that lamp? I am still trying to finish my Automobile Engineering so that I can learn how to drive to my German classes, and finally be able to read the manual."

The second developer looks at the first one and says, "What are you talking about?! I got the lamp working 5 minutes after I got home"

Problem solving approaches

The first developer exclaims with 2 months of lamp stress on his shoulders, "How did you manage to do that? As far as I know, you don't know German, and even if you are the fastest learner, it would have still taken you a month at least. Not to mention, I checked and there are no German classes near you, nor do you have a car. Taking all this into account, how are you already done?"

The second developer pauses, looks at the lunatic and says, "I just pressed all the buttons one by one until it turned on."

The life of a developer

This may be an extreme example, but development in the professional setting is similar to this story.

When you are given a task, it's rarely something straightforward. Most of the time, you will have to jump down a rabbit hole and hop from one fire to another. 90% of being a developer, is about understanding existing flows, rather than implementing new ones. And, depending on where you end up working, existing flows are usually so interconnected, that it takes months to get a grasp on them.

This is a problem, both for you and the person who would hire you. Because they are expecting results, preferably from the day you join. And you are someone who wants a job and hates being fired.

A personal example

I was asked to port a couple of java applications to Springboot. You may or may not have heard of it, it doesn't matter.

Even though I was completely new to Spring boot, I managed to port almost all the applications without a hitch. When I hit the last and the biggest of the applications, suddenly, nothing seemed to work.

No matter what I did, the application would always give some error message and crash.

Thus started my week-long crusade into the world of Springboot. I went through Stackoverflow, Github issues, Google articles, and even Korean and Chinese error reports that Chrome translated to English, and found out that one dependency was causing the error, which unfortunately was used by a second dependency, which couldn't be changed since it would conflict with a third dependency, and so on and on and on.

I felt like I would have gone crazy with these dependency issues until one day, I started the application, and it finally worked.

To this day, I have no idea what I did, or why it worked. All I know is that it worked.

The two kinds of Developers

I believe, that there are two kinds of developers, the Theoretical one and the Practical one.

In easy-to-understand terms, most developers will someday ask a technical question on StackOverflow, and the ones who answer will almost always be the theoretical developer.

The Practical Developer is always concerned with the answer and cares little for whys and hows, but a theoretical developer would take care to properly understand the technology, the algorithms, and every minutia of the code before trying to do anything.

Does that mean one is in any way better than the other?

Let's consider a simple example, a developer has to implement the security protocols of a nuclear power plant. In such a system-critical state, who would you rather have? A practical developer, or a theoretical one?

Alternatively, a developer has to add a button in your UI, but they have never used the language before. Which one would you rather have now?

Real-life situations aren't this black and white, and as anyone will tell you if you aren't a bit of both, you are neither.

Pattern-spotting is everything

When faced with something you've never seen before, don't try to learn everything. Instead, look for patterns:

  • Parse how functions are created and called
  • Understand how parameters are transferred to variables
  • Identify how conditions are checked
  • Recognize how functions are called and values are set

Given these patterns, and no other prior information, you will be able to solve unfamiliar problems.

Code patterns and structure

The crux of the matter

So, what is the crux of the matter here? Coders aren't meant to be scientists, but neither are they meant to be, for the lack of a better comparison, monkeys. A coder's mindset needs to focus on the solution to a given problem while having enough knowledge about the different avenues to get there.

Being in any engineering-centric field means that you are constantly learning new technologies and concepts since the world is constantly evolving.

Knowing plain HTML was considered the peak of technology when I was growing up, but now it's the most basic thing you need to know as a front-end developer.

Similarly, the concepts of micro-services, containerization, AWS, etc. are all new concepts that have become mainstream in recent years.

You can't keep up, and that's okay

Does that mean you need to always be reading up on every new tool, new language, and new technology to stay relevant? Is your life as a coder completely cursed to be a life of research? Do you wish to get out now and become a world-renowned artist or a swimmer?

Well, that's the point I am trying to make here, you will never be able to keep up with the growth in technology. The advantage of being a practical coder comes with the capability to be highly adaptable.

"You don't need to know every language out there, if you know one, you know them all. You don't need to know how to use Docker, Kubernetes, AWS, Springboot, etc., you just need to know how to read and spot patterns."

You don't need to know every language out there, if you know one; you know them all. You don't need to know how to use Docker, Kubernetes, AWS, Springboot, etc., you just need to know how to read and spot patterns.

You don't need to know everything, just have strong theoretical basics, and everything else will come naturally.

Drop Us a Line

Let's Connect?

Happy to connect with you. Our team is excited to start this journey with you. Please, enter your details and we will get back to you within 2 business days.

Enter your details!