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.
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.