Musings on Fall

Fall has always been a time of returning to school, getting new school supplies, starting new classes, seeing old friends again and meeting new ones. Even after I was no longer in school myself, I noticed the fall back to school sales, the change in the traffic patterns around school buildings, and the start of the academic sports seasons, in particular football.

I’m talking about American football, not what the rest of the world calls football and what we call soccer. Where I live, in the deep south, football is something akin to a religion. Most everyone has their favorite team and even people like me who couldn’t care less about football check the sports scores to be able to intelligently converse with colleagues at the water cooler.

Only this year, there isn’t going to be a water cooler for many of us. Many of the games are either being cancelled or attendance is being severely limited. Tail gating parties are being required to socially distance. It’s certainly not like it used to be. And I’m starting to wonder if it will ever go back to the way it was.

I’m sure things will keep changing. We’ll develop a vaccine or at least learn to treat COVID-19 so that it isn’t so deadly. I read an article that described a simulation run that they made on the super computer at Oak Ridge recently. They now understand how the virus works much better and were even able to find several potential treatments for it. Some of them were already approved by the FDA.

But now that we’ve faced one virulent air-born virus, how long is it going to be before another one strikes? The population of the world keeps growing. We keep ignoring the ecological and biological consequences of our modern society. In fact, many in society have started rejecting scientific reasoning outright. This is a case of cutting off your nose to spite your face but the ramifications are broader than that. It’s like cutting off your own nose and your neighbors noses at the same time.

I’m concerned for our civilization. I’m not looking forward to living in the post-apocalyptic world that seems immanent at the present. What is the alternative? Working together and paying attention to the advice of the scientific community seems to be our best chance.


Take care of each other and yourself. Stay home if you can. Wear a mask if you must go out. Wash your hands frequently. Maintain social distance. We’ll get through this together.

Thoughts on Writing

Poetic

Silence is soft and silky.
It soothes and relaxes.
It inspires and motivates thought.
When combined with light it calms and promotes introspection.
In the darkness it sparks creativity and imagination.
But in those moments of in between,
At dawn and at dusk,
The power of both light and dark combine to form the genesis
Of the most beautiful and meaningful opus of all.
The combination of the mysterious and the mystical.
The fountain of both joy and enlightenment.
The optimism of a beginning
Connected to the thread of adventure
Leading onward to the ultimate ending.

Prosaic

In Aristotle’s Poetics he asserts that a whole has a beginning, a middle, and an end. The author’s task, given an idea for a story, is to discover where it begins, follow it’s development through the middle, arriving ultimately at the end. In creating a story, it is often easier to determine how it ends before attempting to discover where it begins. The middle is the easiest portion of the story as it conveys the protagonist from the beginning to the end.

Now, looking at the process of creating a story from a slightly different perspective, we have a protagonist. The protagonist wants something. There is an antagonist, someone or something that stands between the protagonist and the thing that they want. Then there is the call to adventure, the thing that convinces the protagonist that they might be able to attain that which they desire.

The protagonist sets their feet on the path to obtain that which they desire. They soon meet obstacles that must be overcome. At first the obstacles prove insurmountable. They try and fail, multiple times. And yet, just as they are about to concede defeat, they figure out how to overcome the obstacles and attain their hearts desire. As a result of the journey they have taken they have become a different person. They have grown.

When examined as a template, the story seems tame and uninteresting. The job of the writer is to hide the skeleton of the story in the details of the journey. To be satisfying, it must not seem to be a foregone conclusion that the protagonist will succeed. And then there is the matter of the price of success. The reward doesn’t come to the protagonist without a sacrifice of some sort.

The choices that the protagonist makes reveal the growth that they have accomplished. It is useful to illustrate the flaws of the protagonist early in the story so that it is obvious how they have changed by the end of it.

Another important thing to remember is that everyone, including the antagonist, is the hero of their own story. If you want your villain to be believable, you have to understand what their perspective and motivation is. They will often perceive the protagonist as the villain of their story.


Stay safe. Wear a mask when you go out. Keep social distance. Wash your hands. Take care of yourself and each other. We’ll get through this together.

