Not so common “career advice” for programmers

Long term knowledge building over short term deliverables

Varun Bansal
6 min readJan 20, 2022
Photo by Ben White on Unsplash

It would really help me if you read this article at asynchour.com, since medium has decided not to support writers in India.

You are fresh out of college, landed a decent job. Salary is good, people are good, work is good. You are surrounded by qualified, knowledgable and experienced senior developers. You do everything you possibly can to stay, do good work, deliver on time and hope that you’ll become like one of the senior developers someday

It’s important to set goals and have aspirations. It’s also important to not make yourself miserable in trying to achieve those. Think of your career as a marathon, rather than short sprints of levelling up(promotions). Along the marathon, the level-ups should come automatically when you cross a milestone. The key is to avoid burnout in the middle.

But it’s easier said than done. I’ve trapped my self in this rat race for a significant part of my 6 years in the industry. I was burning myself out to stay on the top, which I now realise was only a small local maxima. I tried to list down some of things that might have lead to this behaviour and found it consistent with some of my friends in the same field.

  • The Impostor – Looking at my peers(tenured developers), I would envy them. The expertise and knowledge they brought with them was amazing. I wanted to be like them, quickly. At that point, when you are just fresh out of college you don’t know what is the right path to get there. You start to think that doing good at your job will get you there, so you work your ass off at your job. But in a hurry to get there, you start to fake it. You start to act like you are already there. You speak about things with confidence even if you are not 100% certain they are right, you try to look down on your peers. You don’t realise you are being a jerk because your head is so up your *** that you don’t bother to think about anything other than reaching that level. Well, with some luck you might even get there, but when you arrive there you realise you don’t actually have all the knowledge that is needed to succeed at this level. Now you realise that your brain tricked you into being an Imposter – you assumed you knew stuff, but actually you don’t.
  • Overnight Success – When you work with good people, it tends to automatically raise your bar. You admire them and want to be like them. But you don’t realise how hard they have worked to reach that level. You occasionally get the feeling that you are almost there, you know some stuff now too. But “experience” is something you cannot learn. You have to be patient and put your time into your craft to master it. The last 10% requires more effort than the first 90%. There are no short cuts when it comes to long term knowledge building.
  • Survivorship bias – Everyone has their own pace of learning and getting familiar with things. Some people like to dip their toe in before jumping in the pool. There might be times when one of these approaches might be better than the other but generally in the long run it doesn’t matter. You should stick with whatever works best for you. You only look at people who got promoted in 2 years, you don’t look at people who don’t worry about promotions and take their time to build the knowledge base first and then push for the next level. Not everyone’s trajectory is linear. A person might take longer to go from L1 to L2 but reach L3 faster because they have honed their basics and now they understand complex stuff with ease. Its important to look at a broader sample set when defining your goal.

There could be multiple reasons for you to run into any of the above traps. Lack of incentives for deep work, lack of mentors, lucrative financial benefits from promotions. But if you plan to stay at this job for 20 to 30 years, you better start making some smart decisions now and learn about what works best for you. It’s important because unless you figure out the right balance, there will be problems and you might miss out of some important stuff.

  • The Depth: In any field, it’s important that you have proper depth knowledge about the things you work on, anything less than that is trouble later down the road. For example, during my early years I used to work a lot in python, an interpreted language. I realised that the major reasons for working with python was because we wanted a language in which we could quickly prototype new software without worrying about stricter restrictions and guidelines, which is required by a compiled language. But I never tried to figure out exactly what those restrictions were. How adhering to those restrictions allowed compiled languages to run faster. Or how the flexibility in the interpreted languages saved time debugging simple issues but made it a lot more complicated debugging complex issues. This overlooking cost me when I was asked to choose a language for a new project. I did not have enough understanding of the internal workings of both the paradigms to take an informed decision. I just went with something that was recommended on the forums. These kind of mistakes don’t come up at the beginning, but as your project starts to mature, the bill comes due.
  • A better lifestyle – Making yourself miserable to get to the next level is almost never a good idea. Because no level is terminal, when you can say there is nothing more to explore. It is also a good indication that you are not ready for the next level and need to rethink about the areas where you are struggling the most. Your work is only a part of your life, being consumed by it will not make you good at it. All it will do is give you a false sense of accomplishment and make you a bitter man in your affairs, work or personal.
  • Good connections – When chasing a level up you wont realise how ignorant and rude you were to some people. It’s better to learn this early in your carrier, that you don’t just have to be good with people who can do something for you. Be good to everyone and focus on making good connections irrespective of the fact that they are in a position to help you or not.

All the philosophical learnings aside, to grow as a computer scientist, you need to learn the basics of whatever you are working on. Working with python, learn about interpreted languages and how are they different from compiled languages. Working on Apache Spark learn about Hadoop, what sparked the creation of Apache Spark. Working with DynamoDB, understand about NoSQL DBs and Columnar Storage Systems, you’ll be surprised at the things that they can and cannot do when compared to Traditional Relational DBs or Row-based Storage Systems.

Once you understand the basics the new tools/concepts/research is easy to understand and work with. Everything in science is built on the shoulders of giants, very few discoveries are completely novel. Someone decades ago did some research and you extend on it. A gang created a list of general Design Patterns and now we are creating more sophisticated use case specific architectures on top of them. Go back to basics, because they will change very rarely.

Try to be better every day!

--

--