After having taught a university-level introductory computer science course in Java for sixteen years, now coming to an end since the department is moving to Python, I decided to wrap up the current semester by solving all the labs of my course in Mathematica. Doing so taught me quite a lot about functional programming and how these paradigms differ in general, and also shows how much easier it is to solve problems using Mathematica while going far above and beyond the original problems suitable for Java. Hopefully this document will be interesting and useful for other people.
Excellent work. I think all high school students should be taught a functional programming / declarative language first as a way to encourage computational thinking which is useful in so many fields. By teaching an non-functional / imperative language first, potential computational thinkers are discouraged from developing this important skill.