0%

Introduction

A lot of programmers that make some of the coolest and most useful software today, such as many of the stuff we see on the Internet or use daily, don’t have a theoretical computer science background. They’re still pretty awesome and creative programmers and we thank them for what they build.

However, theoretical computer science has its uses and applications and can turn out to be quite practical. In this article, targeted at programmers who know their art but who don’t have any theoretical computer science background, I will present one of the most pragmatic tools of computer science: Big O notation and algorithm complexity analysis. As someone who has worked both in a computer science academic setting and in building production-level software in the industry, this is the tool I have found to be one of the truly useful ones in practice, so I hope after reading this article you can apply it in your own code to make it better. After reading this post, you should be able to understand all the common terms computer scientists use such as “big O”, “asymptotic behavior” and “worst-case analysis”.

This text is also targeted at the junior high school and high school students from Greece or anywhere else internationally competing in the International Olympiad in Informatics, an algorithms competition for students, or other similar competitions. As such, it does not have any mathematical prerequisites and will give you the background you need in order to continue studying algorithms with a firmer understanding of the theory behind them. As someone who used to compete in these student competitions, I highly advise you to read through this whole introductory material and try to fully understand it, because it will be necessary as you study algorithms and learn more advanced techniques.

I believe this text will be helpful for industry programmers who don’t have too much experience with theoretical computer science (it is a fact that some of the most inspiring software engineers never went to college). But because it’s also for students, it may at times sound a little bit like a textbook. In addition, some of the topics in this text may seem too obvious to you; for example, you may have seen them during your high school years. If you feel you understand them, you can skip them. Other sections go into a bit more depth and become slightly theoretical, as the students competing in this competition need to know more about theoretical algorithms than the average practitioner. But these things are still good to know and not tremendously hard to follow, so it’s likely well worth your time. As the original text was targeted at high school students, no mathematical background is required, so anyone with some programming experience (i.e. if you know what recursion is) will be able to follow through without any problem.

Throughout this article, you will find various pointers that link you to interesting material often outside the scope of the topic under discussion. If you’re an industry programmer, it’s likely that you’re familiar with most of these concepts. If you’re a junior student participating in competitions, following those links will give you clues about other areas of computer science or software engineering that you may not have yet explored which you can look at to broaden your interests.

Big O notation and algorithm complexity analysis is something a lot of industry programmers and junior students alike find hard to understand, fear, or avoid altogether as useless. But it’s not as hard or as theoretical as it may seem at first. Algorithm complexity is just a way to formally measure how fast a program or algorithm runs, so it really is quite pragmatic. Let’s start by motivating the topic a little bit.

Motivation

We already know there are tools to measure how fast a program runs. There are programs called profilers which measure running time in milliseconds and can help us optimize our code by spotting bottlenecks. While this is a useful tool, it isn’t really relevant to algorithm complexity. Algorithm complexity is something designed to compare two algorithms at the idea level — ignoring low-level details such as the implementation programming language, the hardware the algorithm runs on, or the instruction set of the given CPU. We want to compare algorithms in terms of just what they are: Ideas of how something is computed. Counting milliseconds won’t help us in that. It’s quite possible that a bad algorithm written in a low-level programming language such as assembly runs much quicker than a good algorithm written in a high-level programming language such as Python or Ruby. So it’s time to define what a “better algorithm” really is.

As algorithms are programs that perform just a computation, and not other things computers often do such as networking tasks or user input and output, complexity analysis allows us to measure how fast a program is when it performs computations. Examples of operations that are purely computational include numerical floating-point operations such as addition and multiplication; searching within a database that fits in RAM for a given value; determining the path an artificial-intelligence character will walk through in a video game so that they only have to walk a short distance within their virtual world; or running a regular expression pattern match on a string. Clearly, computation is ubiquitous in computer programs.

Complexity analysis is also a tool that allows us to explain how an algorithm behaves as the input grows larger. If we feed it a different input, how will the algorithm behave? If our algorithm takes 1 second to run for an input of size 1000, how will it behave if I double the input size? Will it run just as fast, half as fast, or four times slower? In practical programming, this is important as it allows us to predict how our algorithm will behave when the input data becomes larger. For example, if we’ve made an algorithm for a web application that works well with 1000 users and measure its running time, using algorithm complexity analysis we can have a pretty good idea of what will happen once we get 2000 users instead. For algorithmic competitions, complexity analysis gives us insight about how long our code will run for the largest testcases that are used to test our program’s correctness. So if we’ve measured our program’s behavior for a small input, we can get a good idea of how it will behave for larger inputs. Let’s start by a simple example: Finding the maximum element in an array.

Counting instructions

In this article, I’ll use various programming languages for the examples. However, don’t despair if you don’t know a particular programming language. Since you know programming, you should be able to read the examples without any problem even if you aren’t familiar with the programming language of choice, as they will be simple and I won’t use any esoteric language features. If you’re a student competing in algorithms competitions, you most likely work with C++, so you should have no problem following through. In that case I recommend working on the exercises using C++ for practice.

The maximum element in an array can be looked up using a simple piece of code such as this piece of Javascript code. Given an input array A of size n:

1
2
3
4
5
6
7
var M = A[ 0 ];

for ( var i = 0; i < n; ++i ) {
if ( A[ i ] >= M ) {
M = A[ i ];
}
}

Now, the first thing we’ll do is count how many fundamental instructions this piece of code executes. We will only do this once and it won’t be necessary as we develop our theory, so bear with me for a few moments as we do this. As we analyze this piece of code, we want to break it up into simple instructions; things that can be executed by the CPU directly - or close to that. We’ll assume our processor can execute the following operations as one instruction each:

  • Assigning a value to a variable
  • Looking up the value of a particular element in an array
  • Comparing two values
  • Incrementing a value
  • Basic arithmetic operations such as addition and multiplication

We’ll assume branching (the choice between if and else parts of code after the if condition has been evaluated) occurs instantly and won’t count these instructions. In the above code, the first line of code is:

1
var M = A[0]

This requires 2 instructions: One for looking up A[ 0 ] and one for assigning the value to M (we’re assuming that n is always at least 1). These two instructions are always required by the algorithm, regardless of the value of n. The for loop initialization code also has to always run. This gives us two more instructions; an assignment and a comparison:

1
2
i = 0;
i < n;

These will run before the first for loop iteration. After each for loop iteration, we need two more instructions to run, an increment of i and a comparison to check if we’ll stay in the loop:

1
2
++i;
i < n;

So, if we ignore the loop body, the number of instructions this algorithm needs is 4 + 2n. That is, 4 instructions at the beginning of the for loop and 2 instructions at the end of each iteration of which we have n. We can now define a mathematical function f( n ) that, given an n, gives us the number of instructions the algorithm needs. For an empty for body, we have f( n ) = 4 + 2n.

Worst-case analysis

Now, looking at the for body, we have an array lookup operation and a comparison that happen always:

