WHAT IS Computer SCIENCE |full detail its extra knowledge-II

Computational science
Computational science applies computer simulation, scientific visualization, mathematical modeling, algorithms, data structures, networking, database design, symbolic computation, and high-performance computing to help advance the goals of various disciplines. These disciplines include biology, chemistry, fluid dynamics, archaeology, finance, sociology, and forensics. Computational science has evolved rapidly, especially because of the dramatic growth in the volume of data transmitted from scientific instruments. This phenomenon has been called the “big data” problem.
The mathematical methods needed for computational science require the transformation of equations and functions from the continuous to the discrete. For example, the computer integration of a function over an interval is accomplished not by applying integral calculus but rather by approximating the area under the function graph as a sum of the areas obtained from evaluating the function at discrete points.
Similarly, the solution of a differential equation is obtained as a sequence of discrete points determined by approximating the true solution curve by a sequence of tangential line segments. When discretized in this way, many problems can be recast as an equation involving a matrix (a rectangular array of numbers) solvable using linear algebra. Numerical analysis is the study of such computational methods.
SCIENCE IN THE AI WORLD
Several factors must be considered when applying numerical methods: (1) the conditions under which the method yields a solution, (2) the accuracy of the solution, (3) whether the solution process is stable (i.e., does not exhibit error growth), and (4) the computational complexity (in the sense described above) of obtaining a solution of the desired accuracy.
The requirements of big-data scientific problems, including the solution of ever larger systems of equations, engage the use of large and powerful arrays of processors (called multiprocessors or supercomputers) that allow many calculations to proceed in parallel by assigning them to separate processing elements. These activities have sparked much interest in parallel computer architecture and algorithms that can be carried out efficiently on such machines.
Graphics and visual computing is the field that deals with the display and control of images on a computer screen. This field encompasses the efficient implementation of four interrelated computational tasks: rendering, modeling, animation, and visualization. Graphics techniques incorporate principles of linear algebra, numerical integration, computational geometry, special-purpose hardware, file formats, and graphical user interfaces (GUIs) to accomplish these complex tasks.
Applications of graphics include CAD, fine arts, medical imaging, scientific data visualization, and video games. CAD systems allow the computer to be used for designing objects ranging from automobile parts to bridges to computer chips by providing an interactive drawing tool and an engineering interface to simulation and analysis tools. Fine arts applications allow artists to use the computer screen as a medium to create images, cinematographic special effects, animated cartoons, and television commercials.
Graphics and visual computing
Medical imaging applications involve the visualization of data obtained from technologies such as X-rays and magnetic resonance imaging (MRIs) to assist doctors in diagnosing medical conditions.
Scientific visualization uses massive amounts of data to define simulations of scientific phenomena, such as ocean modeling, to produce pictures that provide more insight into the phenomena than would tables of numbers.
Graphics also provide realistic visualizations for video gaming, flight simulation, and other representations of reality or fantasy. The term virtual reality has been coined to refer to any interaction with a computer-simulated virtual world.
A challenge for computer graphics is the development of efficient algorithms that manipulate the myriad of lines, triangles, and polygons that make up a computer image. In order for realistic on-screen images to be presented, each object must be rendered as a set of planar units. Edges must be smoothed and textured so that their underlying construction from polygons is not obvious to the naked eye.
In many applications, still pictures are inadequate, and rapid display of real-time images is required. Both extremely efficient algorithms and state-of-the-art hardware are needed to accomplish real-time animation. (For more technical details of graphics displays, see computer graphics.)
Human-computer interaction
Human-computer interaction (HCI) is concerned with designing effective interaction between users and computers and the construction of interfaces that support this interaction. HCI occurs at an interface that includes both software and hardware. User interface design impacts the life cycle of software, so it should occur early in the design process. Because user interfaces must accommodate a variety of user styles and capabilities, HCI research draws on several disciplines including psychology, sociology, anthropology, and engineering.
In the 1960s, user interfaces consisted of computer consoles that allowed an operator directly to type commands that could be executed immediately or at some future time. With the advent of more user-friendly personal computers in the 1980s, user interfaces became more sophisticated, so that the user could “point and click” to send a command to the operating system.
START TO LEARN WITH US
Thus, the field of HCI emerged to model, develop, and measure the effectiveness of various types of interfaces between a computer application and the person accessing its services. GUIs enable users to communicate with the computer by such simple means as pointing to an icon with a mouse or touching it with a stylus or forefinger. This technology also supports windowing environments on a computer screen, which allow users to work with different applications simultaneously, one in each window.
Information management
Information management (IM) is primarily concerned with the capture, digitization, representation, organization, transformation, and presentation of information. Because a computer’s main memory provides only temporary storage, computers are equipped with auxiliary disk storage devices that permanently store data.
These devices are characterized by having much higher capacity than main memory but slower read/write (access) speed. Data stored on a disk must be read into main memory before it can be processed. A major goal of IM systems, therefore, is to develop efficient algorithms to store and retrieve specific data for processing.
IM systems comprise databases and algorithms for the efficient storage, retrieval, updating, and deleting of specific items in the database. The underlying structure of a database is a set of files residing permanently on a disk storage device. Each file can be further broken down into a series of records, which contains individual data items, or fields.
Each field gives the value of some property (or attribute) of the entity represented by a record. For example, a personnel file may contain a series of records, one for each individual in the organization, and each record would contain fields that contain that person’s name, address, phone number, email address, and so forth.
Many file systems are sequential, meaning that successive records are processed in the order in which they are stored, starting from the beginning and proceeding to the end. This file structure was particularly popular in the early days of computing, when files were stored on reels of magnetic tape and these reels could be processed only in a sequential manner.
Sequential files are generally stored in some sorted order (e.g., alphabetic) for printing of reports (e.g., a telephone directory) and for efficient processing of batches of transactions. Banking transactions (deposits and withdrawals), for instance, might be sorted in the same order as the accounts file, so that as each transaction is read the system need only scan ahead to find the accounts record to which it applies.
With modern storage systems, it is possible to access any data record in a random fashion. To facilitate efficient random access, the data records in a file are stored with indexes called keys. An index of a file is much like an index of a book; it contains a key for each record in the file along with the location where the record is stored.
BUILD YOUR FUTURE

