Jimmy MillerThis is part of an Advent Series. On Understanding Data Abstraction, Revisited (pdf) One of my meta-criteria for choosing a paper in this series is the likelihood we will cover the paper on the future of coding. I won't completely rule out covering papers I think we will do at some point. But for the most part, I've decided to steer...
Jimmy MillerThis is part of an Advent Series. Large Models of What? (pdf) We haven't really talked about LLMs much on the future of coding. In many ways, this may seem like a striking omission. Isn't it a podcast called the "future of coding" and aren't LLMs so obviously some part of that future? I think that is undoubtedly true. I don't see LLMs...
Jimmy MillerThis is part of an Advent Series. What is a Game? (pdf) Okay, so I'll come clean, I might be cheating with today's paper. Does this paper have anything to do with computing? No. But can we make it have something to do with computing? Absolutely! I mean, games have to be one the best things we've done with computers, so a paper giving...
Jimmy MillerThis is part of an Advent Series. Beyond Being There: Making Remote Work Better (pdf) I absolutely love remote work. I've been doing it since before the pandemic. I am more productive doing it, I don't have to deal with all of the annoyances and politics that automatically occur when you get a bunch of people in an office. But I have...
Jimmy MillerThis is part of an Advent Series. Implementation is Semantic Interpretation (pdf) I read this paper this morning and I had the time to just finish this post before my day began. But as has been the case for these posts so far, I procrastinated on it until bedtime. Maybe tomorrow we will break that pattern. Anyway, this is another in...
Jimmy MillerThis is part of an Advent Series. Intuition in Software Development (pdf) If you haven't read Peter Naur's papers you should. If there is one thinker in the computing space I wish I could emulate, it is Peter Naur. This paper is no exception. It is about the role of intuition in software development but is ultimately an argument...
Jimmy MillerThis is part of an Advent Series. Worlds: Mutability with Control (pdf) Today's paper is a bit different. Rather than philosophical musings or a rant, we will be looking at a fascinating language feature that has not made its way into any programming languages I'm aware of. A feature first presented in this early paper by Alessandro...
Jimmy MillerThis is part of an Advent Series. Is the Brain a Computer? (pdf) I can't help but write about these more philosophical papers. Perhaps you think I'm taking advantage of this "related to computers" aspect of my advent of papers. But I think it couldn't be further from the truth. In order to understand if the brain is a computer, we...
Jimmy MillerThis is part of an Advent Series. Google's Awful Paper on Technical Debt (pdf) Okay, I'll admit that I didn't have a ton of time today, so I picked a paper that doesn't require much deep thought. A paper that isn't weird at all. I tried for quite longer than I should have to find a paper I could adequately cover in the amount of time...
Jimmy MillerThis is part of an Advent Series. What is Software Anyways? Where Does it Exist? (pdf) For this next paper, we are looking at a question I'm sure many will think is pointless. What exactly is software? But by this, we mean something a bit different than offering a definition. The goal here isn't to figure out how to split the world...
Jimmy MillerThis is part of an Advent Series. Advent of Papers: Elephant 2000 (pdf) I hereby kick off the first annual advent of papers (2024) - Speech Act by Jimmy You may know John McCarthy as the creator of Lisp. But did you know he created another programming language? Sadly, just like Lisp, McCarthy merely wrote about the idea, not an...
Jimmy MillerDefending the Incommunicability of ProgramsPeter Naur's essay "Programming as Theory Building" is an exploration into the essence of programming. What is the activity of programming? How does this notion affect our practice? As Naur sees it, understanding the nature of this activity is paramount, for, "If our understanding is...
Jimmy MillerNamed Function CompositionSome time ago I release a little library on NPM called fluent-compose. I've had some mixed feelings about my creation. I know that no one has, or will use it and if they looked at it would probably dismiss it. In fact, if I hadn't written it, I would do the same. And yet, I think I've stumbled onto a fairly...
Jimmy MillerMeander for Practical Data TransformationAs Clojure programmers we love data. We believe that, at its core, programming is just data manipulation. To that end, Clojure provides fantastic data literals for its immutable data structures. Moreover core provides tons of functions for the manipulation of data. But as our data grows more...
Jimmy MillerIntroduction to Term Rewriting with MeanderMeander is heavily inspired by the capabilities of term rewriting languages. But sadly, there aren't many introductions to term rewriting aimed at everyday software engineers. Typically introductions to term rewriting immediately dive into discussing mathematical properties or proving...
Jimmy MillerCard Driven DevelopmentEvery company I've worked for has practiced what I call "Card Driven Development" (CDD). CDD is an umbrella term meant to encompass quite a few different development processes. The name comes from the use "cards" (digital or physical) found in the Scrum and Kanban processes as a means of organizing work, but CDD...
Jimmy MillerBuilding Meander in MeanderMeander has been (in my personal opinion) a wonderful success. With meander.epsilon, we can express most of the data transformations we are interested in. There are of course a few rough edges, a few things we'd change. But as more people have begun to use meander and more people present problems they are...
Jimmy MillerConceptual EngineeringNaming things is one of the hardest things to do in software. Why? Is it because all the names have been taken? Is it because we are trying to get at some essence that our words need to capture? (Like some sort of fantasy magic system.) Perhaps at times, we feel both of these things. But I think that the...
Jimmy MillerConceptual PreservationIn the last post, I mentioned how we ought to learn from philosophers who have already explored these notions of Conceptual Engineering. Here we will do exactly that by focusing on the work by philosopher Matthew Lindauer Conceptual Engineering as Concept Preservation. Despite the title, Lindauer is not arguing...
Jimmy MillerCDD and the Non-Linearity of DiscoveryI have written previously about how Card Driven Development is extremely detrimental to the development process. In that essay I pegged the problem on CDDs lack of proper knowledge sharing and its incorrect splitting of responsibility. Today I want to focus on a different attribute of CDD that has...
Jimmy MillerTowards Aesthetic Elements of ProgrammingProgramming styles are immediately recognizable. And yet, the elements that contribute to these styles remain unnamed. What is it that separates the classic Scheme style of programming from a modern OO java style of programming? It is not the language. It is possible to write scheme,...
Jimmy MillerMy Experience Building an Editor in RustI've always wanted to build a text editor. I've played around before with trying to modify existing editors like codemirror. But ultimately those just felt incredibly unsatisfying. While I was able to make some fun little experiments with them, I was just gluing code together. As I started to...
Jimmy MillerSocial Programming Language ConstructsAs programmers, we love to act as if everything is cut and dry, unaffected by social circumstances. The mindless execution of our code makes us believe that all aspects of coding practice are equally mindless, equally free from social influence and opinion. Perhaps we don’t consciously think this,...
Jimmy MillerThe Space Between ProgramsThe “space” between our programs is an aspect we almost entirely overlook, yet, it is crucial to many aspects of our design. By “space”, I don’t mean the interface that the program exposes. Nor do I mean the means of communication (http, a queue, a log, etc). I am instead looking at something more amorphous....
Jimmy MillerWhat Follows from Empirical Software Research?There is a growing body of literature studying software engineering from the empirical perspective. There is perhaps no greater resource for discovering this content than It Will Never Work in Theory. Here you will find short reviews of countless empirical studies about software...
Jimmy MillerChatGPT Doesn't Know AnythingChatGPT doesn’t “know” anything about recent events. ChatGPT “hallucinates” facts. ChatGPT can “understand” many different kinds of questions. ChatGPT doesn’t “care” about truth. ChatGPT is “lying” to you.For some reason, we have collectively chosen to talk about ChatGPT using words typically reserved for...
Jimmy MillerBeing Stuck in Someone Else’s Theory Software development can be an incredibly frustrating venture. Not primarily because programming is hard and we often make mistakes. Nor because there are countless tedious things like dependency management that we have to deal with. Nor because we are confronted by an overwhelming number of...
Jimmy MillerNot Another Technical Debt Article There are three types of technical debt articles: Taxonomies of Technical Debt Redefinitions of Technical Debt Technical Debt is (Good|Bad) None of these articles ultimately help you with technical debt. Instead, they continue our endless dialogue around technical debt, perpetuating a programming...
Jimmy MillerThat will never change. Not here. I remember starting my first job, excited that this hobby I had as a kid could pay so well. 55k, more than double what my parents had ever made. Diving into code written by other people for the first time was exciting. Hundreds of thousands of lines of hastily written code, a lot of C# some VB, every...
Jimmy Miller"We ran out of columns" - The best, worst codebase Oh the merchants2 table? Yeah, we ran out of columns on merchants, so we made merchants2 When I started programming as a kid, I didn't know people were paid to program. Even as I graduated high school, I assumed that the world of "professional development" looked quite different from...
Jimmy MillerBeing Raised by the Internet I grew up relatively poor. I was fortunate enough to have a roof over my head, clean water, electricity, a computer, internet, and cable tv. But food was often harder to come by. This may seem like a contradiction, but when your mom has left to marry her uncle and your dad has schizophrenia, you aren’t...
Jimmy MillerBasic Functional StudiesIn the previous post, we observed some rules on how to get the most out of our functions. In this post, we will do exactly that, get the most out of them. But rather than diving straight into these techniques, we are going to come up with them ourselves. There is no better way to learn a concept than to arrive...
Jimmy MillerSide Effects, Complecting a la CarteThere are many concepts we learn as we continue our adventure in programming languages. Objects, polymorphism, inheritance, and a whole host of others. Often these concepts are taught with the goal of making our code simpler, yet more often than not, they make our code more complex, in other words,...
Jimmy MillerOOP from the ground upAny concept when taken for granted can lead to misunderstanding. Concepts we don't understand appear magical, making them either scary or compelling. In fact, typically the difference in attitude towards these magical objects is that of our peers. Despite the popular view that programming is an ever-changing...
Jimmy MillerBeautiful Code Through SimplicityBeautiful code is not about text. It isn't about the function it serves. It isn't line count. It isn't whitespace. It isn't how easy it was to write. Beautiful code is about one thing, structure. Simplicity of structure creates beautiful code, code that breathes, that hides no secrets; code that is...
Jimmy MillerProtomorphismThe last two posts ventured off into the hypothetical world. In that world, we had a language very much like javascript but with variants and protocols. Unfortunately, that language isn't real, but that doesn't mean we can't sneak some of those ideas into our javascript. Today we are going to explore protocols further...
Jimmy MillerVariants and ProtocolsIn our last post, we explored variants and the way in which they allow us to express choice. We saw that variants are much more powerful than enums because they allow you to pass values. Pattern matching on variants allows code to be explicit yet concise. However, there is still a way to make variants even more...
Jimmy MillerVariants ExplainedImagine you have the following request for a product you are building:Users should be able to login using the following methods:Username and PasswordPhone NumberFacebook LoginAs you are building this application you have to think about how to represent these user credentials. It might look something like this://...