Metaphor

A writer paints with words. Words express the colors and shapes that place the story in its context. They illuminate the bright places and obscure the shadows. They communicate the joy as well as the pain. They sketch the exterior of characters and expose their inner composition.

A writer observes the world and works to reproduce it on the page. At first they may mimic their favorite writers for they are also avid readers. But just as painters attempt to reproduce the masters and yet so often fall short, writers too attempt to reproduce the great writers and also initially fall short.

And yet both writers and painters eventually find their style, that which makes their creation unique. And when they do, it doesn’t matter what the topic that they portray is, it is transformed into their own. This comes with persistence and practice. It comes with determination and inner confidence. It shines for all the world to see.

Flash fiction is a sketch. Short stories are small paintings with a limited view. And as the stories get larger they take on ever growing dimensions until a series becomes the ceiling of the Sistine Chapel.

A painter wouldn’t know how to use a writer’s words any more than a writer knows how to use the painter’s brushes. The tools that each uses is peculiar to the medium in which they work. And yet the painter gets more leeway when it comes to being derivative early in their career.

Stay safe. Wear a mask when you go out. Keep social distance. Wash your hands. Take care of yourself and each other. We’ll get through this together.

To Plan or Not To Plan…

I have been working on my self confidence lately. I have been blogging for years, sometimes more frequently than others. I have been writing seven hundred and fifty words a day, or more, in a journal almost every day for the last ten years. I often have to write technical prose at work. What I’m getting at is that I am a competent writer. I can write prose that people can read without any difficulty. The thing that I’m struggling with is whether I can write something that people enjoy reading.

I’ve been participating in National Novel Writing Month almost every year for the past seven or eight years. The challenge is to write at least fifty thousand words in the month of November. That amounts to a short novel. I have met the challenge five or six times. I have managed to finish a first draft within those fifty thousand words twice.

This year I have been writing a story at my weekly writer’s meeting. I didn’t plan it ahead of time. I write about 1200 words on it a week. As the story unfolds I have been figuring out some of the places it could go. I have no idea how it will actually unfold. Some writing teachers suggest that the first draft is for telling the story to yourself. Subsequent drafts are for cleaning it up and fixing the glaring flaws in it.

Other writers sing the praises of planning their story ahead of time. This varies from a few notes on a legal pad to a huge spread sheet that tracks every scene, every character, and every plot point. I’ll never be the latter type of writer but I am starting to believe that some amount of planning can make writing the first draft a lot more pleasant.

It’s not the minor details of a scene that are hard to write. I have no problem writing dialog aside from sometimes sounding like I’m talking to myself instead of recording a conversation between two (or more) distinct characters. The problems I have is with figuring out what is happening that moves the characters to the end of the story or even more importantly, what the end of the story is going to be.

I have started taking notes as I write. I’m tired of discovering that a character that I introduced as Alice in chapter one somehow has become Amy by chapter five. I also try to make note of physical and personality characteristics so that I can refer to them later. I use a program called Scrivener to write my stories. It has character sheets to record biographical data on your characters so that you don’t have to search through you manuscript to look up every detail that you have already written about them. It also has a template for recording details about locations in your story. I haven’t used that as much yet. It’s just a habit I haven’t established yet.

There are other useful features of the program. It has a cork board where you can write scene descriptions on note cards and play with rearranging them to see which scene needs to happen when. It has a feature where you can take a snapshot of your manuscript at a particular point in the writing and later roll back to that point if you don’t like the direction the story took.

It also has rudimentary formatting features. Some of my acquaintances that use it to write their manuscripts export them to another program to do the final formatting of them. I don’t worry too much about format. I am a believer in plain text as an archival format for my work. Plain text manuscripts don’t run the risk of the program that created them becoming obsolete and making the draft unaccessible. I have some manuscripts that my father wrote using WordPerfect before he died. I no longer have a program that can open them.

To get to the point, I feel a need to do more planning before I start writing. If while I’m writing I go off plan, I’ll evaluate whether it was better than what I had planned and keep it if so. I think most writers, even those clearly in the planning camp will do the same.