Since indexes might be long, they are usually structured in some hierarchical fashion so that they can be navigated efficiently. The top level of an index, for example, might contain locations of (point to) indexes to items beginning with the letters A, B, etc. The A index itself may contain not locations of data items but pointers to indexes of items beginning with the letters Ab, Ac, and so on. Locating the index for the desired record by traversing a treelike structure is quite efficient.
Many applications require access to many independent files containing related and even overlapping data. Their information management activities frequently require data from several files to be linked, and hence the need for a database model emerges.
START WITH US
Historically, three different types of database models have been developed to support the linkage of records of different types: (1) the hierarchical model, in which record types are linked in a treelike structure (e.g., employee records might be grouped under records describing the departments in which employees work), (2) the network model, in which arbitrary linkages of record types may be created (e.g., employee records might be linked on one hand to employees’ departments and on the other hand to their supervisors—that is, other employees), and (3) the relational model, in which all data are represented in simple tabular form.
In the relational model, each individual entry is described by the set of its attribute values (called a relation), stored in one row of the table. This linkage of n attribute values to provide a meaningful description of a real-world entity or a relationship among such entities forms a mathematical n-tuple.
The relational model also supports queries (requests for information) that involve several tables by providing automatic linkage across tables by means of a “join” operation that combines records with identical values of common attributes. Payroll data, for example, can be stored in one table and personnel benefits data in another; complete information on an employee could be obtained by joining the two tables using the employee’s unique identification number as a common attribute.
MODREN SCIENCE
To support database processing, a software artifact known as a database management system (DBMS) is required to manage the data and provide the user with commands to retrieve information from the database. For example, a widely used DBMS that supports the relational model is MySQL.
Another development in database technology is to incorporate the object concept. In object-oriented databases, all data are objects. Objects may be linked together by an “is-part-of” relationship to represent larger, composite objects. Data describing a truck, for instance, may be stored as a composite of a particular engine, chassis, drive train, and so forth. Classes of objects may form a hierarchy in which individual objects may inherit properties from objects farther up in the hierarchy. For example, objects of the class “motorized vehicle” all have an engine; members of the subclasses “truck” or “airplane” will then also have an engine.
START TO BUILD YOUR FUTURE
NoSQL, or non-relational databases, have also emerged. These databases are different from the classic relational databases because they do not require fixed tables. Many of them are document-oriented databases, in which voice, music, images, and video clips are stored along with traditional textual information. An important subset of NoSQL are the XML databases, which are widely used in the development of Android smartphone and tablet applications.
Data integrity refers to designing a DBMS that ensures the correctness and stability of its data across all applications that access the system. When a database is designed, integrity checking is enabled by specifying the data type of each column in the table.
SCIENCE OF COMPUTER IN AI WORLD
For example, if an identification number is specified to be nine digits, the DBMS will reject an update attempting to assign a value with more or fewer digits or one including an alphabetic character. Another type of integrity, known as referential integrity, requires that each entity referenced by some other entity must itself exist in the database. For example, if an airline reservation is requested for a particular flight number, then the flight referenced by that number must actually exist.
Access to a database by multiple simultaneous users requires that the DBMS include a concurrency control mechanism (called locking) to maintain integrity whenever two different users attempt to access the same data at the same time. For example, two travel agents may try to book the last seat on a plane at more or less the same time. Without concurrency control, both may think they have succeeded, though only one booking is actually entered into the database.
SCIENCE IN MODERN WORLD
A key concept in studying concurrency control and the maintenance of data integrity is the transaction, defined as an indivisible operation that transforms the database from one state into another. To illustrate, consider an electronic transfer of funds of $5 from bank account A to account B. The operation that deducts $5 from account A leaves the database without integrity since the total over all accounts is $5 short.
Similarly, the operation that adds $5 to account B in itself makes the total $5 too much. Combining these two operations into a single transaction, however, maintains data integrity. The key here is to ensure that only complete transactions are applied to the data and that multiple concurrent transactions are executed using locking so that serializing them would produce the same result. A transaction-oriented control mechanism for database access becomes difficult in the case of a long transaction, for example, when several engineers are working, perhaps over the course of several days, on a product design that may not exhibit data integrity until the project is complete.
As mentioned previously, a database may be distributed in that its data can be spread among different host computers on a network. If the distributed data contains duplicates, the concurrency control problem is more complex. Distributed databases must have a distributed DBMS to provide overall control of queries and updates in a manner that does not require that the user know the location of the data. A closely related concept is interoperability, meaning the ability of the user of one member of a group of disparate systems (all having the same functionality) to work with any of the systems of the group with equal ease and via the same interface.
Intelligent systems
Artificial intelligence (AI) is an area of research that goes back to the very beginnings of computer science. The idea of building a machine that can perform tasks perceived as requiring human intelligence is an attractive one. The tasks that have been studied from this point of view include game playing, language translation, natural language understanding, fault diagnosis, robotics, and supplying expert advice.
Since the late 20th century, the field of intelligent systems has focused on the support of everyday applications—email, word processing, and search—using nontraditional techniques. These techniques include the design and analysis of autonomous agents that perceive their environment and interact rationally with it. The solutions rely on a broad set of knowledge-representation schemes, problem-solving mechanisms, and learning strategies. They deal with sensing (e.g., speech recognition, natural language understanding, and computer vision), problem-solving (e.g., search and planning), acting (e.g., robotics), and the architectures needed to support them (e.g,. agents and multi-agents).
Networking and communication
The field of networking and communication includes the analysis, design, implementation, and use of local, wide-area, and mobile networks that link computers together. The Internet itself is a network that makes it feasible for nearly all computers in the world to communicate.
Operating systems
An operating system is a specialized collection of software that stands between a computer’s hardware architecture and its applications. It performs a number of fundamental activities such as file system management, process scheduling, memory allocation, network interfacing, and resource sharing among the computer’s users. Operating systems have evolved in their complexity over time, beginning with the earliest computers in the 1960s.
COMPUTER NETWORKING

