I'm a teacher for Computer Science, Mathematics and History at the Gymnasium Sulingen in Germany (near Bremen). Since 2012 we are using BYOB/Snap! in teaching Computer Science. To create more diversity in our C.S. classes, we established a one-year girls only course more than 10 years ago. In 2013, we were the first school in Germany using BYOB in the final exams (Abitur). Currently I'm working on a script "Computer Science with Snap!", covering the whole curriculum in Lower Saxony.
Higher order functions have not been part of the school curriculum so far. Nor does the speed of programs play a role in the classroom, with the exception of smaller games.
This changed in our classes when, in the last third of a two-year course, we started doing practical cryptanalysis, i.e., studying ciphertexts with unknown keys. The literature usually refers to frequency analysis as a suitable tool for this, e.g., to decode an arbitrary permutation of the alphabet (not just a simple shift as in CAESAR). In practice, it turns out that letters, bigrams and trigrams of a concrete text are not distributed exactly as the frequency distribution of the language in question dictates. One needs other tools like pattern recognition and contact data of a letter. The computational effort required for this, however, very quickly exceeds the time frame of a school lesson. In the search for possibilities for acceleration, which go beyond the turbo mode, one lands in Snap! very soon with higher order functions. They can significantly reduce the time required for cryptography and cryptoanalysis.
At the same time, this results in an internal differentiation of the course: The weakest part of the students will continue programming with FOR loops and case distinctions. Another part will use higher order functions like a recipe for specific tasks and the most advanced part will dive into the functional programming paradigm, write their programs completely new with higher order functions and use this knowledge also in the Abitur (high exam in Germany).
In the workshop, I will present the tools we have adopted and refined for cryptography and cryptanalysis and report preliminary results.
Script here: https://www.dropbox.com/s/rszp7gi2pupcd02/KryptologieENv0.1%5B8966%5D.pdf?dl=0 Presentation here: https://www.dropbox.com/s/c06xyu214qicy9j/WhenSpeedMatters.pdf?dl=0 Link to Snap!Project: https://snap.berkeley.edu/project?username=fhasselhorn&projectname=SnapCon2023Cryptology