Toward a Grammar of Computer Science
15 Aug 2015My wife and I have chosen to classically educate our children at home. They are currently 4, 6, and 8 years old, putting them right in the center of the grammar stage of the trivium. The grammar stage emphasizes memorization of concepts that will be fleshed out in the later dialectic and rhetorical stages. We have all been thoroughly enjoying the experience, and our boys have been soaking in facts from history, science, and mathematics, among other topics.
Separately, my oldest son began to take an interest in computer programming. We have tried several methods for bringing him into this fascinating endeavor, which just happens to be my vocation. We have sent him to LEGO robotics camp, let him play with the wonderful Scratch app, dabbled in Minecraft programming, and helped him through some programming lessons on Khan Academy. He also helped me design a game that we ended up publishing to the App Store (it's called Charge It Up if you're interested). All of these were beneficial, but he still found himself frustrated that he was not really accomplishing anything. He wanted to build a game as good as Minecraft, but was upset when all we could come up with after a day of working together was a rotating 3D cube.
About a week ago, I finally began to connect the dots between these separate experiences with classical education and programming. He loved learning the classical way since it was tuned to his natural tendency to want to memorize and recite all sorts of new facts at his age, but I wasn't applying this to his programming education. Why not teach him the grammar of computer science? The idea is to have him memorize a set of facts which set the stage for understanding and experimenting (dialectic) then creating and teaching (rhetoric) in later middle school and high school years. I could not find a good resource online for a classical grammar for computer science. It is unfortunate that the term "grammar" is also used heavily for other reasons in computer science, so this topic is hard to google.
Hence this site.
The terms I am collecting come mainly from my memories of mid-90s to mid-2000s college education, mixed with some later knowledge and an obvious bent toward what seems practical to my current realms of work in my current position. I'm finding the first sentence in Wikipedia articles are a great initial source of information, though I have been working to keep terminology consistent. Also note that the wording should be concise, using simpler words whenever possible, but using more difficult words when needed for exactness or brevity. The aim is to give very accurate definitions that may not be fully understood until later stages of learning.
While some may see STEM and classical education at the opposite ends of the educational spectrum, I believe there is a place for an experiment like this.
This is all on GitHub with an open license, so feel free to use, extend, etc. to your heart's content.
If you feel like contributing, or have a suggestion for the site, ping me at @jeffbaumes on Twitter, or head to the GitHub issues page and open a new issue to start a discussion. Pull requests are also welcome.
I hope to post updates on the progression of fact collection and my sons' memorization of the facts on this site.