Skip to main content

Reconciling Functional and Object Oriented Programming

· 6 min read

The Functional and Object Oriented Programming paradigms have different philosophies on how to write software. Like any ideology, they have to be applied in a concrete way to be useful. A programming language implementation has to be made, and the designers have to choose how to embody either or both of those paradigms in the syntax and semantics of the language. Some languages try to stay true to the ideal paradigm. Most mainstream languages, which make up most of the codebases out there, land somewhere in the middle. When you choose a language for a project, you often do not want to choose purely on programming paradigm - the language runtime, ecosystem, deployment options, and performance are critical considerations. Even if you favor one paradigm or the other, you often find yourself in languages that support both, working with people from both camps, and the codebase ends up being somewhere in the middle between the two.

Goodbye Software Developers, Hello Automation Engineers

· 7 min read

AI is going to take all the Software Developers jobs. That's what they say. There is some truth to that. Like many professions, Software Development has many facets, and many different activities to perform. Saying you are 'in Software Development' is about as meaningless as saying you are 'in Business'. Different people in the profession focus on different activities. Today's AI is very good at certain things, and very bad at others. Software developers who primarily focus on the activities that AI is good at will be replaced, mercilessly. The rest will not. Instead they will get even better, because they now have a better tool at their disposal. The true value that software developers provide are skills and activities that have been valuable to human civilization since its inception.

Smash the Test Pyramid!

· 10 min read

For many years, the Test Pyramid was (still is?) the de-facto model for formulating the testing strategy for your software system. But it's not perfect, and if you are focused on the wrong aspects of it, it could be doing you more harm than good.

Machine Learning for Programmers - Part 1 - The Fundamentals

· 10 min read

Machine Learning and AI can be a daunting domain. There is a lot of advanced math, new technical terms, and low level hardware that a typical programmer may not be familiar with. Some of the things an 'AI system' can do can seem like magic. The scale of some systems can be enormous. Models can have billions of nodes or parameters.

Observability, Testability, and Encapsulation - Opposing Tensions Shape Good Design

· 8 min read

There is so much to learn to become a good software developer. Once you get past the technical hurdle of mastering all the tools, frameworks, and languages you need to just make something work, there is still a whole world of system design and engineering practices to learn. Much of this material is not as straightforward. Everything has tradeoffs, and the right answer for how to design something is often 'it depends'. You will find differing opinions about the best way to do things. Many of the concepts and goals for building good systems can seem to be in opposition to each other. Encapsulation is a software engineering principle that encourages you to hide details. Observability and Testability are software engineering principles that encourage you to expose details. But that opposition is not a bad thing. Opposing forces lead to equilibrium, and that is a wonderful place to be. Let's take a look at how the combination of these practices can help us build better systems.