Programming means suffering – today. The programmer needs to do the typing herself (except for the trivial code snippets that Eclipse can bang out), the machine's job is to nag and reject when there's an error. In particular, a modern type system can be very good at pointing out errors, but the human still needs to tinker with the program to make it shut up. This is in spite of the fact that most of the domain knowledge is already contained in the type definitions and method signatures: Program by Design shows how this can work. Now, if we specify a little bit more, shouldn't the computer be able to write the code? The future of programming or just pipe dream? A new generation of programming languages and IDEs gradually turns this dream into reality: These tools are slowly becoming partners in software development. They make programming more fun, and can cut down dramatically on the error count. In the process, they liberate developers from implementing recurring patterns over and over. Developers can focus on the individual aspects of the software, on properly modelling the domain and on the user experience. The talk demonstrates this possible future through live-coding in Idris.