From 4602d027205d9827dc711c95f9a4212bcf6700cf Mon Sep 17 00:00:00 2001 From: Danila Fedorin Date: Mon, 29 Dec 2025 23:07:55 -0800 Subject: [PATCH] [WIP] 2/3 draft Signed-off-by: Danila Fedorin --- .../cardeli-products.png | Bin 0 -> 82990 bytes .../i_love_programming_languages/index.md | 310 ++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 content/blog/i_love_programming_languages/cardeli-products.png create mode 100644 content/blog/i_love_programming_languages/index.md diff --git a/content/blog/i_love_programming_languages/cardeli-products.png b/content/blog/i_love_programming_languages/cardeli-products.png new file mode 100644 index 0000000000000000000000000000000000000000..ce51ee497e3bf500b67783f6796acb180c891006 GIT binary patch literal 82990 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 z So, you work on the programming language. What's next for you? + +The question caught me so off-guard that I had to make sure I heard it right. +Next? From this? Upon some reflection, I realized that I hadn't even imagined +worlds in which I voluntarily do anything other than working on programming +languages. Upon further reflection, I realized just how deeply __I love the +field__. The part that surprised me the most was to realize just how varied +the things I find appealing are; the more I think about it, the more I become +convinced that +{{< sidenote "right" "pl-note" "programming languages" >}} +I will hereafter abbreviate this as PL to save probably kilobytes of storage +space for this post. +{{< /sidenote >}} +has something to offer a lot of people. So, in that spirit, I thought I'd +write up the variety of reasons I love PL, to share my enthusiasm. This +list is a non-exhaustive survey that holds the dual purpose +of explaining my personal infatuation with the field, and providing +others with ways to engage with PL that align with their existing interests. + +My general thesis goes something like this: programming languages are a unique +mix of the __inherently human and social__ and the __deeply mathematical__, +a mix that often remains deeply grounded in the practical, __low-level realities of +our hardware__. In these many domains, PL rewards creativity and encourages +artfulness. + +Personally, I find all of these properties equally important, but we have to +start somewhere. Let's begin with the human aspect of programming languages. + +### Human Aspects of PL + +> Programs must be written for people to read, and only incidentally for machines +> to execute. +> +> --- Abelson & Sussman, _Structure and Interpretation of Computer Programs_. + +As we learn more about the other creatures that inhabit our world, we discover +that they are similar to us in ways that we didn't expect. They conceive +of time, have internal lives, individual identities. However, our +language is unique to us. It gives us the ability to go far beyond +the simple sharing of information: we communicate abstract concepts, +social dynamics, stories. In my view, storytelling is our birthright more +so than anything else. + +I think this has always been reflected in the broader discipline of programming. +_Code should always tell a story_, I've heard throughout my education and career. +_It should explain itself_. In paradigms such as +[literate programming](https://en.wikipedia.org/wiki/Literate_programming), +we explicitly mix prose and code. Notebook technologies +like [JuPyTer](https://jupyter.org/) intersperse computation with explanations +thereof. + +Viewing programming as a more precise form of storytelling, I can give the +first reason I love PL: + +* __Reason 1__: programming languages provide the foundation of expressing + human thought and stories through code. + +This begs a follow-up. There are many ways to think about a problem, and +there are many ways to tell a story. From flowery prose to clinical report, +human expression takes a wide variety of forms. The need to vary +our descriptions is also well-served by the diversity of PL paradigms. +From stateful transformations in languages like Python and C++, through +pure and immutable functions in Haskell and Lean, to fully declarative +statements-of-fact in Prolog and Nix, various languages have evolved to +support the many ways in which we wish to describe our world and our needs. + +* __Reason 2__: diverse programming languages enable different perspectives + and ways of storytelling, allowing us choice in how to express our thoughts + and solve our problems. + +Those human thoughts of ours are not fundamentally grounded in logic, +mathematics, or anything else. They are a product of millennia of evolution +through natural selection, of adaptation to ever-changing conditions. +If we were pure, logical agents, we could write our code in the stripped-down +and pure frameworks of +[lambda calculus](https://en.wikipedia.org/wiki/Lambda_calculus) or +[Turing machines](https://en.wikipedia.org/wiki/Turing_machine). Instead, +our cognition is limited, rife with blind spots, and partial to the subject +matter at hand. We lean on objects, actors, contracts, and more as helpful, +mammal-compatible analogies. Thus, + +* __Reason 3__: programming languages imbue the universe's fundamental rules of + computation with humanity's identity and idiosyncrasies. They carve out + a home for us within impersonal reality. + +Storytelling (and, more generally, writing) is not just about communicating +with others. Writing helps clarify one's own thoughts, and to think deeper. +In his 1979 Turing Award lecture, +[Notation as a Tool of Thought](https://www.eecg.utoronto.ca/~jzhu/csc326/readings/iverson.pdf), +Kenneth Iverson, the creator of [APL](https://tryapl.org/), highlighted ways +in which programming languages, with their notation, can help express patterns +and facilitate thinking. + +Throughout computing history, programming languages built abstractions that --- +together with advances in hardware --- made it possible to create ever more +complex software. Dijkstra's +[structured programming](https://en.wikipedia.org/wiki/Structured_programming) +crystallized the familiar patterns of `if`/`else` and `while` out of +a sea of control flow. Structures and objects partitioned data and state +into bundles that could be reasoned about, or put out of mind when irrelevant. +Recently, I dare say that notions of ownership and lifetimes popularized +by Rust have clarified how we think about memory. + +* __Reason 4__: programming languages combat complexity, and give us tools to + think and reason about unwieldy and difficult problems. + +The fight against complexity occurs on more battlegrounds than PL design alone. +Besides its syntax and semantics, a programming language is comprised of its +surrounding tooling: its interpreter or compiler, perhaps its package manager +or even its editor. Language designers and developers take great care to +[improve the quality of error messages](https://elm-lang.org/news/compiler-errors-for-humans), +to provide [convenient editor tooling](https://chapel-lang.org/blog/posts/chapel-lsp/) +(hey, that's us on the Chapel team!), and build powerful package managers +like [Yarn](https://yarnpkg.com/), [`uv`](https://docs.astral.sh/uv/), +and more. Thus, in each language project, there is room for folks who, +even if they are not particularly interested in grammars or semantics, care +about the user experience. + +* __Reason 5__: programming languages provide numerous opportunities for + thoughtful forays into the realms of User Experience and Human-Computer + Interaction. + +I hope you agree, by this point, that programming languages are fundamentally +tethered to the human. Like any human endeavor, then, they don't exist in +isolation. To speak a language, one usually wants a partner who understands +and speaks that same language. Likely, one wants a whole community, topics +to talk about, or even a set of shared beliefs or mythologies. This desire +maps onto the realm of programming languages. When using a particular PL, +you want to talk to others about your code, implement established design patterns, +use existing libraries. + +I mentioned mythologies earlier. In some ways, language +communities do more than share know-how about writing code. In many +cases, I think language communities rally around ideals embodied by their +language. The most obvious example seems to be Rust. From what I've seen, +the Rust community believes in language design that protects its users +from the precarious landscape of low-level programming. The Go community +believes in radical simplicity, rejecting the never-ending layering of +abstractions in language design. Julia incorporates numeric representations and +algorithms from diverse research projects into an interoperable collection +of scientific packages. + +* __Reason 6__: programming languages are complex collaborative social projects + that have the power to champion innovative ideas within the field of + computer science. + +So far, I've presented interpretations of the field of PL as tools for expression and thought, +human harbor to the universe's ocean, and collaborative social projects. +These interpretations coexist and superimpose, but they are only a fraction of +the whole. What has kept me enamored with PL is that it blends these human +aspects with a mathematical ground truth, through fundamental connections to +computation and mathematics. + +### The Mathematics of PL + +> Like buses: you wait two thousand years for a definition of “effectively +> calculable”, and then three come along at once. +> +> --- Philip Wadler, _Propositions as Types_ + +Imagine for a moment that along the familiar carbon-based, DNA-carrying +life, there existed on Earth life built from entirely different building +blocks. It would look and act pretty much the same, but somehow be made +at its core from different _stuff_. This is how I feel about the mathematical +underpinnings of practical programming languages. + +There are two foundations, +[lambda calculus](https://en.wikipedia.org/wiki/Lambda_calculus) and +[Turing machines](https://en.wikipedia.org/wiki/Turing_machine), that underpin +most modern PLs. The abstract notion of Turing machines +is closely related to, and most similar among the "famous" computational models, +to the +[von Neumann Architecture](https://en.wikipedia.org/wiki/Von_Neumann_architecture). +Through bottom-up organization of "control unit instructions" into +"structured programs" into the imperative high-level languages today, we can +trace the influence of Turing machines in C++, Python, Java, and many others. +At the same time, running on the same hardware and looking more familiar +than one might expect, functional programming languages like Haskell represent +a chain of succession from the lambda calculus, embellished today with +types and numerous other niceties. These two lineages are inseparably linked: +they have been mathematically proven to be equivalent. Two lives doing the same thing. + +The two foundations have a crucial property in common: they are descriptions +of what can be computed. Both were developed initially as mathematical formalisms. +They are rooted not only in pragmatic concerns of "what can I do with +these transistors?", but in the deeper questions of "what can be done +with a computer?". + +* __Reason 7__: programming languages are built on foundations of computation, + and wield the power to compute anything we consider "effectively computable at all". + +Because of these mathematical beginnings, we have long had precise and powerful +ways to talk about what code written in a particular language _means_. +This is the domain of _semantics_. Instead of reference implementations +of languages (CPython for Python, `rustc` for Rust), and instead of textual +specifications, we can explicitly map constructs in languages either to +mathematical objects ([denotational semantics](https://en.wikipedia.org/wiki/Denotational_semantics)) +or to (abstractly) execute them ([operational semantics](https://en.wikipedia.org/wiki/Operational_semantics)). + +To be honest, the precise and mathematical nature of these tools is, for me, +justification enough to love them. However, precise semantics for languages +have real advantages. For one, they allow us to compare programs' real +behavior with what we _expect_, giving us a "ground truth" when trying to +fix bugs or evolve the language. For another, they allow us to confidently +make optimizations: if you can _prove_ that a transformation won't affect +a program's behavior, but make it faster, you can safely use it. Finally, +the discipline of formalizing programming language semantics usually entails +boiling them down to their most essential components. Stripping the +[syntax sugar](https://en.wikipedia.org/wiki/Syntactic_sugar) helps clarify +how complex combinations of features should behave together. + +Some of these techniques bear a noticeable resemblance to the study of +semantics in linguistics. Given our preceding discussion on the humanity +of programming languages, perhaps that's not too surprising. + +* __Reason 8__: programming languages can be precisely formalized, giving + exact, mathematical descriptions of how they should work. + +In talking about how programs behave, we run into an important limitation +of reasoning about Turing machines and lambda calculus, stated precisely in +[Rice's theorem](https://en.wikipedia.org/wiki/Rice%27s_theorem): +all non-trivial semantic properties of programs are undecidable. This means +that in general, we can't decide for certain whether a program terminates +or runs infinitely (see the [halting problem](https://en.wikipedia.org/wiki/Halting_problem)), +or if it throws exceptions / produces errors. There will always be programs +that elude not only human analysis, but algorithmic understanding. + +It is in the context of this constraint that I like to think about type systems. +The beauty of type systems, to me, is in how they tame the impossible. +A well-typed program may well be guaranteed not to produce any errors, or +produce only the "expected" sort of errors, or or terminate. Though the precise +properties guaranteed by any given type system vary by language or even by +type checker, the general principle holds: by constructing reasonable +_approximations_ of program behavior, type systems allow us to verify that +programs are well-behaved in spite of Rice's theorem. Much of the time, too, +we can do so in a way that is straightforward for humans to understand and +machines to execute. + +* __Reason 9__: in the face of the fundamentally impossible, type systems + grant us confidence in our programs for surprisingly little cost. + +At first, type systems look like engineering formalisms. That +may well be the original intention, but in our invention of type systems, +we have actually completed a quadrant of a deeper connection: the +[Curry-Howard isomorphism](https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_correspondence). +[Propositions](https://en.wikipedia.org/wiki/Proposition), in the logical sense, +correspond one-to-one with types of programs, and proofs of these propositions +correspond to programs that have the matching type. + +This is an incredibly deep connection. In adding parametric polymorphism +to a type system (think Java generics, or C++ templates without specialization), +we augment the corresponding logic with the "for all x" (\(\forall x\)) quantifier. +Restrict the copying of values in a way similar to Rust, and you get an +[affine logic](https://en.wikipedia.org/wiki/Affine_logic), capable of reasoning about resources and their use. Add +[dependent types](https://en.wikipedia.org/wiki/Dependent_type), like in Idris, and you +have a system powerful enough [to serve as a foundation for mathematics](https://en.wikipedia.org/wiki/Intuitionistic_type_theory). +Suddenly, you can write code and mathematically prove properties about that +code in the same language. I've done this in my work with +[formally-verified static program analysis]({{< relref "series/static-program-analysis-in-agda" >}}). + +This connection proves appealing even from the perspective of "regular" +mathematics. We have developed established engineering practices +for writing code: review, deployment, documentation. What if we could use +the same techniques for doing mathematics? What if, through the deep +connection of programming languages to logic, we could turn mathematics +into a computer-verified, collaborative endeavor? +I therefore present: + +* __Reason 10__: type systems for programming languages deeply correspond + to logic, allowing us to mathematically prove properties about code, + using code, and to advance mathematics through the practices of software engineering. + + +In addition to the theoretical depth, I also find great enjoyment in the way that PL is practiced. +Here more than elsewhere, the creativity and artfulness I've mentioned before come into +play. In PL, [inference rules](https://en.wikipedia.org/wiki/Rule_of_inference) are a +lingua franca through which the formalisms I've mentioned above are expressed +and shared. They are such a central tool in the field that I've +developed [a system for exploring them interactively]({{< relref "blog/bergamot" >}}) +on this blog. + +In me personally, inference rules spark joy. They are a concise and elegant +way to do much of the formal heavy-lifting I described in this section; +we use them for operational semantics, type systems, and sometimes more. +When navigating the variety and complexity of the many languages and type +systems out there, we can count on inference rules to take us directly to +what we need to know. This same variety naturally demands flexibility in +how rules are constructed, and what notation is used. Though this can sometimes +{{< sidenote "right" "notation-note" "be troublesome," >}} +One paper +I've seen describes 27 different ways +of writing the simple operation of substitution. +{{< /sidenote >}} +it also creates opportunities for novel and elegant ways of formalizing +PL. + +* __Reason 11__: the field of programming languages has a standard technique + for expressing its formalisms, which precisely highlights core concepts + and leaves room for creative expression and elegance.