I am frequently asked by college-going students, how to be great with programming. Here are my thoughts (applicable primarily for students, but may be relevant for others as well):
Q1: How to go from being good to a great programmer?
It all boils down to how much you love computer science. It’s not one language or field (say UI side development) but computer science as a whole. And this means you need to have absolutely studied, programmed, and done some projects in all major fields. They don’t have to be great projects but yes at least 4-6 months of effort in studying them. This includes Operating Systems, Networks, Microprocessors, Advanced Computer Organization, Programming Languages Constructs & Paradigms, Compilers, Algorithms, Theoretical Computer Science, Databases.
Understanding the whole eco-system makes you stand out in long run. Will make you comfortable in dealing with diverse engineering problems because you will relate better. Nothing is as comforting as knowledge. Again, Rome was not built in a day. Do not be hard on yourself.
Once you have gained basic proficiency in all the above, it is really necessary to program on building software. So programming languages are of vital importance because languages are the dots that connect reality.
Learning syntax of a programming language is like learning rules of chess. You might learn how a rook moves, but does it distinguish you as a mighty chess player?
Every language constructs gets some paradigms along. The more languages your are aware of, the more paradigms you are accustomed to. And it makes you a wiser programmer. Eventually learn to code in:
- Learn C
- One Strongly-Typed Language among C++/Java/C#/Scala
- One dynamically Typed Language: Python/Ruby/Erlang
- One Pure Functional Language: Haskell (preferably), Lisp or any of its dialects (Clojure recommended)
But saying so, it is extremely important to master One Programming Language and its complete environment. It can be C/Java/Python etc. But it is extremely important to master one.
The fourth is to contribute to Open Source. Contribute to any decent open-source framework for your preferred language. This will give you confidence and recognition to break boundaries and excel. This is again of utmost importance.
Fifth, not a lot would agree with me but I rate the social presence of high importance. High points on StackOverflow, Github commits, FOSS contribution, personal tech blog, Twitter presence, tech conferences, etc increase your social presence. They connect you with smarter developers outside which in turn creates better opportunities and generates newer/smarter Ideas.
Sixth and most importantly, Meditate! It will make you creative, improve awareness, ability to be relaxed, and retain composure under stressful situations. Even better, learn the Sudarshan Kriya!
Again, Rome was not built in a day!