There is an important distinction between a computer scientist and a programmer. Both may undergo college training in the field of study called "computer science," but their focus will be fundamentally different. The field of computer science is indeed concerned with problem solving, but the programmer will try to solve problems given a set of already existing tools, while the computer scientist will try to conceive the tools with which the programmer will be able to solve problems more elegantly. Given this somewhat simplistic definition, there are currently many more programmers than computer scientists. It is thus misleading to believe that because so many individuals make a career in computer science, the field is evolving fast enough. Certainly computational power increases ceaselessly, but other dimensions of computer evolution are still neglected. Why is it that, for nearly thirty years, mouse, keyboard and rectangular screen have remained the unchallenged input-output (I/O) devices? And why are standards so rigid that people enter endless Macintosh vs. PC debates with such political passion?
Part of the answer to those questions lies in the dictatorship of marketing. Computers can do numerous operations that can improve the daily efficiency of many firms, and demand is very high for whichever computer can provide one-upmanship. As a result, utility for such power is so great that standards remain the cheapest solution for both the producer and the customer. In practice, people are willing to compromise their comfort by adapting to the computers and their software instead of insisting that computers be shaped around human needs.
Standards are pervasive in both market and time. Namely, all computers of the same generation adopt identical fundamentals, even if they are produced by different companies. To know which brand produced the hardware components of a PC is often of minor importance, as long as the specifications of the components are optimal. Likewise, the economy of PC operating systems and most common applications is dominated by a single software company. Standards are also pervasive from one generation of computers to another. If new computers are indeed more powerful, their marketing success is contingent upon their compatibility with older computers.
The current mentality stresses the importance of achieving the highest performance at the least expensive financial cost, no matter the cost in effort and comfort. This latter cost seems negligible in the short term, but in the longer term much benefit could come from having facilitated communication with computers. The present attitude, consisting of largely ignoring design, relegates computers to esoteric tools.
It is mesmerizing to try to unravel the complexity underlying modern computers. Coming to grips with all the nested layers of abstractions is no longer possible, and the final result of a desktop computer is one of those examples of a scientific prowess that might earlier have seemed only attainable through magic. This evolution, however, required a significant amount of specialization, and differentiation among computer scientists.
As computers became increasingly complex, using lower levels of abstractions as foundations for higher ones, computer scientists involved in research and development were primarily concerned with building the higher levels of abstractions. Understanding, exploiting, and using the already existing levels in order to generate program code became the craft of engineers.
The field of Human-Computer Interaction is more than just another branch of computer science. It is interdisciplinary and, instead of taking any abstraction layer for granted, it challenges each layer by asking whether its technology appropriately prepares higher levels of abstractions to ensure an effective communication with the human user. HCI is not so much concerned with the design of ready-to-use objects (e.g. : software) as much as it is with the very tools used by computer science to generate such objects. The primary purpose of HCI is to improve the tools used to build user-friendlier computers.
With complexity arises a growing need for communication between engineers working on the different levels of abstractions. In his book Bringing Design to Software, Terry Winograd makes a strong case for the need to train software architects. Much like the traditional architect, the software architect would be sufficiently versed in the know-how of most levels in order to address the issues raised; at the same time, he would not need to be so specialized as to be able to implement robust code himself at any of those levels. His concern would be the harmony of the whole, and the development of the software would have to be rectified as the project advances, based on an informed exchange with the more specialized engineers.
The Roman architect and architectural theorist Vitruvius listed three essential aspects of design: firmness, commodity and delight. The current culture of computer scientists places an emphasis on firmness and generally neglects commodity and delight. Computer games is the only area so far where writing software is understood to be an art as much as it is a science.