Former software developer who turned into a maths professor. Doing research in biological applications of computational abstract algebra and in the foundations of computation. Trying to make both mathematics and programming more accessible for everyone. Thinking a lot about Go, AI and consciousness.
Declarative programming is about describing what we want instead of specifying how to obtain the desired result. This informal definition serves us well, we can confidently recall obvious examples of the declarative style from functional and logic programming. The historical development of programming languages itself can be characterised as moving closer to the declarative ideal. Mathematics is also an example of declarative knowledge... Err, wait a minute! Does this mean that programming is going to maths?!?
Research in computer science education shows that it is beneficial to have a closer look at `obvious' concepts. Declarativeness is indeed a treasure trove of useful ideas. In this talk we will analyse everyday examples of declarative programming (functional collection processing, types, specs, point-free style and threading macros, destructuring, pattern matching) and more exotic ones (logic and relational programming, SAT-solvers). This will lead to another definition: declarativeness as the work done by something else, a blend of abstraction and automation. Philosophical abstraction romping, we will discuss heavy question like maths vs. programming; symbolic notation doing computation; and what is programming anyway? Back to everyday life at the keyboard, we will distill some advice on making conscious choices about declarativeness; asking the right questions when learning new languages/technologies, e.g., What does this automate for me?
In short, the talk is a deep dive into the depth of the philosophy of programming with the purpose of acquiring knowledge of practical relevance.