With early computers, the user typed programs onto punched tape or cards, which were read into the computer, assembled or compiled, and run. The results were then transmitted to a printer or a magnetic tape.
These early operating systems engaged in batch processing; i.e., handling sequences of jobs that are compiled and executed one at a time without intervention by the user. Accompanying each job in a batch were instructions to the operating system (OS) detailing the resources needed by the job, such as the amount of CPU time required, the files needed, and the storage devices on which the files resided.
START WITH AI
From these beginnings came the key concept of an operating system as a resource allocator. This role became more important with the rise of multiprogramming, in which several jobs reside in the computer simultaneously and share resources, for example, by being allocated fixed amounts of CPU time in turn.
More sophisticated hardware allowed one job to be reading data while another wrote to a printer and still another performed computations. The operating system thus managed these tasks in such a way that all the jobs were completed without interfering with one another.
The advent of time sharing, in which users enter commands and receive results directly at a terminal, added more tasks to the operating system. Processes known as terminal handlers were needed, along with mechanisms such as interrupts (to get the attention of the operating system to handle urgent tasks) and buffers (for temporary storage of data during input/output to make the transfer run more smoothly). Modern large computers interact with hundreds of users simultaneously, giving each one the perception of being the sole user.
OPERATING
Another area of operating system research is the design of virtual memory. Virtual memory is a scheme that gives users the illusion of working with a large block of contiguous memory space (perhaps even larger than real memory), when in actuality most of their work is on auxiliary storage (disk). Fixed-size blocks (pages) or variable-size blocks (segments) of the job are read into main memory as needed. Questions such as how much main memory space to allocate to users and which pages or segments should be returned to disk (“swapped out”) to make room for incoming pages or segments must be addressed in order for the system to execute jobs efficiently.
The first commercially viable operating systems were developed by IBM in the 1960s and were called OS/360 and DOS/360. Unix was developed at Bell Laboratories in the early 1970s and since has spawned many variants, including Linux, Berkeley Unix, GNU, and Apple’s iOS. Operating systems developed for the first personal computers in the 1980s included IBM’s (and later Microsoft’s) DOS, which evolved into various flavors of Windows. An important 21st-century development in operating systems was that they became increasingly machine-independent.
Parallel and distributed computing
The simultaneous growth in availability of big data and in the number of simultaneous users on the Internet places particular pressure on the need to carry out computing tasks “in parallel,” or simultaneously. Parallel and distributed computing occurs across many different topic areas in computer science, including algorithms, computer architecture, networks, operating systems, and software engineering.
During the early 21st century there was explosive growth in multiprocessor design and other strategies for complex applications to run faster. Parallel and distributed computing builds on fundamental systems concepts, such as concurrency, mutual exclusion, consistency in state/memory manipulation, message-passing, and shared-memory models.
Creating a multiprocessor from a number of single CPUs requires physical links and a mechanism for communication among the processors so that they may operate in parallel. Tightly coupled multiprocessors share memory and hence may communicate by storing information in memory accessible by all processors.
Loosely coupled multiprocessors, including computer networks, communicate by sending messages to each other across the physical links. Computer scientists have investigated various multiprocessor architectures. For example, the possible configurations in which hundreds or even thousands of processors may be linked together are examined to find the geometry that supports the most efficient system throughput.
COMPUTER TECONOLOGY
A much-studied topology is the hypercube, in which each processor is connected directly to some fixed number of neighbors: two for the two-dimensional square, three for the three-dimensional cube, and similarly for the higher-dimensional hypercubes. Computer scientists also investigate methods for carrying out computations on such multiprocessor machines (e.g., algorithms to make optimal use of the architecture and techniques to avoid conflicts in data transmission). The machine-resident software that makes possible the use of a particular machine, in particular its operating system, is an integral part of this investigation.
Concurrency refers to the execution of more than one procedure at the same time (perhaps with the access of shared data), either truly simultaneously (as on a multiprocessor) or in an unpredictably interleaved order. Modern programming languages such as Java include both encapsulation and features called “threads” that allow the programmer to define the synchronization that occurs among concurrent procedures or tasks.
Two important issues in concurrency control are known as deadlocks and race conditions. Deadlock occurs when a resource held indefinitely by one process is requested by two or more other processes simultaneously. As a result, none of the processes that call for the resource can continue; they are deadlocked, waiting for the resource to be freed. An operating system can handle this situation with various prevention or detection and recovery techniques. A race condition, on the other hand, occurs when two or more concurrent processes assign a different value to a variable, and the result depends on which process assigns the variable first (or last).
START WITH THAT
Preventing deadlocks and race conditions is fundamentally important, since it ensures the integrity of the underlying application. A general prevention strategy is called process synchronization. Synchronization requires that one process wait for another to complete some operation before proceeding. For example, one process (a writer) may be writing data to a certain main memory area, while another process (a reader) may want to read data from that area. The reader and writer must be synchronized so that the writer does not overwrite existing data until the reader has processed it. Similarly, the reader should not start to read until data has been written in the area.
With the advent of networks, distributed computing became feasible. A distributed computation is one that is carried out by a group of linked computers working cooperatively. Such computing usually requires a distributed operating system to manage the distributed resources. Important concerns are workload sharing, which attempts to take advantage of access to multiple computers to complete jobs faster; task migration, which supports workload sharing by efficiently distributing jobs among machines; and automatic task replication, which occurs at different sites for greater reliability.
Platform-based development
Platform-based development is concerned with the design and development of applications for specific types of computers and operating systems (“platforms”). Platform-based development takes into account system-specific characteristics, such as those found in Web programming, multimedia development, mobile application development, and robotics.

