# What is software development
A clear explanation about what software development is about.
![[What is software development - cover image.png]]
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:
- 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:
- [Software categories @ Wikipedia](https://en.wikipedia.org/wiki/Software_categories)
- [Different types of software with examples](https://www.squareboat.com/blog/different-types-of-software-with-examples)
- [Types of computer software](https://www.educba.com/types-of-computer-software/)
- [A Detailed Guide to types of software applications](https://www.fingent.com/blog/a-detailed-guide-to-types-of-software-applications/)
- [Software types examples](https://yourstory.com/mystory/what-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
## 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! ✨
LINK:
- [[How to build a Product - From idea to code (Article)]]
- https://www.dsebastien.net/2022-01-25-product-development-process//
LINK:
- [[How to use Tailwind with Svelte and Nrwl NX (Article)]]
- https://www.dsebastien.net/2021-10-18-svelte-tailwind-nx//
LINK:
- [[Problem-solving 101 (Article)]]
- https://www.dsebastien.net/2021-09-11-problem-solving-101//
LINK:
- [[How to get started in IT and grow as a Software developer (Article)]]
- https://www.dsebastien.net/2021-08-14-software-development-learning-path/
LINK:
- [[Knowii Community]]
- https://www.store.dsebastien.net//product/knowii-community
## Related
- [[What is software engineering (Article)]]
- [[What is the difference between software developers, engineers, coders, and programmers (Article)]]