How To Program Anything is a very structured site, and it intentionally follows a particular design. This is meant to aid the reader’s ability to hone down and find exactly what they may be looking for, much like a library index. Below is documentation on how the site is structured.
The Structure Of How To Program Anything
There are six main taxonomies (categories): Core Knowledge, Techniques, Languages, Applications, Technologies, and Disciplines. Each covers a respective domain of topics as outlined below. There are also five qualifiers (post types) that you can use to refine further the content listed: Reference, Tutorials, Series, News, and People. Each of these qualifiers refines the content shown towards a particular purpose, as will also be outlined.
The Main Taxonomies (Categories)
The Core Knowledge Taxonomy
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.
The Core Knowledge taxonomy includes posts dedicated to the pertinent core theory and fundamental knowledge of computer science. Core theories of 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 on 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 create your own programming language or structures.
We categorize these theoretical topics, such as combinatorics or computer science, under the Core Knowledge moniker.
The Techniques / Algorithms Taxonomy
The Techniques taxonomy includes posts dedicated to programming techniques and paradigms. Before coalescing into concrete mechanisms like languages, there is a preliminary step where the abstract core knowledge is organized into a model that is utilizable in a concrete way. These models are known as programming paradigms. 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. Paradigms include object-oriented, prototypal, procedural, structured, functional, logical, declarative, and more.
Beyond paradigms, some meta-theories and techniques inform the structures of programming and its subsequent products (languages and programs). Some of these are historical, while others have yet to be attained, and others are interesting curiosities. Many of them focus on models and algorithms for specific problems, including parsing, searching and sorting, and machine learning techniques. All of these techniques and practices are documented here.
We categorize these techniques and algorithms under the Techniques moniker.
The Languages Taxonomy
The Languages taxonomy includes posts involving specific programming languages. Programming languages are the product of taking systematic core knowledge and various techniques, including models and paradigms, and implementing them into a concrete and usable system that can be configured or coded, to accomplish the goals of a given domain. My definition here is a bit broad, technically speaking.
We categorize all these different specifications and languages under the fairly straightforward Languages moniker.
The Applications Taxonomy
The Applications taxonomy includes posts involving specific programming applications. A programming application is a program created using a programming language that allows the user to further program or accomplish some goal. These include compilers, content management systems, and game engines.
These days, the distinction between a framework/technology and 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 something considering technology such as PyGame is simple.
An application can perform a function or empower the user concerning a task without additional programming. You can install WordPress and never code again, and you’ll still have a blog. You can’t install PyGame and expect to have a game engine instantly. This section also outlines various (hackable) applications (that sometimes act as frameworks) such as the aforementioned WordPress and other CMSs, editors like Atom, compiler toolchains such as LLVM, and even game development applications such as Godot, Unity, and even Visual Novel Maker.
We categorize all these different applications, under the Applications moniker.
The Technologies Taxonomy
The Technologies taxonomy includes posts involving various specific technologies. These are physical and software platforms that we write our software “on.” For example, I listed PyGame, Raspberry Pi, and even packaging an iOS app.
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 possible to do the 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? It’s included 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, technologies found here include frameworks such as Laravel, PyGame, the C++ runtime environment, and more.
We categorize all these different technologies, under the Technologies moniker.
The Disciplines Taxonomy
A discipline (or field) is a domain of interest that employs the concepts and practices of programming.
The Disciplines taxonomy includes posts involving various fields and disciplines that have something to do with programming and computers. The ability to perform vast computational feats has become essential to almost every realm of human activity. We rely on computers to process, catalog and transmit information in research, business, and recreation combined.
Disciplines and fields can range from the obvious (such as applied mathematics or bioinformatics) to the niche (like artificial life simulations or machine learning) and even the fun (game development and social networks). Each field easily forms its own microcosm of in-depth studies and histories, gives rise to its own star programmers, publishes its own journals, and develops its own history.
We 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.
We categorize all these different fields under the Disciplines moniker.
Qualifiers (Post Types)
How Qualifiers Work
Main taxonomies slice up the content on the site into various categories. However, that content may be one of several forms, such as a news article or a tutorial. One taxonomy may contain several different types of posts, each serving a different purpose.
The Reference Qualifier
In the Reference qualifier, you will find all posts that are not tutorials, news, profiles, or series. These posts make up most of the content on How To Program anything and often go into reference-level detail regarding various systems, be they programming languages, theories, or applications.
These differ from tutorials in that they do not necessarily provide a step-by-step process on how to accomplish a given task, and the reader won’t end up with any final product. They also differ from news posts because of their referential nature, which is more timeless than topical. Deep diving into these articles should provide clear and useful information about all the various subjects covered on How To Program Anything.
The Tutorials Qualifier
Tutorial posts range over the general taxonomies and teach the reader how to do something. Tutorials feature step-by-step processes and explanations or links to more in-depth explanations, which help the reader solve a particular problem or end up with a final product.
Subjects and lengths vary for tutorials. They can range from simple “How do I?” processes to something as complex as building a web app or computer game.
Tutorials are rated by difficulty with green gears by the editors correlating to the old Infocom difficulty levels (Introductory, Standard, Advanced, and Expert). They are also rated by lightbulbs in terms of reception by readers (the more lightbulbs, the better). If a tutorial helps you, please consider leaving a positive rating. If there’s an issue with a tutorial, please leave a comment indicating the issue, and the editors will try to address it.
The Series Qualifier
Sometimes a single post doesn’t suffice to cover the extent of a particular subject. This is often true of larger tutorials such as building a web app or a computer game. Sometimes a series of posts might span different types of posts and core taxonomies but are linked by a common thread.
You can imagine a Series as a sort of miniature (or not so miniature!) book that aggregates several other posts together to achieve coverage of a subject. This often happens in the intricate world of computer programming.
The News Qualifier
New technologies and discoveries are popping up every day in the tech industry. The purpose of News posts is to feature new developments and other facets of the computational industry. Frameworks, operating systems, and even hardware are always evolving, and new announcements are made every day.
Because computers touch every aspect of our modern lives, news articles can cover a much broader area as well. The technology industry is expansive, with many large, very influential companies such as Apple or Google. News often comes from the web/social media and its effects on society. These articles cover anything considered newsworthy that has to do with computers and technology.
The Person Qualifier
The technology industry often has big, sometimes odd, celebrated personalities and many unsung heroes whose intellect and contribution have shaped the modern landscape. For every Steve Jobs, there are easily a dozen Brian Kernighan’s, Cliff Jones, or John Hollands. None better or worse, their only inequality being public recognition.
Person posts hope to provide profiles on contemporary enthusiasts, both professional and hobbyist, and masters, both historical and current. Through the great examples of others, we can study great works and histories of computational innovation from the viewpoints of its creators.