Take care of yourself and your loved ones. Stay at home if you can, wear a mask if you go out. Wash your hands and keep social distance. We’ll get through this together.

A Verbal Ramble

I started writing this post yesterday. It sat here overnight, a blank page. The only way to cure that is to write something on it. I’ve got several things on my mind that I could write about. I’m working on a couple of programming projects. I need to revise my short story for the anthology that my writing group at the library publishes every year. And then there is the story that I’ve been writing at my other writers group since March or so.

But I don’t really want to say much about those topics. They are better served by spending time working on them than talking about them. I could talk about my friend that has embarked on a career as a full time writer. I have to admit I am a bit envious of her. On the other hand, she had already published two books and has finished two more books and four novellas in the two months that she has been writing full time. Granted both of the books that she finished were already works in progress when she started writing full time.

But that’s really her story to tell. My story is that I am working hard to learn how to write stories that sell. I am continuing to be productive at my day job although I am not as excited about it as I used to be. That is primarily because I’ve let myself become burned out on it. I’m actively working on overcoming burn out and reclaiming some of the joy that I used to get from my job.

I’m looking forward to the end of the COVID-19 pandemic. I would love to get out and do things again but between me and my wife’s health issues, I don’t think it’s wise to get out until its completely under control.

One of the things I’m looking forward to is traveling to see some of my relatives that are getting on in years. I’m not expecting any of them to die any time real soon but I’d like to visit with them while they are still feeling like company.

I’d also like to visit some of the places where I grew up. I haven’t been back to many of them since I was in my twenties. That’s something around forty years. I’ve taken Google Maps tours of many of the places so I’m well aware that they have changed considerably. The pandemic will have a hand in changing them even more.

In the mean time, everyone take care of themselves and their loved ones. Wash your hands, stay home if you can, wear a mask if you must go out, and maintain social distance. We’ll get through this together.

Comparing Writing to Programming

I was thinking about what to write about this week when it occurred to me to compare writing to programming. There are a number of similarities and differences between them both superficial and fundamental. I will discuss both.

At the most obvious level, both writing and programming involve placing symbols (letters, numbers, punctuation, etc.), either on paper or typing them into a computer. Sometimes you may spend some amount of time planning before you begin but often you just start, knowing that you are going to have to come back later and refine the product.

They both involve placing those symbols within a structure, either words, sentences, and paragraphs for example in the case of writing, or expressions, blocks, functions, and data structures in the case of programming.

Both writing and programming are done for an audience. Writing is done predominantly for human readers, in particular those that are self selected by their expectations of the content of the work. Programming is done predominantly for future programmers to understand how the compiled program works and, equally import, for a computer to translate into a program that can be executed to render some sort of useful computation. The reason that I say programming is predominantly for programmers is that if it were for a machine you might as well enter the primitive machine instructions by hand. Note that one of the programmers that you are writing for is your future self, long after you have forgotten the details of the program that you yourself wrote.

Another similarity between programming and writing is that they both are best done when the writer or programmer is in a state of flow. Flow is a concept that was written about by Mihaly Csikszentmihalyi. It is a state of mind where people are so involved in what they are doing that nothing else seems to matter. For the writer, the words seem to flow onto the page effortlessly. For the programmer, the code appears on the page as if it was already there, waiting to be discovered.

I have experienced this state of flow both while writing and programming. It is one of the most satisfying experiences I’ve ever had. It is the reason that I continue to write and program. But it is not always easy to attain. Csikszentmihalyi has studied the state for years and gives advice on how to attain it in his books but it is sometimes elusive.

The product of writing and programming are somewhat different. A program is a utilitarian artifact, a tool useful to accomplish some task that would be difficult or even impossible without it. At the same time, it is an expression of the programmer’s understanding of the process that comprises the program. When it is well constructed it has an aesthetic appeal that goes beyond it’s function.

A piece of prose has a similar aesthetic but it may lack the utilitarian aspect that one finds associated with a program. That is not to say that some prose is not useful, just that it is not necessary to be useful to be successful as prose.

