Strive for changes that are obviously correct.Continue reading “Obvious correctness as a first principle”
Sadly Joe Armstrong recently passed away. This is of course a big loss to the computer science community.
I would like to take this moment to highlight Joe’s Ph.D. thesis, “Making reliable distributed systems in the presence of software errors”. I would recommend this work to anyone that are involved in software development.Continue reading “A valuable contribution by Joe Armstrong”
Is the development part of the company where you work considered as a cost for the company or as an investment in the future health of the company?
I think this is a highly relevant question to ask since it will have a significant impact on how you are treated and the kind of work that will be expected of you.
Let’s look closer at the differences in the culture of a “R&D cost company” vs. a “R&D is our investment in the future company”.
I watched Serverless Architectures by Mike Roberts and I think it is a nice introduction to the state of serverless in 2017.
I recommend this to anyone that want a light introduction to the subject.
I think that serverless will rise in popularity in the coming years so it is well worth to get familiar with the subject.
Imagine a painter having to first plan all her strokes, brushes and color mixes in an abstract list and then “execute” a batch of those moves on the canvas and see where that got her. That is obviously an inefficient way to work and would probably not yield the high quality that would be possible if feedback where given after each stroke as is in the real world. But in our craft of software development we are in the habit of creating those batches of work and then see where that get us.
Are there any first principles of programming? I am at least going to entertain that hypothesis and try to put forward what I think are the first principles when designing quality software systems and when selecting the tools to use.
The first principle I will discuss is immutability.
Through the years a bunch of “X”-driven developments/designs have emerged, such as Domain Driven Design, Test Driven Development, Behavior Driven Development etc. These design principles all have their own focus on different parts of development, and what I think is missing is a more higher level, over arching design principle. Therefore I have formulated the “Freedom Driven Design” principle.
A high quality team
If your ambition is to produce high quality software systems, you will most likely need a high quality team to do it. When you succeed in building such a team, remember that organizations that do not have the ambition to constantly grow the talent of their teams will be overrun by those who do, and key talent will move away.
Have you ever learned programming paradigms outside of those that you where schooled to use or happened to use at your first job?
If we do not step away from the tools, practices and methods that we use, to learn others, how can we evaluate which tools are the best for the job at hand?