I get bored rather quickly in the programming context. Here’s a trick I sometimes do to keep things interesting – I pick one aspect of my development process and experiment with doing something different.
I compiled a list of things to try. Some of them I already tried, others not.
In my experience, the results are often surprising; things that seem outlandish work out just fine, or something that I had high hopes for ends up being “meh.”
The meta lesson for me here is that I should not praise or bash a practice without giving it a solid try.
I recommend trying things out for at least a week, preferably two. In most cases, you’re going to experience enough nuance to make an informed decision whether to incorporate it into your regular workflow.
Some of these should probably not be tried for the first time in a professional context where you work with other people in the same code repository, while others can. Use your judgment.
Some of these can be more or less relevant for your programming language or environment (web frontend, backend, anything).
Make components as small as possible. Make the units of code (functions / classes / components / whatever relevant for you) as small as possible.
Isolate examples of code in sandboxes. If you work with web frontend and encounter something you are confused about, recreate a minimal version of it in codepen.io or jsfiddle. This makes it easier to understand what’s going on.
Do new kinds of tests. If you haven’t tried unit testing, property-based testing, performance testing, or any other type of testing you can find, try it now.
Use different way of splitting files / functions / components. Question your way of organizing code.
Draw everything before typing. For every unit of code, visualize it somehow using pencil and paper.
Call what I’m doing before typing anything. Inspired by Kent Beck’s Implementation Patterns.
Measure performance of a feature, improve it. Pretend you’re on a more performance-restricted platform than you are. E.g., in web frontend, use browser’s devtools to limit CPU and internet speed.
Implement twice; pick the better version. For every non-trivial feature, try implementing it twice, with different approaches. Only after doing both evaluate which is better in your context. Inspired by John Ousterhout’s A Philosophy of Software Design.
Git reset after a day. Try short-lived branches (https://articles.coreyhaines.com/posts/short-lived-branches)
Record screen and watch yourself. Record your screen for 30 minutes or more. Then watch it. Are there any obvious improvements you could make in your workflow? Are you surprised by anything?
Pretend to be streaming. Talk while you program as if you were doing recording a screencast for other people.
Use debugger a lot. If normally you do not use a debugger, try using it for a week every time you feel confused by what your code is doing.
Avoid the debugger. If you usually use debugger a lot, try avoiding it for a week. Does your approach to writing code and debugging change?
Automate everything you can in your editor/shell scripts/your main programming language (pick one at a time). If you see any activity that is either awkward or repeated a lot, see if you can automate it, even if it doesn’t seem “worth” it. Are you surprised by how much time it took or how easier the task became? Did you learn anything new about your editor/shell scripting/your main programming language?
Work without any editor plugins. If you use an editor with plugins like vim, emacs, or vscode, try removing them for a week. Did you learn anything new? Will you use the same selection of plugins after this challenge?
Make things extra consistent. Pay extra attention to things being consistent (this is somewhat subjective)
Use different windowing strategies. If normally you use multiple displays, try working with just one for a week. Or try using as small terminal/editor/browser windows as necessary.
Use a new way of visualizing information or program flow. Examples include excel spreadsheets, OmniGraffle, or dot.
Have you tried any of them? Do you have ideas for more? Let me know!