Author Archives: Lou Franco

Another Story from an Early Programmer

A few years ago I had dinner with someone who became a programmer in the 1950’s. Today I had a chat with someone who became a programmer in 1970. Here’s a paraphrase of her story.

I was an accountant, and my boss asked me to price a computer and database for the sales team. I talked to a distributer and he gave me a price for the computer, software, and services of about $10,000, which was within our budget.

Before I made the purchase, I made sure it could do what we needed, and I said that the computer would need to be able to calculate logarithms. The salesperson said that this computer could only do addition, subtraction, multiplication and division. To do what I needed, I would need an IBM 360 (which cost a lot more).

This didn’t sound right to me, so I bought a programming book and learned enough to know that (a) computers were going to be a big thing (b) the people working in it right now didn’t know what they were talking about (c) I could do well because I understood it immediately.

So, she left her job and went back to college to learn programming, starting with FORTRAN (spoiler alert: it supports logarithms). She ultimately had a career as a programmer and manager, retiring early.

In Space, No One Can Grow Your Debt

Yesterday, I mentioned that Voyager’s software isn’t lost yet and is still running. I had explored some of the reasons that was a couple of years ago in Long-lived Computational Systems. Since today is the 54th anniversary of the lunar landing, I’ll stay on the space theme.

In Tech Debt Happens to You I wrote that

[…] the main source of tech debt [is] not intentional debt that you take on or the debt you accumulate from cutting corners due to time constraints. [It’s] the debt that comes with dependency and environment changes.

So, maybe that’s why Voyager could run for so long. Its hardware is in space, so it’s shielded from environmental concerns that would eventually corrode unmaintained metal. And no one can change anything else about its hardware.

I don’t know how much control NASA has over Voyager software updates, but with such low bandwidth and high latency, it could not change much. This affects debt in two ways. The first is that you can’t add more, but the second has to do with how your current debt grows.

Since the cost of software debt is the interest payment that comes when you try to change the software, if you never change anything, your debt has no additional cost.

Note: The title of this post is a play on the promotional tagline for Alien. For more thoughts see Alien Movie Review: Display Technology.

Software is Losable

When I listed what I thought of the Great Works of Software, I also offhandedly listed some great works of art: The David, Beethoven’s 5th, and Pride and Prejudice. One of the reasons I think of them as great is because they are old and still relevant. We haven’t lost interest in them, and also, we haven’t lost them.

Pride and Prejudice can be reproduced exactly as it was when it was first written in all the ways we care about, but we could have lost it early on if Jane Austen hadn’t published it. We still have The David after 500 years, but we could possibly lose it forever. We have already lost the first performance of the 5th, but we could make something similar from the music sheets.

In this way, software is most like music. We have source documents, but the real thing is inextricably tied to hardware. We play recordings or perform music just like we run programs—on hardware. The hardware and the performance is big part of what we think the software is. A book is also delivered on hardware, but we don’t consider the paper or the Kindle or the Audible file part of the work.

All of this makes software losable, because if we lose the ability to run the software, we have lost it.

On my list of the five great works of software, three of them are in active maintenance. We still have the other two (browsers and spreadsheets), but the originals by Tim Berners-Lee and Dan Bricklin are frozen in time and harder to run.

VisiCalc was written for the Apple II in 1979. I don’t know if you can run that version, but Dan Bricklin claims that the executable for the PC will still run on modern Windows under DOS (because Microsoft believes New Versions Should be Substitutable). I am sure you could get a DOS emulator even if a modern one can’t run it any more. We haven’t lost it yet.

There is a version of Berners-Lee’s WorldWideWeb client on GitHub, it was written for a NeXT machine. I don’t know how to run it, but there is at least one NeXT emulator that might be able to, so it’s also possibly not lost yet.

It’s not a “great work”, but I have run My First Real Program on a PET emulator because it was small enough to commit to memory. Almost all programs I have written between then and when I started working professionally are lost because they were tied to floppies that I didn’t keep.

The possibly longest continuously running software, Voyager, is very far away, but not lost yet.

A Life’s Work

I just saw a retrospective of the work by the artist Gego at the Guggenheim in NYC. It runs until September 10, 2023 and worth a visit. Gego (Gertrud Goldschmidt) was a German-born architect/engineer who fled the Nazis and settled in Venezuela in 1939. She started making art in the 1950’s and was prolific until her death in the 90’s. The Guggenheim is dedicating several floors of the rotunda to showing the breadth of her work.

A photo showing several floors of the inside of the Guggenheim museum in NYC with Gego's work on display.

Many of her works are wire sculptures (or as she described it, sculptures of transparent space), but there were several other series on display as well. For example, there are watercolors she made to help plan her work, which also explored the reticular theme, but in a different medium. The other thing I noticed was how much of her work was either untitled, titled identically, or simply enumerated with a year and count. She was too busy making and exploring to stop and name everything.

As I descended the spiral, seeing so much of Gego at once, I couldn’t help think of the advice in Art & Fear to explore Thousands of Variations of an idea as an artist.

Nebulas July 2023 Update

A couple of years ago, I wrote about designing a game that is the opposite of Asteroids. Last week, I found raylib, a C library for making games and decided to try making it (I also renamed it Nebulas).

