Advances in science and engineering have enabled us to understand increasingly complex natural systems like those in physics, chemistry and biology. Some of them, e.g., the solar system, are relatively simple and predictable. However, a common thread across all of these disciplines -- and many areas of knowledge over the past half-century -- has been the understanding that such systems, while composed of large numbers of relatively simple components, frequently exhibit very complex overall behavior. Rather than seeing the universe as a mechanistic, deterministic, Newtonian clockwork, we now understand that most complex systems in nature are highly dynamic, and while their components might be simple, the fact that they are interconnected and continually changing makes their behavior essentially “emergent”, i.e., unpredictable. Turbulent weather, chemical reactions and most systems in biology are examples of such complex natural systems.
With complex man-made or engineered systems, we can also translate our increased understanding into better designs through the development of improved tools, processes, analytical techniques, simulations and similar methodologies. For example, in the last hundred years we have made major progress in the engineering of physical objects like bridges, skyscrapers, automobiles and airplanes. Similarly, we have seen the designs of computers and their components improve significantly in the last twenty years, including microprocessors, PCs, servers, networks and software of all sorts.