Assumed Audience: No one really. Or anyone curious.

Epistemic Status: I hope my memory is accurate.

I recently got an email from someone with three questions.

The first was simple: “Tell me about your programming journey.”

I figured that I had better put it in a blog post so I could give people a link in the future.

Not that any more people will ever ask.

Before I was born, my father somehow went from a farmboy to a college-educated programmer at a time when programming wasn’t even a “real job” (early 1980s). He was hired at Ricks College (now BYU-Idaho) as a professor in the combined Math and Computer Science department because his Master’s was in numerical analysis, a perfect combination of the two.

Around the time that I was born, Ricks College started thinking about this newfangled thing called the Internet, and my dad was chosen to build the first Internet systems there.

When I became a student at BYU-Idaho, my student email address was generated using code my dad wrote probably before I was born. The only thing that changed was the domain.

And so my dad became well-versed in protocols and implementations, and as a professor, he acquired many programming textbooks. This continued after I was born, for more than a decade, in fact.

My dad had an office at home (my parents literally sold that old home 5 days ago, wow!), a dank room in the basement full of these books to the point that all shelves were full of books and the floor was covered with computer equipment.

If I remember correctly, that room was supposed to be off limits to us kids. But in some rare act of rebellion, I often went down there to peruse.

Two books caught my eye: C++: How to Program by Deitel & Deitel, and Java: How to Program by Deitel & Deitel. This is one place where my memory is perfect: I know it was two books, by the same authors who had the same last name.

And if my memory serves, it was the second edition for C++ and the second edition for Java.

I don’t remember much about the covers, but I do remember both had an inset rectangle with a border, and those are the only then-extent editions that match.

I started reading the C++ one (yes, I was weird child), but I soon realized that C++ wouldn’t make it easy to make GUI software, which is what I was really interested in, so I started reading the Java one, which included GUI stuff.

I read it through. I didn’t remember much, and I had no way to actually use that knowledge because the only computer we had was in the kitchen, and it was a clunky Windows 95 or 98 machine with just a browser.

This is why I was only interested in GUI software; Windows 98 had no concept of a command line. In fact, the only time I ever encountered a command line was at my grandma’s house; for some reason, my dad set up a DOS computer for her, and all I remember about it is that it had some games on it, and we had to type some incantation to start the games. It frustrated me to no end because I could never figure out how to get in the games.

To this day, I have no idea what she actually used that computer for. My grandma was not a technical person.

Update, 2024-06-05: My dad said he helped her enter business expenses with Lotus 1-2-3.

So I had some exposure to command line through DOS, and because I somehow guessed the password to our dialup one day, I had some exposure to the Internet through Windows 98.

It bored me, actually.

Eventually, and I don’t remember how, I was somehow allowed to have a computer without Internet in my room, shared with my brother. My brother didn’t seem interested in it, but I ended up writing a full novel on Corel WordPerfect and cutting my teeth a bit on spreadsheets with Corel Quattro Pro.

This was all through my middle school and junior high days.

My school district had a separate middle school and junior high.

During that time frame, I had a friend whose parents could afford more fancy hardware. He showed me a lot of stuff on his computer, but I remember two: GameMaker and Blender.

But before that, around our junior high days or maybe in our first year in high school, he showed me some programs he had written on a TI-84 Silver.

Blew my mind. I was so interested that I went and spent $120 on my own TI-84 Silver not long after, and I started implementing my own programs.

As it so happens, I still have that TI-84, and I still have my original programs; read more at that link if you’re still interested.

Anyway, so I finally learned to program using TI-BASIC. Eventually, I also learned Java because of the Deitel & Deitel book. I used that basic knowledge to take and pass the AP Computer Science A test.

I thought I was hot stuff and bragged about it when I was at the Air Force Academy. Big mistake; the upperclassmen cadre punished me for it.

But after basic training, I started my freshman year at the Academy, and I joined the hacking club. That was when I ran into the command line again.

See, they had these Linux computers that booted to a virtual console, and since my memories of command lines was bad, I didn’t like it. At the time, I also didn’t know how to read the manuals or look up stuff on Linux, so I never learned the startx command.

I got so discouraged that I only went to the hacking club twice and then joined the USAFA Drum and Bugle Corps. So I didn’t do much with computers from then until I dropped out of the Academy for mental health reasons.

When I dropped out, for some reason, I was allowed to take my student computer with me. And when I got home, my mom told me to apply at a small computer company in the town with my high school. They did hire me for a few months, and they gave me random work to do, mostly working on their website.

There, I was introduced to a man I still admire as a programmer. I only remember his first name, though.

