In my college days, the Computer Science program (like most universities at that time) concentrated on using "teaching" or "educational" programming languages such as Modula-2 or Pascal that were typically not used in professional programming. In short, I knew several programming languages (many of which were self taught) at this point in my career that were rarely utilized going forward except for Basic and assembly programming languages. In fact, my first professional job required a lot of assembly language programming because I could beat the C compiler by 20%. Since we were manipulating very large images, we couldn't afford the performance penalty. Although, I did plenty of programming in C as well. Later in my career as I moved away from product development and into network engineering, I utilized mostly Basic and TCL.
As much as I enjoy programming for fun, I only generate code if needed. In other words, I sometimes have scrapped code because I have found a better option or it became obsolete including due to a feature retirement or being bundled now. In short, the software I write typically has to fill a need or provide some kind of enhancement that isn't already available. In addition, all of my software is designed usually for Linux. What I truly enjoy about Linux based systems over traditional desktop systems is their flexibility and performance. If you don't like a particular component of the Mac OS or Windows, you might not be able to bypass that. In addition, most modern Windows based systems that I have used such as Vista, 7, 8, or 8.1 were all painfully slow requiring faster and faster CPUs and significantly more memory and disk space. Using older or newer computers, Linux based systems can have almost any look and feel that you want and performance is usually excellent (i.e. fast CPUs, significant amounts of memory, and SSDs are not required for quick boot up or application loads), and you don't have to run performance zapping antivirus software. In addition, it is truly amazing the sheer number of applications available for free to accomplish nearly any task that you could ever think of or want. Even old hardware such as my Eye One Display 2 color calibrator can be utilized which is no longer supported on Windows 8 or later.
To be good at programming, it requires an unique blend of talents such as a proficiency with mathematics; organizational skills; technical understanding especially considering device drivers or optimizations to address memory, CPU, or hardware usage; and perhaps even an artistic side for code that is visually consistent for easy readability. In addition, it is typically useful to be good with languages including an eye for rigid syntax compliance. Although, these days many programmers use Integrated Development Environments (IDEs) to assist with software development. Oddly, I have never used or required one including a debugger. To learn more about programming or my software, select one of the buttons above (on the ribbon of color).