Prematurely abandoning simplicity

❝Premature optimization, premature generalization, premature expansion, ... appreciating simplicity❞ This post further explores simplicity as we previously defined it. We will look at engineering concepts premature optimization and premature abstraction to see how they relate to simplicity. I was reminded, as so many times, by quotes and tweets about premature optimization and – now more and more – premature generalization. People who try to best understand how to approach programming, try to find some intuition or even some rules on dos and don’ts.


Read more ...

Concluding the definition of 'simplicity'

❝Bringing the journey of defining 'simplicity' to its natural conclusion.❞ In previous blog posts, we explored a possible definition of ‘simplicity’. We started out with a definition. We explored how broadly we might be able to apply this definition. It is general enough to apply outside of software, or computer science, or – for that matter – STEM. This will be a concise summary of the findings documented in previous blog posts. Motivation One should “simply do this”, or “just think of a simple solution”, or “keep it simple”, or you name it.


Read more ...

Evaluating 'simplicity'

❝How to answer the question: 'Can we make it any simpler?'❞ After a lot of talk about simplicity, let us make things practical. This post is intended to highlight the concerns of each of “the components of simplicity” as I previously defined them. We make things practical with questions and examples, instead of abstract descriptions. Simplifying is a two-step process that may loop around as long as the question itself can be improved based on further insights, i.e. goal is an absolutely simple answer.


Read more ...

Absolute and relative simplicity

❝Whether or not you are allowed to rephrase the question itself.❞ In post “Questioning the scope of simplicity” we pondered whether question is relevant when considering if something is “simple”. In it we pointed out that given a complicated question, e.g. a question that is overly-broad, we cannot expected to give the simplest answer possible. The answer can only be as simple as the question it is stated to answer, and if you can rephrase the question to be more specific, then your answer may become simpler.


Read more ...

Bad example demonstrates failure in complexity

❝How I failed to "fix" a simple example illustrating simplicity.❞ I decided to demonstrate the three components of simplicity, that I was writing about in posts The definition of simplicity, with an example in mathematics. It is supposed to be as trivial as possible, so as not to distract from the concept “simplicity” in itself. There was some mathematical ambiguity – which really is not relevant for illustrating the idea – but it kept bothering me. The simple example In posts The definition of simplicity and Refining ‘simplicity’, I go into we can break down the concept of simplicity in three components, concerns if you will: specialized, unoptimized, reduced.


Read more ...

Questioning the scope of 'simplicity'

❝Pondering the question of whether the problem - as well as the solution - contributes to 'simplicity'.❞ In the post Refining ‘simplicity’, I decided to move away from the property named ‘specialized’ in favor of ‘dedicated’. I thought it would better cover the intended semantics, as both specialized and specific would equally apply otherwise. In doing so, I intuited that these were both relevant properties, but I could not quite put to words why this is the case. I wanted to write about the scope of simplicity and in multiple attempts to write I realized … it is not that simple.


Read more ...

Discussion for users, issues for devs

❝Exploring the idea of having discussions among users for primary project communication, and issues managed by developers only.❞ This post is a write-up of the ideas that came to mind after reading “It doesn’t work” by Frank DENIS and comparing the circumstances of the present to past years. Most noticeably, and you undoubtedly have run into these discussions and blog posts yourself, the many discussions on whether IRC should disappear and/or how IRC is better/worse than other chat platforms. Or the way the old “forums” have all but disappeared to be replaced with issue trackers and other variants of discussion boards.


Read more ...

Rust memory management: Reasoning from local scope - part 1

❝A from-local-scope way to think about memory management in Rust that allows understanding and working with the borrow-checker instead of against it.❞ Disclaimer This article is written with the experience level of someone who is learning about memory management, the borrow-checker, and Rust in general. Given that I have experience with other languages, I will allow myself to reason about the mechanisms in rust and its differences, as a way to thoroughly comprehend. Invariably there will be subtleties that are incorrect and/or details in the actual mechanisms that I missed. This article is not a complete picture.


Read more ...

Refining 'simplicity'

❝Refining the definition of simplicity: 'specific' becomes 'dedicated', 'deoptimized' becomes 'unoptimized'.❞ 2021-10-24 Most if not everything in this post has been superseeded on account of further insight into the subject. It is best to skip this post, as it will likely add confusion rather than clarification. In “The definition of simplicity” I explained my proposal for how to define simplicity, such that this “intangible” concept can be expressed as a property triple. A good definition of simplicity should “feel” correct in the same way we all “feel” what it is for something to be “simple”.


Read more ...

git: merge only the completed work

❝The benefits of merging only a completed work, forgetting in-progress development history.❞ Something that pops up occasionally in a conversation on software development, is how one should reintegrate feature branches into the main line of development (typically “master” or “develop"). There are a number of options for reintegrating development work that lives on a separate branch: Merge the branch using a merge-commit. Rebase feature development work on top of the main line. Introduce the work, squashed into a single commit. In this article, it is assumed that a new feature is developed on a separate branch, then reintegrated when finished.


Read more ...