How To Program Anything (Learn To Program Just About Anything) is, as of this writing (May 2020), a startup website intended for all aspiring makers, technologists, and programmers of all ages and experience. The primary goal of How To Program Anything is to, well, teach the reader how to program just about anything. It does this through engaging and easy to digest articles, tutorials/projects, videos, programming examples, and more. The secondary goal, for the future, is to have How To Program Anything serve as a meeting place and resource. A hub for makers, programmers, and other technologists to come together and share their passionate knowledge.

What Do You Mean, “Programming Anything?”

I understand that claiming that one could “program anything” if they were to follow my instruction is a pretty stupendous claim. With that interest, I shall strive to clarify.

  • Gist
  • Abridged
  • Verbose

Choose a setting

The Gist of Programming Anything

If you learn the fundamentals of computation, you can use that knowledge to tackle and learn any computational structure. You can even invent your own structures such as your own programming language or computational device. Those fundamentals of programming can be difficult to grasp or hunt down. This website aims to give the reader clear, fun, and useful instruction on terms they can understand.

The Short of Programming Anything

I taught myself everything I know about programming, starting on a TRS-80 CoCo II at the age of seven. Despite having never attended an accredited college I gained worked as a professional programmer. I worked with both a firm and as a freelancer. Throughout my journey, I observed two odd disparities. The first was that those much more “educated” than I seemed to consistently have issues in “problem-solving.” The second being that many programmers only have the knowledge required to practice their trade on a daily basis and lack a deep understanding of the theories involved.

This is because of two things. The avenues for learning them often prove difficult to grasp. And the time investment in “learning how to make a wheel” seems less useful than using the already existing wheel. It is my firm conviction that this lack of understanding or awareness leads many tradesmen to be hindered in their decisions. These decisions guide them in creating faulty programs, which impact the creators, the maintainers, and the users in a negative fashion. It is my goal with this site to provide clear, fun, and useful avenues towards this deeper understanding. I hope to it in a way that the reader can apply the lessons towards understanding any future computational environment.

The Long of Programming Anything

To do so, I must start at the beginning.

My personal programming journey started when I was very young and has been primarily auto-didactic. I essentially taught myself everything I know about programming computers starting at the age of seven. Despite lacking any “official” accreditation, I gained work as a professional programmer at twenty-three in a financial statement printing company. For the first time in my life, I met other professional programmers from various backgrounds including one of the local universities.

“There wasn’t anybody telling me how to do it, ever.”

It was there, or actually when I was leaving that employment, that I learned of an interesting disparity. My manager Eric, upon my departure, told me of his intrigue towards my skills compared to my background. He stated that he felt he was losing an exceptional “problem solver.” In fact, a better problem solver than most of the college graduates he hired. He inquired how this came to be. I answered, “At every stage, from my TRS-80 CoCo II to my first commercial-grade compiler, I had to problem solve on how to do anything. Nothing was handed to me. There wasn’t anybody telling me how to do it, ever. I believe that struggle has given me a deeper appreciation and understanding.”

I highlight this disparity because, upon reflecting on it, I determined for myself that the way many people (have to) learn programming is inadequate.

“Programming shouldn’t be taught in universities…”

A non-programming friend of mine, Shannon (an opera singer by trade), came to an interesting conclusion one day after surveying the landscape of professional programming. She thought it inappropriate that universities taught programming. She speculated that much of the knowledge required for most daily programming tasks might be better suited in a trade school. There they could teach you the steps; in essence, the how. I remarked that she wasn’t entirely off base, but that there was room in universities for the theory. These being the theories of computation.

I kept her comment in my mind for many years. I pondered about this other seeming disparity between backgrounds, skills, and knowledge. People could very well learn how to program, and quite well, without necessarily having to really know the theory behind what they were doing. I think back to several conversations or times while I was learning the fundamentals. People considered things like finite-state automata, computability issues, assembly code, or compiler/parser construction to be these esoteric arts that only an enlightened few knew.

Such A Notion Is Entirely Useless

