Data, objects, and how we're railroaded into poor design

Our programming languages don't really support us in making good design decisions. They fall short of allowing us to choose appropriate representations. | Continue reading


@tedinski.com | 2 years ago

Design duality and the expression problem (2018)

A fundamental question in program design: how is this type open? | Continue reading


@tedinski.com | 3 years ago

Backpressure (2019)

The system as a whole must be able to respond to an overloaded part. | Continue reading


@tedinski.com | 3 years ago

Fuzzing vs. Property Testing

These are easily distinct techniques, but also deeply related. | Continue reading


@tedinski.com | 4 years ago

On Ideological Purity in Programming

The way humans do moral reasoning is a mechanism that is often misapplied to purely technical decisions. | Continue reading


@tedinski.com | 5 years ago

Testing at the Boundaries

There's more to testing than unit tests, and there's more to design than coding. | Continue reading


@tedinski.com | 5 years ago

System boundaries and the Linux kernel

A short case study on the effects of freezing or freeing an API. | Continue reading


@tedinski.com | 5 years ago

Programmer as wizard, programmer as engineer

Context matters. Sometimes we need to get things done, sometimes we need to build things to last. | Continue reading


@tedinski.com | 5 years ago

What does it mean to design software well?

Thinking carefully about what our goals even are. | Continue reading


@tedinski.com | 5 years ago

Why an interface with only one implementation?

Sometimes this is evidence of over-abstracted design, but sometimes it legitimately makes sense. | Continue reading


@tedinski.com | 5 years ago

Whereas types can be pervasive

Testing on system boundaries can aid us in making changes. Testing elsewhere can sometimes impede us. But types can go anywhere. | Continue reading


@tedinski.com | 5 years ago

Designing abstractions with properties in mind

Property tests are not just more powerful, more general unit tests. They're a different way of thinking, with a different impact on design. | Continue reading


@tedinski.com | 5 years ago

Classifying programming paradigms by their composition operators

A different perspective than I'm used to. Different paradigms offer different pieces and different ways those pieces can be put together. | Continue reading


@tedinski.com | 5 years ago

Familiar forms of composition

Every form of useful code re-use involves some form of composition operator. We build the whole out of parts, and the seams have properties. | Continue reading


@tedinski.com | 6 years ago

Decontructing the “Unix philosophy”

Composing smaller pieces into a great whole is a powerful design technique. | Continue reading


@tedinski.com | 6 years ago

Deconstructing the “Unix philosophy”

Composing smaller pieces into a great whole is a powerful design technique. | Continue reading


@tedinski.com | 6 years ago