 The world has changed. I feel it in the water. I feel it in the earth. I smell it in the air. Or maybe that's just the brisket. The landscape of programming languages that we work in is changing. It's changing really fast all of a sudden. There are all these awesome new programming languages that are very viable, very interesting. People are doing real production work with them. And in addition, there are a lot of older, more established programming languages that are getting new energy, new features, new interest. Chances are a lot of you in this room spend at least part of your time working in at least one of these languages. Raise your hand if you do. Yeah, pretty much everyone. Some of you may spend most or all of your time in one of these non-Ruby languages. It's an exciting time in language development. Now earlier, Dave was talking about the 14-year cycle. And I got to thinking about that. And I realized it was 14 years ago that I started playing with all these exciting new languages like Perl and Tickle and Python and Ruby. I realized they weren't all brand new at that point. But they were all kind of young. And that was the year that I really started getting into Ruby. So yeah, I think there's something to that 14-year number. Now, we saw this earlier at Brandon's talk. Of course, programming languages don't, as a rule, they don't die. But Ruby will fade. Like elves going in the west, it's sun will set. I think it's entirely possible that I'm talking to you now at sort of the beginning of the end of the Ruby boom. Maybe not, but I think it's possible. There will be new language booms. There will be new communities. All of you will go on to be part of these new and exciting things. And I feel like now is a good time to reflect a little bit on what we will bring with us into these new communities. What will be the legacy of Ruby when we look back, when historians of programming look back and say, this is what Ruby introduced to the stream of programming languages? And what do we think it should be now that we, right now when we still have a bit of an opportunity to decide what that legacy should be? Well, I have some ideas on this. But before we talk about what the legacy should be, what we can make it be, I think we need to understand the origins of Ruby. And I think a lot of you are probably familiar with the facts of the case. Ruby was created by Maths in Japan in 1993. But I'm talking more about the spiritual origins of Ruby. Because you see, there is a conflict in progress in our industry, an ongoing battle for the hearts and minds of programmers. In his book, Object Thinking, David West posits that there is a fundamental schism in the programming industry between two schools of thought. On the one hand, there is the formalist school. And on the other hand, there is what West calls the hermeneutic school. In this talk, I will also refer to the second one as the informal school of thought. Formalism is part of a family of philosophies that include rationalism, determinism, mechanism. These are philosophies espoused by people like Descartes, Hobbes, and Leibniz. David West says central to this paradigm are notions of centralized control, hierarchy, predictability, and provability. In our field, our industry has its roots in formal thought. We have our roots in disciplines like mathematics and electrical engineering. These are very formalized disciplines. And many of the movements that have gone through our field over the years have stemmed from a desire to make ours a more deterministic, a more formal discipline. Here's David West talking about formalism. As a formalist, the computer scientist expects order and logic. The goodness of a program is directly proportional to the degree to which it can be formally described and formally manipulated. Proof of correctness for a piece of software is the ultimate objective. All that is bad in software arises from deviations from formal descriptions. Art has no place in a program. Art is nothing more than a formalism that has yet to be discovered and explicated. So what is the alternative to this point of view? West says it's the hermeneutic perspective. Now, hermeneutic is kind of a funny word. You might not be familiar with it. At its core, it refers to the study of the meanings of texts. If you've ever hung out with theologians, you might have heard this word before, because theologians are very concerned with drawing meaning for modern audiences out of archaic texts in ancient languages. But hermeneutics can also refer to a school of philosophy. A school that believes that meaning is not some objectively pre-existing ideal, some platonic ideal that we discover in the world, but rather meaning is something that humans create in the world. A hermeneuticist believes that there are no unambiguous meanings. Meaning depends on the people involved. It is something that is negotiated between writer and reader, between speaker and listener. It is that common ground that forms in our minds between these people. So what is the hermeneutic view of software development? Well, this view says that the meaning of our software design is inextricably linked to the people who worked on that design. What this means is that you can't take a UML diagram and toss it over the wall to the coders and expect them to come up with a piece of software that you intended, because the meaning of that diagram is tied up in the shared context and perspectives of the people who drew it. David West again. The hermeneutic conception of the natural world claims a fundamental non-determinism. Hermeneuticists assert that the world is more usefully thought of as self-organizing, adaptive, and evolutionary with emergent properties. Our understanding of the world, and hence the nature of systems we build to interact with the world, is characterized by multiple perspectives and constantly changing interpretation. Software development is neither a scientific nor an engineering task. It is an act of reality construction that is political and artistic. What? There's some challenging concepts in there. What is this business of reality construction? Well, it turns out that much of the reality that we take for granted is, in fact, a mental construction. And this might sound like some sort of new-age claptrap, but bear with me here, because there's a lot of solid science at the basis of this. Let's start out at a very basic level. Let's start out with something that we all depend on every day. Vision is one of the senses that most of us depend on every day to tell us what is real. As you are watching me right now, your eyes are in constant motion. They may be moving from me to the screen. They may be moving down to a laptop in your lap. The technical term for these motions is saccades. And they are very fast. They're little darting motions. So what with your eyes constantly moving around like this, you might expect to constantly be seeing motion blur all the time, but you don't. Why not? Well, it turns out that your brain suppresses the data from your optic nerve during the saccade. It starts at the beginning of the saccade, and then it turns it back on at the end of the saccade. So in effect, your brain is constantly editing out moments of time. But if that's the case, then you might expect to constantly be seeing flashes of black as your brain edits these moments out. But you don't. Why not? Well, it's because it turns out not only does your brain edit out these saccades, it also edits out any evidence that it ever did any editing in the first place. Basically, what it does is it takes a snapshot from the beginning or the end of the saccade, and it fills in the space with that. If you've ever glanced over at a clock and it seemed like the second hand took a little too long for the first tick, that's evidence of this reality editing in action. It's called the stopped clock illusion. So I quote this as just one little example of many I could tell you. One little example of how even our most fundamental senses that we depend on to mediate between our brains and the world around us are not as objective as we like to think they are. Now let's jump up to a much, much higher level of abstraction. I want you to think of a friend of yours. I want you to think about the friendship between you. What color is that friendship? How many inches high is it? These are not things you can answer because that friendship is not something that exists in objective reality. The Zen Buddhist might say that it is empty of independent existence. Now don't get me wrong. Your friendship with that person is very real, but it is a shared construction of reality between yourself and your friend and the people who know the both of you. And these shared constructions of reality make up the very fabric of our lives. Here's another popular shared construction of reality, money. I think we probably all know here that money has no intrinsic value. The only reason money has value to us is that we all agree that it has value. It is a shared construction. And many of the realities, maybe most of the realities that we commonly model in our software are these shared constructions, particularly the kind of software that we use Ruby to build, e-commerce software, enterprise software, social software. We model things like money. We model things like corporate departments. If Bob moves from accounting to auditing, but he keeps the same desk, there's no objective change there. It's just that everybody agrees that Bob, including Bob himself, hopefully agrees that he's now in auditing. But we still enter that into a system as a reality. Political boundaries. When we were kids, we all thought you could tell what country we were in because obviously some countries are yellow and some countries are purple and some countries are green. But then we looked at the photos from space and realized that those lines aren't actually there. Political boundaries that we often record in our software are nothing but shared constructions of reality. There's something that we all agree exist most of the time. I'd like you to join me, if you will, in a little conspiracy theory. Imagine that the world is controlled by secret societies. And these societies have conspired to brainwash all children in school, to brainwash them, to be unable to see a particular word. It's kind of like a saccade for one word. When their eye falls on that word, they just sort of skip over it. They don't consciously register it. And the word that they've been brainwashed not to be able to see is this one. Now, I've been told that some people have trouble seeing this slide. So for the sake of argument, we're going to say that the word is finored. And not only have all the children been brainwashed to be unable to consciously see this word, but they've been hypnotized such that they've been conditioned that when they see the word, when they unconsciously register the word, they will become uneasy and anxious and unable to think rationally. And then these secret societies have arranged to have this word spread liberally throughout the media. And this keeps everyone in this constant state of anxiety and off balance. And they can't make good decisions. And this is how the secret societies arrange to maintain their hold upon the world. This is a conspiracy theory cooked up by a guy named Robert Anton Wilson, who wrote it in a novel called The Illuminatis Trilogy. And I love this theory because I think it's a great example, it's a great illustration of the way that we often don't notice these shared constructions that make up our reality. Now, in his books, there are sometimes some people who are able to sort of wake up and start consciously seeing these words. And he calls this Seeing the Finards. Here's a guy who saw the Finards one day. This is John Taylor Gatto. He was an award-winning school teacher. He won New York State's Teacher of the Year Award in 1992. That year, he quit. And the next year, he wrote an essay called The Seven Lessons School Teacher about the lessons that every school teacher teaches their students, whether they want to or not, whether they're aware of it or not. Lessons like class position. I teach that you must stay in the class where you belong. Lessons like indifference. When the bell rings, I insist that they stop whatever it is they've been working on and proceed quickly to the next workstation. They must turn on and off like a light switch. The lesson of the bells is that no work is worth finishing, so why care too deeply about anything? And there are five more lessons like this that he lays out. These are lessons that go much deeper than any academic lesson that might be taught in that school room, any history or geography or math, because they're part of the very structure of the education. And as a result, they become part of the unquestioned fabric of reality. They become simply the way things are. When you were a kid, did you ever have grownups tell you, well, that's just the way things are? Did ever piss you off? It seems to me that John Taylor Gatto woke up one day and saw the finards. Now, I've had this experience of seeing the finards a few times in my life. One of the contexts that this has happened to me in relatively recently in the last few years is around the concept that open source software, the tech industry and particularly open source software, is a meritocracy. This is something that I didn't question for years. Obviously, it's a meritocracy. And that's what's so great about it. Why would anybody even question that? The funny thing about this is that when it finally occurred to me, when somebody suggested to me that I do question it, it took like 15 minutes of concentrated thought for the whole concept to just completely fall apart. There's been a lot of good stuff written about this. If you want to read some of it, somebody's put a nice collection together at istechmeritocracy.com. Very convenient. But it boils down pretty simply. It boils down to the fact that the only way OSS, open source software, could be a meritocracy is if you believe that white guys are somehow just magically better at programming for the record they're not. I had my experience, as a white guy, of the tech industry, and I extrapolated that out to be an objective experience of the tech industry. But then I started looking at the experiences of many, many, many women and minorities in the industry. And I realized that what I thought was objectively true, you know, reality, was really just my subjective experience. This is one example of seeing the finards. I have no doubt that there are many, many more finards that I have yet to see. So reality is socially constructed. But what does this have to do with software? Well, I learned object-oriented programming from the formalist school. And there's a good chance that you did as well. How do you know that you learned object-oriented programming from a formalist? Well, did you learn about inheritance before you learned about polymorphism? If this is the order you learn things in, there's a good chance you learned OO from a formalist. This is Alan Kay, not a formalist. Alan Kay, a creator of the small talk language, he is the father of object-oriented programming. He had this to say when talking about his thoughts going into the creation of small talk, which is the language he created to embody object-oriented principles. He said, I thought of objects being like biological cells and or individual computers on a network, only able to communicate with messages. I decided to leave out inheritance as a built-in feature until I understood it better. For Alan Kay, the creator of OO, building the language meant to embody OO, inheritance was a side issue. But the formalist school has always emphasized inheritance. And this is because formalism is greatly concerned with ontology, with neat, comprehensive hierarchies where everything has a place and everything is in its place. And this goes straight back to the Enlightenment philosophers. They were really big on their ontologies. The formalist approach to OO goes something like this, discover the single, objective, unambiguous model of the world, and then capture it in a hierarchy of classes. The trouble is, since we believe that the software models objective reality, if something falls outside the model, then it doesn't exist. Recently, I visited the UK. And in order to enter the country, this is one of the forms that I had to fill out. You'll notice I've highlighted it has a field there for my biological sex. Because obviously, if there's some incident involving me while I'm there, the first thing the authorities are going to need to know is what's in my pants. Honestly, I probably filled out three or four forms like that before I went on that trip. And it's one of many, many similar forms that I filled out in the course of my life. You all have probably filled out thousands of forms like this in your life. And you've probably encoded some fields like this into your programs. Here's an article that came out in the journal Nature towards the beginning of this year called Sex Redefined. It goes over some of the current science and the current understanding of biological sex in organisms. And it goes over some surprising understandings that scientists now have around this. They're basically saying, as the subtitle here says, the idea of two sexes is simplistic. Biologists now think there's a wider spectrum than that. Some of the things that they cite in this article is, depending on how you define it, as many as one in 100 people may have an intersex condition of some kind. You may think of yourself as a man, but still have some female cells running around in your body, or vice versa. They're also finding that biological sex is much more of an ongoing process than something that's statically set than previously understood. One of the researchers that's quoted in this article says, my feeling is that since there is not one biological parameter that takes over every other parameter, at the end of the day, gender identity seems to be the most reasonable parameter. And in other words, if you want to understand whether somebody is male or female, what the science says is your best bet is to ask them. This strict male-female dichotomy is a formalism. And it's a formalism that we've all absorbed over the course of our lives. We've seen thousands of forms like that. And as a result, when somebody says, well, I'm not sure where I fit between those two, or I'm not sure I fit in the one that was assigned to me at birth, we say things like, oh, you're just confused. Even very smart programmers sometimes say things like this. Because that's just the way the world works, right? They're just confused. I mean, we all know that's the way the world works. Well, who says that's the way the world works? Scientists are backing away from this understanding. Who says is forms like this that we see over and over? And they sink into our subconscious. And we don't think about it. And then we build our own apps that have similar forms in them. By the way, if you want to learn more about the effect that schemas can have on applications, and if you have not already, I'm just going to say, if you have not watched this talk by Karina Zona, just watch it. Just do it. The problem with these formalisms is we begin to view the world in terms of the model and the machine. Klaus Peter Lor has a great story that I think illustrates seeing the world in terms of the machine. He says, in order to provoke a statement about the nature and limitations of algorithms, I asked the student, do you know an algorithm for consoling a crying child? To my dismay, the student began talking about actions, like taking a tissue, wiping the child's cheeks, and so on. He had not grasped the essence of the question. This point of view distances us from the social effects of creating software. So what is the alternative? The alternative is this informalist view, this hermeneutic view. And to understand what that view of software looks like, we can turn to some of the exemplars of the informal school, people like Alan Kay, Rebecca Worf-Sbrock, Kent Beck, Sandy Metz. Here's Rebecca Worf-Sbrock. She's one of the great object thinkers. And she has this quote that I just love in her book, Object Design. She says, building an object-oriented application means inventing appropriate machinery. We represent real-world information, processes, interactions, relationships, even errors, by inventing objects that don't exist in the real world. We give life and intelligence to inanimate things. We take difficult to comprehend real-world objects and split them into simpler, more manageable software ones. Our measure of success lies in how clearly we invent a software reality that satisfies our application's requirements, and not in how closely it resembles the real world. We invent a software reality. It's not about finding an objectively true model of the world. Software becomes another venue for us to construct reality, hopefully a reality that empowers us to solve problems in front of us. So we construct reality. And we reflect our constructions of reality down into the software that we build. But software also reflects its realities back up into the lives of real people. This is Kristen Nygard. He's one of the co-inventors of the simula programming language. He says this in reflecting on watching his language go into production use. He says it was evident that the simula-based analyses were going to have a strong influence on the working conditions of the employees, job content, work intensity, and rhythm. Social cooperation patterns were typical examples. The impacts clearly tended to be negative. The impacts clearly tended to be negative. This is one of the inventors of the language. Speaking of negative impacts, Facebook recently got into some trouble for performing some surreptitious experiments on their users. They wanted to see if they could affect people's moods based on the content of their timelines. You know, what do you show? What do you hide? And of course, it works. Of course, you can affect somebody's mood by changing what they see. The only thing surprising about this should be that anybody thinks it's different from what Facebook is doing each and every day. Because the fact is we're confronted by a fire hose of information. And in order to deal with this fire hose, we erect filters in front of us. Facebook is one of these filters. If Facebook wasn't an effective filter, we'd go find another one. The trouble is there is no such thing as a neutral algorithm. Every decision has consequences for a user's mood and worldview. Just how subtle can these effects be? Well, here's an experiment you could try if you wanted. Take a volunteer. Have the volunteer sit down at a work station and take a survey. When they're done taking the survey, have them get up and move on to another station. As they walk to the other station, another person carrying a can of pencils accidentally bumps into them and staggers and the pencils go flying across the floor. Observe your volunteer. Do they stop? Do they bend down to help? How long do they spend helping pick up pencils? Record this information. Now take another volunteer. Go through the same thing all over again. Only this time, somewhere in the background of the room where they're taking that first survey, put a suggestion of money. Maybe there's a computer in the background that has a screensaver with dollar signs floating around. Something subtle. Same thing happens again. They get up. They move on. They run into your stooge. Pencils go flying. Observe what they do. Do they stop? How long do they spend helping? Repeat this over and over until you have a statistically significant data set. This is something that researchers have tried. And what they found is that the subjects who were exposed to the suggestion of money in their environment spent less time helping. This is part of a whole family of experiments that's been tried over and over again. And the results are very consistent. People with money on their minds, even unconsciously, act more selfishly. And there's a whole bunch of different related effects like this. For instance, people who have been unconsciously primed with words relating to death, like grave, are then more likely to agree with conservative political ads. People who have been primed with words relating to old age, like wrinkled, will walk more slowly when they get up to move on to the next station. This has been observed. Now, with these effects in mind, look back at the timeline filtering and the targeted ads that Facebook and Twitter are putting in your streams and tell me that they are not modifying your reality each and every day. By the way, if you want to read much more about these kinds of experiments and effects, I highly recommend this book, Thinking Fast and Slow. I think Paul referenced that earlier. Great book. What's in your hand? These days, chances are it's a phone. A phone is one of the ways in which software is already mediating our day-to-day reality. And this is something that's only going to increase over time. Recently, Microsoft announced a new technology they call HoloLens, which is like an augmented reality system that sort of overlays Microsoft world on top of the physical world. I don't know if Microsoft is going to succeed with this technology, but I think it's almost certain that somebody will. Something like this is going to become part of our daily life. In fact, I think that by the time all my kids are grown up, every waking hour of their lives will be mediated in some form by software. Software will move from being a form of reality construction to being the premier form of reality construction. And this puts us software developers in a uniquely powerful position. In a way, we become almost the priests or shamans of this digital age. Are you prepared for that? Have you done your seminary? And this is kind of scary, because I don't think that a lot of us are prepared for it. I don't think I'm prepared for it. It's scary because software developers, at software developers, we really simplified models that explain everything. I mean, look at Hacker News sometime. What are all the new frameworks and all the new techniques advertised that they will do for you? They're always going to make things simpler. We love simplifications. I don't know if you've seen any of these articles. I've been seeing them floating around on social media about how purebred dogs, show dogs, have evolved over time. It seems that these dogs bred for showing have been held to very formal, very arbitrary ideals of appearance. And as a result, they've developed all kinds of nasty health problems. They have dogs whose brains grow too big for their own skulls. They have rampant hip dysplasia. They have dogs that have trouble mating or giving birth naturally. They have to have cesarean sections. I feel like these purebred dogs are what you get if a formalist bred a dog. These are dogs bred by a formalist. But hey, we're hackers here, right? We are not interested in dog shows. We are interested in much higher brow forms of entertainment. Who here loves Ted Talks? I love Ted Talks. Ted Talks make me feel good. Ted Talks make me feel smart. Ted Talks are talks by very clever people, for very clever people. And I think one of the things that's attractive about a lot of Ted Talks is the way they often set up how one person has discovered a system of the world, or at least a system for one part of the world, that nobody else found. And now they can just pull the right lever and fix that part of the world. Because they're clever. This is Sir Francis Galton. Sir Francis Galton is an interesting character. He's a Victorian progressive. He was a sociologist. He was a psychologist, an anthropologist, an explorer, a geographer, an inventor, a meteorologist. He created the concept of statistical correlation. And he published over 340 books and papers. And I think he would have been a fantastic Ted Talker. Sir Francis Galton was also the founder of Eugenics. Is everybody here familiar with Eugenics? If you need a little bit of a quick review, Eugenics was a very popular movement at the start of the 20th century. It was a movement to improve the human race through measures like segregation and birth control and marriage restrictions and compulsory sterilization, forced abortions, and many other measures. And this wasn't some little obscure movement. This was embraced by countries around the world, including our own. It was embraced by very clever people, very smart people, very progressive people of their time, the hackers and founders of their day. Eugenics, in the Nuremberg trials, Eugenics was also used as a defense by the Nazi war criminals because they said, what we were doing is no different from what all of you were doing. Eugenics is another kind of formalism. A formalism based on unquestioned premises about what makes for a good person, a good human. It seems that being clever is no protection from the failure to question the way things are. And as a matter of fact, sometimes I think that being clever may make us more susceptible to these ways of thinking. Because as very clever people indeed, we tend to assume that we have our bases covered. We tend to assume that we see reality for what it is. We tend to assume that we have already questioned all the premises that need questioning. And this is the part where I give you some examples of modern hackers, clever people with dubious ideas. But I think that kind of misses the point because it's easy to point the finger at other people. It's a lot harder to identify the premises that we have failed to question about our own reality, the things we think are just the way things are. So reality is socially constructed. And we reflect our constructions of reality down into the software that we write. And then software goes and reflects those realities back up into society. So what does this mean for us? It means that we cannot pretend that our philosophy as programmers is disconnected from the impact that our software has on the world. When we write code, we shape the world. And for decades, the dominant philosophy in our industry has been a formalist command and control one, a hubristic paradigm that believes that we can know objective reality and model it in software. So where do we come in? What does this have to do with our legacy as the Ruby community? I feel like Ruby, maybe along with JavaScript, is kind of the heir to the informalist or hermeneutic philosophical lineage in programming languages. In a way, it's almost been an end run around the formalist school. Because Ruby has this small talk lispy soul cloaked in a non-threatening C-ish, Java-ish syntax. It's a very technically informal languages. There are lots of different ways to do things in it. Classes, you can modify them at runtime. They're really just suggestions. Constants are really just suggestions, too. But it's also a very informal community. The Ruby community has been, from the beginning, has been very much steeped in formalist practices, in agile practices, which were very much informalist, at least in their founding. We're a community that values conversation and consensus over top-down architecture. We are a community that values community. That's why we're here. That's why there are so many Ruby conferences. We really value getting together as human beings and relating to other human beings in person. I think there's a case to be made that Ruby is very much a community of amateurs. And I think that this is a very positive thing. In a programming world that pays lip service to OO ideas while still teaching formalist methods, Ruby has kind of been a stubborn island of informalism, whether it knew it or not. When I look at how our industry talks about itself, I see a cult of cleverness forming. There are no lack of people who will be happy to tell you that you're a hacker. You're a maker. You're a disruptor. You are a world changer. And I believe this. I believe you will change the world. As I said, when we write code, we shape the world. But I don't see any particular reason to think that we will necessarily build, create a better world. I don't think that this is something to get all excited about. I don't think it's something to get all psyched up about at the latest corporate-sponsored hackathon. In fact, I hope you are terrified. I hope you are humbled by this realization. Because this is an enormous responsibility. And efforts to shape reality based on formalist, mechanistic, oversimplified models have a history of unintended consequences. And as hackers, we love our simplified models. I do think that there is an opportunity here. I believe that we have the potential to help construct a reality that is affirming and welcoming, a reality that respects human dignity and maximizes choice, a more humane reality. But this is a challenging task for us. It's challenging because it's not a matter of picking the right tools, the right language, or picking the right development process, or choosing the right patterns. If we accept that we reflect our values into our code, whether we want to or not, whether we know it or not, then we can't look into the mirror, or we can't look into the monitor, we have to look into the mirror. We can be mindful of the values that we reflect into our code. If we can approach our craft with humility and an understanding of our limitations, if we can admit that cleverness is no substitute for compassion, if we can acknowledge that we always have a perspective, and it is only one of many perspectives. We are not gods looking down on the system. We're just humans looking out of our own skulls. If we can embrace ambiguity, if we can view our designs as a conversation rather than as a declaration, if we can bring these human values to our code, then I think we stand a chance of bringing soul to software, and of being the soul of our industry. And that is what I hope the legacy of the Ruby community will be. Thank you very much.