After I learned many of these “occult arts” myself I realized that such a notion is entirely useless. In fact, they serve only to intimidate and obfuscate those who might be interested in learning about them. It’s been my experience that the reasons people believe in such tom-foolery are two-fold. The avenues for learning those subjects are obtuse, and their investment is difficult to rationalize. Few of these resources bridge any knowledge gaps, proving difficult to impossible to grasp for the novice. Likewise, why learn the ins and outs of compiler construction when you have a perfectly fine compiler to use?

I firmly believe the lack of this knowledge, or a hazy understanding of it, proves to be a detriment. It leads to ill-informed design and architecture choices by programmers. This negatively impacts the programmers, the maintainers, and the end-users in the long run in terms of usefulness and economy. It is my firm conviction that if one could be presented with clear, justified, and useful avenues for learning the fundamental theories and practices of programming, one could then lead themselves onward in learning (or even designing) any system of mechanical computation be it computer, robot, or something not yet invented.

This is the problem this website hopes to solve. It grows from a desire to pull the strictly academic material down from its clouds; to pull the layman with room for improvement up from his oubliette, and finally, unite them.

Okay, Programming, But Why So… Different?

It would be a lie to say that I have no idea what you mean. This site is *waves hands around* different, I’ll give you that. To understand why I must tell you about myself, who I am, and where I come from.

  • Gist
  • Abridged
  • Verbose

Choose a setting

The Gist of Being Different

I am a highly creative person. In that vein, I seek to express myself in all the ways that I can. I endeavor to create not just a wealth of useful information with this site. I also wish to create a place that is engaging, beautiful, and memorable. This means that there may be silly games, artwork, and even costumes. In the end, that’s just who I am, and I like it.

If the more “artsy” aspects of this site turn you off, then it’s possible this site isn’t for you. There are hundreds of other sites replete with stale examples, weirdly translated English, and difficult to piece together/incomplete ideas for you to go. If, however, you’re looking for something fun, interesting, expanding, creative, and just plain juicy, then… I made this for people like us.

The Short of Being Different

The desperation of wanting to learn and understand technology, but not being able to find the resources that could help you is very real to me.  I have experienced the frustration of trying to problem-solve your way through learning what you want to learn.  My humble beginnings were as a budding ranch-hand. I taught myself everything I know about computers, and my message is that you can too.

It doesn’t matter your age, your background, or your learning style. You can learn to command the mysterious machines in your life and bend them to your will.  All you need is the right programming tutorials, the right encouragement, and the right resources. All of which this site can provide.  I don’t want others who want to do amazing things with computers and technology to have to suffer through the same thirty-year journey I did: sifting through piles of information and unanswered questions. You should be able to do those amazing things now, and I believe, with my help, you can!

On Being Different

I also understand what it is like to be a very different kind of person that doesn’t always fit in. Being a programmer is nice, but I am an artist first and foremost, a programmer second. I have traveled from some humble beginnings to where I am now. On the way I have looked for people who shared my peculiar ways. I discovered on the way that of all the things I need to be, being true to myself is the absolute most essential. If I don’t allow myself to live the truth of what makes me who I am, I won’t ever be genuinely content, nor happy. One must experience the pain that flows from appreciating the beauty of life. This in contrast to running from it in so many myriads of directions.

My life is my own personal piece of art that I get to make without any rules or training. In earlier times, I tried to “do it all” in one place, being my blog. I realized that was much too crowded and noisy. But, you are mistaken if you thought I wouldn’t express myself and not wear my fursuit or make up silly games and other things because I was trying to be an engineer. I build little miniature games, giving life to technical concepts, and explain it to you in an unconventional way. That’s who I am, and also, you might more likely remember.

The Long of Being Different

First off, I’m not actually a programmer. Okay, that’s not entirely true, I do know how to program and do so daily. What I mean is, like many people, I’m not just a programmer/engineer. I’m not going to rattle off twenty different occupations at you (producer, director, actor, cook, writer, programmer, designer, editor…) so don’t worry. What I am I believe can be summed up in one word. I am an artonaut.

What’s An Artonaut?

An artonaut, fittingly a word I made up for myself, is at their heart a traveler. However, unlike an argonaut they don’t necessarily travel around the world. Nor like a cosmonaut do they necessarily travel through outer space. Artonauts travel through the dimensions of quality: those real/imaginary places that touch and inspire us. We travel to learn amazing crafts that enrich us, to explore the inner and outer dimensions that empower us, and to find the beliefs and stories that we remember and hold on to. All while practicing the art of motorcycle maintenance (or something like that.)

