I’ve done a bit of experimental writing, and talked about books that I learned something from. One of my interests I haven’t mentioned much is programming. I am a novice. I’m new at it, and yet, I first got my feet wet back in 1984 or so. In my elementary school years, using BASIC on the Commodore Vic 20. This was the predecessor of the more popular Commodore 64. The same company later released the Amiga.
I grew up in schools that were full of Apple II series computers. I had a couple of computer literacy classes that involved writing little scripts in BASIC. Much later, at my age of majority, when the World-Wide-Web was flowering in the later 90s, I dabbled with HTML and JavaScript. And about 12 years ago I did the beginnings of an intro course in Java, published online by Stanford, CS106-A, before switching to Python. I am familiar with programming from my earliest years. Yet, only recently have I started to learn deeply. I am far from being an expert. But I am at the point that looking at guides for beginners is too repetitive.
I’ve done some small projects I think are on a level that my childhood self, or even perhaps my teenage self ought to have been proud of them. I can’t say I have reached my level as an adult. But now, writing a function, an expression or small program has become the easiest way to do some things. For instance, I’ve been working on text processing. I printed out the most common words used within a number of text documents. I thought the top 32 looked like good candidates to filter out of my subsequent operations. So I copied the text from the output, and was about to start deleting the colons and the numbers that followed them, so that I could put them in a list. Then I realized that with a text-parsing module I’d been working on, (regular expressions) I had the ability to clean the list automatically with Python, and did so.
I have enough familiarity with Python to be able to use its special properties to save myself some extra typing when I mess up. For instance, I typed a list into the console (qpython console) to have some data to work on. After it word-wrapped onto the next line, I realized that I hadn’t assigned it to a variable. This would have meant that I would have to type it all over again. Except that I remembered that the underscore character acts as a special variable that holds the last thing entered. So I typed k = _
and I was back in business. I could then reference the list in subsequent operations by the variable k.
My skills are not advanced, but I have managed to complete a project I set for myself of writing a program that calculates a square root, as it is done by hand. Showing work, subtracting remainders from results in rows and columns below the problem. Doing the calculation was not the hard part, but getting the display string right was very challenging. I have no doubt that my code is messy, inefficient and probably still has bugs, but I’ve tested enough edge-cases that I can call it a success.
From my experience with graphics programs in the Java course, I am confident that I can represent the calculation in other ways besides text in the console. Pygame may be a good substitute for the ACM Graphics program.
I enjoy learning about geometry and number theory and other branches of mathematics, which seems to come in very handy for programmers. And my interest in geometry is to a great extent a branch from my interest in art. I learned about the Golden Section, and Golden Spiral after looking for something to help with design and composition.
It is fair to say that I learn slowly. You could say that I gravitate to a depth-first approach. I want to know more than how a thing is done now. I want to know the history of it, the development, its origin and roots. So geometry, in Geogebra or with the turtle in Python has me looking at Euclid. Then I lean a little to one side, scan the distant horizon behind him. To try and deduce something about the inevitable infinite regress of his predecessors.
I hate “hustle culture.” There is nothing wrong with making money, but that isn’t what this is about. It is about our human potential. It is about personal power. It is about expanding horizons.
Nor do I respect notions of some mathematicians who insist on focusing on “pure” mathematics. Those without purpose. Hindsight has shown that a purpose has often been found for some idea from pure mathematics. Though the mathematicians who developed the techniques did not anticipate it. I think there is a lesson there, that indulging in curiosity and play and storing up seed corn for the future are intimately connected. On the other hand, it is a good thing for abstract ideas to become useful. There is sometimes a disturbing implication that some mathematicians would have preferred that not to be true. The upshot is, I am not looking to be job ready. I’ve had jobs, they all suck. I just want to accomplish, understand and make.
As a parallel example, I cook for myself sometimes, and I want to get better at it, not because I want a job using that skill, nor because I think I’m going to be some kind of culinary artist, but because it is a useful and practical skill, and one that, if done well, will bring enjoyment to myself and the people I love.
One of my favorite authors, Robert Heinlein, wrote in one of his novels this prescription: “A human being should be able to change a diaper, plan an invasion, butcher a hog, conn a ship, design a building, write a sonnet, balance accounts, build a wall, set a bone, comfort the dying, take orders, give orders, cooperate, act alone, solve equations, analyze a new problem, pitch manure, program a computer, cook a tasty meal, fight efficiently, die gallantly.”
When he wrote that, pervasive and ubiquitous computers were not yet a reality. As farming and butchering has receded in importance, programming has grown. But it is a skill that is within reach for most people.
It seems obvious to me that programming is like math or literacy, a cognitive tool that expands understanding. Darwin said, “I have deeply regretted that I did not proceed far enough at least to understand something of the great leading principles of mathematics, for men thus endowed seem to have an extra sense.” This is like the observations of James Glieck in his biography of Isaac Newton, that notes he made in his blank book aided his thought process. Seymour Papert made the case that programming can be likewise. It can be a playground within which we model the world to test and refine our understanding. I understand more about the Golden Rectangle since constructing it with turtle graphics than I did from drawing it in Geogebra, or by hand. I discover the use of things like trigonometry functions for finding angles or distances when I need to rely on them for constructing my shapes. I may learn things about language by trying to parse texts. And there is a great deal to learn about the world that has been built with computers as pervasive tools.
So that's what I'm about: journaling, letter writing, understanding the literature of our cultural heritage, philosophy, drawing, math, education, programming and such as ways of enhancing our native powers of understanding. If I’m a little ahead, or if we are travelling the same way in general, perhaps you would like to join me on my learning journey.