I have made a lot of generalizations here. I must note that not all successful programs or pieces of prose fall strictly into the categories that I have described here. For instance, many programs are written strictly for their function without consideration of the aesthetic aspect they might embody. This is the nature of the economic pressures of commercial programming. It is often the case that attention to the aesthetic aspects of programming yields a product that works better, is easier to maintain, and consequently enjoys a longer span of usefulness.

Similarly, not all pieces of prose are expected to be aesthetic masterpieces. The instruction manual of a kitchen appliance is not expected to be read for its artistic merit. It is expected to be understandable and organized in a fashion that renders it easy to find the information that one is seeking. For that matter, not all fictional writing need rank high in the aesthetic ranks to be entertaining and worthwhile to read.

I will assert that learning to seek that flow state when writing or programming can result in a better product when you are finished. It will also result in a much enhanced creative experience while your are producing it.

Which brings me to this final point. It is important to chose what you do with your life carefully. Time is the one thing that you have an unknown but limited supply of. It is important to do everything possible to make what you do both enjoyable and useful.

Be safe, wash your hands often, stay home if you can and wear a mask if you must go out, and maintain social distance when possible.

Essays

I’ve followed the career of Paul Graham for a large part of my career. He was a Lisp hacker from MIT that started a company that had a web site that would allow you to create your own custom web site strictly by filling out forms on the web. You didn’t need to learn HTML or CSS. You just had to pick options off of lists and fill in boxes with the text you wanted to display as your content.

Paul eventually sold the company to Yahoo! and started an angel investment company called Y Combinator. His idea of an angel investment company was somewhat unique. They held events that they called Demo Days where potential startup founders would pitch their ideas to Paul and his partners. They would pick the best of the lot and then put them through a sort of startup boot camp where they would attempt to teach them things that would help them succeed with their new company.

The interesting thing was, most of the Y Combinator graduates went on to run successful startup companies. One of the insights that Paul brought to the table was that you shouldn’t select startups based solely on their ideas. Rather, you should select them based on their founders. He observed that good founders would eventually stumble across some product or another that would succeed whereas founders that only had a good idea were out of luck when that one idea fizzled out as it so often does.

The reason I know so much about what Paul Graham observed about picking winning startups is because I read his essays. After becoming a very successful serial startup founder, he discovered that he liked writing essays. He published a book of his essays, Hackers and Painters: Big Ideas from the Computer Age. But even after that, he continued to write and post essays on his website.

His essays are all very well written, very well reasoned, and highly polished. He spends days, sometimes weeks, writing them and tweaking them until they feel right to him. He contends that the difference between essayists and journalists is primarily that journalists work under a deadline.

I find myself attempting to write essays under a self imposed deadline. Maybe they would be better if I put off posting them until they just felt write. Perhaps I should get people to review them and comment on them before I post them. But somehow, that’s not how this site works.

I will continue to write my posts off the cuff, posting them after a light proofreading. That is the style of this blog. Maybe I will write essays Paul’s way sometime in the future. I doubt it. If I don’t set deadlines for myself, I never get anything done. If that makes me a journalist instead of an essayist, I’ll take that.

Take care of yourself and your loved ones. Wash your hands, wear a mask, and maintain social distance.

My Obsession

I remember when I first discovered computers. It was exciting to learn how such simple circuits could do such complicated things. I wanted to learn everything I could about them. More importantly, I wanted to own one so that I could experiment with it and learn all the ins and outs of how it worked.

The problem was, I was young and didn’t have much spare income. Computers, it seemed to me, were always priced just slightly beyond my means. At first, the inexpensive computers that were selling for $100 – $250 were tantalizingly close to being affordable. But soon, bigger and better computers came on the market and they started out in the $500 range. For a while there it seemed like the capabilities of personal computers grew exponentially but their entry level price stayed at a fixed price of about $2000.

So, instead of buying a computer, I joined the Army to learn about computers and how to fix them. I told the recruiter that I was interested in enlisting for the computer job that had the longest school. I correctly assumed that they wouldn’t want to spend any more time than absolutely necessary on training so the longer the school, the more it would cover.

