Software Architecture Concepts: [ Part 1 ] Types Of Software
So you learned programming, you have control over the machines and can make them do what you want. Congratulations !.
Now you have an idea for your very own killer application, you have thought of a very good and modern interface for it, you have spent countless hours improving the user experience. you have discussed it with your friends to make sure they all like it. Now it is time to starting the journey of converting this killer idea to reality. You hope your software will be used by millions soon.
1. Developing the application
During development you will probably use your own laptop to write the code and test your application. you will use an IDE to write the application in the language that you know or even if you are a hard core developer you might use a simple text editor because you are a master of your programming language and don't need anything that an IDE provides. Hell, you might also be a member of one of the vim / emacs cults and use them to write your code.
2. Parts of the Application
There are usually two main parts on any application that you will decide to write
The frontend of a software program or website is everything with which the user interacts. From a user standpoint, the frontend is synonymous with he user interface. This interface can be either graphical (Desktop application , Web applications, or even Console application). whatever the kind of user interface, its role is to read inputs from user and output information to the user.
In the computer world, the "backend" refers to any part of a website or software program that users do not see. The backend is the "data processing layer," that processes the user input into meaningful outputs. Backend is what gives your application value without it you will just have buttons and text boxes that do nothing.
3. Deciding the application type
There are different ways to write application depending on the interaction needed between the Frontend and Backend.
3.1.Local Installed Software
For example if your application uses only local data and can be run on the user's own machine with no need for interaction with the outside world you can distribute your program as software for the customer to run on his own machine. In this model the Frontend and Backend of your application will be most probably deployed together as one unit. an example of these types of applications
- Local games
- Data processors (text editors, image editors, audio editors, etc..)
- Camera application
For these types of applications, Software is shipped to the customer containing the execution logic of both the Frontend & Backend. Users get an executable (exe , elf, apk, etc..) and use that to run the program. In this model users actually own the computer instructions that was written by the developer. and users will use their own machines to execute this software. In the case of the calculator program the addition operation itself is performed inside the Processor of the use.
If you are developing this type of applications you only need to worry about a single entity. All the logic lives in one place and you only need to worry about reading the input , processing and outputting the correct output. everything lives in one place and everything is shipped together.
Some applications cannot function in isolation, these application has no value if it is only running on the user machine. For these types of application normally the user only has access to the Frontend maybe along with some bare minimum functionality that allows the application to communicate with external entities that give the program its value. an example of these applications
- Email application
- Online game
- Stock exchange application
- Banking applications
- E commerce applications
These types of programs need to communicate with an external entity to in order to have a value. the communication is normally done on a 2 way communication channel (most probably the internet). For example an online game needs to communicate with another entity to synchronize all players movement so that users see and interact with other players actions.
If you are developing this type of application you need to worry about multiple component. First you need to develop the core software (service) that gives value to your program. Secondly you need to develop the user interface (web app / mobile application / desktop application) and figure out how can you link it with your application.
In this model all the heavy lifting (processing) is done on your hardware. example in the email application you are the one storing, indexing and retrieving the customer emails. the user in this model only need to send requests and view the results, the actual processing is not done on the machine of the user.
In this software model the relation between the user and the owner of the software is continuous. The user doesn't own / have access to the actual executable code but only has permission to use it.