Software development

The Software Shift Towards ‘Replace’

Read more

About a month ago, Nat Friedman, the CEO of Github welcomed Semmle to Github with the words:

Human progress depends on the open source community.

Around those days, I was lookingat an old presentation by Sonatype which provides some data on the explosion of open source usage claiming that:

In a typical application 90% of the code is from 3rd parties.

I set out to find a possible explanation for such strong statements which I will briefly share in this story.

Software development

(Hidden) Inequality among Programmers

Read more

Code is eating the world — we have heard it a hundred times. Programmers are the ones producing this code, so a logical question is: what is happening to them? As usual, the answer depends on the subject but I will argue that some are getting fat while most are starting to starve. I don’t mean physical starvation because they don’t have money to buy food — I’m talking about intellectual starvation in the style of the famous Buridan’s ass paradox.

Most of those professional developers with more than 15+ years of experience in some set of technologies are now in the funemployment mode. They decide which projects they want to work on and typically move to a semi-management position. Obviously, there are exceptions — genuine technical leaders. I’m sure you know them in your company and they are vital to attract and retain new talent. They are like the high school teachers that have inspired you so much that you hear them in your head from time to time throughout your life. The other ones are like the uninspiring teachers except they drive a Tesla.

Software development

Program Analysis for Developers: Part I

Read more

The vast majority of developers have heard about program analysis techniques but often don’t have a good intuition about how these techniques work. In this series of articles, I will provide a brief overview of the major techniques and hopefully clarify some of their capabilities and limitations.

Program analysis is a field of computer science interested in techniques that infer properties of program executions. These two elements, properties and program executions, are the inputs of a program analysis technique and are the objects I will go over in this article. Let’s dive in and start with the executions!

Software development

Software Development is Complex Communication

Read more

Behind every piece of code produced by a human is an intention. The intention should answer the question: why should this code exist? Fundamentally, the quality of code is related to this intention. For example, saying that you have written an elegant piece of code without stating the intention of that code is non-sensical.

Software developers usually call this intention specification. All software should start from an informal specification, a representation of some intention that is shared by a group of people. I say should because sometimes, developers are too eager to start coding without a clue of what the intention really is. This can be because these informal specifications are not clear enough to be communicated or because the communication between team members is not effective.

Software development

Async: Magical Realism in Computing

Read more

We are living in the era of the asynchronous — the promise land of everything will work out or will go terribly wrong but not just yet so keep on pushing. This movement has not only infiltrated our machines and how they run software but also our collaborations in extreme ways.

Every time I think of async, the epitome of asynchronous processes, I remember this unfortunate scene of the TV show Narcos about magical realism. Magical realism is a style of fiction popularised by Gabriel García Márquez that combines a genuine realistic description of the world with magical elements. I also remember every time I had to communicate with some governmental body or giant corporation and the stress of not knowing if and when you will hear from them.

Software development

Agile: The Pope at the Dark Ages of Software Development

Read more

Agile, the software development methodology turned into a religion, is built on the fallacy that the complexity inherent in the fuzzy collective intelligence of a group of people, a.k.a. thin air, can be broken up into clearly defined simple tasks.

It is a brilliant business strategy as it shifts the error rate from the client side into the process itself. We have fewer unhappy clients because they are now a part of that collective intelligence. What happens if the whole thing blows up? Well, the process can’t be blamed; remember that the client is never wrong. So the blame is shifted to some stakeholders and they are usually software developers. Their way of coping with this social phenomenon was to focus on the speed of execution and the creation of a myth: the 10x engineer.

Back to Top