## Section 3.3 Reflections and Advice

Learning about elementary ciphers has historically provided even first-year students with the motivation and context to gain experience and facility with modular arithmetic, including the idea of multiplicative inverses and the structure of finite cyclic groups. These ideas could easily lead to an examination of a broader range of group theory, for example in the context of an abstract algebra course, or become the first few weeks of a seminar course on the mathematics of code-making and code-breaking without prerequisites, as it has been implemented at the author’s institution. These notes are more than suitable for independent study or summer programs for motivated high-school students; in fact, this is how they first originated.

It is very useful to undergird a discussion of this material with a very elementary introduction to Python programming, since all contemporary cryptography happens on computers and many more recent ciphers are incredibly cumbersome to implement by hand. The website CoCalc

`[cross-reference to target(s) "CoCalcCollaborativeCalculation" missing or not unique]`

, by the makers of the SageMath computing software (which runs on top of Python), provides an online interface allowing students to program without installing any Python distributions on their own computers, saving headache. This website is not free, but each student is able to pay about $12 toward “upgrading” their CoCalc projects for one semester. The free version of CoCalc is almost unusable due to lag, so upgrading is recommended. The costs of such an upgrade can be implemented as course fees or more informally. The Python modules, as well as rubrics and solutions used to grade them, can be found at the author’s GitHub page `[cross-reference to target(s) "inceResourcesFirstYearCollege2022" missing or not unique]`

.The points of struggle mentioned above for students are worth reflecting on. These include multiple issues with learning to program for the first time: wading through confusing syntax errors, understanding the importance of whitespace in Python functions, and determining where to edit the preexisting code given to them. These issues can be somewhat ameliorated by walking through portions of Python modules as a whole class, breaking down the code underlying a function line by line to connect it to the more familiar steps of implementing a cipher by hand, and emphasizing that students are not expected to write their own code, only to change a word or two in the code provided for them. That said, students still tend to find Python, and programming, to be one of their least favorite aspects of what is generally a very fun course to teach and, per my students, to participate in. Other points of struggle include the extended Euclidean algorithm (due to the amount of symbolic manipulation involved), the complexity of the Enigma machine’s components, and more generally the concept of modular arithmetic (though students usually gain understanding quickly by way of the clock metaphor). Feedback is welcome on any of the material above. Cryptography is very fun, yet it provides a window for first-year students into material not usually taught until a first course in abstract algebra, as well as motivation for more experienced students to learn number theory.