Compiler construction is both science and art. The source may be a domain-specific language for machine learning. The target may be an elastic environment with embedded and edge computing capabilities as well as distributed heterogeneous nodes with hardware accelerators. I’m working on the principles and practice of building compilers capable of bridging such levels of abstraction, achieving performance portability and productivity. And actually contributing to building such compilers. This involves techniques from program synthesis, operations research, polyhedral modeling of programs and hardware, programming language semantics, type systems, search meta-heuristics, machine learning including reinforcement learning, autotuning and feedback-directed optimization. Whether the user is a data scientist deploying complex models, a machine learning researcher experimenting with new architectures, a high-performance computing specialist writing numerical libraries, there should be a compiler to make her more productive and abstract away from the complexity of the execution platform. How to build such compilers, and how to make compiler construction itself more productive, here is what keeps me going for 20+ years and counting.