Consequently, I learned everything that there was to know about how computers were built, programmed, and troubleshot. I learned how the hardware worked and how to fix it when it didn’t work. I learned how to write programs and debug them when they didn’t work. And most important of all, I got to work with computers every day.

You have to understand that this was before computers were everywhere. Phones were wired to a particular place and had little or no digital components. TVs were big analog radios that used a tube for a display component. Cars didn’t have computers in them. In short, if you wanted to work with computers, you either had to go to college to learn to program business applications on mainframes or find some cutting edge device, like a missile, that used a computer to control the launch circuitry.

I enjoyed my time in the Army, at least the part of it that had to do with computers. I can’t say I enjoyed the marching, and the physical training, and all of the combat related stuff. But I was willing to put up with it to get to work with computers.

When I got out of the Army, the Personal Computer revolution was in full swing. I found a job right off the bat and all my study and experience paid off. I was so well trained that one of the first jobs that I applied for had me interview both as a technician and a programmer. I later learned that the software manager had called the hardware manager to ask if he was going to hire me. If he wasn’t the software manager was going to make me an offer.

I eventually got my own computer. In fact, I have seldom had fewer than two or three computers. Right now, in this room, I have four computers, a Storage Area Network that has a small linux computer for a controller, my iPhone, an iPad, my work PC, not to mention a workbench full of computers that aren’t even powered on right now.

Throughout my career as a computer scientist one thing has remained constant. I am constantly learning more about computers. I am obsessed by them. I want to learn about advances in hardware and software. I am always looking for new computer languages to learn. It has kept me relevant far longer than most of my contemporaries who have long since taken positions in management.

I’m happy to have remained a programmer. I balk at the title Software Engineer. We don’t know enough about building robust computer systems yet for their to be a clear computer engineering discipline. There are some early attempts to codify the profession but a good programmer is still more of an artist than an engineer.

Be safe, wear a mask when you go out, wash your hands frequently, and take care of yourself and each other.

A Short Return to Pandemic Posting

I made a commitment to myself in December to write a blog post every week of 2020. I’m a little late sometimes but I’ve managed to keep that commitment so far. When the pandemic hit, I posted a number of pieces about the quarantine and the fear and grief that it engendered. And then, I decided to try to move on and post more upbeat topics.

Here it is, the first week in July, the second half of the year. If we had behaved like responsible adults, the pandemic would have been under control by now. But instead, encouraged by our irresponsible leaders, too many people have gotten out without observing the simple precautions of keeping their distance and wearing a face covering. The result being, predictably, that the virus has taken another turn toward exponential growth.

At this point, I find that the only thing I can do is to stay home as much as possible (bi-weekly trips through the pharmacy drive through are my main outings), maintain social distance and wear a mask when I do go out, and wash my hands frequently.

Oh, and there’s one more thing I can do. I can encourage people to exercise their right to vote. Apply for an absentee ballot if you can, vote in person if you must, but make your voice heard. Let your elected leaders know how you feel about the way they handled this situation. Your vote is the only way some of them will pay any attention to you.

Next week, I’ll try to get back to the upbeat, move on with my life kind of post. That is unless the aliens invade or fire rains from the sky or who knows what unexpected crisis rears it’s ugly head.

Take care of yourself and those you love. There’s no replacing you or them.

Choosing a Computer Language

One of my favorite books is Gödel, Escher, and Bach: An Eternal Golden Braid by Douglas R. Hofstadter. It is a book about self reference in mathematics, art, and music. It is also about the challenge of creating a General Artificial Intelligence, although I don’t think Hofstadter ever explicitly says that. I had read portions of it several times before I managed to make it all the way through it from start to finish. That was partially because I was impatient and easily distracted but mostly because it was such rich fare. I would read a chapter or two and have to go think about it for a while and absorb it.

One of the things I learned from the book was Gödel’s theorem. Paraphrased it says that a sufficiently complex formal system can either be consistent or complete. I took that to mean a given programming language, which by definition is internally consistent, can not express all programs. This convinced me that there would never be a computer language that would be so good that we wouldn’t need any other.

