
Ask HN: Non-programming activities to improve coding skills? - nakinaki
What are non-programming activities that are useful for improving programming skills?
======
Davidbrcz
My answer might be a little off, but even if programming skills are essential,
they are not the only thing that matter.

Being able to speak in public, express clearly your ideas (either orally or
written), being able to consider the opposite point of view, take into account
the past and history when making a decision or a judgment are (IMO) essential
skills.

To be more at ease when speaking publicly, you could play in a play or do some
impro. Joining a debating club will also help in that and will force you to
consider an opposing point of view. Reading and writing, analyzing arguments
will help to better structure your arguments. Reading about history and being
curious about everything will help to open your views before making any
decision.

Otherwise: category theory (abstract maths), the link between physics and
computation (see Feynman's lectures on computation).

------
csnewb
Exercise. Lifting weights, running, playing tennis/football/basketball/etc. In
college I used to mentally review and visualize algorithms and other CS
concepts during long 10+ mile runs. I always came home with new insights. Even
if I'm not thinking anything technical, after exercise I'm always mentally
invigorated. Also a good night's sleep will improve every aspect of your life.

~~~
AnimalMuppet
Go for a walk at lunchtime.

Personally, I like ultimate frisbee. It's very much a read-and-react kind of
play, which is a very different mindset from (most) programming. I think that
switching the brain modes is helpful, at least for me.

------
nailer
Think about the data structures to represent things. Your friends, the
schedule at your gym, the ingredients in your coffee, etc.

I'd encourage kids to do this as well, before they actually start making
programs.

------
rayalez
Strive to build a startup. This includes coming up with ideas, design,
business skills, marketing, etc. This is the best way to optimize for learning
everything "around" coding that will make you a much more valuable programmer.

Write or speak(blogging or youtube channel). Get awesome at communicating your
ideas, while also building your authority, and a platform with an audience
that you may find valuable for many reasons - selling your products, finding a
job, etc.

Develop social and networking skills. It's hard but it pays off.

Take care of your health. Eat well, exercise. If you do well, you'll stay
sharp, capable, productive. If you fail, it will set you back many years.

Read or listen to audiobooks to acquire general wisdom. Get an audible account
and a good podcasting app, download a bunch of things you're curious about,
and enjoy them during the commute/exercise/chores time.

Keep learning - watch Udemy courses, read books on CS and engineering, etc.

------
VohuMana
Don't know if this fully counts since it abstracts away the "programming" part
of it but I have found the game Opus Magnum to be great fun
([http://store.steampowered.com/app/558990/Opus_Magnum/](http://store.steampowered.com/app/558990/Opus_Magnum/)).
The object of the game is to control various machines to make molecules, you
control the machines by giving them instructions like rotate one turn or pick
up what you are hovering over. I have found it to be like programming but with
enough abstraction that it makes me think pretty hard. Plus it is really fun
to optimize things after you build them.

------
gvajravelu
Emotional intelligence. You will certainly need to work with other people and
a higher emotional intelligence helps you work more effectively with other
people.

You'll understand your project's goals better, you'll work with your team more
efficiently, and you'll manage your own emotions better.

There are two techniques for improving emotional intelligence in this article
I wrote: [https://www.climbuptheladder.com/the-importance-of-
emotional...](https://www.climbuptheladder.com/the-importance-of-emotional-
intelligence-in-your-career-and-how-to-develop-it/).

------
lovelearning
Develop an interest in basic electronics and make DIY hobby projects involving
electronic circuits. Since it involves physical construction and failures can
be costly in terms of time and money, careful checking and rechecking of
plans, circuits and any microcontroller code before switching it on becomes an
automatic habit.

I found these habits carrying over to my pure software projects resulting in
less bugs.

And if you _really_ want to take this idea to the extreme, learn to build
power supplies and other projects involving mains electricity - a mistake
there can mean it's the last bug you'll ever write!

------
igolden
Learn a creative skill like cooking, drawing, painting, or sculpting. For me -
I always tend to see my art as a metaphor to programming. Each step in the
process is a small function, and each finished piece (meal, painting, etc) is
like a working program. Sometimes it needs to be refactored, other times it's
fine as it is.

A lot of programmers I know don't have a creative side to them. The
programmers and engineers I respect the most all have a unique and creative
outlook on life, which shows in their CS work.

------
enkiv2
There's always 'recreational mathematics' \-- puzzles of the type Martin
Gardner was known for.

On the less STEM side, taking a look at what's around you and trying to
reverse-engineer the reasons behind design decisions is also useful. Why do
zippers have that little nub on them? Why is jaywalking a crime? Why are red
lights red rather than blue? Sometimes this is a matter of path dependence,
but other times there's some deeper reason.

------
andrei_says_
Dancing. I am learning Tango and apart from it being an absolutely amazing
multi-disciplinary education (kinestetic, musical, emotional, relational,
social, how to learn and more), it rewires my brain in new, delightful and
unexpected ways.

I can’t recommend it enough and I need to disclose that it is difficult to
extremely difficult in all its aspects and will reveal your reflection in all
these dimensions and more.

------
beokop
Any activity that lets you practice curiosity and creativity. Make music, play
video games, figure out why the WiFi is spotty in that one room.

Also, learn to type fast.

~~~
mod
I do not think fast typing is a requisite or even usually a "nice-to-have"
skill for programming.

I'm a professional programmer who types over 100wpm, so maybe I'm overlooking
something. I rarely ever find that typespeed is my limiting factor.

~~~
yesenadam
I think you're overlooking that you type at over 100wpm. (So of course
typespeed isn't your bottleneck.)

~~~
mod
Fair enough, but I could have gone into more detail.

For every 1 minute that I spend typing code, I probably spend 10+ minutes
reading and thinking about code.

We're trying to optimize the 10% if we're trying to improve coding by
improving wpm

------
bryan11
Read books, especially fiction. For me, reading science fiction significantly
increased my creativity and problem solving skills at work.

------
edimaudo
Here are a few tips

\- Creative writing

\- Exercise