Artonauts aren’t just open vessels idly bobbing down the Hermetic river-ways though. Central to an artonaut is what they have defined for themselves. Their identity is the will that they’ve chosen to employ in creating themselves. It often lies in stark contrast to their surroundings, both physical and social. Take me for instance, being the first one to define the term artonaut.

Take Me For Example

I am a thirty-seven-year-old maker and programmer, of many talents, living in Fort Collins, Colorado (USA). I am a transplant though, an imposter city-slicker if you will. Coming from a small semi-rural town in the Rocky Mountains where, when I was born, almost nobody sat around programming computers for fun (at least nobody that I ever knew.) As I grew up I learned animal husbandry with my 4-H sheep and swine, how to build model rockets, and how to work on a ranch (mostly building fences), and all those other things that come with living in a small town. I actually purchased my first personally owned computer with the proceeds from my 4-H sales.

At seven years old, I taught myself programming on a TRS-80 Color Computer II 16k. I was able to grasp the concepts of ColorBASIC from the included manuals. This machine was a gorgeous piece of work.

No Mouse, No Hard Drive, No…

It had no mouse, no hard drive, no disk drive, no real operating system other than a ColorBASIC interpreter. You had to attach a special tape recorder to actually save anything. I taught myself in earnest and without encouragement, often toying with it in the cold attic, or very early in the morning. I was enchanted by the idea that I could make this machine do anything I wanted. It could even do things I couldn’t do (or didn’t want to do) myself (like all my repetitive spelling homework.) If I count the year since I started you could say I have thirty years of experience, but that would be disingenuous. What I really have is thirty years of experience teaching myself how to program. Much of this time was without the help of the internet.

One day my oldest brother’s friend Topher brought over his Nintendo Entertainment System. For the first time, I witnessed The Legend of Zelda and Super Mario Bros. play out on my parent’s large CRT screen in their bedroom. I had seen games before, such as on the TRS-80, but this was so far beyond what I had seen. The controllers, the presentation, the action, and the music were absolutely incredible to me, and frankly, blew my mind wide open. It was almost a religious experience. Here was a machine that could transport you into a completely fictional world in such a way that you could interact with that world and live out your own story. From that moment on I obsessed about designing and programming computer games. I knew that this thing, this medium, these tools… they were the future.

Is The Medium The Message?

From then on, I traveled. I couldn’t drive, and I didn’t have many places to walk. But I could sneak down in the wee early hours of the morning and play my Nintendo for hours on end. I traveled in my mind to all the places I could as everybody I could. I was Samus in Metroid, or Simon in Castlevania II (which I beat without a guide.)

Unfortunately, the small town had a lot of beautiful scenery to offer, but very few resources for someone like me. My eldest brother brought home a textbook on how to program in C and C++. Despite not having access to a C/C++ compiler, I read the entire thing intent on understanding how to program even more.

I Found The Internet

Then Al Gore invented the Internet. At first, I could only access it at school and the library. Those were the only networks that could support it. However, I quickly surmised a way of accessing it through my 14.4-baud modem terminal software. I used a Lynx browser by piggy-backing on the dial-up service the library offered. I technically wasn’t supposed to be doing that, but, I was desperate (and clever). This was the final piece of the puzzle for me, living in that place, that allowed me to really flex and expand my world and consciousness as far as I could take it.

I realized, with the help of the internet, that I wasn’t the only one. For much of my life, I was the only one so enchanted by strange things. I was the only one so particularly passionate in obscure ways, and so different and future-thinking than the people around me. A melancholic resignation had come over me, in a way. I thought that I would be the only one that would understand these things despite feverish late-night esoteric searches.

Do I Wear My Fake Fur On The Inside?

On the internet, I discovered artists, scenes, subcultures, music, and ideas I’d never heard before. I traveled even further, and with a bit more maturity. I traveled so far away from that log house on top of the hill in those days. Table-top role-playing games like Mage: The Ascension fascinated me. Comic books featuring anthropomorphic characters like Associated Student Bodies gave me hope for the future. I realized that I was a homosexual rocking furry trans-futurist cultural creative.

