Ideally, a heterogeneous computing (HC) environment, is a well-orchestrated and coordinates suite of high-performance machines that provides support for computationally intensive applications with diverse computing requirements. Such an HC system includes a heterogeneous suite of machines, high-speed interconnections, interfaces, operating systems, communication protocols, and programming environments. HC is the effective use of these diverse hardware and software components to meet the distinct and varied computational requirements of a given application. Implicit in this concept of HC is the idea that subtasks with different machine architectural requirements are embedded in the applications executed by the HC system. Two types of HC systems, mixed-mode machines and mixed-machine systems, are discussed. The goals of and open problems in HC are overviewed.