A Small Advice to Younger Software Engineers

A lot of younger software engineers have been approaching me for taking my advice to become good software developers. My recommendations are very simple: The problems with many of the younger generations of software engineers are that they emphasize more into learning programming languages and frameworks, and excited to learning new technologies, but not focusing on basic programming fundamentals for writing good, maintainable code. Learning a new language doesn’t make you a great programmer.

Programming languages are just providing a mechanism to write code by using its grammar and semantics. Even by using a good programming language, you can write very bad code if you don’t have knowledge. I’ve seen that people use modern programming languages and finally writing bad code with it. So a language doesn’t make you a better programmer, but it does make sense when you incorporate good software engineering principles with your choice of programming language. I highly recommend starting with learning SOLID principles to become a good developer. You can start applying SOLID principles from functions to class level, then move to module/package level, component level, and finally at architecture level to design highly cohesive components for building distributed systems at scale. SOLID principles are basics for building great software systems based on clean architecture. When you start to write code by using good software engineering principles, you will become great developers regardless of which programming language you’re using. Once you’re good on core fundamentals, then explore various programming paradigms such as functional programming, concurrent programming, etc. Once you become a good developer, then you can learn anything independently. When you learn a new programming language or something else, you may feel that this language/technology is an an evolution of something which you have learned in the past. But if you don’t have basics, and then learning a new programming language, you may simply learn some syntax of that language, which will never transform you as a good developer.

Another recommendation I would like to give that limit the usage of frameworks. Instead of using heavy frameworks, do try to use libraries (I don’t use frameworks in Go, and always prefer libraries over frameworks). The current trend is learning frameworks without understanding fundamentals. People write code in React, Angular without clearly learning JavaScript. If you write code in React, Angular, you must first learn JavaScript. Keep in mind that most of the frameworks are opinionated and force you to use many unnecessary things. Obsessions on frameworks are making developers just framework users and finally making them as bad developers. Thus, use frameworks if it’s really required, otherwise better to stick with libraries which are less opinionated so that you can write good code in your own ways.

In my vast consulting experience in all over India, one harmful thing, which I’ve observed that a lot of developers have been spending lot of energy for learning containers and Kubernetes, and finally they’re writing very bad code for their projects. If all people are giving more emphasize into Kubernetes, then who will write good code and who will learn good software engineering principles to build great software systems?

In short, I emphasise for focusing on core programming fundamentals, not on learning some language syntax and learning opinionated frameworks.


Consulting Solutions Architect and Trainer on Go and Distributed Systems, with focus on Microservices and Event-Driven Architectures. Author of two books on Go.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Shiju Varghese

Consulting Solutions Architect and Trainer on Go and Distributed Systems, with focus on Microservices and Event-Driven Architectures. Author of two books on Go.