DEV Community

Sébastien D.
Sébastien D.

Posted on • Edited on • Originally published at dsebastien.net

What is software development

Software development is everywhere. But do you understand what it is about? Is it really clear for you?

Software development

In this article, I’ll explain what software development is, as seen from where I stand, fifteen years into the IT industry.

This content is part of my Dev Concepts series.

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:

  • Web applications/websites: What most software developers work on; applications that execute in a Web browser and are written using HTML, CSS, and JavaScript.
  • 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:

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)

References

Conclusion

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!

PS: If you want to learn tons of other cool things about product/software/Web development, then check out the Dev Concepts series, subscribe to my newsletter, and come say hi on Twitter!

Top comments (0)