Since then I have spent a lot of time learning new computer languages. I have tried to understand what kinds of processes they expressed well and what lay beyond their ability to express. Consequently when I sit down to start a new programming project, the first question that I ask is which language should I implement it in?

Some people will tell you that all sufficiently complex languages can be expressed as a Turing machine. This quality of a language is known in Computer Science as one that is Turing complete. The problem with such an assertion is that the Turing machine is so primitive that no one would ever write a complex modern application using only the operations provided by a Turing machine. Instead, they would write it in terms of more complex abstractions built on top of the Turing machine. It is these more complex abstractions that run afoul of Gödel’s theorem, i.e. being sufficiently complex.

This brings me to the point I was going to make about choosing a language. I often find that I can try to fit a square peg in a round hole by choosing a language that I am familiar with but that doesn’t support the abstractions of the domain that I am trying to model. Or, I can learn a language more suited to the domain. Or, I can use a language that is good at extension to support new domains.

Lisp is a language that falls into the latter category. From it’s conception it has lent itself to the creation of so called Domain Specific Languages (DSL). This is usually attributed to its simple syntax, the fact that Lisp programs are represented in the same fashion as Lisp data (a feature know as homoiconicity), and the availability of a macro facility that makes it easy to create new idioms within the language. The latter aspect, Lisp’s macro facility is at the heart of its extensibility. It is also one of the harder aspects of the language to master.

So, I find myself waffling between Java, a language that I have lots of experience with but that is very verbose and labor intensive to write, and one of the various dialects of Lisp that are much more concise, support incremental development, and have macro facilities that allow me to adapt them to the domain of my app.

One might think the choice would be obvious but it isn’t. Java has a very attractive aspect that it offers. There are libraries available to do just about anything you might imagine written in Java. This means that when you are writing an application in Java, you often find yourself spending your time first looking for a library that provides some functionality you require and then writing code to adapt that library to the rest of your application.

But wait, there is another way. Java compiles to an intermediate byte code that is implemented by the runtime on all the machines that run Java. This byte code interpreter is often referred to as the Java Virtual Machine (JVM). Other languages can be written so that they compile to byte code that runs on the JVM. These other languages then can make use of all the Java libraries that are available to native Java programs. Clojure, a modern implementation of Lisp, is one such language.

Now you must be thinking, “So what’s the issue here? Obviously Clojure is the language of choice here.” And you would be echoing what I keep trying to tell myself. The problem is, that Clojure is a very opinionated language. And while I agree with most of those opinions, the predominant one being the immutability of most data structures, the bad habits of my earlier career in programming make it difficult for me to embrace immutability and develop my apps in Clojure.

More precisely, when I am doing the exploratory part of developing my app, I spend a lot of time coming to terms with Clojure’s well intentioned restrictions. When I reach my frustration limit, I find myself going back to Common Lisp, the first Lisp that I learned, and trying to use it to prototype my ideas with the intent of porting my code back to Clojure when it is sufficiently mature.

Common Lisp has its own problems, chief among them, it is so big. I often find myself implementing some piece of functionality only to discover that there is a native implementation of the same functionality in the core implementation of Common Lisp. Not only that but there are a number (not quite as many as with Java but still quite a few) of libraries that also have better thought out and tested implementations of the functionality that I have produced on my own.

This sounds like a case of an embarrassment of riches and in fact it is. But it produces a kind of cognitive inertia that makes it difficult to get a project off the ground in the first place. I have managed to overcome that inertia to some extent and have found a collection of appropriate libraries to get me started on my latest app using Common Lisp.

Whether I wil be tempted to back port it to Clojure depends on how well it performs in Common Lisp. Steel Banks Common Lisp (SBCL) has a facility for compiling Lisp apps to native executables. That may end up being the way that I eventually ship the completed app and will make it so that I don’t need to put the effort into backporting.

If you’ve made it this far, thanks for listening. I hope I’ve expressed the issues that I’ve been struggling with clearly enough.

Stay safe in these dangerous times. Wash your hands, maintain social distance, stay home as much as you can, and wear a mask if you do go out. Tell your loved ones that you love them. I’ll talk to you again next week.