 Well, I see that everybody's survived day one of Drupal Khan, and in Chicago we have a name for this particular time slot in a day. It's called dinner. So, you know, I apologize for the fact that you're going to have to delay yours for yet an hour. Yeah, let's see if we... I may end up resorting to carrying one around. I added a couple words to the beginning of my title here. I added the architect in the organism, because I wanted to convey, you know, through this title, a kind of mental image of what we're talking about. And I'm going to be talking about Plato and Aristotle and Drupal, okay? And, you know, I've been a software developer since 1995. I also happen to be a bona fide philosopher. I have multiple degrees in philosophy. I've taught it in universities. And so I'm really excited because this is like the only time in my life I've actually gotten to talk about both the things I'm really interested in. Yet I'm worried that my excitement about it might, you know, turn into long spouts of technical jargon. So I'm going to do my best to kind of explain as I go what I'm talking about. Right now I work for HP. I work in the HP Cloud Group in developer experience. I work on the team that interfaces with people who are going to use the HP Cloud. Yesterday we released the HP Cloud PHP bindings. HP Cloud provides kind of like AWS service with HP OpenStack-based solution. We also released an HP Cloud Drupal module. I'd love to talk to people about that, but not right now, okay? But in order to kind of celebrate the HP, you know, our launching of a couple of products, I thought, hey, I'll give away a couple of t-shirts, okay? So I've got a couple of trivia questions. And if you get the question right, I'll give you a t-shirt, okay? So raise your hand if you know the answer. Question number one, who was Plato's teacher? How about you in the red shirt? So I've got a couple t-shirts up here on the stage. You can come pick it up after. Question number two, who was Aristotle's most famous student? I see you in the white shirt with the beard that's better than mine. You had your hand up as soon as the question popped up. So what is it? Alexander the Great. Very good. I actually thought I might stump some people with that one. You guys are impressive. So Alfred North Whitehead was a philosopher in the last century. And he made this kind of pithy remark at one point that all philosophy can be viewed as a footnote to Plato. And this is interesting because you want to say, oh, come on. But he's actually really on to something here. You know, in Athens during this period of time, there's this kind of explosion of a particular kind of thought that was such a sea change for the way people approached problem solving that it really is true. Even today, you couldn't make it through a philosophy program without talking about Plato and Aristotle. You probably can't make it through a liberal arts program of any sort and probably not even a science program. Which makes me think that maybe Whitehead was perhaps a little myopic. He focused only on philosophy, right? But these thinkers really triggered something that's much broader. And I want to even say today that all of computer science can be viewed. And I mean computer science like the big, broad thing, not the narrow academic study, but the stuff we do every day combined with the academic study. All of this can be viewed as footnotes to Plato and to Aristotle. So does anybody know who the first philosopher ever in history was? Oh, this one I'm surprised about. It was philosopher Raptor, who was known for his short, witty, grammatically incorrect questions. He's also extinct and that really hampers your ability to carry on a tradition. But given that he was unknown virtually until very recently, generally people tend to point to Socrates as the beginning of philosophy. There were of course other philosophers who were before Socrates. And actually I should characterize this as Western philosophy. But Socrates was basically in the fifth century, he's an Athens. He's a very controversial teacher. He's controversial on many different topics, but also because of his teaching style. Because he, you know, in the tradition of the Sophists, he gathers kind of young men and he teaches them on a broad variety of things. But he doesn't necessarily feel compelled to stay within the norm. And so he ruffles a lot of feathers. He's probably best known for the Socratic method. How many people have heard this term, the Socratic method? It means beginning with questions. When you have a complex problem, you state, you know, your kind of basic understanding and then you start asking questions about your basic understanding. And as you go, you kind of hone in on what the true nature of the problem is. And as Socrates, you know, purportedly goes about this, he's engaging with various people, other philosophers, his students, random people on the street. And using the Socratic method to try and understand, right? Sophia, the love for wisdom. Now, really there's not a lot of historical evidence about who Socrates was and what he did. There are only three people from his general lifetime who would have written, who wrote about Socrates. Aristophanes, Xenophon, and Plato, right? And Aristophanes and Xenophon don't have a whole lot of nice stuff to say about Socrates. He actually becomes a comedic character in one of Aristophanes' plays. But Plato writes volumes and volumes about Socrates. However, the Socrates and Plato might have been the historical Socrates or might have been just a character in Plato's dialogue, a vehicle for Plato to explain his philosophy. And scholars can debate endlessly about this. Anyway, ultimately Socrates is sentenced to death. He dies by drinking hemlock because he was convicted of corrupting the youth because he refused to kind of go along with the established norms. He challenged a lot of the power structures of the day. But he's considered, because of this, even in spite of the fact that we don't know a whole lot about him historically, to kind of be the father of Western philosophy. Now, this is Western philosophy as opposed to Eastern philosophy, because it has a profoundly different sort of lineage that does not include Socrates. So I want to make that clear. So Plato is Socrates' student, right? Probably in his mid-20s Socrates dies. Nobody knows how long Plato was a student of Socrates, but Plato was very young when Socrates commits suicide or is, you know, forced to commit suicide. And like Socrates, he's in Athens as he's studying under Socrates. But after this, scholars think that he probably traveled around a bit, possibly as far as the Middle East, and he took in a broad range of influences, and this comes out a lot in his writings. He wrote numerous books. Most of them are in the form of a dialogue where you have Socrates usually as the main character engaging with between two and five or six different characters, all addressing one problem or a small range of problems. Okay, so we're not talking like a treatise. It's all very conversational. Now Plato himself has a very famous student named Aristotle. But Aristotle and Plato, after Aristotle's become sufficiently steeped in philosophy, don't necessarily agree, and so they sort of split up, right? And Aristotle's school stands in some competition with Plato's. Now Aristotle is a very interesting character because he's like this fountain of thought on these broad, broad ranges of topics, right? Of course he's a philosopher. He also worked in natural science, really shaped the way natural science has been done since his time, even today. He contributed to literary theory, probably developed the most formal literary theory system. He wrote the rhetoric, and he also employed this method called the Indoxic Review at the beginning of his books that basically is a form of literary criticism against his contemporaries or evaluating his contemporaries. And of course, like Plato, political science is a big deal to Aristotle, but he considers it very broadly, including probably one of the few really interesting analyses of friendship and what a fundamental relationship that is. And then I wanted to highlight biology which was one of his passions really informs a lot of the other areas because what he sees and why he's credited with kind of contributing to the natural sciences is instead of seeing a phenomenon and trying to explain it by appeal to some kind of abstract cosmic principle, Aristotle looks at things and looks for physical explanations of why they're happening. He starts looking at causes. He has four different kinds of causes that he describes, and he wants to understand what thing causes what other thing to do, what action. He's very interested in the dynamism of the world. Absolutely crucial. And he has a very biological model of this. We've just had like the nine-minute and 25-second introduction to western philosophy, but what does any of this have to do with us? I think this is the most important slide. If I could like carve this on the back of your eyeballs, I would. I think this is an incredibly profound painting. This was done by Raphael probably in the early 1500s, and it's called The School of Athens. Hey, can you see you've got all these people standing around? And then take a look at that archway in the middle. There's a close-up. This summarizes what I'm going to talk about today. You've got two people standing there. On the left, that would be stage right, you have Plato, and on the other side, you have Aristotle. Now, take a look at how Plato is standing there. In one hand, he's got a book. In the other, he's pointing up toward the sky. The book that he's holding is called The Tamaeus. It was one of his dialogues. And this dialogue was what's typically called a cosmology. He was trying to explain the order of the universe, and he was trying to explain this in kind of a combination of a mythology, but grounded in a philosophy. And it's a big vehicle for explaining the platonic view of reality. And he's pointing up. He's pointing upwards because Plato has this kind of sensibility toward the ideal. He thinks that we look at reality and we try to build an abstraction, or try to understand it in a more abstract way, and so we're looking up to try and understand the more pure version of reality. This is going to be a big deal, and I'm going to talk a lot about this. But before going that way, let's talk about Aristotle because he's holding a different book in his hands. It looks like The Ethics. Probably the Nicomachian Ethics, which was a book that he wrote probably for his son that explains not specifically a moral system, but kind of a broad code of how you ought to live in the world. And it too, it's based on this idea of dynamism that I talked about before, this kind of biological understanding of the world, a bunch of things that are moving and working together to create various things. They're always changing, and his ethics becomes to reflect that because it reflects human beings as creatures that change over time, that have the capability of changing, of first learning and then acting on what they've learned. And he's pointing down to the ground. Like his natural science, he wants to look in the world to understand what's going on outward, not upward toward some kind of abstraction. This becomes a very, very fascinating distinction between Plato and Aristotle. And let's start with Plato, and let's look, and we're going to go through a philosophy in order to explain a computer science. There are three words here that I kind of want you to be attuned to as I talk. Forms, perfection, and reality. Now every once in a while, philosophers use words in ways that are unexpected. And so I try to highlight words and provide definitions where I think they might cause confusion. And this one is a good example to start with, ideal. A lot of times when we say ideal, what we intend is perfection, right? But that's not typically what a philosopher, particularly not someone like Plato, meant by the term ideal. It means primarily having to do with an idea or with a mental object. What's a mental object? I mean, phrased briefly, we're talking about an object that does not exist in a physical sense of the word. It exists in a mental sense of the word. Probably the easiest way to describe this is to think about a number. Okay, let's keep it simple. Let's talk about one. There is no one that we see lying around. We might say, well, I've got one of those. Or we might say, here's the digit one. But it's a symbolic representation that points to whatever one actually is. Whatever oneness actually is. That's one example of a mental object, but it's by no means the only. Numbers aren't the only mental objects. And as we see in Plato, there are a whole lot of mental objects. But this does all kind of raise the question, what exactly is an ideal boyfriend or girlfriend? If it's something that's an idea and not a reality. We have a physical manifestation, right? One of Plato's most popular stories is the story of the cave, Plato's cave. This great artist, whoever writes XKCD, once tried to capture this idea. Here you've got an individual calling as some kind of support desk and trying to describe this existential dilemma in which he finds himself. And the support desk person is trying to figure out what he's talking about. And finally she says, I'm sorry, but we can't send a search and rescue team into Plato's cave. We don't solve philosophical problems here. It's interesting for two reasons. First of all, because the problem he describes has nothing to do with Plato's cave. It's actually Descartes' evil deceiver is the root of this kind of problem and became later the brains in a vat problem. Philosophers have fun naming things. But I do want to tell you the story of Plato's cave. So Plato says, here's the story. Imagine you've got these guys who are chained to a wall in a cave. They can't turn their heads. They can't really see anything except the wall opposite them. And somewhere in the cave are torches or something, you know, this flickering source of light. And it casts shadows against this wall. And as other things move in front of the flames, there are shadows cast against the wall. Now these people who have been here for their entire conscious existence know nothing other than the shadows on the wall. And they mistakenly believe that the shadows are what's actually out there. Those are the real things. Now one of the prisoners happens to break free from his chains at some point. And he walks away from his wall and turns the corner and sees the torch. And then he walks out of the cave up above ground and he sees the sun. And he sees flowers and trees and birds and chirping birds. And he realizes that all along he'd been looking at the shadows thinking that those were reality and they're not reality at all. They're the remnants that cast off of what's real. They're a shadow of what's real, quite literally in that case. So he returns to the cave and says, Hey guys, you will not believe this. All our lives we've been staring at the wrong thing. You've got to come with me out here and see reality. And his friends refuse to go. Now Plato I think is describing himself and what he saw as his mission in life. But the question that lies behind this is what is real? Plato is saying you're looking at the wrong thing. That's not real. Now to understand what's motivating Plato and what he thinks is real, you should understand another distinction in Greek philosophy, the distinction between being and becoming. For something to be means that it's in this kind of static, finished and complete state. It's done. If it's changing, it's not done. And it can't be perfect if it's changing because it's moving from one thing to another. So it's neither a perfect one of this nor a perfect one of that. It's something in transition. It's becoming. This is a very important concept to the early Greek philosophers, being and becoming. And Plato is drawing on that distinction throughout his philosophy. And he introduces this term called eidos in Greek. We call it the idea or the forms. You probably have heard people refer to Plato's forms. This is what we're talking about. The forms are what is real to Plato. The forms is what he metaphorically sees when he leaves the cave, what he discovers. They are perfect mental objects that are in this state of being. They don't change. They're already done. They're static and they're perfect. Now the shadow world, as Plato describes it, is the physical world. What he's describing is the shadows on the wall. That's the physical world. That's what we all mistakenly call reality, says Plato. But all it really is are bad copies of the forms. We've got these ideal objects that don't change. And then all the stuff around us that we can see and that we can feel is constantly changing, including us. We're kind of this corrupt amalgamation of the spirit, of the soul, and of a body, says Plato. And the body keeps distracting us from what's real. So if all of our physical reality is just a bad copy, is something that's becoming, what do you do, right? So let me give a little bit of an example before I move on, because I know that what I just said is probably really abstract and I'm actually surprised that nobody threw anything while I was saying that. Did anybody see this chair in DIA? This is called the LSD chair, because it looks like an L and S and a D. I'm sure that's the only reason why. No, Plato would look at this and Plato would say, this is like a corrupt copy of whatever the ideal chair is. Somewhere out there in the non-physical part of the universe, there is the ideal chair. It is the chair, right? All these chairs that are filling the room are nothing but bad copies of that idea of chair that we are aware of the idea, but we just can't quite get it and we can't possibly put it in the physical world because the minute we do that, we're introducing change and it's not the ideal anymore. So we have to begin to find our way back to understanding what the forms are, the kind of true nature of reality. Now this has a very interesting consequence that I want to point out here. So in the Platonic view, what you ought to be doing as the philosopher, your motivation is what is the word eros, love, intense, passionate love of discovering the forms, of discovering reality as it really is. So for Plato, your ideal life ought to be a life of contemplation where you're trying to understand from the world, you're trying to separate the becoming part of the world, the messy part, and understand the actual architecture of the world as forms. Now the funny offshoot of this that Plato acknowledges and makes a pretty big deal of is that on the other hand, from this Sophia toward the forms, this seeking after wisdom, we have the technique, the art in the world, right? We've got art. Art on Plato's account is an attempt to capture the physical world in a medium, which means art is a copy of a copy. And since art can never quite capture the real world, it's a bad copy, and since the physical world is already a bad copy, you've got a bad copy of a bad copy. So Raphael's painting that we looked at would clearly not be something that Plato endorsed. He does not like art. Okay, with that kind of basic idea here, let's move on to programming. I'm going to give you object-oriented programming without a line of code. Okay, this little model is designed to point out what I'm saying here. You have, in object-oriented programming, two big categories of stuff. You've got a class, you've got an object. Now a class is the real stuff of object-oriented programming. The class is the description of the entire encompassed state of an entire encompassed number of states that an object can be in. You define what properties an object can have in its class. You define what it can do in its class. You're setting the boundaries on what counts as that object and what counts as something else. Okay, and it's sort of an ideal state as you look at it, because you're working in your editor, you're looking at the class, and you're trying to describe the ideal boundary, the whole of your object in this class file. Now what happens in an object-oriented programming is an object-oriented program is that when you run it, you begin this process in which the interpreter or the combination of whatever stack you're using, the interpreter, in the case of PHP, is creating a runtime, and then it's creating instances of these objects and manipulating them. Okay? The runtime is the source of all evil in object-oriented programming because it's where the bugs happen. But it's important to notice here that when you instantiate an object in object-oriented programming, you're not exactly getting the class. You're getting this specific state of a thing that has some of the stuff on the class, but not all of it, and it can change over time. And sometimes it can change in bad ways because it's part of the runtime and it's forced to interoperate with other things and sometimes unpredictable ways. So you've got classes, which are Plato's forms, and then what we, you know, the platonic physical reality in programming, this is the objects interacting in runtime as the program executes, okay? That's kind of a very different way of looking at it than seeing a code sample, but it's like uncanny how well this describes what object-oriented programming actually is. So we've got Plato. We're looking up toward a kind of ideal things in their perfect state. Plato is, in that way, an architect, right? The perennial complaint of the physical architect is it looks so great as I design it. The problem is that when you've got to run into it and build the dumb thing and all the load-bearing stuff, you know, the real world spoils the true beauty of architecture, right? Well, if Plato is the architect, then we've got, on the other hand, Aristotle, the biologist. Now, again, I've conveniently tried to distill Aristotle into three words that I want you to watch out for. Three is a nice number, I think. I got it from Kant. Metaphysics, change, and this great Greek word, well, actually, it's kind of an anglicized, formerly Greek word, a hylomorphism, or it would actually, hulomorphism is another pronunciation. You'll hear for that. So keep those three words. Metaphysics, change, hulomorphism. You can see those as we go through here. But where Plato is all about this kind of bifurcation of the objects and the classes, the physical world and the forms, Aristotle's philosophy is all about becoming and all about change and all about dynamism. Those are the things Aristotle wants to explain. Those are the things he wants to talk about when he's talking about what the world is really like. So Aristotle writes this book called The Physics, where he wants to explain what happens when a couple of bodies smash into each other, or what happens when you drop something, or what happens as time elapses. This book, The Physics, is great. He's really happy until he realizes that there's stuff that he should have said at the beginning before he undertook this physics. And so he writes a book called The Metaphysics, which literally means the thing that comes before physics. The life of the philosopher captured there for you in black and white. Aristotle is explaining in the metaphysics how there's this kind of... What exactly is the rudimentary stuff of the universe? What do we mean when we're talking about matter? We're not talking about matters made up of atoms, and atoms are making... That's just shifting the focus of the problem farther and farther down. The eventual problem is what is all this stuff that makes up the universe? Who cares what the smallest component is? What properties does it have? What is this thing we call time? What does it mean? What is this thing we call motion, and what does that mean? He's interested in all these changing things. That's what the metaphysics is all about. So Aristotle begins working through this metaphysical system that permeates his philosophy. Yeah, sorry, that's a little on the vague side, isn't it? And in three words here, I want to kind of give you an overarching view of the kind of gist, the really meaty core of Aristotle's metaphysics. There are three words here, stuff, which in Greek is hule, which, as I understand it, is close to the word for wood in ancient Greek, the kind of basic building block, hule, stuff. Potentiality is the second word, and actuality is the third. So you've got matter, you've got stuff. You can impress your friends and loved ones with this one. Matter and stuff, but it has shape and it has extension, it has qualities, it has all of these things. How does some kind of primal stuff turn into all these things? How is it that an acorn and a tree and a wood statue can all be made of the same stuff, but yet look and have all these very different qualities? And so he explains this by this process of holomorphism, which is the taking of stuff and the combining it with what he calls a form, different from Plato, implementation detail there. You inform the object and inform the matter and it becomes a thing, but it's not just staying that thing, it's changing. And it's changing because it has, any given piece of matter has vast potential to be other things. And so you get this very interesting, very famous, very vexing philosophical model out of Aristotle of potentiality and actuality. And scholars tend to call it the kind of potentiality, actuality, models one and two. There you go, more vague philosophical stuff for you. Now Aristotle is saying here, you've got potential. Any given thing has potential to become other things. But in Aristotle's model, as it becomes something else, it again picks up a new potentiality to be actualized in another way. How is that for vague? Aristotle ends up explaining this as an ethical point and talking about how we as humans, we as children begin to develop virtues, right? Particular behaviors and characterization, hopefully virtues and not vices. But once we've actually got the virtue inside of us, that doesn't mean that we're just automatically virtuous. We just have the potential now to act virtuous. And each time in reality where we follow our virtue, we play out our virtue, we're actualizing the virtue in a different way. This is his two-tier model. It's really easy to see as code, okay? You open up your editor, you've got a blank screen. You have all of this potential. What is it going to become? You code it, and as you finish writing the last line of code, you now have something. You've actualized one of those many potential things it could be. But if we all just wrote code for the sake of that first actuality, we'd have a world filled with even more useless code than the code we already have, right? So we've got this code, but it only really actualizes. It's got the potential to run now, and it's really only actualized again when we actually execute the program, and that's when it's hitting its second layer of potentiality. This is Aristotle's model for how the world kind of works. It's the development of potential into actuality, and then the exercising of that actuality in this kind of second potentiality actuality model. Again, as I noticed these things, it was just like, wow, you know, that is, it's what we do. It's how things work. It describes how we built our computers to work. It just, yeah, amazes me. So now we've got this interesting juxtaposition that in computer science we tend to talk about as the functional versus the imperative models, and object-oriented programming is on the imperative side, okay? And we've seen Plato's system for this already. The focus is on being, right? The focus is on what's the current state of something. What's the ideal, you know, what are these... How do we describe the kind of stuff that exists in our universe, and what's it gonna be like when it's in the runtime, okay? Focus a lot on data structures. We need things like encapsulation where certain objects are under the control of wrapped around objects, and the wrapper object is manipulating the inner objects. A lot of focus on structures. I'm gonna come back to this because it's amazing how Plato would design a system. Now, Aristotle, on the other hand, is interested in becoming, in things constantly transitioning, okay? He's interested in what transformation is occurring. What's first class to him isn't how you describe the data, but how it's moving through the system, and how the system is changing, and how the end result differs so much from the beginning, and how you get predictable paths, but you have different potentialities that actualize depending on the inputs, right? All very, very functional, just like you would see in a functional programming language. One of the more core ones, like, I don't know, maybe a Haskell or a Closure or something like that. And I'm gonna avoid talking about functional programming to that level because I'd bore you, I think, if not myself first. But the important part about functional programming is that the focus of functional programming is on paying attention to the process, the functions that are happening. Here you go. You got a pony. Plato's pony looks like this. All right, it's got four legs. It's got a head. It's got some ears. It's got this potential range of motion for these things. It's got a tail. It's got a color. That's how Plato describes his pony. The functional take on the pony is it's a running thing. It's a hay-eating thing. It's something that eats hay. It's something that runs. It's something that, you know, describing what it does, how it interacts, okay? That's really kind of a good way to distinguish between these two. So Aristotle would worry about Plato's model because, for him, about the whole object-oriented model because it places too much emphasis on the data structure and the state and the objects and classes and the design patterns and things like that. He thinks you should focus more on the kind of dynamic aspects, the runtime, the capability, the potentiality, the actuality. All right, what in the world does all of that have to do with Drupal? Now, I'm going to suggest here that Drupal is lost in medieval philosophy, okay? It's stuck between the two. It's halfway between Aristotle and Plato. Now, an interesting thing happened in the history of philosophy. Platonism, Aristotelianism, you know, they get off to a good start. They develop schools. These schools develop themselves. Well, gradually, history has a way of working through these things and Platonism kind of gets adapted into another system and grafted in and then sort of buried underneath it. And that system becomes sort of so ingrained that the Aristotelians sort of fall out of favor. And they start moving Aristotle out of Europe and down into the Middle East, and they kind of smuggle out the Aristotelians and they get their manuscripts out. And for a while, it seems like both of these guys are absent from Western philosophy. Now, it's the Arabic cultures who discover Aristotle again, and they bring it back to the Western world. And around the same time, a lot of the Platonic stuff starts to come back up again. And the philosophers of the day start looking at this stuff and trying to understand it again. And they've lost the context behind it because it's been gone, so they have to relearn everything. And their first take is, all right, we've got these two guys and what exactly were they getting at together? They didn't understand at that time that they were trying to merge two systems that didn't work together. They were two different systems. Now, let's talk about Drupal. Drupal has a lot of Aristotelian underpinnings in it. Now, the kind of stuff of Drupal is these basic, simple types. We don't spend much time, didn't spend much time. Think back to Drupal 5. We didn't spend much time describing formal data structures as classes or anything. We add stuff like FAPI, but they're really just arrays and they're really malleable. And we don't really monitor what goes into them and what comes out. We just assume that sometimes we'll need something in here. We look and see if it's there and if it is we use it. So the stuff model is pretty basic. But what makes Drupal so interesting is the hook model because any module can kind of be loaded in here and imbue the system with a new potential to be something else. And as it gets executed with these new modules enabled, we get new reactions and new outputs. We're like adding new potential and seeing new actualizations of that potential. It's a very Aristotelian model. I think it might actually be one of the most Aristotelian programs ever in spite of the fact that it actually wasn't written in a functional language and isn't actually truly functional. But it captures something of the essence of Aristotle's model and something of the essence of functional programming in this kind of beautiful way. Yeah, here you go. Here's what you can toss out to your friends. You've got the perennial, plaguing question of whether Drupal is a CMS or a framework. Just say, no, no, you got it all wrong. It's neither of those. It's a hyalomorphic engine. Drupal is the only hyalomorphic engine on the planet, right? It's all about potentiality and actuality and informing the raw stuff of your data into something greater than that. But Plato doesn't like this, right? Plato hates this. You know, he thinks hyalomorphism is dumb. He thinks it's the wrong thing. He thinks it's scary because it's unpredictable. It doesn't have structure. And it's missing the top layer, right? It's missing reality to Plato. It's focusing on the shadows and not on reality. So Plato wants you to go out and rewrite Drupal using classes and objects, right? What would Plato do with Drupal? Yeah, he's gonna do classes, right? He's gonna do static wrappers around things in order to expose global state in a good way. So he can access it, find out what's really happening there. He wants a persistence layer because the more still your data is and the less it moves, the better. And the abstractions that describe what it means to persist something, that's a form. Design patterns are like, I mean, Plato would be like, yes, the design pattern. That's exactly what we need. We need a pattern that describes exactly how your code should function. And look, it applies to all these other places because all those places where you put it, they're just imperfect copies of the design pattern, right? And over and over, Plato's going in state, state, state, state. It's not the motion. We want to know what, at any particular time, how close are we to the ideal object? What's changing? Plato would rebuild all of Drupal in symphony. Symphony is a beautiful platonic system. So that's what Plato would do. Now, that leaves us with the philosopher's question. Quo watis, it's Latin. It means, oh, crap, what are we going to do now? It means, actually, where are we going? We've tried something. We're kind of in the process of trying something. But what I really want to get at is that we can learn a lesson from philosophy here. We can learn a lesson from the medieval philosophers who found Plato and found Aristotle and thought they could build a single system out of the two of them. Plato and Aristotle are fundamentally different, and as the medieval's began to unravel that, we saw this huge resurgence in philosophy that began then and has carried through to now. It was kind of like a rebirth of philosophy because they understood there was more than one model there. Aquinas loved Aristotle so much that he called him the philosopher. He called Plato, Plato. So what is it exactly that the medieval's kind of tapped into and eventually realized and what kind of moved them beyond that? Well, the answer to the question is to point us back to software development and to say, well, what's a big, big problem that perennially plagues software? Complexity. It's the arch nemesis of software. Complex models are hard to work with. Complex code is hard to read. Complex operating parameters are bad. Complex APIs give us headaches, okay? And by no means is computer science the only one that's realized this. Here are a couple of philosophical jargon-y sorts of things that are all ways to respond to complexity. You've probably heard of Occam's razor. It's probably the most popular of these up here. It's the incredibly bad principle that the simplest solution should always be favored over the complex solution. Bad only because it's probably an oversimplification. But it captures exactly what I'm talking about, right? It's complexity we're waging war with. Logical positivism in the last century was this attempt to say if we could just define everything and rigorously apply formal logic, then we could get rid of all those plaguing things that we don't want to talk about like God. The categorical imperative that Kant develops, this is his single moral principle that he believes can unravel for us the mystery of morality by giving us a principle that explains why we've got all these other ones and tell us how to generate new ones. It's like a meta-moral principle. It's fascinating. And I'm not going to talk about it because I'm already jazzed up enough. Taxonomy is Aristotle's baby, right? He says, here's how we classify things. An elephant is a pachyderm. A blue jay is a bird. A platypus is a physical reductionism. This is a model that's actually popular right now, and the attempt in physical reductionism is to say our problem with complexity is we keep using the wrong words. If we can describe reality as a series of physical interactions, then we get rid of all those terms that tend to confuse us because we're focusing on the physical interactions, and thus we get rid of complexity. And then the one closest to our home is probably model and simulation theory, which is how is it that we can figure out and identify which of these little pieces of data we don't need to capture and which we do so that we can model a system and get a pretty decent predictive simulation out of it? All of philosophy is about taming complexity. So what is it about complexity that makes it so noxious to us, especially as computer programmers and computer users and tech people? Ambiguity is one. Complexity breeds ambiguity. So we've got our platonic model. We've got our Aristotelian model. We want to use them both. Which one do we use in any given situation? Should a form field be a class? Or should we stop worrying about those details and focus on what happens with the form data? Can we do them both? If we do them both, what happens when any kind of conflict between our philosophical systems arise? Because they're going to happen. They're happening already. At lunchtime, I had several discussions with people about this scary symphony stuff when it comes in. What are we going to do with the menu router? Are we still going to have hooks for the menu router? Are we still going to have configurate? Are we still going to have variable get? Are we still going to have variable set? What about my arrays? Am I going to have to learn how to write classes for every single thing I want to do? There's an ambiguity that comes up and it might look like something we contain, but it's going to keep coming back and biting us with the models that are going to continue to be incompatible. Now, anti-reductionism is another... complexity resists simplification and reductionism. Because the more complexity we introduce into a system, the harder it becomes to reconceptualize it without starting to lose important bits. Right? I mean, now that we currently have a theme model that has both the kind of function-driven model and the array-driven model, it gets kind of complicated. Actually, it's a good one for ambiguity, too, because it gets hard to tell which we're supposed to do, and it gets hard to say exactly what we're trying to encompass when we're talking about this. And every time we try and capture it, it seems like we have to say, oh, yeah, and this thing, too. Oh, and this thing, too. Well, this is something that's going to get worse. The more metaphysical overhead we bring in, the more different kinds of models we capture under our umbrella. And then I think what the most important part of complexity is understanding cognitive limitations. We think very highly of ourselves, both individually and collectively, in this regard. We think of our intellect as essentially unbounded. We say to ourselves, and we say, there is no problem that we can't solve if we work at it hard enough. Except I still can't remember what I ate for breakfast last Tuesday. In fact, I can't remember the names of all these people that I met yesterday, and I see them today, and I say, oh, hi. Because I have all these cognitive limitations. I don't understand some things. I don't understand quantum physics. Some of you are probably thinking, I don't understand why this guy's rambling on about this. That's probably not your cognitive limitation. That's probably mine. But this is the issue. We hit boundaries in our reasoning that some of them we can overcome. Some of them we can't overcome. Some of them we just simply can't devote the attention necessary to overcome them because we've got other stuff we've got to do. So complexity, ultimately, is this big problem. And a well-constructed program is one that reduces complexity so that it's only as complex as it has to be and no more so. So what's the moral of this story? What do we learn from the philosophers? What do we learn from Plato, Aristotle, and the Evels? That really, we would be doing ourselves all a favor if we attempted to clarify what we really think reality is and stick to one model and figure out a good way of proceeding forward on a model that's not going to constantly reintroduce complexity and more things to argue about and more things to bike shit. So I wish that I had a solution to this problem and could simply tell you, Aristotle wins, right? But one of my mentors in philosophy says, you know, there are philosophers who believe that they should answer the questions that are out there. But really, the philosophers are doing the best? Are the ones who ask really hard questions? And then everybody else somehow feels obligated to answer the questions. I thought, well, that's good advice and particularly good because I have no idea what the right answer is. But I want to raise the question because I think that by taking it out of the code, we're moving it from the dollar signs and the arrow symbols and the ampersands and moving it back to a layer of sort of a conceptual viewing of what the actual models and conflict are. We can actually have a more productive conversation, perhaps more inclusive and perhaps one that doesn't get bogged down in the, well, if we just use references here, it'll solve this problem because we tend to bike shed, but we also tend to latch on to the little details and forget that we're, you know, multiplying complexity by doing that sometimes. So if you have a solution, you know, bring it out, talk about it and that sort of thing. And I hope that's what's happening here today. It's interesting because when I originally proposed this session, I knew only a little bit of what was going on with Symphony and then, you know, as the conference unfolds, we're hearing about each of the core teams reporting on how much Symphony can bring to the table here. And so it sort of ended up being surprisingly timely to talk about this sort of thing. But, you know, this is the end. This is the end for me. I got you to the model, I got you to the conversation point, and I can't take you any farther, so. But I can try to answer questions if you have them. So I've got a few minutes left. I would be, I'm perfectly understanding if your stomach is growling as loudly as mine is. But if you've got some questions, I'd love to hear them, maybe address them or maybe say, hmm, yes, very interesting. I'd have to think about that. Right? Yeah? There's a mic right back here if you want to. Oh, I just, a very interesting conversation you're setting up. What I'm wondering about is when you talk about Aristotle and Plato's view of the world, and you say that, you know, in their own way to reduce complexity, and if we try to meld these two things together, then we're only introducing ambiguity and we're making the world even more complex than we should. But I was sitting there thinking that maybe that's not true, because they both describe, they're both a way of thinking of the world, and often, depending on the situation, it's a good idea to use one versus the other. Even in the same system, doesn't mean that you're introducing more complexity. And what I think reduces complexity isn't what tool we choose to reduce it at the moment, or what tool we choose to think about the complex situation. But the language that we use, so I think the problem with language creating sort of bite-size bits that are easy to digest and not necessarily put these two things fighting with each other. Right. And that's something that a lot of people will say. There are two concerns I have with that approach, and why I make such a big deal about it. The first is that while we can talk about them as being easily compartmentalized, once we actually start building applications, the boundary dissolves between the two, because we have to make systems where all the parts can interoperate. And one of the virtues of Drupal is that it's tried to expose as much of the interoperation as possible. So we can dig as deeply into the guts as we can when we need to manipulate something or change it. That's where that becomes problematic. And the other thing is that we have to move data through the system. And we have to have some kind of form for meaningfully moving that data. And we don't necessarily want to pass all data back and forth as CSV files and then kind of expand them in each function. So do we use arrays? Do we use classed objects? Incidentally, when Drupal uses an object, it's using basically an array, a dictionary style underneath the hood. Classed object is more what I described here. When we've got a classed object and we've got an unstructured or basically unstructured array, somehow we've got boundaries that the data structures have to permeate to some extent or another. And that's a big problem. That's what worries me. The good example for what you say is absolutely true is the fact that if you write a good operating system, it can run programs that are functional and programs that are... It has a well-defined scheme for how data is passed back and forth and it's file.io and socket.io and things like that. But of course we have lots and lots of overhead to deal with things moving in and out of that. That's not necessarily the best model for a single... I don't think it's the best model for a single application. That's what I'm essentially arguing. Yep. Hi there. I'd like to say, nice talk. Very interesting. Love it. Thanks. Number one, Dries has basically said we're going with symphony, so it's going to be part of D8. And it solves so many problems and we don't have to rewrite the wheel. That's wonderful, so we're going to have a dual system for D8. If we buckle down on this and decide that this is what we want to do, then it looks like D9 is going to be either... well, it very well could just wash out the rest of the functional bits. And I mean, I know that's probably what Larry really wants. He's been saying for quite some time. And really, that doesn't have an answer or anything. It's just one of those, hey, think about it, this could be. Yeah, you know, I really wish Dries had consulted me before making that announcement. I know he should have. What is wrong with Dries not asking every single person exactly how they feel? Didn't they say Drupal was mine? I think he has his little... Isn't that the opening today with... Yeah, I think it should be. I mean, with a great beard like that. Number two, monitoring. Monitoring? That's a platypus. Oh, good. Oh, I'm glad to know that. That's his type. He was filling in my taxonomic gap there. A platypus of a monotreme. Which I bet it is the only member of the monotreme. One other? What's that? Okay. I'm going to be doing some Wikipedia research tonight. I'll give the talk again tomorrow. Go ahead. Hi, I also really like the talk. As far as the main point which I at least got across in your presentation was choose one model. And I sort of had problems with that because I think complexity is unavoidable. Let's say you choose the functional programming model. Many things are very hard in Haskell. If you like to do simple things, you use monads. So choosing an ideal approach runs into complexity. Choosing an approach that you mentioned, two approaches at one time which Drupal has functional plus imperative, also runs into complexity. So I think it's also if you look at it from the physics because I did study physics. You have of course the theory of the very small and the theory of the very large quantum and gravity and in many areas of physics you use both the small and the large and you get a lot of positive results. So in summary my point of view is that it's okay to choose two models and in some areas those two models can help rather than compete or cause problems and it may not be at least to me a big problem if Drupal has the functional and the imperative side by side fighting it out in certain subsystems. Maybe the functional is better and it wins and in certain subsystems the object oriented symphony style could be better. So that was my thought process. There are two things to say about that. The first is that the issue can't be totally eliminating complexity because all of us globally speaking would be out of a job if we had managed to eliminate it. Physics is going to deal with complexity chemistry is going to deal with complexity programming is unavoidably going to deal with complexity and we're always going to run up into cases where there are very complex problems to solve but what we don't want to do is introduce more complexity into the system and what I'm claiming is instead of reducing or managing complexity the danger here is in multiplying complexity by bringing in things that are already conflicting theories. Your point on physics is interesting because the kind of holy grail of the idea is that we can come up with a unified theory that we'll get rid of having two different models. That's what we would like to do in physics. Physics is moving the other direction and saying we know because it's observable that a system like this is best described by applying this model and we know that this one over here is best described by using this model and then we've got these cases in the middle where and they're not always even exactly in the middle where it seems like if I can use some elements of this and some elements of this I end up getting the most precise description of the phenomenon. But what ultimately the desire is to bring them together to make one single grand unified theory. When you're dealing with two models that are really intrinsically conflicting it's a high hope to think that you can take them and somehow merge them together and it is not something that hasn't been tried. Scala is a great example of a language that tries very hard to blend object-oriented programming and functional programming and it's a very, very complex language. But also in its way it's a very beautiful one but you don't hear about a lot of Scala jobs right now and part of that is because the complexity bumps up against cognitive limitations and this isn't a system that was designed from the ground up to have this. We're taking existing models and trying to you know kind of push them together but at the same time you know you're onto something there about the fact that sometimes you just are stuck working with two models and maybe that's the answer to the Drupal 8 conundrum here is that if we can't actually say by fiat we're eliminating one of the models then the best we can do is apply the lessons that theoretical physics in general gives us and say well we can do our best to merge them together until the opportune time comes to simplify on a grander scale. That was a really long answer and I hope we can do go for it! I wanted to chime in with my agreement there are two disagreements I think you actually did a very good job of presenting a debate that's going to be now it's going to spark a really good conversation over drinks tonight I think this is a really good question so that was more of a statement because I know like I come from Java background and I miss being able to open Eclipse look at what I'm overriding see all the public methods I'm allowed to override eventually I got used to Drupal's hook system and once I got familiar with it I was able to just type in with Eclipse's plugin hooks and then control space and see what I can override giving my scenario but it became a pain in the butt when the two when object orientation became as popular in Drupal as it is today now I have to use the examples module or memorization for everything I'm about to implement you know what I mean? Or I live in Xdebug but I can't predict how I'm going to implement what I'm going to implement if I haven't been exposed to it before so it's just this chaotic unpredictability that I agree would actually be solved with some sort of unified model or at least I don't know something cleaner than what we have today at least but I do have a question which is do you know a lot of people because I know the object orientation discussion has been going on for a very very long time and every time I've seen people bring it up why isn't Drupal object oriented? People have had like an answer of sorts like Drupal technically has to be the way it is given certain circumstances and I I've never really known what the canonical answer is to that question why has it I mean do you know I think I hear the same answer as you do well the hook system wouldn't work in object oriented well what about an observer model well it wouldn't work the same way I think the closest to the true answer is that when Drupal was authored we were stuck with PHP4 whose actual implementation of object orientation was really very clearly a bolt on and didn't had some very bizarre side effects statics didn't always work the way you thought inheritance had some little quirks to it and I think it really wasn't until well past 4.7 or so that PHP5 was common enough that we could use it as a target platform that I think is the that's the best actual answer I've gotten I think most of the ones that tend to argue about models are more polemical than factual I think interestingly if you look at Drupal 1.0 there's a lot of it that's object oriented the entire template system is object oriented so so it was experimented with early on and then jettisoned because of its limitations cool thanks I'm going to go ahead you want to do your question really quickly and I'll try and answer it very very quickly yeah this is actually more of just a comment first of all great talk this is something that I've been thinking a lot about myself too and it's also really nice to kind of step back and look at these issues after spending most of the day steeped in more specific code one thing that I've kind of thought about is it seems to me that the contrib and the core space tend to are more of the platonic approach whereas when you're actually working on a project for a business or for something in the real world you take more of an Aristotelian approach and I think that's kind of how they are melded together and that they're scenario based and I also really liked the thing about Aristotle how the potentiality the potentiality feeds into the actuality of the next potentiality right yeah the actuality of the first feeds into the potentiality becomes the potentiality of the second right so in that way the core and contrib modules serve as the potentiality for what you actually create in your real world projects and then the real world projects if you create in your custom modules directory or something if you create something that ends up working great for contributing back then it kind of feeds back on itself in the same way so that's almost a way of thinking of bridging the two yeah it's even a more cyclic approach than Aristotle because it's a feedback loop of sorts right your first point is really interesting to me because we've been talking about the mechanics of the code and you just took the conversation and bumped it up a level to the actual business process or the you know kind of broadly concerned the development process of how we actually have to work on code when we're building stuff you've got the core model where the focus is on building just a system that can do this kind of stuff and then you've got the those of us who actually build stuff for clients or for our companies or whatever have to take a kind of different approach because we're looking on implementing a solution to a problem and I think that's true I have to think about whether or not that's truly platonic or Aristotelian but it's a really interesting observation that that model is actually different and could be described in similar terms but at a different layer you have like tears of it alright well I'm gonna I'm gonna let you guys go get dinner and thank you all very much I really appreciate it