1
if ( A[ i ] >= M ) { ...

That’s two instructions right there. But the if body may run or may not run, depending on what the array values actually are. If it happens to be so that A[ i ] >= M, then we’ll run these two additional instructions — an array lookup and an assignment:

1
M = A[ i ]

But now we can’t define an f( n ) as easily, because our number of instructions doesn’t depend solely on n but also on our input. For example, for A = [ 1, 2, 3, 4 ] the algorithm will need more instructions than for A = [ 4, 3, 2, 1 ]. When analyzing algorithms, we often consider the worst-case scenario. What’s the worst that can happen for our algorithm? When does our algorithm need the most instructions to complete? In this case, it is when we have an array in increasing order such as A = [ 1, 2, 3, 4 ]. In that case, M needs to be replaced every single time and so that yields the most instructions. Computer scientists have a fancy name for that and they call it worst-case analysis; that’s nothing more than just considering the case when we’re the most unlucky. So, in the worst case, we have 4 instructions to run within the for body, so we have f( n ) = 4 + 2n + 4n = 6n + 4. This function f, given a problem size n, gives us the number of instructions that would be needed in the worst-case.

Asymptotic behavior

Given such a function, we have a pretty good idea of how fast an algorithm is. However, as I promised, we won’t be needing to go through the tedious task of counting instructions in our program. Besides, the number of actual CPU instructions needed for each programming language statement depends on the compiler of our programming language and on the available CPU instruction set (i.e. whether it’s an AMD or an Intel Pentium on your PC, or a MIPS processor on your Playstation 2) and we said we’d be ignoring that. We’ll now run our “f” function through a “filter” which will help us get rid of those minor details that computer scientists prefer to ignore.

In our function, 6n + 4, we have two terms: 6n and 4. In complexity analysis we only care about what happens to the instruction-counting function as the program input (n) grows large. This really goes along with the previous ideas of “worst-case scenario” behavior: We’re interested in how our algorithm behaves when treated badly; when it’s challenged to do something hard. Notice that this is really useful when comparing algorithms. If an algorithm beats another algorithm for a large input, it’s most probably true that the faster algorithm remains faster when given an easier, smaller input. From the terms that we are considering, we’ll drop all the terms that grow slowly and only keep the ones that grow fast as n becomes larger. Clearly 4 remains a 4 as n grows larger, but 6n grows larger and larger, so it tends to matter more and more for larger problems. Therefore, the first thing we will do is drop the 4 and keep the function as f( n ) = 6n.

This makes sense if you think about it, as the 4 is simply an “initialization constant”. Different programming languages may require a different time to set up. For example, Java needs some time to initialize its virtual machine. Since we’re ignoring programming language differences, it only makes sense to ignore this value.

The second thing we’ll ignore is the constant multiplier in front of n, and so our function will become f( n ) = n. As you can see this simplifies things quite a lot. Again, it makes some sense to drop this multiplicative constant if we think about how different programming languages compile. The “array lookup” statement in one language may compile to different instructions in different programming languages. For example, in C, doing A[ i ] does not include a check that i is within the declared array size, while in Pascal it does. So, the following Pascal code:

1
M := A[ i ]

Is the equivalent of the following in C:

1
2
3
if (i >= 0 && i < n) {
M = A[i];
}

So it’s reasonable to expect that different programming languages will yield different factors when we count their instructions. In our example in which we are using a dumb compiler for Pascal that is oblivious of possible optimizations, Pascal requires 3 instructions for each array access instead of the 1 instruction C requires. Dropping this factor goes along the lines of ignoring the differences between particular programming languages and compilers and only analyzing the idea of the algorithm itself.

This filter of “dropping all factors” and of “keeping the largest growing term” as described above is what we call asymptotic behavior. So the asymptotic behavior of f( n ) = 2n + 8 is described by the function f( n ) = n. Mathematically speaking, what we’re saying here is that we’re interested in the limit of function f as n tends to infinity; but if you don’t understand what that phrase formally means, don’t worry, because this is all you need to know. (On a side note, in a strict mathematical setting, we would not be able to drop the constants in the limit; but for computer science purposes, we want to do that for the reasons described above.) Let’s work a couple of examples to familiarize ourselves with the concept.

Let us find the asymptotic behavior of the following example functions by dropping the constant factors and by keeping the terms that grow the fastest.

  1. f( n ) = 5n + 12 gives f( n ) = n.

    By using the exact same reasoning as above.

  2. f( n ) = 109 gives f( n ) = 1.

    We’re dropping the multiplier 109 * 1, but we still have to put a 1 here to indicate that this function has a non-zero value.

  3. f( n ) = n2 + 3n + 112 gives f( n ) = n2

    Here, n2 grows larger than 3n for sufficiently large n, so we’re keeping that.

  4. f( n ) = n3 + 1999n + 1337 gives f( n ) = n3

    Even though the factor in front of n is quite large, we can still find a large enough n so that n3 is bigger than 1999n. As we’re interested in the behavior for very large values of n, we only keep n3 (See Figure 2).

  5. f( n ) = n + (n)^(1/2) gives f( n ) = n

    This is so because n grows faster than (n)^(1/2)as we increase n.

Complexity

So what this is telling us is that since we can drop all these decorative constants, it’s pretty easy to tell the asymptotic behavior of the instruction-counting function of a program. In fact, any program that doesn’t have any loops will have f( n ) = 1, since the number of instructions it needs is just a constant (unless it uses recursion; see below). Any program with a single loop which goes from 1 to n will have f( n ) = n, since it will do a constant number of instructions before the loop, a constant number of instructions after the loop, and a constant number of instructions within the loop which all run n times.

This should now be much easier and less tedious than counting individual instructions, so let’s take a look at a couple of examples to get familiar with this. The following PHP program checks to see if a particular value exists within an array A of size n:

1
2
3
4
5
6
7
8
9
<?php
$exists = false;
for ( $i = 0; $i < n; ++$i ) {
if ( $A[ $i ] == $value ) {
$exists = true;
break;
}
}
?>

This method of searching for a value within an array is called linear search. This is a reasonable name, as this program has f( n ) = n (we’ll define exactly what “linear” means in the next section). You may notice that there’s a “break” statement here that may make the program terminate sooner, even after a single iteration. But recall that we’re interested in the worst-case scenario, which for this program is for the array A to not contain the value. So we still have f( n ) = n.

Rule of thumb

  1. Simple programs can be analyzed by counting the nested loops of the program. A single loop over n items yields f( n ) = n. A loop within a loop yields f( n ) = n^2. A loop within a loop within a loop yields f( n ) = n^3.
  2. Given a series of for loops that are sequential, the slowest of them determines the asymptotic behavior of the program. Two nested loops followed by a single loop is asymptotically the same as the nested loops alone, because the nested loops dominate the simple loop.
  3. Programs with a bigger Θ run slower than programs with a smaller Θ.
  4. It’s easier to figure out the O-complexity of an algorithm than its Θ-complexity.
  5. While all the symbols O, o, Ω, ω and Θ are useful at times, O is the one used more commonly, as it’s easier to determine than Θ and more practically useful than Ω.
  6. For competition algorithms implemented in C++, once you’ve analyzed your complexity, you can get a rough estimate of how fast your program will run by expecting it to perform about 1,000,000 operations per second, where the operations you count are given by the asymptotic behavior function describing your algorithm. For example, a Θ( n ) algorithm takes about a second to process the input for n = 1,000,000.
  7. Improving the asymptotic running time of a program often tremendously increases its performance, much more than any smaller “technical” optimizations such as using a faster programming language.

Introduction: A Guide To The Tech Tree

What follows, which we call the Tech Tree, is a selection of works intended to describe how the world makes and uses software today, as well as an overview of how computers work and the foundational technologies required to make and use computers. The purpose of the GitHub Archive Program is to preserve open source software for future generations. This implies also preserving the knowledge of other technologies on which open-source software runs, along with a depiction of the open-source movement which brought this software into being.

In addition to this technical documentation, we have also included a selection of artistic, cultural, and historical works, to help describe the overall cultural context in which this archive was created, and a series of dictionaries, to aid translation into several of the world’s most widespread other languages.

This initial version of the Tech Tree will consist almost entirely of copies of pre-existing works, none of which were written for an unknown audience a long way into the future. As such it is not so much a guide as a collection of resources that we hope will be historically interesting and/or useful. We have tried to strike a balance between abstract/theoretical and concrete/practical work, and to provide at least an overview of the entire technical stack on which modern software engineering rests.

Please note that this document is currently a loose “wish list” of works that we may like to include, which we are making public for the purpose of actively soliciting further suggestions and input, rather than a finalized register of selected works. Note also that the prospect of copying works onto microfilm in a human-readable form implies both potential copyright issues and the practical consideration of acquiring a copyable digital version of the work in question. Certain publishers (Packt, O’Reilly, Springer, and Wiley) have indicated they are happy to work with us, while the status for most other publishers and copyright holders remains indeterminate.

The proposed Tech Tree is loosely divided into the following sixteen sections:

  1. Fundamentals of computing and the Internet: the essentials of how computers work, and, at least as important to today’s world, how they are connected together into a single planetary network which includes most of the computers on Earth.
  2. Algorithms and data structures: processes, sets of rules, and methods of arranging data to solve common categories of problems in efficient ways. Metaphorically, algorithms are the intelligence in a software program, and data structures are its storage.
  3. Compilers, assembler, and operating systems: how written source code becomes the machine code which causes the electrical signals inside a computer to change in a controlled manner, and the theory of operating systems, the software which supports a computer’s basic functions and provides the fundamental, low-level functionality that all other software ultimately calls upon.
  4. Programming languages: some of the world’s most popular and widely used programming languages described in detail. While, fundamentally, any program can be written in any language, certain languages are better or worse at particular tasks.
  5. Networking and connectivity: how computers connect to one another, via physical wires and radio signals, both one-on-one and in larger networks. Includes descriptions of the structure of the global “network of networks” known as the Internet, which connects most of the computers on Earth.
  6. Modern software development: the processes and procedures of dealing with software projects, tools, and services at scale, with constant monitoring and communication, at assured levels of quality.
  7. Modern software applications: in-depth description of applications such as Web development (the Web is, essentially, that part of the Internet used to display output and receive input from human beings); scientific research and analysis; image processing; pattern recognition and generation via neural networks; software distributed across many different computers; cryptocurrencies, which can be used as a platform for trustless decentralized software; and the new field of quantum computing.
  8. Hardware architectures: the concepts, structures, and layout of computer hardware. Hardware refers to physical electronic components; hardware architecture refers to how those components are structured and connected in order to run software; and software ultimately becomes ephemeral patterns of electricity within those physical components.
  9. Hardware development: how to build simple computers from collections of electronic components, along with technical descriptions of drones, robots, and digital cameras.
  10. Electronic components, transistors, semiconductor manufacturing: those electronic components which predated computers, along with individual transistors, the component from which computers are made, and an overview of the technologies and processes of fabricating interconnected transistors at scale.
  11. Electricity, radios, and other industrial technologies: fundamental pre-computer technologies, regarding generating usable electrical power, transmitting it over wires, using it to convey information without wires over great distances via radio, and basic industrial metalworking.
  12. Pre-industrial technologies: technologies of eras which predated electricity.
  13. Women and technology: an overview of the oft-erased role of women in the development of software and other technologies.
  14. Languages: a dictionary of English along with translational dictionaries intended to help readers convert from English to Arabic, Chinese, Hindi, and Spanish, the world’s other four most-used languages.
  15. Arts, culture, and history: human histories and changing human cultures, mostly through the lens of celebrated fictional narratives written over the last 150 years.
  16. Cultural context: information about humanity at the time the Tech Tree was created; in particular, a snapshot of Wikipedia, a collectively generated repository of all sorts of information about our world. Due to Wikipedia’s enormous size, this section is provided as encoded data, like the rest of the archive, rather than as visual/readable pages.

The first seven sections are devoted to software, the purpose and content of the GitHub Arctic Code Vault, and its uses and applications. The next five sections describe the technologies required to construct computers on which software might run. The remaining three are intended to illustrate the human context in which these technologies have been developed, the stories the cultures of our era told, the languages in which we told them, and the factual background and descriptions of the world in which we lived.

The Tech Tree is part of the much larger GitHub Arctic Code Vault. As such, it also includes, as an appendix, visual copies of the Guide to the GitHub Code Vault, along with an index of the archive’s fifteen thousand most significant code repositories, including brief descriptions and locations within the archive.

It is perhaps worth noting that our advisory board stressed that ours is likely to be the best-documented era in human history by far, so bundling the Tech Tree with the archive is likely to be more convenient than essential for its inheritors. As such, it is entirely possible – indeed quite likely – that its value will consist largely of providing context regarding the era and culture in which the archive was created, rather than as a source of new and unavailable knowledge, though of course there are imaginable futures in which it plays the latter role.

What follows is a brief summary of each section, describing both the general topics it covers, and the works the Tech Tree includes to document our current understanding of those topics.

Fundamentals of computing and the Internet

These books describe what computers are, from the silicon up – electricity, transistors, binary logic, digital gates, bits, bytes, chips, ALUs, microprocessors, software – as well as introducing what they can do. It also includes books which describe, at a high level, how computers can be connected together, and what that means. The works in question are:

The Pattern On The Stone by W. Daniel Hills (Basic Books)

But How Do It Know? by J. Clark Scott (John C Scott)

Code: The Hidden Language of Computer Hardware and Software by Charles Petzold (Pearson Education)

The Elements of Computing Systems: Building a Modern Computer from First Principles by Noam Nisan (MIT Press)

Tubes: A Journey To The Center Of The Internet by Andrew Blum (HarperCollins)

Introduction to Networking: How the Internet Works by Charles Severance, illustrated by Mauro Toselli and Aimee Andrion (Charles Severance)

Algorithms and data structures

These are the fundamentals of computer science, and hence the foundation of software engineering; describing how data is structured and stored, and the most effective and efficient ways in which it can be processed.

The Art of Computer Programming by Donald Knuth (Pearson)

Sequential and Parallel Algorithms and Data Structures by Peter Sanders, Kurt Mehlhorn, Martin Dietzfelbinger, Roman Dementiev (Springer)

Cryptography by Simon Rubinstein-Salzedo (Springer)

Introduction to Parallel Algorithms and Architectures by F. Thomson Leighton (Elsevier)

Mastering SciPy by Francisco J. Blanco-Silva (Packt)

Everyday Data Structures by William Smith (Packt)

Database Internals by Alex Petrov (O’Reilly)

Understanding MySQL Internals by Sasha Pachev (O’Reilly)

Physical Database Design by Sam S. Lightstone, Toby J. Teorey, and Tom Nadeau (Elsevier)

Learning MySQL and MariaDB by Russell J. T. Dyer (O’Reilly)

PostgreSQL Development Essentials by Manpreet Kaur, Baji Shaik (Packt)

Compilers, assembler, and operating systems

The purpose of the Archive Program is to preserve software, and these are the fundamental building blocks of software. These books help to explain how high-level written software becomes low-level electrical impulses:

Compilers: Principles, Techniques, Tools by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman (Addison Wesley)

Practical Compiler Construction by Des Watson (Springer)

Engineering a Compiler by Keith Cooper and Linda Torczon (Elsevier) or Modern Compiler Design by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, Koen Langendoen (Springer)

The Art of Assembly Language by Randall Hyde (No Starch)

Modern Assembly Language Programming with the ARM Processor by Larry D. Pyeatt (Elsevier)

Understanding the Linux Kernel by Daniel P. Bovet and Marco Cesati (O’Reilly)

Mastering Linux Kernel Development by Raghu Bharadwaj (Packt)

Programming languages

There are hundreds of programming languages; the enormous chart visualizing their evolution at the Computer History Museum is worth visiting if you’re a developer, and we don’t intend to document them all. Still, accessible book-length descriptions of a selection of the world’s major languages seems desirable.

Introducing Python by Bill Lubanovic (O’Reilly)

Comprehensive Ruby Programming by Jordan Hudgens (Packt)

LISP, Lore, and Logic by W. Richard Stark (Springer)

The C Programming Language by Kernighan and Ritchie (Pearson)

Learn C The Hard Way by Zed Shaw (Pearson) or Head First C by David Griffiths, Dawn Griffiths (O’Reilly)

The C++ Primer by Stanley B. Lippman, Josée Lajoie, and Barbara E. Moo (Pearson)

Programming Rust by Jim Blandy and Jason Orendorff (O’Reilly)

The Go Programming Language by Alan A. A. Donovan and Brian W. Kernighan (Pearson) or Head First Go by Jay McGavren (O’Reilly)

Learning Java by Patrick Niemeyer and Daniel Leuck (O’Reilly)

The Java Virtual Machine Specification by Tim Lindholm, Frank Yellin, Gilad Bracha, and Alex Buckley (Pearson)

Learning JavaScript by Ethan Brown (O’Reilly)

Mastering JavaScript Functional Programming by Federico Kereki (Packt)

Learning Swift by Jonathon Manning, Paris Buttfield-Addison, and Tim Nugent (O’Reilly)

Introducing Erlang by Simon St. Laurent (O’Reilly)

Clojure Programming by Chas Emerick, Brian Carper, and Christophe Grand (O’Reilly)

Networking and connectivity

Computers are great, but in a way, so 20th century; it’s networked computers which are, at least arguably, the real technical revolution of the 21st. As such our networking protocols and technologies deserve considerable attention. We might hope our inheritors will either have long surpassed our networking, or will have the freedom to design anew rather than be shackled by all the compromises we’ve needed to make for the sake of backwards compatibility but either way, hopefully they can learn something from what we’ve done. Which is described by:

Cabling: The Complete Guide To Copper and Fiber-Optic Networking by Andrew Oliviero and Bill Woodward (Wiley)

Ethernet: The Definitive Guide by Charles E. Spurgeon and Joann Zimmerman (O’Reilly)

Understanding TCP/IP by Alena Kabelová and Libor Dostálek (Packt)

TCP/IP Essentials by Shivendra S. Panwar, Shiwen Mao, Jeong-dong Ryoo, and Yihan Li (Cambridge)

Routing TCP/IP by Jeff Doyle and Jennifer DeHaven Carroll (Pearson)

DNS and BIND by Cricket Liu and Paul Albitz (O’Reilly)

BGP by Iljitsch van Beijnum (O’Reilly)

HTTP: The Definitive Guide by David Gourley, Brian Totty, Marjorie Sayer, Anshu Aggarwal, and Sailu Reddy (O’Reilly)

Implementing SSL / TLS Using Cryptography and PKI by Joshua Davies (Wiley)

Nginx HTTP Server by Martin Fjordvald and Clement Nedelcu (Packt)

sendmail by Bryan Costales, Claus Assmann, George Jansen, and Gregory Neil Shapiro (O’Reilly)

Programming Internet Email by David Wood (O’Reilly)

Computer and Information Security Handbook by John R. Vacca (Elsevier)

Modern software development

The line-by-line act of writing software is quite different from the team-by-team process of developing, testing, integrating, and deploying it. A few key approaches, tools, and roles are described here, including, for obvious reasons, unpacking Git itself.

Working in Public: The Making and Maintenance of Open Source Software by Nadia Eghbal (Stripe Press)

The Manager’s Path by Camille Fournier (O’Reilly)

Learning Agile by Andrew Stellman and Jennifer Greene (O’Reilly)

Pro Git by Scott Chacon and Ben Straub (Apress)

Professional Git by Brent Laster (Wiley)

Software Testing by Paul C. Jorgensen (CRC Press)

Agile Testing: A Practical Guide for Testers and Agile Teams by Lisa Crispin and Janet Gregory (Addison Wesley)

Refactoring by Martin Fowler with Kent Beck (Addison Wesley)

Patterns of Enterprise Application Architecture by Martin Fowler with Dave Rice, Matthew Foemmel, Edward Hiatt, Robert Mee, and Randy Stafford (Addison Wesley)

Effective DevOps by Jennifer Davis and Ryn Daniels (O’Reilly)

Accelerate: The Science of Lean Software and DevOps by Nicole Forsgren, Jez Humble, and Gene Kim (IT Revolution)

Continuous Delivery by Jez Humble and Dave Farley (Addison Wesley)

The Phoenix Project by Gene Kim, Kevin Behr, and George Spafford (IT Revolution Press)

DevOps Handbook: How to Create World Class Agility, Reliability, & Security in Technology Organizations by Gene Kim, Jez Humble, Patrick Debois, and John Willis (IT Revolution)

Site Reliability Engineering edited by Betsy Beyer, Chris Jone, Jennifer Petoff & Niall Richard Murphy (O’Reilly)

Designing Distributed Systems by Brendan Burns (O’Reilly)

Modern software applications

It would take a tech forest, not a tree, to even try to describe all of the uses to which software is put. However, some depictions of how individual projects and libraries are knit together into powerful networked applications seem valuable, as do overviews of e.g. virtualization, “big data” software, and especially machine learning.

Web development:

Web Development with Node and Express by Ethan Brown (O’Reilly)

Flask Web Development by Miguel Grinberg (O’Reilly)

RESTful Web APIs by Leonard Richardson, Mike Amundsen, Sam Ruby (O’Reilly)

Ruby on Rails Tutorial by Michael Hartl (Pearson)

Scientific computing:

Mastering Scientific Computing with R by Paul Gerrard and Radia M. Johnson (Packt)

Computer Vision and Image Processing by Linda Shapiro (Elsevier)

Image Processing: Principles and Applications by Tinku Acharya and Ajoy K. Ray (Wiley) –

Machine learning:

Deep Learning from Scratch by Seth Weidman (O’Reilly)

Fundamentals of Deep Learning by Nikhil Buduma and Nicholas Locascio (O’Reilly)

Practical Convolutional Neural Networks by Mohit Sewak, Md. Rezaul Karim, and Pradeep Pujari (Packt)

Generative Deep Learning by David Foster (O’Reilly)

Strengthening Deep Neural Networks by Katy Warr (O’Reilly)

Virtualization and containers:

Virtualization Essentials by Matthew Portnoy (Wiley)

Mastering Docker by Scott Gallagher (Packt)

Kubernetes: Up and Running by Brendan Burns, Joe Beda, and Kelsey Hightower (O’Reilly)

Spark: The Definitive Guide by Bill Chambers, Matei Zaharia (O’Reilly)

Pervasive Computing by Ciprian Dobre and Fatos Xhafa (Elsevier)

Reliability and scaling:

Database Reliability Engineering by Laine Campbell and Charity Majors (O’Reilly)

The Art of Capacity Planning by Arun Kejariwal and John Allspaw (O’Reilly)

Economics and sociotechnical systems:

The Economics of Information Technology by Hal Varian, Joseph Farrell and Carl Shapiro (Cambridge University Press)

Hardware architectures

The spectrum of complexity from a single analog transistor to a modern multicore processor is, needless to say, difficult to summarize. This section tries to describe the basics of digital circuits and microprocessors, along with a few key references, before going on to hardware architectures and hardware design languages.

Fundamental electronics and elements:

TTL Cookbook

CMOS Cookbook by Don Lancaster and Howard M. Berlin (Elsevier)

Foundations of Analog and Digital Electronic Circuits by Anant Agarwal and Jeffrey Lang (Elsevier)

Electronics Simplified by Ian Sinclair (Elsevier)

Complete Digital Design: A Comprehensive Guide to Digital Electronics and Computer System Architecture by Mark Balch (Wiley) –

Microprocessor Design by Grant McFarland (McGraw-Hill) –

Programming Microcontrollers in C by Ted VanSickle (Elsevier)

Introduction to Microprocessors and Microcontrollers by John Crisp (Elsevier)

Modern hardware architecture:

Fundamentals of Computer Organization and Architecture by Mostafa Abd-El-Barr and Hesham El-Rewini (Wiley) –

Computer Architecture by John L. Hennessy and David A. Patterson (Elsevier)

Microprocessor Architecture by Jean-Loup Baer (Cambridge) –

Hardware and Computer Organization by Arnold Ss. Berger (Elsevier)

Digital Design and Computer Architecture by Sarah Harris and David Harris (Elsevier)

Introduction to Parallel Processing by Behrooz Parhami (Springer)

HDLs:

IEEE Standard VHDL Language Reference Manual (IEEE)

IEEE Standard for SystemVerilog (IEEE)

VHDL 101 by William Kafig (Elsevier)

Example architecture details:

See MIPS Run, 2nd Edition by Dominic Sweetman (Elsevier)

Arduino: A Technical Reference by J. M. Hughes (O’Reilly)

RISC-V Specifications by the RISC-V International Technical Committee

ARM Architecture Reference Manual by ARM

Intel® 64 and IA-32 Architectures Software Developer’s Manuals by Intel

GPUs and FPGAs:

Reconfigurable Computing by Scott Hauck and André DeHon (Elsevier)

Learning FPGAs by Justin Rajewski (O’Reilly) –

Advanced FPGA Design by Steve Kitts (Wiley) –

Multicore and GPU Programming by Gerassimos Barlas (Elsevier)

Hardware development

Here we try to provide some examples and explanations of hardware development beyond that of computer I/O devices; imaging, drones, and robots.

Digital Computer Electronics by Albert P. Malvino and Jerald A Brown (Career Education)

Computer Time Travel by JS Walker (Oldfangled)

High Performance Silicon Imaging by Daniel Durini (Elsevier)

Getting Started With Drones by Terry Kilby and Belinda Kilby (Make)

Theory, Design, and Applications of Unmanned Aerial Vehicles by A.R. Jha (CRC Press)

Modern Robotics by Kevin Lynch and Frank Park (Cambridge University Press)

How to Make a Robot by Gordon McComb (Make)

Mastering ROS for Robotics Programming by Lentin Joseph (Packt)

Electronic components, transistors, semiconductor manufacturing

A more low-level analysis of fundamental electronic components and transistor-based circuitry, along with textbooks describing lithography and chip manufacturing. Obviously such manufacturing is essentially impossible to recreate from scratch (Moore’s lesser-known second law described how fabricator costs increase just as chip density decreases) but these works could conceivably be of historical or even practical significance.

Encyclopedia of Electronic Components by Charles Platt and Fredrik Jansson (Make)

Understanding Modern Transistors and Diodes by David L. Pulfrey (Cambridge)

Principles of Transistor Circuits by S W Amos and Mike James (Elsevier)

System Integration: From Transistor Design to Large Scale Integrated Circuits by Kurt Hoffman (Wiley)

Fundamental Principles of Optical Lithography by Chris Mack (Wiley)

Principles of Lithography by Harry J,. Levinson (SPIE)

Demystifying Chipmaking by Richard F. Yanda, Michael Heynes, and Anne Miller (Elsevier)

Fundamentals of Semiconductor Manufacturing by Gary S. May and Simon M. Sze (Wiley)

Fundamentals of Semiconductor Manufacturing and Process Control by Gary S. May and Costas J. Spanos (Wiley)

Semiconductor Manufacturing Handbook (both editions) by Hwaiyu Geng (McGraw-Hill)

Radio, television, and other industrial technologies

Descriptions of other technologies which have helped to define our era, ranging from electrical power grids to radio and television.

Practical Transformer Handbook by Irving Gottleib (Elsevier)

Electric Power Distribution Handbook by Thomas Allen Short (CRC) –

Inductors and Transformers for Power Electronics by Vencislav Cekov Valchev, Alex Van den Bossche (CRC)

Basic Radio by Ian Poole (Elsevier)

Radio-Frequency Electronics by Jon B Hagen (Cambridge) –

Newnes Guide to Radio and Communications Technology by Ian Poole (Elsevier)

Newnes Guide to Television and Video Technology by K. F. Ibrahim (Elsevier)

Satellite Communications Systems by Gerard Maral, Michel Bousquet, Zhili Sun (Wiley) –

Pre-industrial technologies

These are the works which address the “romantic catastrophe” image of the archive’s inheritors, who seek to reboot all of modern technological civilization from pre-industrial scratch. Such possible futures do exist, although they seem unlikely; furthermore, it seems possible that these works might help fill in gaps which arise in historical knowledge.

The Knowledge by Lewis Dartnell (Penguin)

The Story Of Writing by Andrew Robinson (Thames & Hudson)

Caveman Chemistry by Kevin Dunn (Universal)

The Backyard Blacksmith by Lorelei Sims (Crestine)

Practical Blacksmithing by M.T. Richardson (Weathervane)

Seeds: The Definitive Guide by Peter Loewer (Macmillan General Reference)

Materials Handbook by George S. Brady Henry R. Clauser, and John A. Vaccari (McGraw-Hill)

Build Your Own Metal Working Shop From Scrap Series by David Gingery (David Gingery)

Practical Self-Sufficiency by Dick and James Strawbridge (DK)

Where There Is No Doctor by David Werner (Hesperian)

Where There Is No Dentist by Murray Dickson (Hesperian)

Foxfire Books 1-6 by Eliot Wigginton (Anchor)

Oxford Handbook of Infectious Diseases and Microbiology by Estée Török, Ed Moran, and Fiona Cooke (OUP)

Women and Technology

We believe women’s unique role in founding and shaping computing and technology deserves its own section. Women’s erasure in the field has meant there aren’t always primary sources from the original time of contribution (like books authored by women), and historians are finding that women’s contributions have been quite significant. Including this section allows us to appropriately acknowledge the work. Special thanks to Mar Hicks; many references in this section borrow from their Women in Computing course at the University of Wisconsin-Madison. We also include literature discussing tech’s negative impact on women.

Ada’s Algorithm: How Lord Byron’s Daughter Ada Lovelace Launched the Digital Age by James Essinger (Melville House)

Programmed Inequality: How Britain Discarded Women Technologists and Lost Its Edge in Computing by Mar Hicks (MIT Press)

Saving Bletchley Park by Sue Black with Stevyn Colgan (Random House UK)

Pioneer Programmer: Jean Jennings Bartik and the Computer that Changed the World by Jean Jennings Bartik with editors Jon T. Rickman and Kim D. Todd (Truman University Press)

Hidden Figures: The True Story of Four Black Women and the Space Race by Margot Lee Shetterly (William Morrow Paperbacks)

Grace Hopper and the Invention of the Information Age by Kurt Beyer (MIT Press)

Gender Codes: Why Women are Leaving Computing by Thomas J. Misa (Wiley)

Languages

Our professional linguistic advice was that, contrary to popular belief, the drift of English syntax and grammar has slowed dramatically, and barring some massive catastrophe it’s very likely that English will both survive and be largely recognizable a thousand years from now. To hedge our bets, though, we have included a “Rosetta” guide translated into Arabic, Hindi, Spanish, and Chinese in every reel of the Archive, along with the Universal Declaration of Human Rights in every available written language, and will similarly include dictionaries and a couple of linguistic works here.

The Oxford Dictionary of English (OUP)

Oxford Picture Dictionary English-Arabic Edition (OUP)

Oxford Picture Dictionary English-Chinese Edition (OUP)

Oxford Picture Dictionary English-Spanish Edition (OUP)

The History Of Languages: An Introduction by Tore Janson (OUP)

Linguistic Diversity by Daniel Nettle (OUP)

Fiction, culture, and history

It is our belief that culture is often best expressed through great works of fiction. As such, we sought to assemble a list of notable literary works (including / beginning with a few books of nonfiction) to convey, on a human level, the history and culture of our time. These are:

Chapman’s Homer

The Complete Works of William Shakespeare

The Tale of Genji by Murasaki Shikibu

Crime and Punishment by Fyodor Dostoevsky

I, Claudius by Robert Graves

Star Maker by Olaf Stapledon

Things Fall Apart by Chinua Achebe (Penguin)

Brave New World by Aldous Huxley (Harper Perennial)

1984 by George Orwell (Signet Classics)

A Canticle For Leibowitz by Walter M. Miller Jr. (Spectra)

The Cairo Trilogy by Naguib Mahfouz (Everyman’s)

Cyberiad by Stanislaw Lem (Mariner)

The Moon is a Harsh Mistress by Robert Heinlein (Ace)

The Dispossessed by Ursula K. Le Guin (HarperCollins)

One Hundred Years Of Solitude by Gabriel García Márquez (Harper Perennial)

Parable of the Sower by Octavia Butler (Grand Central)

Wild Swans by Jung Chang (Simon & Schuster)

The Conservationist by Nadine Gordimer (Penguin)

The Book of the New Sun by Gene Wolfe (Tor)

Midnight’s Children by Salman Rushdie (Random House)

The Famished Road by Ben Okri (Anchor)

Beloved by Toni Morrison (Vintage)

A Place Of Greater Safety by Hilary Mantel (Holt)

Foucault’s Pendulum by Umberto Eco (Mariner)

Alias Grace by Margaret Atwood (Anchor)

Blood Meridian by Cormac McCarthy (Vintage)

The Stone Diaries by Carol Shields (Penguin)

The God of Small Things by Arundhati Roy (Random House)

The Wind-Up Bird Chronicle by Haruki Murakami (Vintage)

Anathem by Neal Stephenson (William Morrow)

2666 by Roberto Bolaño (Picador)

The Goldfinch by Donna Tartt (Little, Brown)

The Peripheral by William Gibson (Berkley)

A Short History of Nearly Everything by Bill Bryson (Broadway)

The Visual Display of Quantitative Information by Edward Tufte (Graphics Press)

Extraordinary Popular Delusions and the Madness Of Crowds by Charles Mackay

Cultural context

This section of the Tech Tree is intended to convey both useful practical information from our culture, and a depiction of what it was like at the time the archive was written. It will consist of encoded data, rather than imaged pages, largely because its centerpiece, a snapshot of Wikipedia, is far too large for the latter format.

Wikipedia, while not without its flaws and omissions, is the most readily available proxy for “a written summary of our world.” Note that this section is by no means intended as a complete depiction of humanity today: as our advisors stressed, this era is likely to be the best documented in all of human history, and such information is very unlikely to be difficult to find. Rather, it is intended as a convenience to indicate to the archive’s inheritors the specific, particular context of the era in which the archive was written.

This section will also include several other data sources recommended by GitHub’s community:

  • Wiktionary
  • Wikispecies
  • The File Formats Archive

The GitHub Arctic Code Vault

As the Tech Tree is a companion piece to the GitHub Arctic Code Vault, it will contain an index with the name, brief description, and film reel number for all of the GitHub repositories stored in the Arctic Code Vault, i.e. every active public GitHub repo as of 02/02/2020.

This index will also highlight the 15,000 GitHub repositories which are the most-starred or most-depended-on at the time the archive was written. (These are also the repositories which will be stored in the two-reel “greatest hits” subsets of the archive, to be kept with partners such as Oxford’s Bodleian Library and others.)

It is worth noting that every individual reel of the Arctic Code Vault also has its own index itemizing its contents, along with all of the instructions and information required to decode the information stored in that reel. This master index will be a superset of all of those indexes, to serve as a backup and a convenience for the archive’s inheritors.

Among large numbers of Chinese cultural relics, Sanxingdui is considered one of those with the greatest historical and scientific significance.

Bronze Wares

Masks are an important part of bronze ware. They include man-face masks and vertical-eyed masks with a pair of post-shaped bulging eyes and a pair of fully expanded ears. On their foreheads, a kui-dragon (a special shape) crown was castled. The largest one of the vertical-eyed masks is 65 cm high and 138 cm wide. It is really the King of all masks in the world. It is considered a combination of gods and a human being; this was regarded as the idol of the ancient Shu people.

Animal-face masks are another kind of special structure, with nine types altogether. Animal-face masks have Kui-dragon ears, open mouths and grinning teeth, and look like neither a human being nor any known animal. They were considered a kind of god by ancient people.

The 50 bronze images from the two pits are the nucleus of bronze ware. The faces are almost the same: all with sword-shaped eyebrows, chestnut eyes, towering noses and open mouths; but the hairstyles are different from each other. Some busts are bald, while others wear a crown; some have hair coiled up and some wear hair clasps; but all are lively. So many bronzes are sure to be a collection of worshiped images, representing people of imperial or leading groups. They reflect the character of the ancient Shu society in which gods and humans were considered to be connected each other, and also politics and religion.

The bronze animal sculptures of dragons, snakes, tigers, birds, chicks, are vivid. They reflect the ancient Shu people’s ideology that all things have spirits and show their sincerity to gods. Among them, the sincerity to birds is the core. Birds, such as Canchong, Yufu, Duyu, etc, are the names of several ancient Shu dynasties. Birds were also regarded as the symbol of the sun.

Bronze zun and bronze lei (a special drinking vessel) are the biggest of the bronze wares. In ancient times, Zun and lei were used for wine.

The jade wares include tablets, bi (a jade ring), yuan (a jade ring with a large hole), zhong (a jade ware), and daggers, axes, chisels, axes, knives, swords etc. The guard of honor used many models of tools and weapons. Most of them are jade ceremonial utensils. The jade wares reflect the high artistic level of that time.

The bronze sculptures are unique among Chinese relics. Among them, the large standing man sculpture was called the “head of the wizards”.

Bronze Man

It weighs 180 kg. It was composed of two parts: the square base is 90 cm high, the figure 172 cm.

The image wears a tubular crown. There are bracelets round the bare feet. There is a rectangular hole in the back of head. The edges of the crown have animal designs. The image wears three pieces of clothing on which are patterns of dragons, birds and worms. The belt is an imperial symbol. The encircling hands are extremely exaggerated.

The standing man represents such figures as a king and wizard. In ancient people’s minds, he is a combination of god, wizard, and king.

Bronze Vertical Mask

The face of the bronze vertical-eyed mask appears curried, and the section appears U-shaped. It has bushy eyebrows and large eyes, the brow tips rise upward. The eyes are crossed and the eyeballs are extremely exaggerated, bulging forward like a round-post; the muscle was pulled out and attached to the eyebrow like a circle. The eyeballs are hollow. It has square-shaped ears; the upper part expands outward like peaches. The nose is short, and the mouth is large and deep. The mouth corners are lifted upward, as if smiling. There is a square hole in the forehead. The bronze vertical eyed mask the biggest among all the Sanxingdui masks, being 65 cm high and 138 cm wide.

Bronze Scared Tree

The whole height of the sacred tree is 395 cm with nine branches on the trunk. There were three kinds of fruits on every branch, including peaches. The sacred tree in Sanxingdui symbolizes Fushang and Ruomu, which are considered to be connected with the Heaven and the Earth.

Jade Wares

There is a tablet among the unearthed jades from No.2 pit that is 54.5 cm long. It is the most representative cultural object in the Sanxingdui jade wares. Its chief value is that there is full design on it.

Its two sides have the same figure designs, a symmetrical arrangement. Two designs are almost the same, except the lower one is a little short and there were only two figures on it.

Each design is made up of five pictures: in the lower picture, there are two hills and some cloud-air-designs with circles in their centers. They may be the symbol of the sun. There are some unexplained objects like winding hooks between the hills. There is an ivory tablet on each outer edge of the two hills. The teeth-shaped edges are very clear. In the second picture, there are three figures bending down, with vault-like hats. On the hat there is one pot-design. There are two interlined ear ornaments. The figures wear a skirt without sleeves, the two hands encircled, which is taken as a special gesture. The third picture is the geometrical-shaped design. In the fourth picture there are two hills similar to the ones in the first one below. There are some designs like boats between hills. Outside the hills, it seems that a man makes a fist with a thumb pressing against the bend of the hill. In the top picture, there were three figures, whose feet present a special character (two figures stand below). The upper one wears a crown with a pot-design. There are some bell-like ear ornaments. Again, the two make a strange gesture, which is the same as the figure at the bottom.

The design is rarely seen, very precious and full of puzzles. For example: what is the relationship between the bending-down man in the lower picture and the standing man above? Perhaps the lower one is the earth, while the upper is heaven, or the sacrificial relationship.

Gold Wares

Gold Scepter

Gold objects have a special position in the collections of Sanxingdui cultural relics. Among them, gold-scepters and bronze images with gold masks are the most significant ones. They include men wearing gold masks. Besides, there are gold tigers, leaves, belts, tablets, and blocks.

The scepter is 142 cm long and the diameter is 2.3 cm. It weighs 46.3 gm. A strip of gold was beaten first, then wrapped around a wooden stick, and then the gold scepter was made. When it was unearthed, their remained some carbonized wood pits. The most precious point is there are some sculptural designs on the top, which are 46 cm long and include three Groups. On this group near the end, if closed, there are two images that are symmetrical and wear fire-tooth crowns, with triangular eardrums, showing pleasant smiles. The designs of the next two groups are the same. There are two birds in the opposite direction below, two fish back to back above. At the necks of the birds and the heads of the fish, there are arrow-like objects. Someone suggests an arrow shot both the birds and the fish, while others argue that is a spike-shaped object, and then inferred that there was rice planting in agriculture at that time. In the design, the images, fish and birds are closely connected. What did this mean? No one knows. Although some scholars made some interpretation, it isn’t perfect. The designs on the scepter are also a big puzzle among the many puzzles of Sanxingdui.

  • “But I deal with this by meditating and by understanding I’ve been put on the planet to serve humanity. I have to remind myself to live simply and not overindulge, which is a constant battle in a material world.” -Sandra Cisneros, 1954.
  • “There are two ways to be rich: One is by acquiring much, and the other is by desiring little.” -Jackie French Koller, 1948.
  • “Simplicity involves unburdening your life, and living more lightly with fewer distractions that interfere with a high quality life, as defined uniquely by each individual.” -Linda Breen Pierce, 1947.
  • “One of the advantages of being born in an affluent society is that if one has any intelligence at all, one will realize that having more and more won’t solve the problem, and happiness does not lie in possessions, or even relationships: The answer lies within ourselves. If we can’t find peace and happiness there, it’s not going to come from the outside.” -Tenzin Palmo, 1943.
  • “The intention of voluntary simplicity is not to dogmatically live with less. It’s a more demanding intention of living with balance. This is a middle way that moves between the extremes of poverty and indulgence.” -Duane Elgin, 1940s.
  • “We really must understand that the lust for affluence in contemporary society is psychotic. It is psychotic because it has completely lost touch with reality. We crave things we neither need nor enjoy.” -Richard Foster, 1940s.
  • “The trouble with simple living is that, though it can be joyful, rich, and creative, it isn’t simple.” -Doris Janzen Longacre, 1940.
  • “Any half-awake materialist well knows – that which you hold holds you.”Tom Robbins, 1936.
  • “The simplest things are often the truest.” -Richard Bach, 1936.
  • “Our souls are not hungry for fame, comfort, wealth, or power. Our souls are hungry for meaning, for the sense that we have figured out how to live so that our lives matter.” -Harold Kushner, 1935.
  • “If one’s life is simple, contentment has to come. Simplicity is extremely important for happiness. Having few desires, feeling satisfied with what you have, is very vital: satisfaction with just enough food, clothing, and shelter to protect yourself from the elements.” -The Dalai Lama, 1935.
  • “Smile, breathe and go slowly.” -Thich Nhat Hanh, 1926.
  • “The consumption society has made us feel that happiness lies in having things, and has failed to teach us the happiness of not having things.” -Elise Boulding, 1920.
  • “You have succeeded in life when all you really want is only what you really need.” -Vernon Howard, 1918.
  • “Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius – and a lot of courage – to move in the opposite direction.” -E.F. Schumacher, 1911.
  • “Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” -Antoine de Saint-Exupery, 1900.
  • “Reduce the complexity of life by eliminating the needless wants of life, and the labors of life reduce themselves.” -Edwin Way Teale, 1899.
  • “Besides the noble art of getting things done, there is the noble art of leaving things undone. The wisdom of life consists in the elimination of non-essentials.” -Lin Yutang, 1895.
  • Mies Van Der Rohe. Less is more.” -Mies Van Der Rohe, 1886.
  • “Make things as simple as possible but no simpler.” -Albert Einstein, 1879.
  • “Too many people spend money they haven’t earned, to buy things they don’t want, to impress people they don’t like.” -Will Rogers, 1879.
  • “Simplicity is an acquired taste. Mankind, left free, instinctively complicates life.” Katharine Fullerton Gerould, 1879.
  • “One can furnish a room very luxuriously by taking out furniture rather than putting it in.” -Francis Jourdain, 1876.
  • “It is preoccupation with possession, more than anything else, that prevents men from living freely and nobly.” -Bertrand Russell, 1872.
  • “We go on multiplying our conveniences only to multiply our cares. We increase our possessions only to the enlargement of our anxieties.” -Anna C. Brackett, 1836.
  • “Have nothing in your homes that you do not know to be useful or believe to be beautiful.” -William Morris, 1834.
  • “You say, ‘If I had a little more, I should be very satisfied.’ You make a mistake. If you are not content with what you have, you would not be satisfied if it were doubled.” -Charles Spurgeon, 1834.
  • “There is no greatness where there is not simplicity, goodness, and truth.” -Leo Tolstoy, 1828.
  • “Cultivate poverty like a garden herb, like sage. Do not trouble yourself much to get new things, whether clothes or friends. Things do not change, we change. Sell your clothes and keep your thoughts.” -Henry David Thoreau, 1817.
  • “Be generous in prosperity, and thankful in adversity. Be worthy of the trust of thy neighbor, and look upon him with a bright and friendly face. Be a treasure to the poor, an admonisher to the rich, an answerer of the cry of the needy, a preserver of the sanctity of thy pledge.” -Baha’u’llah, 1817.
  • “It is the heart that makes a man rich. He is rich according to what he is, not according to what he has.” -Henry David Beecher, 1813.
  • “Simplicity is the most difficult thing to secure in this world; it is the last limit experience and the last effort of genius.” -George Sand, 1804.
  • “My riches consist, not in the extent of my possessions, but in the fewness of my wants.” -Joseph Brotherton, 1783.
  • “Live simply so that others may simply live.” -Elizabeth Ann Seton, 1774.
  • “Real happiness is cheap enough, yet how dearly we pay for its counterfeit.” -Hosea Ballou, 1771.
  • “With a few flowers in my garden, half a dozen pictures and some books, I live without envy.” -Lope de Vega, 1562.
  • “*Simplicity is the ultimate sophistication.”* -Leonardo da Vinci, 1452.
  • “Purity and simplicity are the two wings with which man soars above the earth and all temporary nature.” -Thomas a Kempis, 1380.
  • “If your mind isn’t clouded by unnecessary things, then this is the best season of your life.” -Wu-Men, 864.
  • “Poverty is my pride.” -Muhammed, 570.
  • “If one had taken what is necessary to cover one’s needs and had left the rest to those who are in need, no one would be rich, no one would be poor, no one would be in need.” -Saint Basil, 330.
  • “Contentment comes not so much from great wealth as from few wants.” -Epictetus, 55.
  • “It is not the man who has too little, but the man who craves more, that is poor.” -Seneca, 1 BCE.
  • “Sell your possessions and give to the poor.” -Jesus Christ, 5 BCE.
  • “The man who has two tunics is to share with him who has none; and he who has food is to do likewise.” -John the Baptist, 6 BCE.
  • “Nothing is enough for the man to whom enough is too little.” -Epicurus, 341 BCE.
  • “The secret of happiness, you see, is not found in seeking more, but in developing the capacity to enjoy less.” -Socrates, 469 BCE.
  • “Be content with what you have; rejoice in the way things are. When you realize there is nothing lacking, the whole world belongs to you.” -Lao Tzu, 500 BCE.
  • “Life is really simple, but we insist on making it complicated.” -Confucious, 551 BCE.
  • “To live a pure unselfish life, one must count nothing as one’s own in the midst of abundance.” -Buddha, 563 BCE.

MUSLIM CULTURE
1. One God: ‘Allah’; Prayer Customs at Home, during Travel, and In the Mosque Muslims believe that the Creator of all mankind is one God (called ‘Allah’ in Arabic), and that the God of all Abrahamic religions is the same God. Muslims believe Islam is the continuation and culmination of Judaism and Christianity.Muslims are required to pray five times a day. Men are encouraged to pray in the mosques instead of at home to strengthen community bonds, while women are granted a special concession if they wish to pray at home due to their family responsibilities. Depending on lifestyle and work schedules, many Muslims pray at home, in the workplace, or during travel in the car, the train or an airplane whenever the time for either one of the five daily prayers approaches. It is not uncommon for Muslims to keep a prayer mat in their cars and simply stop anywhere at the time of prayer and spread it out on the ground, offering their prayers toward the direction of Ka’aba, the center and starting point of Islam, in Mecca.While reciting the prayer, full meditative concentration is required. Talking or paying attention to surroundings is not permissible, except in emergencies. Old people or those of ill-health may recite prayer while sitting or lying in bed, as comfortable. Friday is a special day of prayer when most Muslims prefer to go to the mosque. Inside the mosques, since Muslims pray on rugs and prostrate before God, it is considered disrespectful to step on prayer mats with shoes. In Western cultures where non-Muslim guests are invited for interfaith gatherings, a complete wall-to-wall rug is spread over the prayer mats so that guests do not have to take their shoes off. Inside homes, there is no specific designated place of worship, but prayer mats may be spread in any room at the time of prayer.
2. Role of Imam, or Prayer Leader The traditional role of an Imam (Arabic word, meaning, ‘stand in front of’) is to lead a group in prayer, guide in the matters of worship, and perform services like marriage or funeral rites etc. They may also provide spiritual support or guidance. There is no clergy in Islam, and an Imam can be any Muslim community member in good standing, hired or selected for this purpose. He is chosen for his deep spiritual understanding and knowledge of the various Islamic disciplines. Muslims believe in a direct spiritual connection with God; hence, the Imam is not considered an intercessor. In the absence of a designated Imam, any member (usually an elder) present at the time of prayer can step up to fill the position of Imam.
3. Prayer protocol and Pets Cleanliness is considered of utmost importance, especially as prerequisite to prayer, for one’s person and the place of prayer. Animal saliva is considered unclean and must be washed off before prayer can be offered. To avoid having to wash excessively, many Muslims generally do not keep pets, including dogs, inside their homes and avoid contact with them beyond patting. In Western cultures, where many pet-owners consider them part of the family, the avoidance may be mistaken for dislike and cause offense where none is intended.
4. Drawing visual depictions of prophets This is a sensitive issue for Muslims and has been the cause of much controversy. It is considered highly disrespectful to draw a visual representation of any prophet. The historical perspective is to discourage idol worshipping in accordance with the concept of monotheism, which is a central tenet of Islam. Written accounts of the prophets’ physical appearance are, however, present in historical texts. Muslims acknowledge the status of both, the Bible and Torah, as Holy Scriptures sent by God to the Prophets Jesus and Moses. In the Islamic faith, Muslims accord the same respect and consideration to all prophets of God as they give to Prophet Muhammad.
5. Dietary Restrictions Pork and its products and alcoholic drink are haram (forbidden) in Islam. Muslims eat halal meat which is meat slaughtered in the Islamic way and blessed with the name of God. Use of alcohol in products for medicinal purposes is allowed.
6.Celebrations: Eid-ui-Fitr and Eid-ul-Adha The Islamic calendar is based on the lunar cycle, which is 11 days shorter than the Solar calendar. Hence, Islamic holidays shift each year. Muslims believe the Quran was revealed to Prophet Muhammad in the month of Ramadan, which is the ninth month of Islamic calendar. During fasting, Muslims refrain from consuming food and drinking liquids from dawn until sunset. They are encouraged to practice reflection, forgiveness and charity during this month, and capitalize on it for the rest of the year. Eid-ul-Fitr marks the end of fasting. The greeting of “Eid Mubarak” (Happy Eid) is used to wish Muslims well on this day. *Eid al-Adha** begins on the 10th day of Dhu’l-Hijja, the 12th month of the Islamic calendar. Lasting for three days, it occurs at the conclusion of the annual *Haj, or pilgrimage to Mecca. Eid-ul-Adha is an occasion to commemorate Abraham’s obedience to God. The Islamic New Year begins with the month of Muharram, 20 days after Haj. Unlike most Western holidays, the welcoming of the new year is a quiet event marked with prayer.
7. Wearing the Hijab Islam encourages Muslims to dress modestly. Muslim women from diverse backgrounds observe modesty in their own way and that explains the variation in their dress codes across cultures. Wearing the Hijab (head covering) is a mark of devotion and commitment to Faith. In some countries, wearing the Hijab is obligatory, but in others (as in the United States) it is considered a personal choice. It is not a symbol of repression and separation. In either case, it would be disrespectful to criticize women for wearing it.
8. Politeness and Respect for Elders Muslims are very particular about showing respect for elders. Many gestures that might seem okay for young adults to indulge in are considered rude in the presence of elders, e.g. one may beckon a peer with the index finger, but never an older person. Such expressions from small children are not considered offensive. A certain amount of decorum is always expected, e.g. calling elders by their first name or their last name without the prefix of Mr., Mrs., or Miss is considered very rude. it is best to start with more formality and let them clarify how they want to be addressed. Second generations living in Western societies may be more flexible on this. Standing up to greet guests, especially elders, opening doors for them, giving one’s seat up for them, not interrupting and maintaining a generally respectful demeanor towards them is highly appreciated.Voicing open and strong opposition to the views of elders is perceived as an insult. However, polite insertion of views is appreciated.
9. Emergency Treatment Generally, a doctor or paramedic of the same gender is preferred by most Muslims, especially Muslim women. However, in emergency situations to save a life or prevent injury, it is acceptable to be treated and handled by the opposite gender. The presence of a family member who might want to be present is also appreciated.
10. Shaking Hands In Western societies where this is a common form of greeting, a handshake with a person of the opposite gender is widely practiced. However, some Muslims prefer not to do so. To avoid hurt American feelings should a handshake not be returned (and to avoid discomfort on the part of Muslim women when they try to avoid this), it is preferable to wait to see if they offer their hand and then follow accordingly, or greet with a slight nod of the head accompanied by a smile.
11. Social Distance “Social distance” is especially important to maintain when interacting with Muslim women. The difference may be obvious when dealing with a woman from a more conservative group. If she takes a small step backward it is indicative that, though interested in the conversation, she is uncomfortable and it would be kind to respect her space.
12. Eye Contact Maintaining eye contact when talking might make Muslim women and the elderly uncomfortable. A better way is to look into their eyes briefly every so often and then look away (perhaps at the collar, or an imaginary spot on the side) at the same time tilting the head and/or nodding now and then to show interest in the conversation. Most of these people now living in Western societies are used to this and don’t mind direct eye contact at all. Children in some Muslim and Asian societies are taught not to stare into the eyes of elders, or authority figures, as it is considered disrespectful or challenging. In Western cultures, this expression of respect may be erroneously interpreted as a sign of guilt.
13. Sitting with soles of feet or shoes facing a person sitting close by/accidental touching of feet This may be considered impolite in some Muslim countries. Touching of feet to another’s body is considered disrespectful and, if that happens, an apology is expected and appreciated.
14. Removing shoes when entering the home Removing shoes when entering a Muslim house is appreciated for cleanliness reasons, especially when shoes are muddy. Many Muslims keep separate shoes for wearing indoors. It is best to ask hosts if they would like the guests to remove their shoes, and follow accordingly. Emergency responders are not expected to follow any such custom.
15. The “Namaste” greeting common to some Indian-Hindu groups This slight bow (palms together slightly under the chin) is not acknowledged in a similar manner by most Muslims, which may cause some unpleasantness to Hindus and to Japanese people who use a bow in greeting. No offense is meant to cultures which practice this form of greeting; it is only so because of the Islamic belief that Muslims only bow to God.
16. Passing an item to someone with the left hand This may be considered rude by some Muslims. It is also regarded as an impolite gesture in Italy.

Today, we will look at one of my favourite mental models called - The Inversion principle. Mental models are a set of simple, abstract but useful principles that help us make sense of the world around us.

I came across the Inversion principle on the Farnam Street blog. It is also a favourite of Charlie Munger (Vice Chairman of Berkshire Hathaway and Warren Buffets mate) - “…it is in the nature of things that many hard problems are best solved when they are addressed backward”, he pontificates.

In another interview, he recalls how, as an Air Force meteorologist during World War II, instead of asking what would keep pilots safe, he asked what would kill them and focussed all his efforts “on trying to predict snow, ice or fog—and to ignore pretty much everything else.”.

I could write a book on all the other cool stuff Charlie Munger has said so I’ll stop here.

What is it?

Inversion is based on the maxim - invert, always, invert. It is about considering an inverse (usually a negative) outcome and listing the reasons for these. It forces you to either stop doing certain things or avoid the actions that lead to the negative outcomes. It gives us new possibilities and capabilities that we might not have considered otherwise.

The algorithm for inversion is very simple:

  • Define the problem - what is it that you’re trying to achieve?

  • Invert it - what would guarantee the failure to achieve this outcome?

  • Finally, consider solutions to avoid this failure

    This is very abstract and vague, so let’s look at a few examples:

  1. Instead of asking how do we increase the adoption of a product or feature? You could instead consider - what are some of things preventing adoption? This would lead to a list like this that you could potentially fix:
    Slow load time i.e. performance issues
    Not enough marketing, or marketing on the platform, or to the wrong audience
    The user guide instructions are not clear … you get the idea

  2. Following the inversion principle it is better to ask what is preventing me from reading all the unread books on my kindle/bookshelf, instead of asking how can i read more books? Possible reasons and something you could give up:

  • I spend a lot of time on social media
  • I watch too many shows on Netflix or Disney +
  • Spend a lot of time on reddit or browsing hacker news
  1. Instead of wondering how do I always choose a winning stock during investing, ask yourself how do you prevent losses in the long term?
  • Am I diversifying enough to prevent long term loss?

  • Am I investing based on sound principles, or am I speculating?

    Hopefully this gives you a flavour of how powerful inversion is as a mental model. I should add that it is NOT a silver bullet and it won’t always give you concrete answers, but it will act as a forcing function to avoid obvious lapses in judgment. I’ll leave you with another one of my favourite quotes about Inversion from Charlie.

“It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.”

Strike that. I drove a rally car once, which is a totally different thing. In the course of my job, I’ve sampled many rally cars, in both amateur and professional spec, including three amateur cars that I helped build. All were loud, obnoxious machines with roll cages, five-point harnesses, and long-travel suspension. At least two and a half of them (you do the math on which) were total pieces of shit. And all had one thing in common.

Under normal circumstances, they appeared to be driven by lunatics.

Rally drivers race on closed-off public roads. They run against the clock, one car at a time, on dirt, pavement, and anything in between. They run in all weather, in virtually every country on the planet. The sport is a glorious, lovely thing, all noise and violence and sliding sideways between trees at 100 mph. There is real, palpable risk and skill on display. You stand next to a closed-off rally road—they’re called “stages”—during competition, and it’s instantly obvious why people do this sort of thing.

Reason 1: They enjoy getting off the couch and having adventures.
Reason 2: They are moderately attracted to risk.
Reason 3: They think BASE jumping is for narcotized children.

It’s also clear why the pastime’s apex, the FIA-sanctioned World Rally Championship, is one of the most-watched sporting events in the world.

If you are not now interested, feel free to leave the room. Or perhaps continue rotting in your casket/urn/final resting place, because you are most likely dead.

Several years ago, I embarked upon a brief career as an amateur stage-rally co-driver. That’s the guy or gal who rides shotgun, wearing full fire gear and a helmet, and helps the driver go quickly by shouting out instructions. Co-driving taught me much about the sport’s process and genius—these people are some of the most talented hotshots on the planet, and rally is a highly organized matrix of processes. Their driving is less insanity and more a highly developed skill. Call it part art, part science, part unknowable risk. It’s like doing calculus while simultaneously painting a still life and falling out of a plane.

In a nutshell, a rally driver’s magic is rooted in four things:

  1. Setting Up the Car
    Race vehicles are purpose-built to go racing, to be durable and capable in their given environment, withstanding stresses that would rip most road cars to pieces. Road-racing cars are set up for intense forces under braking and cornering. Motocross bikes are designed to take the pounding and lumps of a dirt course without slowing down. And oval machines, like NASCAR stockers or Indy Cars, have to push through the air at ridiculous velocity, but also be ready to hit things at that velocity while maintaining a semblance of driver safety. So they’re generally overbuilt.

Rally cars do all of that at once. They are also—and this is key—set up to rotate at the drop of a hat.

“Rally driving is the most exciting form of motorsport because it encompasses the best aspects of all the others,” says Wyatt Knox, special projects director for New Hampshire’s world-renowned Team O’Neil Rally School. Knox is an accomplished rally driver, a part-time co-driver, a great teacher, and just the best kind of multi-talented New England woodland weirdo you’d ever want to meet. (Disclosure: He’s also a friend.)

“To succeed,” he says, “you need to be a drag racer, a mechanic, an ice racer, a tarmac ace, a navigation expert, a drifter, an endurance racer, and more … all at the same time.”

Note that he said “drifter.” Rally cars are constantly sliding, partly because that gives the driver the most options: When a car is sliding in rally, it’s generally tail-first, a condition known as oversteer. (Most people know this from snow driving, where most rear-drive street cars will “fishtail” when given too much gas.) Rally cars have suspensions set up to oversteer at the slightest provocation. You turn in sharply, they oversteer. You trail the brakes into a corner, they oversteer. You give them too much throttle in the right conditions, they oversteer.

Oversteer is inherently unstable, and can lead to a spin. It’s yaw, and yaw in a four-wheeled vehicle generally means the driver has applied a control input—brakes, throttle, steering, a combination of all three—that unsettled the car and broke traction. But it also means a ready change in direction—the instability that comes from a car already up and sliding can be used to quickly change heading. (Remember how that fishtailing car would swing its nose around suddenly if you didn’t use a careful right foot?)

And that hints at the crucial part of rally: You don’t always know what’s around the next bend, so you have to be able to adjust the car on the fly. Contrast that with a road-racing car, which doesn’t necessarily have an adjustable attitude while sliding at the limit.

Your grandmother would hop into a pro-grade rally car, drive it down a dirt road, and end up off a cliff in the first five minutes. Other people do astonishing things. Hooray for God-given talent.

  1. The Co-Driver
    A rally driver’s job would be possible without a co-driver, but it wouldn’t be anywhere near as compelling. Or, in most circumstances, as fast.

“The co-driver is essentially just telling the driver what is coming up so that he can plan what to do with the car,” Knox says. “A rally typically covers over a hundred miles of road, often without ever seeing the same turn twice. The co-driver tells the driver about the turns coming up, as well as the lengths of straights, any crests, surface changes, jumps, etc. That information comes from a reconnaissance run, or ‘recce,’ made by teams just before the race, when they have their only chance to see the route.”

The co-driver calls these notes ahead of time, depending on speed and the driver’s preference. Some drivers want as much information as they can hold in their heads, as far as five turns ahead. Others want as little information as necessary, in just enough time to react.

  1. The Pace Notes
    Pace notes are a spoken code. The co-driver narrates them during a rally as the driver runs flat-out down what is usually a tight and winding single-lane road. These notes let the driver haul into blind corners at speed, knowing roughly how fast to go and how much to pivot the car.

Call this the rally analogue for going to a permanent race track you’ve seen before. Most road-racing drivers are faster on a given race track once they’ve got a few laps there. This is the equivalent, only these guys have never seen or can’t possibly remember the whole race course, and they might never see it again.

Pace notes can be hard to follow if you don’t know the language, but they’re based in logic, and they make sense. Corner types are numbered to correspond with their radius, landscape features are called out. (A typical line might be “Right 5 tightens over crest,” for example, which means a relatively fast right that decreases in radius over a hill.)

Notes remove an element of the unpredictable. Only you can’t predict everything in rally, because you’re not on a track, you’re in the real world. Real roads have animals, changing pavement and weather, and boulders in the road that weren’t there a week ago.

Which brings us to …

  1. Reacting to the Unknown
    At its core, this sport is about the unknown. You don’t know what’s in that forest, but you have to race through it. You don’t know what the weather’s going to be—nasty mud? blinding snow? draining heat?—but you have to get through it. All of this, at the limit of your talent and the car’s ability to go quickly. The car will break. You will race over long days and into the night. You will come close to losing your mind from stress and exertion. And many, many things will go wrong, because when you are hauling ass through the woods in the middle of nowhere, there is a lot to go wrong.

A short list of the things I’ve seen, in less than a decade of spectating and participating: Wheels fall off when you hit things. Windshields come apart when you hit things. (I once saw a team use its car’s rear window, removed and duct-taped into place up front, as a new windshield.) Anything on a car that can blow up, blows up, and you don’t always have the right stuff to fix it. Drivers get sick, co-drivers get sick. Cars roll over and fall off cliffs. They end up in trees.

“The key to rally driving is simply humility and perseverance,” Knox says, “hopefully coupled with a sense of humor. It’s a long, very complex road to the top and there will be many failures along the way. The key is to learn as much as possible from each and always keep moving forward.

“The best rally drivers are also typically very humble. They’ll usually blame themselves for any troubles or failures at a race, because that’s how they learn and improve. Drivers who blame their equipment, the conditions, or simple circumstance for their problems usually don’t last long or make it far.”

And nine times out of ten, the teams, the mechanics, and the drivers find a way to go on. Which is part of what makes the sport great.

Like any sport, rally is easier to love when you know what’s going on. The above is a good primer, and should help you start watching. If you want more, hit up a school, read, or simply go watch a local NASA, Rally America, or WRC event.

“The easiest way to get involved is to show up and spectate an event.” Knox says. “Or better yet, volunteer to help the organizers. A rally takes hundreds of volunteers to function, doing everything from HAM radio operation to running time controls and supervising spectator locations. Volunteering also gets you access to a lot of places and people that you’d never get just spectating, and it’s typically a lot of fun.”

“Rally driving simply changes your entire outlook on life. After sliding through the forest sideways at 90 mph, you realize that most day-to-day problems are pretty insignificant.”

Shamanism is an ancient healing tradition and moreover, a way of life. It is a way to connect with nature and all of creation. The word shaman originates from the Tungus tribe in Siberia. Anthropologists coined this term and have used it to refer to the spiritual and ceremonial leaders among indigenous cultures worldwide. The word shamanism can be used to describe the ancient spiritual practices of these indigenous cultures. Clearly, the countless similarities between various ancient traditions played a role in the continual generalization of the word.

Over the past few decades, the term “shamanism” has been popularized throughout the western world, especially in new-age circles. Today, it can be difficult to distinguish between traditional forms of shamanism and modernized, often esoteric practices that utilize the term.

One could view shamanism as the universal spiritual wisdom inherent to all indigenous tribes. As all ancient spiritual practices are rooted in nature, shamanism is the method by which we as human beings can strengthen that natural connection.

Aspects of Shamanism

CONNECTION WITH NATURE

Shamanism stems from nature itself. Shamanic practices tap into the power Mother Earth has to offer and the ancient indigenous teachings are derived from the simple truths of nature.

HEALING OF SELF & COMMUNITY

Shamanism is not only concerned with the health of the individual, but also with the health of the entire community. This includes all people, plants, animals, and all of life.

SPIRITUAL PRACTICE

Daily spiritual practice allows for the continued and exponential growth of both body and soul. The goal is to create internal and external harmony with all creation.

PILGRIMAGE TO SACRED PLACES

Learning to approach and connect with sacred places is an intrinsic part of shamanism. By honoring natural wonders such as rivers, lakes, mountains, and caves, we reawaken and invigorate the energy of the land.

VISION & CEREMONY

Ceremonies to honor the spirits of nature help promote harmony and balance. The path of shamanism never ends. It is believed that so long as these ceremonies continue, the world will go on.

Tengrism in Mongolia

The traditional religion of Mongolia is Tengrism, a shamanic faith shared by a number of Eurasian steppe cultures. Its major deity, Tengri of the eternal blue sky, is a supreme creator being who sees and understands all things. Lesser gods like the Earth-Mother, Eje, and ancestral spirits are also worshipped. Tengrism emphasizes spiritual harmony with the universe and nature. People find happiness and meaning by leading virtuous lives within their society. In the same way, a virtuous ruler passes prosperity on to his subjects. Shamans work and negotiate with the gods and spirits, though regular people may conduct sacred rites as well.

Religious Diversity in the Mongol Empire

Genghis Khan practiced Tengrism and attributed his success to Tengri, but the empire he founded was known for its religious tolerance. The shamanic faith did not need to convert other populations, and it taught that any righteous person could find favor in Tengri. The Mongols’ respect for the customs of conquered nations allowed them to rule over Muslim, Buddhist, Christian, Taoist, Jewish, and Confucian subjects, among others. Citizens of all faiths served in Mongol courts as advisers and bureaucrats. Emperors like Kublai Khan even hosted debates between scholars from different religions. Kublai was known to admire Buddhism, Confucianism, and Christianity in particular. In 1295, the leader of the Middle Eastern Ilkhanate, Mahmud Gazan, converted to Islam. Buddhism and Islam proved especially popular throughout the empire.

Buddhism and Modern Worship in Mongolia

Mongol rule in China ended in 1368 with the fall of the Yuan dynasty. In time, Mongolia itself came under the control of Qing China. During this period, Tibetan Buddhism became its most popular religion. Buddhist monasteries, once nomadic as well, grew to be the major power centers of Mongolia. They offered education and community in Mongolian society, and about a third of men joined their ranks as lamas. Tibetan Buddhism shrank during the socialist era, sometimes by violent repression. Buddhism has seen a recent surge in popularity in Mongolia today, alongside a new appreciation for its ancestral shamanism.

According to the CIA World Factbook, the current religious makeup of Mongolia is as follows:

  • Buddhist: 53%
  • None: 38.6%
  • Muslim: 3%
  • Shamanist: 2.9%
  • Christian: 2.2%
  • Other: 0.4%

Culture

Mongolia is well known for its nomadic traditions. The nomadic way of lifestyle is still practiced today in the rural areas of the country. Nomads follow a seasonal routine raising and breeding the five main types of stock – goat, sheep, cattle (including yaks), camel and horse, migrating from place to place following the most favorable pastures and campsites.

Language

The Mongolian language is the official language of Mongolia. It belongs to the Ural-Altaic language family, which includes Kazakh, Turkish, Korean and Finnish. Today more than 10 million people speak Mongolian. They live in Mongolia, Buriat republic of Russian federation, Inner Mongolia in China, Shingjan and Gansu regions of China, Tibet and even a few number of people living in the State of New Jersey in the USA . In Mongolia, the Khalkha dialect, written in Cyrillic, is predominant. The classical Mongolian script, also known as Uyghurjin, was the first writing system created specifically for the Mongolian language, and was the most successful until the introduction of Cyrillic in 1946.

Religion

Shamanism – Shamanism goes back in Mongolian history long before Chinggis Khan’s time, but it was Chinggis Khan that made it into such a fundamental part of the Mongolian tradition. At that time the Mongolians were worshipped “Hoh Tenger” (blue skies). According to this belief the skies are the father, and the earth is the mother of all beings in the universe. As a civilization totally dependent on the forces of nature, the Mongolians worshipped the various elements of nature, praying to their ancestors who have transformed into mythical spiritual animals to provide them with good weather, health and success. Though oppressed during communist time, Shamanism is still practiced in Mongolia, and people who seek help will approach a Shaman for a blessing or cure and even to get hints about their future.

Buddhism- Mongolians have followed Buddhism since the 16th century, when the Mongolian king, Altan Khan, was converted by Tibetan lamas. Mongolians follow Tibetan Buddhist teachings, (also called Lamaism), the body of religious Buddhist doctrine and institutions characteristic of Tibet and the Himalayan region. Today, Mongolia still embraces its Buddhist heritage. Monasteries are being restored, and are once again crowded with worshippers. The Dalai Lama is an enormously popular figure and has visited the country several times. For many Mongolians, the practice of Buddhism is flavored with traces of Shamanism, an even more ancient spirituality.

Other Religions- Mongolia also has a small Muslim community — about 6 per cent of the population. These are mostly ethnic Kazakhs living in the far west of the country.

Food

The foundation of the traditional Mongolian food is based on the products of the animal nomadic herders raise in the Mongolian steppes – meat and milk. Those simple materials are processed with a variety of methods, and combined with vegetables and flour.

Arts

Mongolian traditional music composes a wide range of instruments and uses for the human voice found almost nowhere else. For instance, the Mongol Khoomii may be fascinating for foreigners. It is a musical, which can be delivered with a help of a guttural voice and specific way of breathing. One tone comes out as a whistle-like sound, the result of the locked breath in the chest being forced out through the throat in a specific way, while a lower tone sounds as a base.

The unique traditional singing style is known as Urtiin duu or long songs. It is one of the most ancient genres of Mongolian musical art, a professional classical art of the 13th century. Urtiin duu involves extraordinarily complicated, drawn-out vocal sounds. It has philosophical style, evocative of vast, wide spaces and it demands great skill and talent from the singers in their breathing abilities and guttural singing techniques.

Another popular form of art in Mongolia is the playing of the Morin Khuur, the Horse Headed Fiddle. It is used in Khoomii singing and in other forms of traditional music. The origins of the Morin Khuur lie with the Chinese two-stringed fiddle. With its typical horse-head carving crowning the instrument, it plays a major part in all classic Mongolian forms of music. To this day people of all ages play it.

Sports

National sports include wrestling, archery and horseracing and they are known as the Three Games of Men, rooted in the mists of antiquity and continue to be very popular among the Mongolians today. Every year in mid-July, communities across Mongolia celebrate these sports. This celebration is the Naadam Festival.

Wrestling is the most popular of all Mongolian sports and is the highlight of the Naadam. Historians claim that Mongol-style wrestling originated some seven thousand years ago. Hundreds of wrestlers from different cities and aimags take part in the national wrestling competition. There are no weight categories or age limits. Each wrestler has his own attendant herald. The aim of the sport is to knock one’s opponent off balance and throw him down, making him touch the ground with his elbow and knee.

Horseracing is an important part of the Naadam Festival. The riders are aged from five to 12. Mongolian kids are excellent riders, for both girls and boys have been riding since infancy. As a popular saying goes, “The nomad is born in the saddle”. Competitions are not held on special racetracks, but right across the steppe, where riders are confronted with various obstacles like rivers, ravines and hills. The distance varies according to the ages of horses, between 15 and 35 km.

Information about archery can be found in literary and historical documents of the 13th century Mongolia and even before. According to historians, archery contests began in the 11th century. The Mongols use a compound bow, built up of layers of horn, sinew, bark and wood.

Beginning the 20th century modem types of sport started to develop in Mongolia. After the Mongolian Sports Committee was founded in 1947 voluntary sports clubs and associations were formed. These organizations played a tangible role in promoting sport as a mass movement. Nowadays, track and field sports, football, basketball, volleyball, skating, skiing, motorcycle racing, mountain climbing, chess and other sports are widely played in Mongolia.

Traditional housing – The Mongolian Ger

With a history of over a thousand years, this portable dwelling made of wood lashed together with leather thongs and covered with felt is the home of the Mongolian nomads. Easy to erect and dismantle, the ger, its furnishings, and the stove inside can be carried by just three camels, or wagons pulled by yaks making it ideal for the nomadic way of life.

The average ger is small but spacious enough to provide adequate living space for a family, is wind resistant, and has good ventilation. Gers are constructed of a latticed wood structure covered with layers of felt and canvas. The felt helps the ger retain heat and the canvas over it sheds rain.

National Holidays

Naadam Festival- probably the most well-known Mongolian Festival. Originating from the beginning of the previous century, the festival consists of the “three manly sports”- wrestling, horse riding and archery, accompanies by festivities, dancing, singing and socializing. The event is celebrated all over Mongolia, with the main events taking place in the capital.

Tsagaan Sar- the “white moon” celebrations are celebrated at the Lunar New Year. It is a tradition to climb a sacred mountain on the first day of the New Year, to welcome the first morning of the New Year on the mountain peak. On the three following days, Mongolians visit their relatives and friends, and enjoy traditional food and drink.