Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Welcome to Modern Software Development Practices

About the Author

Hello. I’m Matias Callara, and for more than 10 years, I’ve been working at the intersection of Machine Learning, Operational Research, and Decision Theory. This should come as no surprise if you consider my academic background. I’m an Industrial Engineer with a Master’s in Optimization and a Ph.D. in Informatics, where I applied Machine Learning to predict behavior in the Cloud Computing Software industry.

How this course was born

My role as a tech lead and portfolio manager, responsible for several products, drove me to find and share tools that could help our team work smarter and more effectively. I focused on ensuring these tools were easy for everyone to use and encouraged teams to adopt them.

This course is designed to benefit those with academic backgrounds unrelated to software development. We will explore key topics, from code management with Git to testing and debugging strategies, to equip students with tools and techniques that will hopefully make them enjoy their work, whether alone or as part of a software development team.

Are Software Development Practices Still Relevant?

With tools like Generative AI now capable of writing code, it’s natural to question the future of software development and the skills required to succeed in it. No one can predict the future with certainty, so instead of making bold claims, let’s explore this question from first principles.

Let’s start with a foundational truth: building useful software is about managing complexity. Whether the code is written by a person or generated by an AI, any non-trivial application is a complex system of interlocking parts. This complexity doesn’t disappear; it has to be managed. Software development practices are, at their core, the methods we’ve developed over decades for managing that complexity.

Consider these underlying principles:

Viewed from this perspective, learning software development practices is less about learning the transient syntax of a programming language and more about mastering durable principles of structured thinking, quality control, and complexity management. These are skills that retain their value regardless of how the code itself is generated.

What Do You Hope to Gain?

Given the uncertainties we’ve just discussed, it’s more important than ever to be clear about your own learning objectives. So, before we dive in, I encourage you to pause and reflect on what brought you here.

Please answer the following questions for yourself:

Table of Contents