Advanced Team Update
We have seven meetings until November when the regional competitions start. It’s not a whole lot of time, and it helps a lot if kids can work on missions outside of meeting time.
Two weeks ago, I took a chunk of time from the beginning of the meeting to have the kids work on a more creative and low-stakes project before moving back into solving missions. The missions for the competition are important, but it felt like some of the kids were losing the type of consistent focus it takes to design, build, and test the complicated mechanical parts we need for the competition, so a project with more immediate results that they could accomplish relatively easily and with a greater degree of creativity helped. Then we got back to missions.
Last week, we spent a good amount of the class testing our robot’s velocity and stability with Python programming controls. We got our results and will return to working on missions with them this week. I believe Python programming will yield more efficient routes, so we will start to incorporate more of it into our meetings.
Fundamentals Class Update
Two weeks ago we had a couple exercises to get the kids interested, but also to gauge where they were in terms of how well they could build and how they got along in the environment. There was a creative exercise and a mechanical competition using pull-back motors. Most of the kids came in with an interest in the mechanics of LEGOs, so they were pretty engaged. I didn’t have a heavy hand in lecturing, but would advise when I saw structural problems, and I believe the kids liked the freedom to figure things out on their own, especially since several of them clearly have experience with Technic sets.
Last week’s meeting had two parts. The first focused on building relatively simple standing structures for height, which is apparently also an event in the middle school Science Olympiad (though not in LEGO), and kids worked in pairs so that they could figure out how to cooperate with each other, in addition to learning from experimentation and from what other teams were doing. There’s a balance between individuality and efficiency that a lot of the kids seem to be balancing.
The second part was dedicated to cleanup (we have a lot of pieces) and then starting one of the actual FLL missions. I was pleasantly surprised by some of the kids’ ideas for a solution, and we will continue working on the mission in the upcoming class, as well as introducing individual concepts from mechanics.
Reflection
I’ve been in academia for a while, and I’d more or less stuck to the humanities in terms of my interests. In that time I’ve attempted to learn a lot of different languages, of varying difficulties relative to what I grew up with as a kid, but recently I’ve been learning the Python programming language, and I’d like to say that it isn’t really a language (and by extension programming languages generally shouldn’t be understood as languages). So learning it is a lot different. I mean, for one thing, Python’s not spoken, so that deprives it of an important aspect of how language works, as well as a useful mnemonic tool. Even unspoken, dead languages like Latin can at least be recited. Python might be a language perhaps in the loose, analogical way that something like calculus or dance is a language, but those aren’t really languages either. So if Python isn’t really a language, what is it? Python is more like a tool for tethering various types of data to quantitative computation. At least that’s what it looks like from what I’ve learned so far. Using Python and learning Python are very different from learning and using a language like Sanskrit or Mandarin. Using Python is more like trying to conform one’s thinking processes to the limits of what a computer is capable of doing—math being one of the things that a computer does best. To write Python programs, I have to think like a calculator. Working in Python is like trying to arrange logical/computational parts so that they produce an intended outcome. And there is nothing in Python that can be valid outside what Python can compute. If there are any errors in coding, none of what’s coded will work. It’s rather demanding. One has to be both knowledgeable and precise within the workings of the system.
It seems like the best way to get proficient at Python is to in a sense sequester myself and pretend to live within its system so that I can reorient my thinking according to its rules. Unlike languages, things/concepts expressed in Python won’t work if you just barely get a main idea across; the entirety of an expression has to be exactly correct. Unlike languages, there isn’t this immediate and expansive world around, from which to gather context and build on thoughts. Python is a limited set of parts that can be arranged to produce computational machines. However, the resulting computation isn’t exactly mathematical—even though there are various parameters from arithmetic or other types of math incorporated into Python. For instance, a Python function (a grouped set of commands) can include the line “n = n + 1” such that whenever the function is run, the variable “n” increases. On the face of it, “n = n + 1” doesn’t make sense, and it’s an example of the kind of reoriented thinking one has to assume in order to write in Python. There is a rule to the Python equation that’s different from the rules of math. This type of equation exemplifies why learning Python requires a fairly thorough kind of sequestration or compartmentalization of one’s thinking. To get good at Python, I would have to be fluent in its mathematically derived forms of computation and would have to separate that fluency from the math that I know—from the system of mathematical logic that I know—and subsequently build complex structures according to the rules of Python logic. Moreover, building in Python is not communicative in the sense of a language—effective “communication” in Python only occurs when a program runs successfully: after all the parts are precisely and correctly positioned within a program. Once the code for a program is complete, the code only really works if the code can be ignored relative to the actual use of the program. The more apparent the programming issues are, the less effective the program becomes. The only thing to communicate with is the computer. The act of writing code is solitary, it is an individual exercise in problem solving.
Certainly, Python programming can be very creative. There are whole subsets of Python dedicated to visualizing Python’s mathematical functions. Processing is one such “programming environment.” (Technically, Processing was originally composed in Java, but has since been iterated in Python.) The Processing website identifies it as a “software sketchbook.” Users type in code, and the resulting visualization appears on the computer screen.
Screenshot of Penrose Tile L-System by Geraldine Sarmiento, made with Processing.
The pictures and other types of art made with Python can get very complex, but all of it remains grounded on the essential features of code like Python, the computational strictures that demand a reorientation of one’s thought processes to work individually within the computational system.
Learning Python—in order to eventually make art or for whatever purposes—is thus rather difficult without some kind of inherent ability to work, by oneself, in a focused and precise manner, for the purpose of achieving some kind of computational/quantitative goal. I’d say it’s really similar to doing math homework. Getting kids to learn Python is certainly easier if a kid is predisposed to doing work in this manner, but I’d also say (from experience) that it’s generally very tough to convince most kids to willingly do something that’s a lot like math homework. There isn’t something inherently satisfying about the texture of Python code that would make me want to position myself in that computational mindset, sitting in front of a computer typing out code.
How, then, does one motivate kids to get good at Python? When I was younger, I sort of remember that there was a sense of satisfaction from figuring out a difficult math puzzle on my own. There’s certainly some of that involved in writing a complex program. There’s also an aspect of simply wanting to be good at something. I don’t think it’s usually the case that kids want to get good at programming, though. I also think the larger goal of wanting to get the robot to move a little bit faster won’t be enough to carry kids through the complexities of Python code.
What has been really interesting for me is learning the ins and outs of exactly what a computer is capable of doing. Learning about this helps put the technological advancements all around us in a much clearer perspective. Computers have a clearer set of functions and become less like these Black Mirror or Skynet machines that will lead humankind to its ruin. AI seems less threatening. The problem seems to be when people spend too long in a coding environment or computational mindset so that it affects their presence in the larger world. Maybe. Anyways, I’m just saying that kids can learn some programming to get a sense of what programming is about, and I’d be satisfied if they could look at code and do some simple adjustments to get a thing to work a little better. They don’t need to get super good at Python, unless they like it.
So for the FLL class, I’m just introducing a little bit of Python at a time, and sticking to programs with very functional, real-world effects, like moving the robot around the competition board.