Why we absolutely should never build software like we build houses

Image of a madly designed houseA few days ago, I read something truly depressing. It was a piece written by Leslie Lamport, “a computer scientist … member of the National Academy of Engineering and the National Academy of Sciences. [with a] Ph.D. and M.A. in mathematics from Brandeis University and B.S. from MIT [and he] works at Microsoft Research.” Yet for all these grandiose accolades, he demonstrates a depressingly clueless understanding of his subject matter: software. In his article, he argues that we should build software like houses. In this article, I’ll detail why attempting to create applications in the same way as building houses is a really bad idea, which held back software development for decades. Further, the reality is that these days, architects are more likely to design houses using techniques pioneered by the latest software development practices. Continue reading “Why we absolutely should never build software like we build houses”

Testing with Lapsang

Lapsang logoThis post is the second in a series of articles on the Lapsang language. This time round, I want to explore its Test-driven development/Behaviour-driven-development (TDD/BDD) features. As previously mentioned, Lapsang takes many ideas that are considered programming “best practice” and makes them features of the language. As you might therefore imagine, testing in Lapsang isn’t relegated to a mere framework. In fact, it’s not even just built into the language syntax. Lapsang takes testing as seriously as it can be taken, by treating the presence of untested code as a compilation error. So using TDD when developing Lapsang code isn’t just a good idea, it’s mandatory if you want the code to compile! Continue reading “Testing with Lapsang”

Lapsang: “design to interfaces” and “dependency injection” language features

Lapsang logo

In a previous post, I introduced the idea of Lapsang: a hypothetical language that sought to take various “best practices” of modern software engineering (or software craftsmanship, if you prefer) and support and enforce them within the language itself. This is the first of a series of articles that then seeks to show how these ideas might work in practice. In this article, I’ll focus mainly on how Lapsang might support the principles of “design to interfaces” and “dependency injection”. Continue reading “Lapsang: “design to interfaces” and “dependency injection” language features”