In the modern world especially with the advent of the internet, we all seem to learn up everything pretty fast, don't we? For example, i was 14 when i started to learn some serious coding. It all started with LOGO. I still remember the very first day that i started to use LOGO, i returned home and asked my mom to buy me the LOGO software so that i can practice programming on it on my home computer. After that, my school taught me qbasic(which is now quite obsolete) and then moved on to c++(procedural programming, not oop). After that I learnt JAVA and this was when i was introduced to the beautiful world of OOP. After that I took serious interest in learning C#(Microsoft's approach to OOP Programming, similar to JAVA) and also learned some web development(HTML and CSS). That was until I got hold of Yashavant Kanetkar's Let Us C.
The scope of his book was much more than what i learned in my school way back in class 8. One topic that I found particularly interesting was pointers. After researching about it on the net and using it in my applications, i began to like it. It opened to me a whole new world and exposed me to the internal workings and management of the computer system which i had overlooked and missed while learning JAVA and C#. However, i also had in mind that Microsoft had it's own implementation of C++ under the banner Visual C++(VC++). Naturally, familiarity with .NET and curiosity got the better of me and soon i started to learn VC++ (it was pretty much the preferred choice for Windows development that i am mainly interested in) which was pretty much similar to the normal one except that it had much more libraries, a bit more syntactic sugar and was also much more abstract than core C++ in many aspects like memory handling( including handling of pointers) and other stuff. Therefore, there were a lot of things that I had to explicitly do in normal C++ that the language itself took care of in VC++. Seemingly productivity increased and i began to like VC++ more. In a nutshell, i was more interested in productivity and high level abstraction rather than spending more time learning the low level internal working. It seemed like an anomaly to me to learn something which could also be left to other 3rd party API's to take care of. So, i started to use VC++ for C++ programming.
But to my utter surprise, occasionally I have come across certain situations where it was a tough job for me to debug the program . I made sure that i checked every nitty gritty detail in my program, still i failed to locate the bug. After tedious hours of mind-wracking effort, what amazed me was that it was some simple knowledge about the internal workings of the compiler that could have helped me to avert the bug. It was then that i began to realize the importance of finer lower abstraction details.
Today, the whole world is becoming more and more abstract. We now have access to tons of tutorials and educative material but most of these prefer to teach the more abstract details rather than going for the complete picture. And that is what makes the title of the post relevant....
There's no one specific universal answer to this question though. Some people take it to be a blessing as it increases programmer productivity and saves time while some like me take it to be a curse atleast when you start using it right from the beginning and thus miss out on some important key knowledge about some lower level details. Not only does it help in certain cases for solving particular problems in coding much faster and quicker solutions, but in certain areas such knowledge are totally indispensable. And that is why, i believe, that such things which can otherwise be taken care of by various 3rd party vendors are still very important for programmers in this age of more and more higher level abstractions and APIs. Some really popular programming tutorial websites have courses which term VC++ as the modern way of USING C++, but it doesn't remain the modern way of LEARNING C++ though. An early transition from normal traditional C++ can be very dangerous. We live in an age where people expect the smartest of solutions from us. And in such a world. these internal details that are generally abandoned by amateur programmers most of the times becomes the X-factor that differentiates him/her from the rest."To learn or not to learn-knowledge vs productivity"










