@vinitcool76 while I appreciate all of your points as being excellent advice. I don't think all of them "make you better at writing GOOD code" mostly just 1, 3 and 6.
I maintain the single fastest and most reliable way to become a better programmer is to attempt to fix bugs and contribute to a MATURE open source library where your code is scrutinized by many seasoned developers and compared against a stable codebase presumably already using good design patterns etc...
Depending on the community around the project, the feedback from the senior contributors will make you a better programmer out of sheer necessity.
That said, design pattern and core language books should be within arms reach at all times. (and SO)
Flipped through your presentation too, well put together. I read somewhere that modules actually can be pretty useful just for breaking things apart. Could you clarify why you feel they are "good for nothing" currently?
I've noticed that about an alarmingly large number of "pro-tips" on this site. Most of the ones I read in a sitting are either incomplete or flat out wrong. Too bad this site is more about vanity and less about actual knowledge (i.e. StackOverflow) or else there might be a better system for squashing anti-knowledge.
+1 vimishor
Overriding system commands is not something I'd recommend either.
This is actually really useful. I have my own similar sed command for this, but wrapping it up into an alias is a great idea.