Improving as a programmer

Improving as a programmer

It’s evident that coding will help compared to doing something completely not technical (like watching Netflix). Extending that line of thought, it should also make sense that there are some kinds of technical activity that will be more helpful. At this point, we can conclude that we want to maximize hours of focused technical activity.

Motivation/discipline is a factor in how long you can do an activity and still remain focused.

Expanding your toolkit (similar to a basketball player learning post moves, 3-point shots, or ball handling skills) is also very likely to help. What does a programmer’s toolkit look like? At the most basic level, discipline is vital, and can contribute to other activities as well. It’s likely (see “Flow” by Mikhail XYZ or “Grit” by Angela Duckworth or “Deep Work” by Cal Newport) that continous long hours can unlock growth that short bursts spread over many days cannot. In the same vein, discipline to “practice” day-in/day-out cannot be compensated for by cramming many more hours in a short period (there are studies showing that interleaving can help retention).

What else could fit into a programmer’s toolkit? A knowledge of command-line (unix) tools like grep, sed, less, cat, cut, find used to parse and work with logs/text files is helpful. Working with a debugger (of your choice) and and IDE or text editor (including knowing the shortcuts) can provide immensely useful. For example, macros in vim have saved me hours worth of work.

Prioritization skills.

Different domains in software engineering is not a necessity, but could be helpful depending on the domain you are in. Things like a knowledge of networks, operating systems, compilers and databases (typical for an undergraduate course in computer science) fall in this bucket.

Distributed systems and control theory are two other areas that could provide useful, in the same bucket, though they are usually taught in an advanced degrees course.

For those interested in performance engineering, performance related tools like strace, perf, knowing how to work with flame graphs and possibly even collect & build them and run performance tests can be useful.

Observability is another sphere that one could build expertise in.

Learning quickly/asking questions - how to? Reading code/familiarity with programming languages