What does it take to be a good programmer?
Programming?
Programming has various definitions. Simply put, it is the process of translating some logic into a machine readable manner. It has transformed a lot over the years, where initially you needed to write a 100 lines of code to perform the simplest of the operations, to now where even some complex operations can be put together into a few lines of code. The time taken for a programmer to get something done has drastically reduced over the years. There are still a lot of work being done by programming communities around the world to reduce the effort that the end programmer has to put to get something to work.
Library Functions
This is of course a very good thing. Whenever I want to sort a list of items, I don't have to go through the hassle of finding the appropriate sorting algorithm and implement the same in my language. I can just call the already existing sort function, which has selected the most efficient implementation that can be done in that particular language. This saves a lot of time on my end and helps reduce redundancy in the code.
Modern day languages like Python have options for anyone to upload their own libraries and so we not have existing libraries and functions for almost all of the regularly used menial logics in programming. So I can spend most of my time on coming up with the best solution to my problem rather than breaking my head on how to implement the same logic as a code.
That's great. But...
Though there are a lot of advantages of these libraries, there is also a huge problem that is caused by this. We are creating a generation of Programmers who have less conceptual knowledge, who mostly get things done using these libraries and frameworks without exactly knowing how the code works internally. Their main concern is to get things to work, rather than knowing exactly how it works. We want to reduce the time taken to do something that we don't care how it does what it does.
Why is that a problem?
One becomes a successful programmer by coming up with fast, efficient and scalable solutions to the problem they are trying to solve. And you can keep optimising your solution only if you know what happens inside. For example, when you go over online tutorials on Machine Learning, most of the tutorials focus on how the concept can be implemented on a language and not on how the concept works internally. The 2 lines of Python code that creates a machine learning model using Decision Tree does not matter. What matters it the concept of what a Decision Tree is and what are the scenarios that are apt for it.
Your skill is not writing that 2 lines of code but finding the right approach to a problem and coming up with a good solution. And for that, you will need a good understanding of the concepts rather than just experience with implementation. Sometime later if there is some change in the data and the results are not as accurate as before, you will need to be able to investigate the change and identify what change in data caused this issue and should be able to fix the right paramter to get the results back on track.
Conclusion
In order to be able to sustain yourself in this competitive world, if you want to stand out of the crowd, then it's time for you to question yourself on whatever you are working on. Ask yourself the most basic of the questions about the concept and see if you can explain it properly, like you would explain a 5 year old. If you are able to do that convincingly, then Voila!! You are already a great programmer.