Platforms such as the Internet or an Android tablet enable students to learn within and about environments constrained by specific hardware, application programming interfaces (APIs), and special services. These environments are sufficiently different from “general purpose” programming to warrant separate research and development efforts.
For example, consider the development of an application for an Android tablet. The Android programming platform is called the Dalvic Virtual Machine (DVM), and the language is a variant of Java. However, an Android application is defined not just as a collection of objects and methods but, moreover, as a collection of “intents” and “activities,” which correspond roughly to the GUI screens that the user sees when operating the application.
XML programming is needed as well, since it is the language that defines the layout of the application’s user interface. Finally, I/O synchronization in Android application development is more demanding than that found on conventional platforms, though some principles of Java file management carry over.
Real-time systems provide a broader setting in which platform-based development takes place. The term real-time systems refers to computers embedded into cars, aircraft, manufacturing assembly lines, and other devices to control processes in real time. Frequently, real-time tasks repeat at fixed-time intervals.
COMPUTER GENERATION
For example, sensor data are gathered every second, and a control signal is generated. In such cases, scheduling theory is used to determine how the tasks should be scheduled on a given processor. A good example of a system that requires real-time action is the antilock braking system (ABS) on an automobile; because it is critical that the ABS instantly reacts to brake-pedal pressure and begins a program of pumping the brakes, such an application is said to have a hard deadline.
Other real-time systems are said to have soft deadlines, in that no disaster will happen if the system’s response is slightly delayed; an example is an order shipping and tracking system. The concept of “best effort” arises in real-time system design, because soft deadlines sometimes slip and hard deadlines are sometimes met by computing a less than optimal result. For example, most details on an air traffic controller’s screen are approximations (e.g., altitude) that need not be computed more precisely (e.g., to the nearest inch) in order to be effective.
Programming languages
Programming languages are the languages with which a programmer implements a piece of software to run on a computer. The earliest programming languages were assembly languages, not far removed from the binary-encoded instructions directly executed by the computer. By the mid-1950s, programmers began to use higher-level languages.
Two of the first higher-level languages were FORTRAN (Formula Translator) and ALGOL (Algorithmic Language), which allowed programmers to write algebraic expressions and solve scientific computing problems. As learning to program became increasingly important in the 1960s, a stripped-down version of FORTRAN called BASIC (Beginner’s All-Purpose Symbolic Instruction Code) was developed at Dartmouth College.
BASIC quickly spread to other academic institutions, and by 1980 versions of BASIC for personal computers allowed even students at elementary schools to learn the fundamentals of programming. Also, in the mid-1950s, COBOL (Common Business-Oriented Language) was developed to support business programming applications that involved managing information stored in records and files.
The trend since then has been toward developing increasingly abstract languages, allowing the programmer to communicate with the machine at a level ever more remote from machine code. COBOL, FORTRAN, and their descendants (Pascal and C, for example) are known as imperative languages, since they specify as a sequence of explicit commands how the machine is to go about solving the problem at hand. These languages were also known as procedural languages, since they allowed programmers to develop and reuse procedures, subroutines, and functions to avoid reinventing basic tasks for every new application.
Another important development in programming languages through the 1980s was the addition of support for data encapsulation, which gave rise to object-oriented languages. The original object-oriented language was called Smalltalk, in which all programs were represented as collections of objects communicating with each other via message-passing.
DATA
An object is a set of data together with the methods (functions) that can transform that data. Encapsulation refers to the fact that an object’s data can be accessed only through these methods. Object-oriented programming has been very influential in computing. Languages for object-oriented programming include C++, Visual BASIC, and Java.
Java is unusual because its applications are translated not into a particular machine language but into an intermediate language called Java Bytecode, which runs on the Java Virtual Machine (JVM). Programs on the JVM can be executed on most contemporary computer platforms, including Intel-based systems, Apple Macintoshes, and various Android-based smartphones and tablets. Thus, Linux, iOS, Windows, and other operating systems can run Java programs, which makes Java ideal for creating distributed and Web-based applications. Residing on Web-based servers, Java programs may be downloaded and run in any standard Web browser to provide access to various services, such as a client interface to a game or entry to a database residing on a server.
MODREN WORLD SCIENCE
At a still higher level of abstraction lie declarative and scripting languages, which are strictly interpreted languages and often drive applications running in Web browsers and mobile devices. Some declarative languages allow programmers to conveniently access and retrieve information from a database using “queries,” which are declarations of what to do (rather than how to do it). A widely used database query language is SQL (Structured Query Language) and its variants (e.g., MySQL and SQLite).
Associated with these declarative languages are those that describe the layout of a Web page on the user’s screen. For example, HTML (HyperText Markup Language) supports the design of Web pages by specifying their structure and content. Gluing the Web page together with the database is the task of a scripting language (e.g., PHP), which is a vehicle for programmers to integrate declarative statements of HTML and MySQL with imperative actions that are required to effect an interaction between the user and the database.

