⊙

fundamental.sh

uncovering the universal patterns of code

Latest Post

High Performance 3D Animation with React + rxjs


A new way of looking at animation using functional reactive programming, moving towards the future of interactivity on the web.


Read Now

Uh, what is this?

Fundamentalfʌndəˈmɛnt(ə)l
  1. forming a necessary base or core; of central importance
  2. affecting or relating to the essential nature of something or the crucial point about an issue
  3. a blog about programming written by me

A much longer answer

From a birds-eye-view programming can seem almost infinitely complex. There are so many paradigms, languages, design patterns and abstractions that it's difficult to see how they could all be related. What's more, we are inundated with wave after wave of fresh frameworks and technologies, never quite having time to master then before the next hot shit comes around.

We are constantly re-discovering the same patterns without ever seeing the broad commonality underlying them. This layer of commonality is made up of fundamental concepts. These are powerful mental models that can be used in almost any programming problem, regardless of language or paradigm.

It's tempting to think that what we want is to translate our thoughts directly into code. It's true that a "good" solution often resembles the way we might explain a problem out loud to a fellow developer, however, we tend to ignore the importance of how we're thinking about the problem.

I have come to believe that producing clear code is impossible without first mastering clear thinking. As programmers we should take seriously that when we write code we are designing systems of thought. What's more, those systems will be used not just by ourselves but by our teammates and future custodians of the codebase.

Compared with other engineering disciplines, software is relatively unencumbered by external constraints. Yes, compute resources are finite (and often expensive) but we have almost complete freedom to decide how to think about the problem space. And yet, we often dive in with no consideration at all.

I am not promoting some lofty, academic understanding of programming; I'm merely suggesting that programming is yet another space where slow is smooth and smooth is fast.

I have seen codebases that take thousands lines of code to implement features that can be described in a few sentences. This mismatch is alarming but more alarming still is that we accept this as the norm.

But, programming can actually be pretty easy, we make it difficult. I do not claim to know all the right way to write code, nor do I think it's a competition. Our role as programmers is to collect tools, hone them and select the appropriate tool for the job at hand. This means constantly examining our thought process and improving it, we never finish learning to program.

I've written code across many languages, paradigms, frameworks and platforms and through that process I've found that none of them are fundamentally very different. The actual appearance of code and syntax may change but the same mental models work whether I'm writing a performance intensive video game, an elaborate user interface or a realtime webserver.

It took me years of deliberate practice to find my current perspective, but it's simple to understand. It's possible to dive into a totally foreign domain and find yourself surrounded by old friends, the right tools really do work just about anywhere.

This website is a compendium of tools to add to your arsenal. No more re-inventing the wheel, no more starting from scratch.

about me

You'll receive new posts straight to your inbox when they're ready. I'm not interested in spamming you, I'm interested in sharing my passion for programming with other likeminded people.

Powered by Buttondown.