Ubiquitous computing aims to enhance computer use by integrating many computers throughout the environment. It discusses the history and evolution of ubiquitous computing from constraints to prototyping. Key challenges include developing transparent interfaces, capturing context awareness, and facilitating automated capture of experiences. Issues involve toolkit design, software structuring, component integration, scalability, adaptability, privacy and security as more devices are connected. The vision for 2020 is that computers will be everywhere in daily objects and integrated into fabrics of life, facilitating an invisible intelligent network.