How Does One Improve as an Intermediate Programmer?

How does one improve as a programmer when they are already at an intermediate level? There are plenty of resources on “learning to program” that will get someone from 0 to novice (although the quality of most of these resources is pretty dubious), but what are the practices that will elevate someone from intermediate to expert? How can I build the mental models that allow me to write code at a high level?

..

  • Practice and performance are different, and the best way to practice is almost never performance. For example: a baseball player who wants to improve his hitting spends 30 minutes taking 200 pitches at the batting cages (practice), not 2 hours seeing 15 pitches in a game (performance).