Theory of Computing: A Scientific Perspective