Software development is everywhere. But do you understand what it is about? Is it really clear for you?
In this article, I’ll explain what software development is, as seen from where I stand, fifteen years into the IT industry.
So what is it about?
Fundamentally, creating software means writing source code that, once transformed into machine code (i.e., code executable by a computer) by a compiler (i.e., sort of translator) gives instructions to the computer so that it can fulfill some useful function. Those instructions define the behavior of the software. For example: how it reacts to certain events, whether it accepts specific user input or not, what happens when the user clicks here or there, etc.
To write code, software developers/engineers (two terms that are usually used interchangeably) use different programming languages and various tools such as Integrated Development Environments (IDEs).
We can consider a few basic types of software:
- Software applications: desktop or mobile applications, tools/utilities, editors, etc (e.g., text editors, Web browsers, videogames, source code editors, etc)
- System software: software that supports the execution of other software (e.g., operating systems like Linux, Windows, macOS), and that allows to interact with physical devices (e.g., device drivers for printers, USB devices, motherboard chipsets, network adapters, etc). I won't be covering this kind of software as it's not my field of expertise
- Embedded systems software: software that is embedded in a physical device (e.g, firmware) and that controls the device (e.g., a robot vacuum). Usually, this kind of software is written using low-level programming languages (e.g., Assembly, C, C++, Rust) and has very limited resources available (memory & processing). I won't be covering this kind of software either
We could refine and distinguish between many more sub-types, but it doesn't matter too much for our discussion. If you're curious, then take a look at the following resources:
- Software categories @ Wikipedia
- Different types of software with examples
- Types of computer software
- A Detailed Guide to types of software applications
- Software types examples
Applications can be as simple as the famous "Hello world!", and be developed by a single person, or as complex as the Linux kernel (25+ million lines of code), Microsoft Windows (50+ million lines of code), and be developed by hundreds or even thousands of software developers (which is mind-blowing when you think about it!).
Another thing to consider is that applications are not always monoliths and can be composed of different parts/sub-systems, communicating with each other through different means. Those parts can even be executed on different machines; in that case, we talk about distributed systems.
Writing the code is only a part of the story though. Before doing anything, software developers first need to understand and analyze what actually needs to be done.
Software developers sometimes create software that humans don't directly interact with, but at the end of the day, humans are always somewhere in the loop. You should never ever lose sight of that fact. Whatever you do, always keep in mind that you need to satisfy the end-users.
A perfect solution that solves the wrong problem is just as useless as an unusable one. — A wise person
In this short article, I've introduced the notion of software development. It's just an idea, a simple concept. And that's the magic; if you learn the concepts one by one, then you'll quickly become one of us, a software crafter. It's not that hard; it's like everything, it just takes time.
That's it for today! ✨
Hello everyone! I'm Sébastien Dubois. I'm an author, founder, and CTO. I write books and articles about software development & IT, personal knowledge management, personal organization, and productivity. I also craft lovely digital products 🚀
If you've enjoyed this article and want to read more like this, then become a subscriber, check out my Obsidian Starter Kit, the PKM Library and my collection of books about software development 🔥.
You can follow me on Twitter 🐦
If you want to discuss, then don't hesitate to join the Personal Knowledge Management community or the Software Crafters community.