Introduction: The Rule of Three
“If a guy tells you how many girls he’s hooked up with, it’s not even close to that. You take that number and divide it by three, then you get the real total. OK, so if Kevin is saying it’s been three girls it’s more like one or none.”
“The rule of three. It’s an exact science. Consistent as gravity.”
I like to organize things in threes.
My tag line is simply a statement of my three favorite hobbies: “light writing, word loving, ￼❤️ coding” (photography, writing, and coding). These three hobbies in turn have aspects that themselves come in threes.
In photography, good visual composition begins with an understanding rule of thirds.
When one wants to emphasize symmetry or convey a sense of stability or tranquilness, the photograph centers around a subject or splits it the composition down the middle to create either balance or either-or contrast.
My cat peering at me creates a frame (the circle of the top of the ladder) within a frame (the rectangle of a photo) that emphasizes symmetry as the subject and the frames all form concentric shapes down the center of the image.
By centering the horizon, this photo conveys the peaceful tranquility of sunrise over the San Francisco skyline.
But often, your goal is not to present stability or symmetry. Instead, one considered the rule of three: placing the subject or other interesting features at or near the intersection of lines (known as the “power points”) placed a third of the way from the edges to make for a more interesting and dynamic visual image.
I like to photograph nature the most. Even though sea level cuts the center of the photograph, the interesting aspects of the waves and the tree sit on the thirds to make the image convey the dynamic struggle of survival on a rocky shore.
Since this macro image needed even more impact, I rotated the photo upside down from how I actually shot it, but that reversal doesn’t change the center of the flower still sitting on an intersection of thirds.
Street photography is the same way, the unbalancing provided by placing the subject on the thirds as she looks out into the rest of the image complements the diagonals of both the umbrella stands and the street’s perspective.
This possibly trite travel photograph of an well-known national monument is made more interesting by the use of high-dynamic range (HDR), the golden hour6, and adherence to the rule of thirds.
Even documentary photos can benefit, as seen in this photo I took at one of my Lunch 2.0‘s in which the subject takes about a third of the image.
Finally, in this wildlife photo, I placed the pelicans at opposite power points (the pair next to one, the other on the other). Of course, I had to choose three pelicans to drive the rule of three home. 😉
Three is the simplest way to divide a composition such that the image tells a story of where something was, where it is now, and where it is going.
Speaking of storytelling and three animals…
In writing, any good story has an “arc” which is just a story in three parts: a beginning, a middle, and an end.
But writing also has its own guideline that is equivalent to the rule of thirds but for words on paper: the rule of three. This states that things described in threes are funnier, more satisfying, and more effective because of the pattern presented by the rhythm of its placement—for instance, in the story of Goldilocks and the three bears, there are three of everything which allows the story to contrast too much, too little and just right.
This book follows that rule of three by organizing itself into the three stages of learning: Shu, Ha, and Ri.7
According to Wikipedia, Shuhari means to “first learn, then detach, and finally transcend.”
The first section of this book concentrates on shu(守) which is composed of the Chinese characters for “house” and “law”. Here we learn and build the fundamentals of coding in the multitude of languages by learning the rules by which they work. In Stephen Covey’s Seven Habits of Highly Effective People, we’ll be in the dependence stage, blindly holding on to what we learn as if they are unbreakable rules. And computers, we will find, are unyielding stickers for the rules at this stage.
In Ha(破), we learn to break the rules, much like breaking a rock.8 The fundamental tool by which learn to we do this is with the design pattern. We will learn what problems design patterns solve, when to use them, and the consequences they entail. Stephen Covey would call this the independence stage, when we detach ourselves from a blind following of tradition and get the ability to solve problems on our own.
By the time we get to Ri(離), we are a bird ready to leave its nest.9 We realize that there are no real rules, so there are no rules to be broken. We will explore Ri mainly through discussions as you will have transcended anything I could teach and are now empowered to forge your own experiences, far beyond what I know.
In the Covey formulation this is interdependence. Covey noted that interdependence and dependence look superficially identical. Similarly, being at the stage where you don’t know any rules, and the one where you know the rules are meaningless sound awfully close. But, just as you can’t be interdependent with others without first having the independence of self, we will have passed through the Ha stage of experience to transcend mere programming rules, practices, patterns and their consequences to use code to express ourselves in novel ways.
Even coding has it’s own rule of three: the three types of coding. But we’ll get into that in the next chapter.
Part I. Shu: Programming, Markup and Operations
This section is dedicated to the reader, learning to write code for the first time, while not hard, is daunting… and rewarding.
Chapter 1. The three types of coding.
We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris.
—Larry Wall, Programming Perl
Just as the creator of the Perl programming language states the three great virtues of a coder, there are even three types of coding: programming, markup, and operations.
Programming gets all the attention in coding. If there is anything “sexy” about coding (there isn’t), it is programming. Because of this, “coding” is often synonymous with “programming” just as a “program” is often synonymous with “code”.
Programming languages are the method by which we design programs in a manner that a computer can interpret, build, and execute. We’ll be using a number of programming languages in our journey, but the most prominent is the PHP programming language. Given that there are better languages for didactic purposes,10 a short discussion of this choice is in order.
This combination of rampant popularity in the real world followed by criminal neglect in the publishing one make it the right choice for a book on learning practical web development. The fact that I happen to be proficient in it, having worked at two of the companies mentioned in the previous paragraph,14 is simply just a coincidence. 😜
So prominent is programming‘s position in the world of coding, I once saw Douglas Rushkoff give a dynamic lecture demanding people learn to program in order to face the opportunities and perils of a computerized world,. It was called “Program or Be Programmed” — a manifesto that is particularly ironic as Rushkoff, himself, is no programmer. He is, however a coder, and the code he uses when writing his books is markup. Markup is the way of annotating content to provide data on top of what is the text. Where programming is the action; markup is the content. Where programming algorithms are the verbs; the content and its markup are the nouns.
The main markup language we’ll be referring to is Hypertext Markup Language or HTML. It’s the code you see when you select “show page source” in your web browser and its markup enables every clickable link, turns bold words bold, tells the browser to drop an image in the right place with the right formatting, and provides so many other things seen and unseen on the web page.
(Even if you used a word processor such as Microsoft Word or Google Docs, you are still coding markup. The undelying markup is there but just abstracted from you in the form of a visual interface. In fact, their underlying markup language, Office Open XML, is directly inspired by HTML.)
The third form of coding is almost invisible because it is the foundation upon which everything rests: that is system administration, or, more generally, operations which are the commands typed into the computer to start up the services and maintain the infrastructure to make a website work.
Such things used to be done in a bespoke manner—much like how you would maintain the applications and organize the files on your personal computer—but now are increasingly automated through various programmable software under the rubric of DevOps, short for development operations. This form of automation makes such actions well-documented, reliable, and repeatable. That becomes very important when a site scales from a single machine to a constellation of many different server groups to form a complex infrastructure.
The main devops tool we’ll be using is Ansible. Ansible isn’t the most popular software and it isn’t necessarily the best, but it is direct and eliminates the need to learn another programming language, substituting instead a much simpler markup language, called YAML (short for “Yet Another Markup Language”). This benefits a programmer like me, since I lack the temperament to be a system administrator as well as the time to debug programs written for it. And yet, Ansible allows for direct solutions similar to the commands one would type in in a bespoke manner, providing the structure needed for programmability and repeatability without adding any unnecessary conceptualization to understand.