Operating systems provide the following common services to application programs: multitasking, files, databases, data communications, memory, display systems, audio, keyboard and mouse inputs.
Computer scientists study the theory of computer programming. Abstraction is useful to them. Software engineers should study how to write programs and should study the subjects needed to create optimized data structures and algorithms (functionality) which they implement with application software. Their use of programming language should be kept simple because complex language never pays off.
The operating system also provides a standard user interface which is used by all application programs to provide a standard interface to users of application programs. Users want a common look and operation for all their application programs.
Application Programming starts off with the desire to computerize something in real life, such as creating a Word Processor, or website and viewer, or autopilot, or video game.
Applications Programmers should start designing by modeling reality as a set of data structures and inputs.
Then the programmer should design algorithms and tasks (as in multitasking) to process the input data (which may come from users) and data structures into a desired result or output to control something.
Then the programmer outputs the result or controls to something.
Applications Programmers should organize all their software as a set of objects.
Applications Programmers should use the operating system and all other software as objects which they instantiate to use in their application program.
Abstraction is useless mumbo jumbo to engineers. Software engineers should put abstraction into the academic garbage can along with composition, polymorphism, encapsulation, aggregate relationships, overloading, association, templates, interfaces, containers, the single responsibility principle, the principle of clarity, the open closed principle, and the intricacies of creating hierarchies of objects.
People who study computer programming from theatrical point of view value those things, and God bless them because they invent things for us software engineers to use. They invented the brilliant object which was a significant invention because it made programming much easier to do and more consistent and uniform. But computer scientists should stay away from software engineering because they make programming hard and confusing to engineering students.
There is a significant difference between software engineering and computer science. Software engineers create software and need simple to use tools and frameworks. On the other hand, computer scientists are involved with the theoretical aspects of computer programming.
Software engineering was simple when I started programming in 1963. Now it is a confusing mess to most software engineering students. And how do I know?
Because, for decades, I managed those newly graduated software engineers. They are confused about how to write software.
Writing programs is simple. It’s the algorithms that are hard. But computer scientists and companies such as Microsoft and Amazon have managed to make writing software hard. It keeps them in business because easy to write software would cause people to write their own software instead of buying it from Microsoft and Amazon.
Abstraction, along with composition, polymorphism, encapsulation, aggregate relationships, overloading, association, templates, interfaces, containers, the single responsibility principle, the principle of clarity, the open closed principle, and the intricacies of creating hierarchies of objects are mostly useless for writing good software. It is useful for the theoretical study of computer programs.
Useful for writing software is easy-to-use development tools and frameworks. Applications Programmers should be concentrating on breaking jobs into a set of tasks that run concurrently. They should concentrate creating good data structures that model the reality they are trying to computerize. They should concentrate on creating optimized algorithms (functions) to process everything. They should not be concentrating on the theoretical aspects of programing languages because it doesn’t help in writing software. Knowing multitasking helps in writing superior software.
Abstraction in operating systems is something that software engineering students should ignore. Instead, they should study about the services provided by operating systems which they will use as objects they instantiates to use in their programs.
What are different abstractions in an operating system?
There are two that I am aware of and that is OSAL API and HALs.
OSAL API (os abstraction layer application programming interface):
- A means to create applications for the os in a desktop environment and at a faster pace.
- Enables a developer to use a higher level programming language to do the above.
HAL (hardware abstraction layer) :
- Conceals the distinction between the different hardware from most of the kernel.
- Defines an interface that can be used to access different hardware such as memory and I/O.
0 comments :
Post a Comment
Note: only a member of this blog may post a comment.