Here’s what I have so far.

  • You are a triangle ship in the center of a starfield, which can help with navigation.
  • You can rotate (LEFT and RIGHT) and thrust (UP)
  • Space is infinite in all directions. You are always at the center of the screen.
  • There are nebulas in space around you moving.
  • You can go into them and suck their energy into your ship

Here’s a video of my progress so far:

Next

  • The color of the nebula is a clue to what power your ship gets from it. (e.g. Red is thrust)
  • The color of the ship is which gas you are currently using.
  • I will show tanks for each color so you can see how much you have of each gas.

The game is to survive as long as possible, conserving your gases. As long as you survive, you can explore.

Write While True Episode 26: Making Makes a Maker

I decided to do a four-part series on the lessons I learned from Art & Fear by David Bayles and Ted Orland.

This week, in part three, I want to talk about a quote about what art means to the maker.

Transcript

Notice What You Notice

In my podcast, I am doing a four part series on lessons I learned from Art & Fear [amazon affiliate link] by Bayles and Orland. Tomorrow, I’ll release part 3, but today I want to share a passage that I think of often, but didn’t make the series (emphasis mine).

It’s all a matter of balance, and making art helps achieve that balance. For the artist, a sketchpad or a notebook is a license to explore — it becomes entirely acceptable to stand there, for minutes on end, staring at a tree stump. Sometimes you need to scan the forest, sometimes you need to touch a single tree — if you can’t apprehend both, you’ll never entirely comprehend either. To see things is to enhance your sense of wonder both for the singular pattern of your own experience, and for the meta-patterns that shape all experience. All this suggests a useful working approach to making art: notice the objects you notice.

When I am reading, when I am working, I am trying to be aware of when I smile and feel a rush of insight or understanding. I am trying to realize that I am noticing something. Notice my notice. I don’t know what to do with it yet, but what I am doing is making some kind of mark—taking down a note or a photo—just to remember the moment so I can deal with it later.

A Little Linear Algebra Helps to Make Games

I started playing with raylib to make a game that is the opposite of Asteroids. Just to start, I need to be able to draw a triangle that is rotated by some angle around its center, and that’s simple if you understand transformations. Raylib does include a raymath module to do basic vector math, but not specifically what I needed.

So, again, I’m feeling The Unreasonable Effectiveness of Mathematics in Programming. I’m not sure you can make any reasonable game without some transformations.

Following a Lot of Blogs in NetNewsWire

I use NetNewsWire as my RSS reader. It’s a locally installed app on my mac and iOS devices that uses my iCloud account to sync between them.

I have been following about a dozen blogs that generated a few posts a day. But, last week, I downloaded an OPML file with a list of blogs by HackerNews users. It has over 1,000 feeds in it.

Here’s my experience with dealing with that in NetNewsWire (NNW).

To start with, I made a new folder for the import. Once I started the import, NNW struggled to download all of the posts. When the progress bar was done, it appeared that many of the feeds had no posts. It didn’t give any feedback about what exactly was going on, but there were still hundreds of feeds and thousands of posts downloaded.

I started to go through them and delete any that didn’t meet my minimum criteria for a blog feed or were on topics I didn’t want to follow this closely.

I noticed that over time, NNW seemed to be downloading the feeds it had skipped during import, so it seemed to be auto-retrying periodically (probably just on its normal poll schedule).

There were far too many posts to ever read, so I just marked everything as read and waited for new posts. Every day there are quite a few, so this is what I have been doing.

  1. If I find a post I think I will like in a quick skim, I star it in NNW
  2. If I don’t want to read the post at all (usually because it’s way off topic for me), then I take a quick look at the feed and probably delete it.
  3. When I have time, I read the starred posts.
  4. I take a look at the feed of the starred post, and if it seems like I’d like to follow it more closely, I move the feed to a folder of curated HN blogs.
  5. I follow the curated folder closely. There’s been a lot of great content, and it’s giving me things to explore and write about (e.g. This raylib post with my first impressions)
  6. I check out the full list only when I have nothing to read (starring and deleting as appropriate)

Generally, I recommend NNW, but it does seem to struggle with 1,000+ subscriptions. However, it didn’t crash or completely fail, and does seem to be catching up. The benefits to me are that I can read offline and I don’t have to pay for a syncing service.

raylib First Impressions

I just ran into raylib (because I’ve been reading a ton of HN blogs) and it’s making me dream of Programming With the Joy of a Thirteen Year-Old. All I wanted to do when I was 13 was make games and raylib looks like a fun way to do it.

I read the homepage, played a few games, and then read their source. Here’s what I love

  1. You write in “easy” C. I searched for pointers and signs of dynamic memory and found none in the simple games I read. I’m sure it’s there in more complex games, but they aren’t making you use pointers just to get started
  2. It runs in the browser. It’s C, so it’s expected that it would be cross-platform, but it can also compile to something that runs in the browser.
  3. No external dependency philosophy. Dependencies are just future tech debt.
  4. No (or very little) magic. It’s just a library. Games are mostly a loop of reading the controller, updating some state, and rendering that state. That logic is very clear in raylib code.
  5. Simple games are simple. I played three classic games and then read their source. They were each one file and followed similar logic.
  6. There’s is more to it. Once you progress from the simple stuff, it looks to be full-featured with other things you might want in a game library. But, you don’t need to use any of it at first.

I might play around and see where I can get with Nebulous.