Static types are for perfectionists



What influences our choice of technology more: careful analysis or upbringing? I found that the latter matters more than I expected. As a result, I learned to accept other people’s preferences and seek environments that reward my choices.

The technology mirror

Perhaps the most decisive element of my game was the way my style on the board was completely in synch with my personality as a child.

Josh Waitzkin, The Art of Learning

For most of my career, I thought I understood programming. People who disagreed with me hadn’t seen the light yet. Give them time and relevant experience, and they will agree that statically-typed languages are the only way to build robust software. That dependencies are evil and trade freedom for short-term comfort.

My convictions waned when I became a parent and started reading books on psychology. I could see how my formative years affected my relationships, values, core beliefs, and even technology preferences.

When I was a kid, mistakes were costly. Breaking a glass or getting a bad grade could get me beaten, so my brain learned to avoid mistakes and demand perfection. When I asked for help, people humiliated me, so my brain became averse to seeking or accepting help.

Type systems, compilers, and formal methods help me feel safe, even though there’s scant empirical evidence to justify my feelings. Grokking my programs and eliminating dependencies puts me in control.

Do my adaptations help me write better programs? Maybe. My fixation on structure and understanding prevents bugs. When mistakes pop up, they usually come from wrong premises, not bad logic.

Do I stick to my principles because they produce better programs? Probably not. But they are comfortable. Fighting a compiler to craft a program that works on the first run feels terrific. Squeezing out bugs from a Python script doesn’t.

I met many people whose approach was my opposite. They pulled in behemoth frameworks. They moved on when their programs seemed to work. They feared less and experimented more. I no longer take issue with their ways. They can build things I never would.

The authenticity spiral

In the beginner’s mind there are many possibilities, but in the expert’s there are few.

Shunryu Suzuki, Zen Mind, Beginner’s Mind

I didn’t enter the profession a fully-formed lonely grumbler. My views evolved throughout my career and continue to change.

My first programs were physics simulations and tiny games written in Turbo Pascal. They were brutally direct. I would create animations by drawing hand-coded sprites at specific offsets. My only dependency was the standard library.

When I entered the world of Enterprise Java, I obsessed over clean code. I read every book on code organization, overused design patterns, and studied frameworks that promised extensibility.

Exposure to new ideas and languages helped me realize that most rules I learned didn’t improve my programs. That frameworks brought accidental complexity and bloat. That extensible code was a futile attempt to predict the future. I could start with code that was easy to delete and rewrite it when the problem changed.

The transformation took years and overlapped with a deep dive into pure functional programming, from which I also eventually recovered. Each new obsession made me wiser and helped me discover something about myself.

Programmers grow in spirals. Beginners think intuitively but lack the language to express themselves. They curve away from their core when they acquire knowledge and imitate others. Eventually, they learn to see things clearly and return to authenticity.

Like artists, programmers grow in spirals. Beginners reach for the most straightforward tools. Their code is awkward, but every line serves a purpose. Then they learn good practices and abide by them. This path leads them astray, but it’s necessary for growth. With time, they regain their beginner’s mind. Conventions fade. Their code becomes simple and purposeful again. This time, it’s also elegant.

Finding your place

You will excel only by maximizing your strengths, never by fixing your weaknesses.

Marcus Buckingham

Let’s say I convinced you that your technological preferences come mostly from your upbringing. What are the implications? I can think of at least two.

Firstly, we should stop shaming people who don’t share our preferences. Using a memory-unsafe language isn’t a moral crime. A preference for dynamic typing doesn’t say anything about the programmer’s intelligence. Type theory maximalists should drop their pretense of intellectual superiority and accept that they need therapy just as badly as everyone else (if not more).

The sleep of self-awareness produces elegant mathematics. Source: Jay Cummings.

Secondly, we should pay more attention to how technology makes us feel and feed these signals into our career choices.

My team and culture—not skills—defined my productivity and job satisfaction. Yandex felt like sharing a dormitory with best pals. Google—like high-school politics. dfinity—like an intellectual utopia: so stimulating that, for a brief moment, I thought I’d finally mastered productivity. My next job burnt me out in three months.

I didn’t change much between these experiences. I just needed the right project and team to function well Productivity systems like Getting Things Done and The 12 Week Year promise to turn anyone into an efficiency ninja. They lie. . A team whose values and beliefs align with mine.

The right environment won’t make life easy. You’ll still get frustrated and face challenges. But getting through these challenges will feel like growth, not struggle.

Closing words

Haskell will still be used in 20 years, because there will always be people looking for a productive way to weaponize their autism.

@effectfully

Unfortunately, I couldn’t find any research that addresses my anecdotal evidence. If you’re a researcher working in the intersection of psychology and computer science, consider investigating the effects of childhood experience and neurodiversity As a frequent ZuriHac guest, I got an impression that hard-core compiled language communities have an unusually large fraction of neurodiverse people. on technology preferences. I can’t wait to read your papers!

If you liked this article, consider listening to the Leaving Stripe episode of the CoRecursive podcast, in which Jon de la Motte shares his struggles with mental health and traces his career choices to his family dynamics.

Finally, don’t hesitate to book a therapy appointment. Even the best of us need it.

If you’re making games, you should be getting therapy.

Mike Acton on the Wizardology podcast

Similar articles