"Things" is by intention ambiguous as it can vary from person to person. For someone it may be an enlightening course on Programming Languages; for someone else it can be a lengthy project they built from scratch. Or it maybe anything that doesn't come to my mind at the moment but have helped you up your game as a programmer.<p>After all, programming is another form of design.
Better variable names.<p>When I started programming, it was in BASIC. The drawback of BASIC was that variable names were restricted to one letter or one letter plus one digit. So 'A', 'B', or 'A1', 'A2' and even in the same program you could have the numerical variable 'A2' and the string variable 'A2$'. Six months after you write a program with variable-names like these, it's no good trying to maintain such a program because you have no clue what 'A1', 'A2' and 'A3' are at all. And you're better off rewriting the whole program from scratch.<p>Then followed a stint with COBOL where I learned to use variable names such as 'WEEKLY-WAGE-TAX-LEVEL' which are eminently readable and understandable, whether five minutes later or five months later, or even three decades later. I still have some COBOL source files on my archive partition that are very clear on what the program does and what the variables are for.<p>Since then, I have done my best to make sure that all my variable-names (and function-names) are picked to enable ease of maintenance.
Thinking hard and pausing before writing: If you can suss out the pitfalls for some program before you write a significant amount of it, it'd save you a lot of time. The way you've learnt something can lead you to be stubborn about a certain process, which means you might have to "hack" your way through it -- I ""prototype"" code in an easier language before I start writing it. It doesn't have to run in that language. I use lua for this purpose.<p>Take diligent notes: My system (in emacs) helps me out here. Taking a few seconds to look for a solution in your notes trumps going through a wild goose chase on the internet only to encounter links that you immediately half-recognize as something you tried six months ago when you had $issue. "Quantified life" stuff helps out here. Here's a big protip: never delete your bash history.
CS50x got me from 0 to 1.<p>Reading about types and type systems have helped me mature, in I think a similar sense to gaining mathematical maturity when you start learning proofs for the first time.<p>It's hard to beat working with a more experienced developer and following behind them and being able to ask them why they made the choices they did.
During the pandemic, started taking 1-2 hour breaks in the middle of my workday to go outside and walk. It helped me detach from complex problems, and think about them differently.<p>A year ago that changed. Or I guess I optimized. Now I jog an hour before I start work. It just makes me feel so good ... And then around the time my mental batteries start to run out, I attend a hour long Muay Thai class. I find that after the class, I can think a lot clearer about problems faced before the class. That last hour of the workday, feels like I am cheating with a new burst of productivity.<p>This (very personal) approach has definitely made me a much better programmer. I can't think about going back to just sitting there for 6-8 hours, trying to solve problems anymore. Or getting to work without being a mildly physically exhausted.