My daughter Sara who is in 3rd grade and I recently worked together on a school-initiated STEM (Science, Technology, Engineering and Math) project and decided to do a programming challenge. I had recently got the excellent Elements book for her and we wanted to connect the project to the Chemical Elements in some way. An idea that came to us was to try and combine the symbol of the elements and form words from them. So, for example, if you combine Phosphorus(P), Indium(In), Carbon(C), and Hydrogen(H), you get PInCH. On an initial whim this sounded like an interesting and at the same time challenging enough problem for us to attempt.

Now our attention turned to the choice of programming language. I tried all the usual Educational programming environments and somehow programming pictorially or graphically did not appeal to me and I felt that it would be good to expose her to some basic programming skills. We together looked at Javascript as a possible choice, Python, Ruby, finally even Java and Scala. I am not used to programming in Python and Ruby, so that left Javascript, Java and Scala, after a little bit of more deliberation we decided to go with Scala, mainly because of the "Worksheet" support in IntelliJ which allows for small snippets of the program to be tried out without too much ceremony needing to be put in place. I would have been way more comfortable with Java as I use Java professionally, however I felt that it would be easier to explain the concepts with less verbosity to a third grader with Scala.

With the choice of language in place I was able to show her some basics of programming with Scala — declaring variables, simple functions, some basics of data types, basics of collections, and simple ways to map collections.

We then jumped into the program itself. The approach we outlined and wrote was simple enough: we needed a dictionary of words, a list of elements, something to generate the words by combining elements, and to filter them using the dictionary. The final code is fairly easy to navigate. We have avoided concepts like recursion, any complicated data structures to validate words, and stuck to simple iteration to generate the words.

We found about 12,000 words altogether, these are some that caught our eye:

The revelation for me though has been in how easily my daughter picked up on the programming language concepts with a seemingly difficult language like Scala. I know there are more difficult concepts along the way once we get past the basics, however my choice of Scala was to ensure that the foundation is strong enough. I will let her explore more esoteric features by herself when she works on her STEM project for next year!