Hacker culture, which originated CCC (or vice versa?), overcomes limitations in computer systems through creativity and tinkering. Many activities of the hacker community have focussed on discovering weaknesses of IT systems, and creativity and tinkering have been enormously successful at this endeavour. At the same time, hacker culture has shaped the practice of software development to this day. This is problematic - techniques effective for breaking (into) a computer systems are not necessarily suitable for developing resilient and secure systems. The long, long list of vulnerabilities with always the same root causes bears testament to this. Thus, ironically, the very techniques hackers have used to discover and fight vulnerabilities are responsible for them in the first place.
It does not have to be this way: It is possible to construct resilient software systematically, greatly reducing the risk of failure. However, this requires significant changes in culture, methodology, and the tools we use to develop software. We need to approach software development as a methodical, systematic activity rather than tinkering, and teach it accordingly. This will lead to a set of systematic, proven methods that lead to robust and correct software. This talk will introduce available methods, tools, and languages supporting such methodologies: program by design, type-based modelling, mathematics, and functional programming. I'll review my experience teaching these methods for the past 18 years and give some suggestions on what you may do.