Which brings us up to speed.

You’ve read the beginning of my story, but it is definitely not the end. I have faced several hardships since becoming an adult. They are outlined further at my own personal website World of Wunk. There’s something I’ve learned throughout all my travels though:

.. I’ve realized that of all the things I need to be, being true to myself is the absolute most essential. [If I don’t allow myself to live the truth of what makes me who I am,] I won’t ever be genuinely content, nor happy. … [One] must experience the pain that flows from appreciating the beauty of life, rather than run from it in so many myriads of directions.

Asher Wolfstein, World of Wunk

I’ve never been consciously afraid of being who I am, though sometimes I’ve had difficulty doing it. I am not embarrassed by my authenticity. I do not have to hide my interests or my flair, because I’m not looking for your approval. That’s why this website, and everything I do, is different.

The Art of Living

If artonaut isn’t good enough for you, then I am an artist first and foremost, and a programmer second. My life is my own personal piece of art that I get to make without any rules or training. In earlier times, I tried to “do it all” in one place, being my blog. But I realized that was much too crowded and noisy. But, you are mistaken if you think I won’t express myself and not wear my fursuit because I was trying to be an engineer. I build little miniature games, giving life to technical concepts, and explain it to you in an unconventional way. That’s who I am, and you might more likely remember.

If the more “artsy” aspects of this site turn you off, then it’s possible this site isn’t for you. There are hundreds of other sites replete with stale examples, weirdly translated English, and difficult to piece together/incomplete ideas for you to go. If, however, you’re looking for something fun, interesting, expanding, creative, and just plain juicy, then… I made this for people like us.

I Can Program, and You Can Too!

The takeaway from this sordid tale is that I have never forgotten where I came from. The desperation of wanting to learn and understand technology, but not being able to find the resources that could help you is very real to me.  I understand the frustration of trying to problem-solve your way through learning what you want to learn.  Personally coming from humble beginnings as a budding ranch-hand, I taught myself everything I know about computers, and my message is that you can too.

It doesn’t matter your age, your background, or your learning style. You can learn to command the mysterious machines in your life and bend them to your will.  All you need is the right programming tutorials, the right encouragement, and the right resources. All of which this site can provide.  I don’t want others who want to do amazing things with computers and technology to have to suffer through the same thirty-year journey I did: sifting through piles of information and unanswered questions.  You should be able to do those amazing things now, and I believe, with my help, you can!

The Structure Of This Site

There are five main sections to this site: core, languages, applications, technologies, and fields. Each covers a respective domain of topics as outlined below. There are also two qualifiers, so far, that you can use to further refine the posts: news, and tutorials.

Sections

Core

Programming utilizes science, planning, and math to achieve its goals. Because of this, a good thing to learn in addition to any programming language is the theory behind programming itself. Core theories pertaining to programming are as varied as they are deep.  The primary one, of course, is the theory of computation.  This theory rests heavily on discrete mathematics and formal languages and includes automata, computability, and complexity theories.

Learning about these theories in conjunction with mathematical logic will help you gain a deep understanding.  You’ll know what properties and behaviors are possible for a program.  Mathematical logic includes, but isn’t limited to, set, model, recursion, and proof theories.  These theories often build upon first-order logic (also known as predicate/quantificational logic, and first-order predicate calculus).

In other words, what you’ll find in these pages will help you learn how to program just about anything.  These fundamental concepts don’t really change much from one machine or language to the next.  They are almost always applicable no matter what you’re doing.  If you understand these concepts well enough, you may even be able to create your own programming language or structures.

I categorize these theoretical topics, such as combinatorics or computer science, under the “core” moniker.  The URL structure for core subjects, such as concrete mathematics or computational theory and philosophy, falls under “core/(your subject here)” where you would put your preferred subject in place of the text and parentheses. You can find a list of them by simply using the URL /core/.

Languages

My definition here is a bit broad, technically speaking. Some topics listed here are more “formatting” languages but contain modules or elements sometimes involving programming, like HTML5. I include them here as well as the more traditional programming languages like C/C++.