An example is an online book order with Amazon.com, where the user queries the database to find out what books are available and then initiates an order by pressing buttons and filling appropriate text areas with his or her ordering information. The software that underlies this activity includes HTML to describe the content of the Web page, MySQL to access the database according to the user’s requests, and PHP to control the overall flow of the transaction.
Computer programs written in any language other than machine language must be either interpreted or translated into machine language (“compiled”). As suggested above, an interpreter is software that examines a computer program one instruction at a time and calls on code to execute the machine operations required by that instruction.
A compiler is software that translates an entire computer program into machine code that is saved for subsequent execution whenever desired. Much work has been done on making both the compilation process and the compiled code as efficient as possible. When a new language is developed, it is usually interpreted at first. If it later becomes popular, a compiler is developed for it, since compilation is more efficient than interpretation.
There is an intermediate approach, which is to compile code not into machine language but into an intermediate language (called a virtual machine) that is close enough to machine language that it is efficient to interpret, though not so close that it is tied to the machine language of a particular computer. It is this approach that provides the Java language with its computer platform independence via the JVM.
Security and information assurance
Security and information assurance refers to policy and technical elements that protect information systems by ensuring their availability, integrity, authentication, and appropriate levels of confidentiality. Information security concepts occur in many areas of computer science, including operating systems, computer networks, databases, and software.
Operating system security involves protection from outside attacks by malicious software that interferes with the system’s completion of ordinary tasks. Network security provides protection of entire networks from attacks by outsiders. Information in databases is especially vulnerable to being stolen, destroyed, or modified maliciously when the database server is accessible to multiple users over a network. The first line of defense is to allow access to a computer only to authorized users by authenticating those users by a password or similar mechanism.
However, clever programmers (known as hackers) have learned how to evade such mechanisms by designing computer viruses, programs that replicate themselves, spread among the computers in a network, and “infect” systems by destroying resident files and applications. Data can be stolen by using devices such as “Trojan horses,” programs that carry out a useful task but also contain hidden malicious code, or simply by eavesdropping on network communications. The need to protect sensitive data (e.g., to protect national security or individual privacy) has led to advances in cryptography and the development of encryption standards that provide a high level of confidence that the data is safe from decoding by even the most clever attacks.
Software engineering
Software engineering is the discipline concerned with the application of theory, knowledge, and practice to building reliable software systems that satisfy the computing requirements of customers and users. It is applicable to small-, medium-, and large-scale computing systems and organizations. Software engineering uses engineering methods, processes, techniques, and measurements. Software development, whether done by an individual or a team, requires choosing the most appropriate tools, methods, and approaches for a given environment.
Software is becoming an ever larger part of the computer system and has become complicated to develop, often requiring teams of programmers and years of effort. Thus, the development of a large piece of software can be viewed as an engineering task to be approached with care and attention to cost, reliability, and maintainability of the final product. The software engineering process is usually described as consisting of several phases, called a life cycle, variously defined but generally consisting of requirements development, analysis and specification, design, construction, validation, deployment, operation, and maintenance.
COMPUTER
Concern over the high failure rate of software projects has led to the development of nontraditional software development processes. Notable among these is the agile software process, which includes rapid development and involves the client as an active and critical member of the team. Agile development has been effectively used in the development of open-source software, which is different from proprietary software because users are free to download and modify it to fit their particular application needs. Particularly successful open-source software products include the Linux operating system, the Firefox Web browser, and the Apache OpenOffice word processing/spreadsheet/presentation suite.
Regardless of the development methodology chosen, the software development process is expensive and time-consuming. Since the early 1980s, increasingly sophisticated tools have been built to aid the software developer and to automate the development process as much as possible. Such computer-aided software engineering (CASE) tools span a wide range of types, from those that carry out the task of routine coding when given an appropriately detailed design in some specified language to those that incorporate an expert system to enforce design rules and eliminate software defects prior to the coding phase.
As the size and complexity of software has grown, the concept of reuse has become increasingly important in software engineering, since it is clear that extensive new software cannot be created cheaply and rapidly without incorporating existing program modules (subroutines, or pieces of computer code). One of the attractive aspects of object-oriented programming is that code written in terms of objects is readily reused. As with other aspects of computer systems, reliability (usually rather vaguely defined as the likelihood of a system to operate correctly over a reasonably long period of time) is a key goal of the finished software product.
Sophisticated techniques for testing software have also been designed. For example, unit testing is a strategy for testing every individual module of a software product independently before the modules are combined into a whole and tested using “integration testing” techniques.
The need for better-trained software engineers has led to the development of educational programs in which software engineering is a separate major. The recommendation that software engineers, similar to other engineers, be licensed or certified has gained increasing support, as has the process of accreditation for software engineering degree programs.
Social and professional issues
Computer scientists must understand the relevant social, ethical, and professional issues that surround their activities. The ACM Code of Ethics and Professional Conduct provides a basis for personal responsibility and professional conduct for computer scientists who are engaged in system development that directly affects the general public.
As the computer industry has developed increasingly powerful processors at lower costs, microprocessors have become ubiquitous. They are used to control automated assembly lines, traffic signal systems, and retail inventory systems and are embedded in consumer products such as automobile fuel-injection systems, kitchen appliances, audio systems, cell phones, and electronic games.
Computers and networks are everywhere in the workplace. Word and document processing, electronic mail, and office automation are integrated with desktop computers, printers, database systems, and other tools using wireless networks and widespread Internet access. Such changes ultimately make office work much more efficient, though not without cost for purchasing and frequently upgrading the necessary hardware and software as well as for training workers to use the new technology.
Computer-integrated manufacturing (CIM) is a technology arising from the application of computer science to manufacturing. The technology of CIM emphasizes that all aspects of manufacturing should be not only computerized as much as possible but also linked together via a network.
For example, the design engineer’s workstation should be linked into the overall system so that design specifications and manufacturing instructions may be sent automatically to the shop floor. The inventory databases should be connected as well, so product inventories may be incremented automatically and supply inventories decremented as manufacturing proceeds.
An automated inspection system (or a manual inspection station supplied with online terminal entry) should be linked to a quality-control system that maintains a database of quality information and alerts the manager if quality is deteriorating and possibly even provides a diagnosis as to the source of any problems that arise. Automatically tracking the flow of products from station to station on the factory floor allows an analysis program to identify bottlenecks and recommend replacement of faulty equipment.
For example, computer technology has been incorporated into automobile design and manufacturing. Computers are involved (as CAD systems) not only in the design of cars but also in the manufacturing and testing process. Modern automobiles include numerous computer chips that analyze sensor data and alert the driver to actual and potential malfunctions. Although increased reliability has been achieved by implementing such computerization, a drawback is that only automotive repair shops with a large investment in high-tech diagnostic tools for these computerized systems can handle any but the simplest repairs.
The rapid growth of smartphones has revolutionized the telephone industry. Individuals often abandoned their landlines in favour of going completely mobile; the reluctance to pay twice for telephone service was the major driver in this decision. The telephone system itself is simply a multilevel computer network that includes radio wave links and satellite transmission, along with software switches to route calls to their destinations.
If one node through which a cross-country call would normally be routed is very busy, an alternative routing can be substituted. A disadvantage is the potential for dramatic and widespread failures; for example, a poorly designed routing and flow-control protocol can cause calls to cycle indefinitely among nodes without reaching their destinations unless a system administrator intervenes.
Banking and commerce have been revolutionized by computer technology. Thanks to the Internet, individuals and organizations can interact with their bank accounts online, performing fund transfers and issuing checks from the comfort of their homes or offices. Deposits and withdrawals are instantly logged into a customer’s account, which is stored on a remote server. Computer-generated monthly statements are unlikely to contain errors.
Credit and debit card purchases are also supported by computer networks, allowing the amount of a transaction to be immediately deducted from the customer’s account and transferred to the seller’s. Similarly, networks allows individuals to obtain cash instantly and almost worldwide by stepping up to an automated teller machine (ATM) and providing the proper card and personal identification number (PIN).
The security challenges associated with these technologies are significant. Intruders can intercept packets traveling on a network (e.g., being transported via a satellite link) and can decrypt them to obtain confidential information on financial transactions. Network access to personal accounts has the potential to let intruders not only see how much money an individual has but also transfer some of it elsewhere. Fortunately, increased software security measures have made such intrusions less likely.
Computer technology has had a significant impact on the retail industry. All but the smallest shops in places with Internet access have replaced the old-fashioned cash register with a terminal linked to a computer system. Some terminals require that the clerk type in the code for the item, but most checkout counters include a bar-code scanner, which reads into the computer the Universal Product Code (UPC) printed on each package.

Cash register receipts then include brief descriptions of the items purchased (by fetching them from the computer database), and the purchase information is also relayed back to the computer to cause an immediate adjustment in the inventory data. The inventory system can easily alert the manager when the supply of an item drops below a specified threshold.
In the case of retail chains linked by networks, the order for a new supply of an item may be automatically generated and sent electronically to the supply warehouse. In a less extensively automated arrangement, the manager can send in the order electronically by a direct link to the supplier’s computer. These developments have made shopping much more convenient. The checkout process is faster, checkout lines are shorter, and desired items are more likely to be in stock. In addition, cash register receipts contain more detailed information than a simple list of item prices; for example, many receipts include discount coupons based on the specific items purchased by the shopper.
Since the mid-1990s one of the most rapidly growing retail sectors has been electronic commerce, involving use of the Internet and proprietary networks to facilitate business-to-business (B2B), consumer, and auction sales of everything imaginable—from computers and electronics to books, recordings, automobiles, and real estate. Popular sites for electronic commerce include Amazon, eBay, and the websites for most large retail chain stores.