Anyway, he extolled the virtues of Linux to me, but coming fresh from the Academy and my stupidity with command lines, I resisted saying that I didn’t want a command-line-only operating system. He insisted that Linux wasn’t just command lines and walked me through installing Ubuntu 10.04.

Oh, how I loved it more than Windows! I have never been without a Linux machine since.

But to fix some things, I slowly had to learn how to use the terminal. It started with copying and pasting commands from tutorials and Stack Overflow questions. A few questions to my esteemed colleague taught me about ls, cd, and other staples. I also eventually learned what pipes do.

In five months, I didn’t have much time to learn that stuff, and that’s all I had before I left on a mission for my church.

During my mission, I was assigned to the area that included the mission office, and I ended up debugging the phone system while I was there. I still don’t know how I fixed that system, but there was a need, and I fulfilled it.

Unfortunately, my mental health suffered there as well, so my mission president made the decision to send me home early, after only seven months.

Missions for young men are generally two years.

After I got home, I tried to find the computer company where I had previously been employed. They had been bought, and the new owner wasn’t in when I arrived, so I set up my computer and started working while I waited. The owner arrived eventually, and I talked with him. He gave vague answers.

So I went back the next day, and my former colleague whom I respected gently told me that I was barging in where I wasn’t wanted. I eventually got the message and left.

During this time, in 2011-2012, I attended BYU-Idaho, got an Associate’s, then moved to BYU in 2013.

However, before my mission, another colleague had encouraged me to apply to speak at a tech conference called OpenWest. After my mission, I applied with a talk about a programming language I had started working on six months earlier, and for some reason, they accepted me.

I went and gave a talk in 2013, a horrible talk because I didn’t know what I was talking about even though I thought I did. In fact, during the talk, I had to be corrected live by a man much smarter than me. The next year, when I went and talked again, I remembered him and praised him live in another talk.

Yikes! Embarrassing!

I ended speaking at OpenWest in 2013, 2014, 2015, and 2016. That last year I gave two talks, and one was about professionalism in the industry. It was the start of my public advocation for professionalizing, which continues to this day.

In fact, during summer 2013, I was part of Google Summer of Code (GSoc) for Blender. I also worked at a summer camp. I ended up having to drop out of GSoC halfway through because I had misjudged the amount of time required for it.

In my defense, they gave me a task that I told them was out of my skill range, and I didn’t know C very well at the time.

Anyway, I joined BYU in fall 2013, soon after my first OpenWest talk, and I started studying Computer Science.

And this is where I learned that I didn’t know programming at all.

I took a lot of classes. I struggled, and I learned a lot. I also had to learn the command line for real, and I finally did. I also learned C after a horrible C++ class at BYU-Idaho. I also had a class at BYU (discrete math I think?) that was in C++, and I failed the last assignment because I could not get it to compile!

I loathe C++ to this day for that reason.

I briefly joined the Animation program because of my introduction to Blender by my friend 8 years earlier. However, when I found out that I would be required to break some of my personal movie standards to stay in the program, I appealed to the director at a terrible time (I have no ability to judge a situation), and he rejected my plea. So I withdrew and did plain Computer Science.

My time at BYU had typical college struggles, including paying my own way with a jobs and by loans (which I paid off in six months after graduation).

The jobs included a programming job in my first semester that I sucked at, mostly because I was so tired from my depression and schoolwork that I could not stay awake at work, and TA jobs in the Computer Science department from then on.

I think I was an okay TA.

At the beginning of my first semester, a member of my ward was advertising the Folk Dance teams, and because the woman I was in love with (at the time) was in the program, I signed up. And ended up staying because I enjoyed it so much.

I also started two blogs, a personal one and a programming one. Both don’t exist anymore, but this is where I got the experience before I started this one.

I later got engaged to another woman in Folk Dance (after being rejected by the first), ended up not getting married to her, got a programming job from a professor right after that helped me get through the grief, and eventually graduated with grades worse than I cared for. But I succeeded.

It was around this time that I attended OpenWest for the last time and gave my last talks. During my professionalism talk, one of the audience members accused me of gatekeeping because I obviously had advantages to people who would have to pay their way through college.

I was, and still am, not good at thinking on my feet, so I didn’t manage to retort that I did, in fact, pay my own way through college and was still paying off my loans.

Anyway, I graduated with the help of Heaven, and I got an internship at FamilySearch, a family history organization run by my church.

I sucked. I couldn’t read the code written by others, and it was all done in AWS, which I just couldn’t grok.

So when the dad of a friend from Folk Dance had a job opening for system administration, I jumped at the chance. I interviewed, got the job from connections, and started my first real job out of college.

There were two parts to my job: building websites with Django and system administration.