Programming languages break up into things called paradigms (though some criticize this practice). As I once wrote when I was twelve, “A paradigm is a framework containing the basic assumptions, ways of thinking, and methodology that are commonly accepted by members of a community as defined by the Winston College Dictionary.” Oh, to be so young.

In essence, a paradigm encompasses both a way of looking at things and the expectations of the structure of those things. Often this is according to a particular attribute or quality. There are so many proposed paradigms of programming languages it would be exhausting to list them all here. Please note the very real possibility for any given language to “belong” to more than one paradigm. You call such a beast a multi-paradigm language.

News and articles pertaining to a given programming language are easily accessed through the URL structure “languages/(your language here)” where you would put your preferred language in place of the text and parentheses. You can find a list of them by simply using the URL /languages/.

Applications

Programming languages are just part of the whole picture though. It is with this in mind that there will also be information available on particular applications of those programming languages. For example, the programming languages PHP, SQL, HTML5, CSS, and JavaScript are all employed by the application WordPress.

These days the distinction between what is a framework/technology and what is an application is often blurred. In one sense, WordPress out of the box allows you to make a blog. In another sense, it provides functionality that expands within that environment with additional code. The major difference here between something like WordPress and a technology such as PyGame is simple.

An application is able to perform a function or empower the user in relation to a task without additional programming. You can install WordPress and never code again, you’ll still have a blog. You can’t install PyGame and expect to instantly have a game engine.

This section outlines various applications (that sometimes act as frameworks) such as the aforementioned WordPress, as well as Godot, Unity, or even Visual Novel Maker. It also covers integrated development environments (IDEs) such as Visual Studio Code, JetBrains, Eclipse, and even emacs.

As more is written about how to program and configure that particular application, you will be able to find that information under the URL structure “apps/(your app here)” where you would put your preferred application/framework in place of the text and parentheses. You can find a list of them by simply using the URL /apps/.

Technologies

A technology is a framework, whether physical or abstract, that defines the environment in which you program. Let us consider a given machine. We must consider its memory, its instruction set, its interfaces, and its organization. When you must consider these things, you are speaking of a technology or platform. It’s very possible to do the exact same thing on two different technologies. However, you’ll likely do them somewhat differently.

You might wonder why something like PyGame is included here. Isn’t it a software framework/library? I include it here because much like a computer processor defines your instruction-set, a framework like PyGame offers you an interface to program within but doesn’t actually do anything by itself. In that regard, I include frameworks such as Laravel, PyGame, the C++ runtime environment, and more.

These physical and software platforms that we write our software “on” I call “tech” for technology.  You might be running PyGame on a Raspberry Pi or figuring out how to package an iOS app. In those cases, you can utilize the URL structure “tech/(your platform here)” with the same mechanisms as before. You can find a list of them by simply using the URL /tech/.

Fields

Lastly, with a subject as wide and broad as technology, there are logical groupings when it comes to partitioning it up.  I call these “fields” and they can range from networking to data science and machine learning. Programming fields range far and wide across the hills. Outsourcing abstract reasoning to machines is useful everywhere!

In recent years there has been a large interest in a number of areas that have brought the idea of their uniqueness to the forefront. There now exist occupations such as Data Scientist, or Artificial Intelligence Engineer, and thus also, their respective fields.

I break down fields into their domains of interest, such as computer graphics, programming language design, software engineering, human-computer interaction, simulations, artificial intelligence, networking, business applications, robotics, cybernetics, and so on.

In that respect then, a field is a domain of interest that employs the concepts and practices of programming. Below you’ll find a list of the fields that covered in some form on How To Program Anything.

 As you can probably guess, the URL structure for these is “fields/(your field here)”. You can find a list of them by using the URL /fields/.

Qualifiers

News

Another handy tool is the “news” URL qualifier.  To focus on posts dealing with current events and information about a particular language or application append the keyword “/news” to the end of the URL.  For example, for news on the WordPress application, you would write, “apps/wordpress/news”

Tutorials

In much the same way to focus on tutorials for a particular language or application append the keyword “/tutorials” to the end of the URL.

Acknowledgements:
Photo by Clay Banks on Unsplash