I did alright in the websites part (I had some experience by then and could jank out a website, though Django and I did not get along), but it was clear to me, almost right away, that I was in over my head when it came to system administration. I essentially had to ask my boss a lot of questions, and eventually, it became clear to him too, even though he had originally assured me that my imposter syndrome wasn’t real.

Turns out, it was.

During this time, I met, fell in love with, and married my wife. She had a career with a wonderful company, and eventually, because I talked about my struggles, she encouraged me to quit and go my own way; she would be the breadwinner.

So I did, and that’s when I started this blog and the monorepo that forms the basis of my code today. I started writing it in C even though I had little love for it (because of my Blender GSoC failure) because that’s what OpenGL needed, and I wanted to write a graphical programming language.

It quickly became apparent that despite my earlier experiences, C was the language for me, and I wrote a lot of code that still exists today.

Mostly generic data structures like vectors, maps, and such.

After some time, I started spending time on IRC, and eventually, in January 2018, an individual asked me to write a parser for bc; he had a math library that he was working on, and he didn’t want to do the parsing.

I did and finished it with little trouble (I had some experience from college because of a capstone class and also working on my language). He still wasn’t done with his math library, so despite him telling me that I would never be able to do what he did, I decided to give it a shot.

Two weeks later, my math library was working, and his was still not finished. I dumped his code and just used mine.

He continued to target me for flaws in my bc, even through a sock puppet, so I had to learn how to make my bc robust. I learned about Valgrind and used it. I learned about fuzzing and used it. I learned about debug builds and tons of other stuff. I also learned about dc and implemented that too.

Writing bc and dc forced me to actually learn programming and command lines since they are command line programs. They forced me to finally leave the expert beginner state and become a competent programmer.

Well, in that time, my wife and I moved after she got permission to work remotely (in 2018), and then we moved again after I got hired at a programming shop through connections.

And then, I spent more than a year of struggling at that job. The evidence that I could not work on code written by other people had started to become insurmountable. I failed at GSoC with Blender. I failed in group projects. I almost failed fixing a legacy Java project for a professor. And I just could not wrap my head around code written by others in that programming job.

I was eventually fired. Without warning, I might add.

I also had to drop out of the Master’s program I was in at the time because I was so dumb.

So my wife, who had switched to part-time work at her company when I had been hired, suddenly found herself needing to move back to full-time. Fortunately, they loved her, and still do, so she made the switch without trouble.

I applied to hundreds of jobs and didn’t even get an interview. Eventually, it became clear: I was just too incompetent at soft skills to work in the industry.

So when I have free time from my duties around the house, I wrote code that I wanted to write. I kept improving bc, and I started writing a build system that I hoped would bring in customers to my business, which I also started during this time.

Obviously, I failed to do so. But I did finally build a working programming language, something I had been working on for over 11 years!

So now what do I do?

Well, I am about to publish the first two episodes of a new podcast, and I am about to start work on a version control system that I hope will bring in customers.

However, despite that hope, I know it won’t, so once the MVP is done and serves my purposes (getting off of Git and especially Gitea, which is giving me trouble), then I’ll probably put it aside.

After that, I don’t know what I will do. I’ll probably continue advocating for the industry to professionalize, even though I do not think I could ever be a professional software engineer (because I don’t have soft skills), but beyond that, I don’t know. I am already losing motivation.

If there is a theme to my programming journey, it’s that I struggled to learn the fundamentals of everything, but once I did, I really understood them. But it could, and often did, take me years to understand.

And I would start out hating things, from C to command lines to system administration, struggle to learn, and then love them once they clicked.

I recently told my former boss, the one who tried to assure me that my imposter syndrome was wrong, that if he hired me now, I could probably do the job just fine. But it’s too late now.

And that’s the other theme: I just couldn’t keep a job. I just wasn’t good enough to keep a job. Sometimes it was purely my fault; sometimes it wasn’t. But I just couldn’t do it.

I once asked my dad, out of frustration of not being able to learn very well, why he did not encourage my programming, why he didn’t tell me that he was a programmer (I found out around the time I graduated high school), and why he didn’t help me learn. He said simply, “I didn’t want to make you feel obligated to follow in my footsteps.”

I kinda wish he had, but it’s too late for that.

I also wish that I had studied Computer Engineering, not Computer Science, but I had wanted to attend the Animation program, which was Computer Science, so I didn’t. Oh well.

If you are reading this, know this: you can easily be better than me. It will take work, because I have worked hard, but you can easily beat me. I am incompetent. You are not.

Practice your soft skills because those are necessary to stay in the industry.

But more than anything, don’t be like me.