 
S1: before we begin Hank Rushbauh is an employee at the university, he's not just an outsider and a very good friend of, Harvey's, so. alright i'd like to introduce Harvey Banks, who is a, very good friend. and basically Harvey is a computer maven. everything for computers, you call Harvey Harvey knows what to do um, Harvey works at the Business School in their computer lab. and, is the person that everybody calls when there's any problem and Harvey knows what to do and how to solve the problem. but that's not all Harvey does. Harvey also works with businesses to help them set up their computer programs particularly databases, for businesses. and he also has a few hobbies and if you'd like to get to know Harvey well, you might ask him how he's doing in his boat race. so i'd like to, welcome Harvey Banks to the E-L-I. thank you Harvey. 
S2: thank you Renee. well, this uh, presentation really has its origins a long long way back. the origins of the whole concept, really went back to the nineteen fifties. but i won't bother with too much of the history, i'll just tell you what it is i'm trying to do... most of my life has been spent, solving problems. and many many years ago a, published mathematician and i, decided to see if we could, formalize this and put some rigor into the whole thing, and, to this end, we looked at what was available, and we actually found that there was nothing that would communicate, the problem or its solution, to the users. so what we did is we evolved, a mechanism for ourselves, using, um, some quite, heavy mathematical techniques but found that this was, no good because it really didn't satisfy the users' needs. and, over the years, we, adapted things that already existed, to our needs. the thing that we're going to use, i'll show you later on but i'm going to talk about the whole idea of solving problems. let me first start there, with some very simple things. when do solutions to problems fail? well every time i go in and i work with some group they'll tell me oh that can never happen... problem, solutions fail when things that can never happen do. and believe me, that's much more often than people realize. they also fail, when there're just plain omissions, things that were, just not not, considered. and when these things that are not considered, arise, then of course the solution fails. <P :05> sometimes, erroneously, people decide that given a particular situation, they want to do something, but what they've chosen to do is not appropriate to the solution. this happens. another one of the problems is contradictions. you'll find that two people, interpret, something, so totally differently, that in fact, if they, have different responsibilities, each will be expecting the other to do something, that he didn't understand. or she <LAUGH> don't want to be a sexist. and then lastly ambiguities. uh i have a beautiful case here where two groups working for a very large company interpreted a specification, for a particular, solution to a problem, totally differently. and they couldn't understand why their solution was failing. and i went in, and i did nothing more than run the same, program with them, and then in breaking the problem solution apart found that the two groups had interpreted something, in, perfectly good, but different ways. well, what does a solver have? um, it's a, sadly American trend never to look at what anybody's done before. i don't know why this is, but in my training, the first thing we always do, is do an analysis of precedent. what did somebody else do? did they solve the problem? is the solution applicable, to our problem? unfortunately, the not-invented-here syndrome, seems to be a very bad one in this country. i deal with it on a daily basis. i had a student walk up to me the other day show me a tremendous program to do something in a factory, and i said to him have you ever heard of X-Y-Z and he said no. i said well there's an international standard that's been in existence for twenty years and there's a, huge body of work that's been out there for twelve years and you're trying to reinvent the wheel and all the tools that you need exist already. he couldn't believe me so i told him what the acronym was and he went to look at the web and he said my god he said i had no idea. he's just finished a six-week project. well i've never understood it, and, i never will. the other thing is, don't bring the people who have no experience in a field in, to try and solve a problem in a particular field. i see doctors trying to write computer programs and i simply wouldn't like any computer programmer to do surgery on me or prescribe anything. but everybody seems to feel computing is fair game and, they're all experts. no they're not. and that's why we have so many terrible computer systems, because people who're experts in a field, don't go and get somebody who's an expert in computing to show them how to make the solution work. well, we would hope that people come, to the problem with some knowledge of what it is they're trying to do. ironically, very often, interdisciplinary knowledge is more important than knowledge in a specific discipline. there are thousands of examples, of, people from a different discipline, providing solutions to people in another discipline, you can look at the D-N-A situation with Crick and Watson, you can look at, numerous numerous, instances of this kind of thing. i won't bother you with too many of those. everybody comes, to this solving of a problem with a ragbag, full of ideas. and that's good. but ironically to me the single most important thing is, intuition. now i can go on at great length about this. and i won't try to go too far but i'll, give you a few examples. everybody's heard the story about Isaac Newton having an apple fall on his head and up comes the theory of gravitation. oh no, no it's not as simple as that. in fact, Isaac Newton had been worrying about, the orbits of planets. and, trying to describe whether or not he could really, find out why they behave the way they do. the apple was just, so to speak, the, last, apple that, broke the problem's back. what happened was, he needed, a little stimulus. but had he not been worrying the problem all the apples in the world would have made absolutely no difference. Archimedes, had exactly the same experience. the king, Hiero had come to him and said look i gave this goldsmith some gold and i asked him to make a wreath for me to put in someone's grave and i don't know whether he used all the gold. and Archimedes worried this problem and suddenly one day in his bath realized something about buoyancy. and incidentally the account of how it all was done has to be wrong because he couldn't have measured with the accuracy that was necessary. there was a much simpler thing that Archimedes did that isn't in the account but i won't bother you with the details. but Archimedes noticed that when he lowered himself into his bathtub the water rose. and he also noticed that he felt a lot lighter when he was in the water than he wa- than when he was out of the water. and from this he realized that there was something about this, that would help him determine, whether in fact, the goldsmith had used all the gold. there're numerous novelists who've described, a block where they were just looking for that turn of phrase or that idea or something like that, and, in a moment when they weren't even thinking about, the novel or were relaxing or doing something else. the concept would come to them. the idea would come to them. the phrase would come to them. come to them. it was their intuition that was being stimulated by something else. or by complete relaxation. it's said that Descartes gave us coordinate geometry when he was ill, lying in bed, watching a fly on the ceiling and deciding that if he could describe the position of the fly at every moment in time, he could write an equation that would, describe the path of the fly. and so suddenly al- he came up with the idea of, axes, coordinate axes. the X axis the Y axis, and plotting everything in terms of the axes. and so he took, all the this, wealth of geometry that existed, and turned it into an algebraic discipline. there are two views of exactly the same thing. and to this day we have Cartesian, coordinates because of Descartes' watching the fly on the ceiling. there are a n- a number of other, um, examples and, if you all have access to the Internet, if you'll go to W-W-W dot N-P-R dot org, National Public Radio and go to um, Weekend Edition, Saturday, morning, and look at the latest program. the last item is something about math. and in it, um, Scott Simon interviews a mathematician, who tells of a whole lot of these little things including some of those that i've already told you about, this happened just within the last week. and uh, my better half Karen laughed, when she heard them describing exactly the same things that i was describing. well, enough of all this, let's get on with solving our problems. well the mechanism that i'm, using, to show you how to s- go about stimulating your intuition, is something known as a decision table. and a decision table has a number of different pieces. oops i think i lost something (xx) that's okay we'll get it back. the decision table has, this piece over here which is called a condition stub, and this piece over here which is called the rule definition. and essentially all the condition stub and the rule definitions do, is ask a question and then give an exhaustive set of answers. now what do i mean by an exhaustive set of answers? well i'll deal with that in a moment. finally, the the light-colored piece at the top here, describes the problem space. the piece at the bottom describes what you're going to do, given certain conditions. and all they are is actions which you, simply describe and then you check off under what conditions those actions are executed. so, let's look at this again. we have conditions which consist of a question and a set of possible answers. and we have actions which only require, an identifier. open the door, uh throw out the trash, um write a paragraph it doesn't matter it's just a descriptive thing that says what the action is that you're going to take. i will deal later on with how these things can be very complex and i'll, e- i brought some examples of some of my work, to show you how these things can be elaborated but i'll talk about that later. okay, each condition, requires a name, to identify it... a brief description of what it is that you're measuring the condition of... and an exclusive_, um an exhaustive mutually exclusive set of alternatives. and i will explain exactly what i mean. now don't be alarmed by some of the, some of the mathematics that's going to come it's all incredibly simple and if you need an explanation just ask me stop me and we'll, explain. so, a condition. well, the best way to illustrate exactly what a condition is is to give you a specific example. i'm going to draw a circle, and that circle is all painted one color and it's represented in the computer by what are called pixels, picture elements. and each one_ there are thousands of them in there_ and each one is colored a different color. i'm going to color them, here they are. well now what we have to do, is we have to try to work out what, question we can ask that'll give us what we want. so we want an exclusive an exhaustive mutually exclusive set of answers. so i'm going to get a question for you. and the question is, what color, is the pixel that you've chosen? i'm asking you all to choose a pixel and then tell me what color it is. well, there're a finite number of answers. is it red? is it blue? is it green? is it yellow? but that's not exhaustive. it's neither red nor green nor yellow nor blue. now we've got every pixel, covered, all the answers are mutually exclusive, and it's, exhaustive. i tell you this because, a very large corporation developed a very large program, and they, used these same tables. and at some point in my life i was privy to these tables they gave me all these tables, and i found them full of holes, they were not complete they were, full of omissions, they had lots of contradictions. they managed to make a very fine product, using the tool. but, it was a miracle to me that it worked. now i will tell you that i shared this technology with a bunch of, technicians at the University of Vermont, about, twenty-five years ago. and they jumped at it. they had done nothing but design all the components they'd been building ever since using this technology, and they come out of it with with a tremendously high level of confidence in the success of everything they do. and it's one of my, one of my best, stories on this whole thing is just how well they've used it. they understood immediately what the value of the whole concept was. well, what we've now got, is every pixel, is one of those five colors. we haven't left any of them out. we have, an exhaustive, partitioning, of the pixels, in that original black circle. now this is the little bit of mathematics i don't want you to get upset about. the problem space is defined, as, all the alternatives, for the first, condition. combined with all the alternatives for the second condition. and so on for all the conditions.<P :06> in simple words, it's every possible combination, of all the alternatives for every condition. now, i can tell you that one of the problems i solved about twenty years ago, had two-point-nine million, possible combinations. now immediately everybody says how can you ever consider two-point-nine million? well actually it's very simple. in fact, a lot of what we do wouldn't be possible, if, there weren't huge numbers of these things that didn't really make a difference. and it's identifying them that we have to, go about. okay, so i'm going to show you a very simple problem space in this very, um abstract way. but don't worry i'm going to give you something less abstract down the road. so, the set of conditions for our problem, they're just two, the first condition and the second condition, condition one and condition two. and the sets of alternatives, well for condition one, we'll simply have four alternatives alternative one two three and four. and for condition two, we'll have just yes and no.... okay well we're going to diagram this now with a decision table... so i've put the whole thing down at the bottom, and i've started off by looking at condition one. and i've set condition one, in the condition stub and, and in the right-hand side in the, rule definition i've defined four, things, alternatives one two three and four. now if you look our second condition this one down here, only has a yes and no. well that means we've gotta have every possible combination. that means we have to have yes and no here yes and no here yes and no here yes and no here, like this. now it's an exhaustive, this is the entire problem space. there is nothing more. and we'll, name the the rules we'll call them rule zero through rule seven. now it turns out that the beauty of this technique, if you've done it right is that it doesn't matter, in what order you name the conditions, or in what order, you name the alternatives. so for instance we could do this, here i've made the condition to the first condition and it's just yes or no and it partitions the problem space into two pieces. and then within each one i've put the set of alternatives. now if you want to stimulate your intuition, it's very important that you make this a disciplined thing. don't randomly choose the order. choose the order and then stick to it. so if you'll notice for condition one, i have permuted i have, mixed up, the alternatives. so i've got alternative two, but it's first in both cases. i've got an alternative four but it's second in both cases. now why do we want to do this? i'll tell you why. cuz when you've finished with one of these tables, believe it or not just looking at it you will see the patterns. and the patterns, are going to <SNAPPING FINGERS> register with you immediately, and when they register with you you're going to say wow look at that. (these) it's exactly the same, in all these alternatives. and you won't see the patterns if you start mixing up those orders. well these are identical, the only difference is that, they have a different number. and they've moved around a little bit, but we haven't lost anything, it's still complete, and we're still going to be able to do, whatever we need to do. okay, so, let's go about making a simple decision table. well, i'm going to take, our, problem and there's our, basic decision table. now at the moment we haven't put in the actions. and it doesn't matter, in what order you consider the rules. the beauty of this is that you know, that when you finish the whole table, you're going to have considered every rule. that's one of our, precepts. we're going to consider every rule. but it doesn't matter in what order, we consider them. the beauty of it is that we can block out all the, other rules and we can just concentrate on one of them. and we don't have to worry, i'll tell you very quickly a little aside. i had a young graduate from Berkeley working for me and, we were a group of people who put together a very complex project. and i said to him Mike i said, when we do the review, with all the other groups in the company, i want you to do the review. and all i want you to do is walk them through, our decision table. and i said as soon as you start on something, somebody's going to say but Mike what if? and then what i want you to do is listen to him carefully and see if you can find, the rule that defines his what if. show him where the rule is, and ask him if it'll be okay to defer that until you get to that rule. well i must tell you this was a review that lasted four or five hours<COUGH> 'scuse me. and what happened was, no sooner he started somebody said what if, and he showed them where the rule was, because it was a complete problem space. and what happened is five minutes down the line, somebody else did exactly the same thing and he, responded in exactly the same way. i was sitting_ it was an auditorium and i was sitting up at the back and he looked up at me and he just grinned, because i told him this was exactly what was going to happen. well the third person came up with a what-if and after that we didn't hear a peep out of anyone. they waited until he presented the entire solution, because they knew that no matter what they came up with, he would find the rule, and he would deal with it. and i can tell you this group left there with a, well let's see if it'll work, attitude, and we were the only project that was ready to release the thing on time. and we were the only project that didn't have any trouble reports for the next eight years... so we must have done something right. well, i'm going to start by considering a particular, rule. for instance i'm interested in what will happen when condition one is alternative two, and condition two is no. and what i'm going to do, is i'm going to say well some action has to be executed, and let's go and execute that action. now, i can_ i'm going to concentrate just on that rule that column. i'm going to say well is there anything else that we need to do? and i'm going to put a new action down here, and i'm going to say yes we're going to do this action as well.<P :05> and i'm going to say is there anything else that we want do when condition one is alternative two and condition two is no? eh no, that's it. okay so, it doesn't matter in what order i do them, so i'm going to go back to action one and say, is there any other situation in which we're going to do action one? and, yeah, we're going to do action one here. but we're also going to do something else. we're going to do, this okay, and at this point, just the act, of doing this, leads you to realize things. you examine it and you say, wow, you know? whenever condition two is yes, action two will be executed. and what's more, not only will action two be executed, but some other action will also be executed. so there's my hypothesis. that whenever condition two is yes, actions two and four are going to be, carried out. now i can test my hypothesis. i can go back to each one of these and examine them, and say are they all really true? that's why i put a question mark. cuz they're not_ it's not capun- not cast in concrete yet. i need to examine this. my insight was that this always happens. and i found out that, no, that's not really true. down here it doesn't happen. okay. but the rest is good... okay, i won't go on doing this, minutely step by step. this is an abstract, thing we'll get to a real one that you can all tie into. and i'll just fill it out. and, you notice i've given them some names at the bottom here, i call them equivalence classes. why are they equivalence classes? because they have exactly the same set of actions. if they have the same number, if it's number zero, then it's going to be actions two four and five. and sure enough, that's why they're all_ there're three zeros there're two ones and then a two and a three and a four. well by just simply changing the shape of my table, i can eliminate all the duplicates. and in my two-point-nine million i can tell you that the number of duplicates was enormous and we boiled it down in no time, to just a few important cases. in fact, it happened to be the solution to a computer problem. and i was working with, big supercomputers, and, i told everybody that we would test it exhaustively and they look at me and they said two-point-nine million conditions, on a supercomputer it took sixteen-thousandths of a second to do all two-point-nine million, possibilities and that was in nineteen sixty-nine... okay so let's draw our revised table. there it is. okay so let's see how we got there. we said if condition two is yes, and this little bar up top here just simply means it's not alternative three, and it is alternative three. so let's go back. see? when it's alternative three and it's condition two yes is the only time that it's different. the others are all zero th- the one oddball, is, three. so there they are. zero and three. <P :05> we can, check the others as well. notice that the two that are marked number_ equivalence class one, both have action four and six. and it's when condition two is no and it's either alternative one or alternative four. well, there it is. and so we've reduced, this thing, down from eight, rules, to simply five. and believe me, problems just collapse. i can promise you, you get such a good insight to the solution, that the problem just collapses. okay, so let's go on from here. and look at a different example. um it's always hard to find an example that'll, be good for all audiences. so i found something that i think most people understand, but have never thought about, solving. and the problem is to find out if a date, is valid in the Gregorian calendar. now, i know you all think you know what the Gregorian calendar's about. how many of you think the year nineteen hundred was a leap year? it's divisible by four.<P :06> alright we'll get back to that in a moment.<SS LAUGH> okay we'll put the data in- we'll give you three numbers. an integer representing the year, another representing the month, and a third representing the day of the month. okay, now, it's interesting, i don't know if this has ever happened to you but it's happened to me a million times, i'll go into some computer program, and i'll_ i can related a lot of this to computers because that's my field, but i'll go into a program it'll say you have an error in this field. so i'll fix up the error in that field it says oh and now you have an error in that field. i haven't changed that field. why won't you tell me up front that i have two errors? i don't want to, have to, redo this twenty times. so_ (oh it can just) go back in. okay, so we're gonna do some preliminaries here. the years covered by the solution are arbitrarily, we'll go from eighteen hundred to twenty fifty. and we won't have anything but positive numbers. no negative numbers, with all the_ you know the, day twenty-three, month eleven, year, nineteen hundred and seven. there won't be any negative numbers there won't be year minus three hundred and fifty-two, no. okay, and the year is the part that, i was just bleating about. we must tell the user, every way in which the thing he submitted to us is invalid. and you must tell it to him up front, he submits it we say well your year is bad the month is impossible and that day well, depends on what the month is but it's_ no way it can be dealt with. okay. so let's start. we can take the first condition, what year is it? and what are the alternatives? well there are the alternatives zero one two three oh, well that's a large number of alternatives whoa, hold it hold it. if we do it that way, remember, that it's the_ the size of that problem space is the Cartesian product of all the sets of alternatives well we start off there with a number two thousand multiplied by five, multipl- whoa whoa, (oh) i've got a headache already. so what should we be looking for? the smallest number of alternatives. William van Occam came up with a concept that's known as Occam's razor. he was a scholar at Oxford, and he said, in his archaic way that plurality should not be assumed without necessity. or, if you like, don't make things complicated or even simpler, keep it simple stupid. okay, so let's start a given. simply take the year, and this time you can say, well everything below eighteen hundred, we're not interested in. anything that's between eighteen hundred and twenty fifty, that's good. and anything that's bigger than twenty fifty, we're not interested in. well that's just three. wow, that's an improvement. from two thousand and fifty something down to three? well this is gonna simplify the problem. okay how 'bout the month? well we can do the same thing to the month. we can say any thing less than one anything between one and twelve and anything bigger than twelve. well that's just three too. so it's three threes, you got nine rules so far. how 'bout the day? well, that depends. i mean, the day we can't, tell unless we know what month it is. and whether or not it's a leap year in, one situation. okay, so, what's a leap year? well, this is a... a leap year is a year that has an extra day. and this leap year day comes on February the twenty-ninth as we all know. and, in every four hundred years, it was necessary to make ninety-seven leap years to keep the calendar in sync with the seasons. ironically, the guy who invented the algorithm for this whole thing was a librarian in the Vatican library his name was Luigi Lillio. not that that's important but, i've written a paper about that one too. and the rules are simple. every year evenly divisible by four hundred is a leap year. and, all the remaining years that are evenly divisible by four and not also evenly divisible by one hundred are leap years. and that's how you get ninety-seven in four hundred years. and it's very interesting, every one of these four-hundred-year cycles starts on a Wednesday, and it's the exact multiple of seven. which is, an interesting fact that makes things in computers very simple and in fact nobody would have a year two thousand problem if they'd've considered some of these things, because there're very simple representations for dates that that are very much more economical than anything anybody uses, but of course, nobody used the right ones. so now we're, having this, panic. okay, so let's revise our alternatives... let's look at the year. okay we'll leave that one like it was. the month, well, if we're clever about how we do this, we can make it_ we had th- what was it? th- [S3: three ] fourteen, we had three before okay. but this three didn't help us at all. there's a much better partitioning, that'll help us a lot. what if, we say, hm, all those that are less than one, all those that are thirty-one-day months, all those that are February, and all those that are thirty-day months and then regular twelve. we'll get this down a little better in a moment. we just used the numbers for the months, to identify the thirty-one-day months and the thirty-day months. now this partitioning is much more sensible, as we'll see. now, when i originally did a date routine this was nineteen sixty-three, i was writing the program and suddenly realized bu- after analyzing it on one of these tables that, hey, you've gotta get this right. you've gotta get these things categorized and if you get them categorized, everything becomes a lot easier. well, we'll make some more improvements. how 'bout, we had three, <COUGH> excuse me. we can do just two. in-range and out-of-range where, in-range is any year, inclusive between eighteen hundred and twenty-five hundred, and out-of-range, not in-range. so now we've got just two alternatives. and the month, well, what we've done here is we've taken the three ranges that we're interested in, the thirty-one-day month, the thirty-day month February, and the rest you'd lump them together. so you end up with just four alternatives. so add four times two, that just gives us eight rules so far. okay, the day <COUGH> well, we'll see the table. and then the leap year, where all we have to know is is it or is it not a leap year? okay, so now we're going to make_ we'll make an assumption, that the year is, okay. just, so that we can explicate the whole thing and and understand what it's about we will make it simpler. so, the month, is it February is it a thirty-day month a thirty-one day month or an invalid month? well it turns out, you can see February's got the lion's share of this because February's the only one that becomes difficult. well if the day is between one and twenty-eight we don't care February_ all, all Februaries have twenty-eight days so that's good. but when it's the twenty-ninth, well then it depends on whether it's a leap year. and all the others, anything else, anything that isn't one through twenty-eight or twenty-nine is a mistake. well the same thing applies to the thirty-day month. one through thirty is valid, anything else is invalid. same thing with thirty-one day months, if the number is between one and thirty-one it's a good one, otherwise it's no good. now if the month is invalid, we can't really tell. we know that every month has at least twenty-eight days. and if the month is wrong, well twenty-nine to thirty-one is maybe right maybe wrong it depends. anything else is a mistake. and the only time we're interested in the leap year, is if it's February the twenty-ninth. now calculating whether or not it's a leap year, takes, very little effort. but nevertheless, it takes effort. and in my original, solution to this problem i always calculated whether or not it was a leap year. and it was only when i analyzed it like this that i realized i don't care if it's a leap year, except on February the twenty-ninth. well it meant that in most of the situations i never calculated whether or not it was a leap year. i could've looked it up in a table and said is it a leap year, but obviously if i want to extrapolate this out into the future or i want to keep a calendar going for astronomical purposes, this can make a very big table. it's much easier to calculate it calculate it very quickly, and, ironically, the numbers that we're trying to find i- as a multiple of, when you use it in a computer, are very simple to examine and decide whether they're multiples of four hundred. the binary version of everything that's a multiple of four ends in zero zero. well, so it's very simple to look at the number and say, oh yeah, that's a multiple of four. so that's an aside. so here we have, the four situations that are valid that, if it's February it's between one and twenty-eight, it's a valid date, if it's February twenty-ninth and it's a leap year it's a valid date, if it's a thirty-day month and it's between one and thirty, the day is, then it's a valid date, everything else is a mistake. but what about letting the user know what's wrong? we haven't dealt with that.... okay, so now let's look at the whole solution, for determining whether a date is correct. there it is. this time i've added the two parts with it's in-range we've looked at and out-of-range. and if you notice there are our four valid dates, and in this case it's invalid because all of them have a year error. the year is out of range. and in this case, they all have, a month error. because the month is just simply invalid. and in this case here, it's not a leap year and it's February the twenty-ninth sorry about that. and that's why it's an error. this is an error. now these here are maybe an error. what happens is, the month is invalid and the number is between twenty-nine and thirty-one_ the day number is between twenty-nine and thirty-one_ so since we don't know what the month is, it's maybe a day error. but now the user can get a complete description of what his problem is he submits a date and we say well, it's invalid because you've made a mistake in the year, and you've made a mistake in the_ let's take this one here for instance, and the day. and it can also say, you possibly have a mistake in the day in anyone of these three situations. okay so, there, we have the whole solution, to determining whether a date is valid in the Gregorian calendar and we also have the whole solution to telling the user, under what condition_ what th- the problem is with what he submitted. okay, i'm going to show you just a little bit a a glimpse into what i call elaboration. you can elaborate either, an action, or, a condition. now what do i mean by elaborate? well, obviously, you cannot, solve very large problems on a little piece of paper like this. i will tell you that i once claimed that i could do the overall solution to any problem on an eight-and-a-half-by-eleven-inch sheet of paper. and one of my colleagues was in the audience and she said just loud enough for everybody to hear, boy he writes small. well i have yet to find a problem that i can't, in a readable form put on an eight-and-a-half-inch-by-eleven-inch piece of paper. but that means that there are some problems that need resolving. for instance we could look at the leap year and say, how do we do that?... well, this simply says is it an even multiple of four hundred? and if the answer is, yes it is an even multiple of four hundred then we know it's a leap year. and so then what we want to do is we want to look at whether it's an even multiple of one hundred. and we don't care care here because we've already determined that it's a leap year. we do care here. and so here we've determined that it isn't a leap year. if it's an even multiple of a hundred but not an even multiple of four hundred then it's not a leap year. and the last thing we have to do say is it an even multiple of four? so we have, over here, let's see whoops, i keep on getting this one button (out.) i must be holding it wrong. and there, is our elaboration. now the interesting thing is that an elaboration, of a condition can only have one action. and the action simply spells out, which of the set of alternatives it is. and the set of alternatives for leap year was just yes and no. so every rule in this elaboration must end up with a yes or no. however the elaboration of an action, can be a sheet every bit as complicated as the original one. and, if you'd like to come and have a look at them afterwards i'll show you some of those. okay, so, how do we solve problems? ironically, there's no recipe, there's no formula there's no piece of software, it's ultimately up to you. <P :09> discipline. you have to lay out, your problem space. you have to, find all the conditions that affect, what it is you do solve the problem. you have to, make your table, with all the bits and pieces in. you have to ensure that you've omitted nothing and that everything is exhaustive and that everything is a proper partitioning. it's up to you. there are things that you can do, um, my group of people in a particular company we decided we could write a piece of software to do this, and we thought it was foolproof and we wrote this piece of software and we were thrilled with the result. and we gave it to our first user community and they proved us wrong. it was anything but foolproof. they proved what a mess you could make, very quickly no matter how well a piece of software worked for people who used it properly. but the average user was totally incapable of using this piece of software. and so we decided that uh, maybe we'd defer this. in fact i had a phone call from one of the people involved a few, months ago and he said to me, Harvey i think i could now build a foolproof piece of software. and i said Steve if you can, go for it you'll make a fortune. i'm still convinced that it's not easy to do. not unless people understand what the goals are, and how to go about it. and it requires practice. it's like any skill. i have all kinds of_ in fact a, a bunch of us authored a book about this which unfortunately is out of print and not really accessible. and we describe all the idiosyncratic bits and pieces of how to go about doing these things... rules must be mutually exclusive, alternatives must be exhaustive, and then finally, focus. when you're trying to write, the solution you've got to, blot out, everything about the problem space except the rule you're working on. being confident that somewhere along the line you're going to do them all. you know they say you can only juggle six or seven things in your head at a time. this makes that juggling act, much much simpler. instead of worrying the whole, what if and what if and what if, you get away with saying, i know i'm going to deal with those, i can forget about the what-ifs and i can go down the line, and, do this one thing. you must deal with the entire problem space. a lot of people say well that can never happen we can leave that out alright forget it. no you must consider, all the bits and pieces. all your what-ifs will be dealt with, if the problem space was properly (prepared.) now, everybody, i i was put in charge of a project in nineteen seventy-four and everybody was told that they would be required to produce tables of this form. and everybody produced the tables because they were required to produce the tables but they didn't do them right. and they didn't_ they actually solved the problem and then tried to make a table to fit their solution. and that didn't work. so, my experience, has been very simple. here's my pie. and my pie is, associated with, computer solutions to problems. so there're two pieces here that are just a computer solution but, moving the tables, takes the lion's share of the time. i had a, general manager of the division in the company i worked for come to me and say, Harvey we're six months into a nine-month project and none of you're people have used one minute of computer time, what the hell are you doing? and i said we're building tables. and he said well that's not going to get the product out the door. we got the product out the door on time under budget... you have to document the solution, you have to draw all your tables and i'll show you some, so that you can see that they're really, pretty comprehensive. and then with the computer you have to code it and debug it. and i can tell you that every time i work with people, right now and i don't have control over the thing the first thing they do is they start coding. and i said what're you doing? you haven't even, thought about the problem yet. and they do it piecemeal, they just go at it. and then they wonder why it doesn't do the job. i can tell you i come out of these things with a tremendously high level of confidence, that my solution is going to work. the proof of the pudding, i guess is in the eating. did look like a pudding didn't it? [S3: <LAUGH> yeah ] thank you <APPLAUSE SS> that's it. 
S1: would you like to entertain any questions?
S2: yes i'll entertain any questions
S3: i'm dying to ask you a question
S1: yes?
S3: you had in the one table this category, invalid month. and i'm really bothered by that <LAUGH> why would you? 
S2: (xx) what if somebody gives me a month and says it's month twenty-nine? have you ever heard of a month twenty-nine?
S3: no.
S2: but people will do that.
S3: oh. so that 
S1: it's all positive integers.
S3: so, okay, so that's [S2: that's an invalid number... yes ] the exhaustive alternative even though, [S2: um ] you know there is no such thing
S2: i'll go even further. have you had error messages on your computer that say, uh you're out of disk space?
S3: mhm
S2: ninety percent of the time it's rubbish.
SU-F: (Renee) <LAUGH> gets them all the time.
S3: <LAUGHS> i get them all the time, right
S2: ninety percent of the time it's rubbish. what it is, is somebody's detected a problem, and the only alternative we had was one of these messages and he throws it up on the screen. and it's erroneous and it's misleading. you must deal as explicitly with errors as you deal with non-errors. so for instance if i tell you, you have an invalid month, that's what you have. i don't just say oh your date's wrong... there's nothing more frustrating than computer system messages [S3: yeah ] to me. and i have a whole book, full of them, that are totally erroneous. and they're done because somebody doesn't think these messages are important. no they're very important. that interface with the user is as important, as giving the, solution to the problem (right.) any more?
S4: uh you said it's very important to define your problem space, how do you know that you've got everything [S3: yes, mhm, good ] (included?) 
S2: okay, the process of drawing one of these tables, is the stimulus to your intuition. you will draw up this table, and then you'll look at it and say, you know there's another condition that we haven't considered and immediately you have to populate your table with that condition. and i'll tell you how i do it. i start in the top left-hand corner and i start drawing a table. and then i get one of these insights, and i stop. and i used to write myself a cryptic note, on the table i was busy with explaining why i stopped. and i found out don't write a cryptic note, write a very full note about why you stopped. because if you don't when you try and reconstruct it later you won't know why you did it. and so i would start, and i'd number, the sheet. i'd number it one two three four and i'd put a date on it. and every time i stopped, because i had one of these insights, and let me tell you when you have a complete problem space you know you've got a complete problem space. boy do you know it. it it, it feels good. i'll show you something. and you'll you'll get the picture. 
<P :05> 
S5: i'm
S2: go on.
S5: i'm 
S6: yeah i'm i'm oh go ahead.
S5: go ahead go <LAUGH> ahead
S6: yeah i was um, wondering cuz you were talking about writing foolproof software, and as we all know, um <SS LAUGH> yes, the world is full of foolish people or people who act foolishly. and i'm wondering in this, decision table, thing or, making decisions, um, how much it_ you can account for people making,
S2: absolutely, we've got, look at the situation here. we said you could only put in numbers, [S6: you know (xx) ] they'll only be positive numbers and we'll tell you, whereever you make a mistake. i put in that piece about making mistakes for a very good reason. i need to give you a message, that tells you everything, about what you did wrong. i must tell you that one of the things that we did, when we were doing some of this, was, we went to, a temp agency and we said we need uh twenty-five keyboard input people. and then we put them in a room, and we actually measured, exactly how they responded to everything and we also watched, we actually had a device that let us watch what they were looking at on the screen, and, how the eye movement went, over the screen. and from the feedback from that, we knew, where we were confusing people. and i must tell you a story about this. um, i wrote a description, an interactive description, that, essentially, gave you some information and required you to respond gave you some information and required you to respond. and i tracked everybody who invoked this piece of software in our lab to use it. i tracked exactly what they did. the vice-president of my group, was a fellow by the name of James Thornton, he was, with the, he was, one of the finest people in the computer business and he, really was a, a brilliant, mind. and he came one day and asked how he could have access to this, and i told him, and then just out of curiosity i went to have a look at what he did. he is the only person who, made one path through the whole thing, without backtracking at all. and it told me everything i needed to know. not only about my program but about him. i had other people who would go round and round and round someplace, not quite getting it, and if a lot of people did that, then i rewrote the script describing what the task was. and i kept on doing this until very few people or, at least there was just one individual who maybe got stuck in there. but if i found everybody was stuck in something, then i knew i had described it badly so i would revise it. and when Jim Thornton went through this thing, and he just went <LAUGH> like, a knife through butter. he just went right through the thing never backtracked once and got <SNAPPING FINGERS> right to the end of the exercise. um well, i had a very good relationship with him anyhow. 
S6: he wouldn't be a very good guinea pig for <LAUGH SS> (xx) (test) (xx) you know because, he (xx) 
S2: oh but i think that that's_ i think it's a very necessary part especially in computer software. um i will tell you that i left the company for whom i did a lot of this, and i had a Hungarian friend who took over the maintenance of all my stuff when i left. and i used to phone him every six months to find out if any problems had cropped up. he had the best job in the business, he could do whatever he wanted. nothing ever happened to the modules he was responsible for. he never had to change one line of code. and that was, not something that was, just, another program. it was the heart of the operating system of a supercomputer, and it was being invoked thousands of times per second. it had to be very robust, and it was. any more questions? i'll be glad to show you some tables, and some of the resulting, things from them. they're gobbledy-gook but they show you the complexity that can be handled. <P :06>
S7: i have one question
S2: yes.
S7: um maybe it doesn't make sense but um, if there is an answer, would it be better to start at one end than the other? do you have, con- a certain number of out comes that can happen the actions that cam happen, let's say that number's X and you have a certain number of, conditions that can get you to those actions, if then (call them Y.) is it better to start with the smaller end the bigger end?
S2: um, i actually address that in the paper. that, uh (as i would like.) it turns out that, there are no blocks here. and in fact, don't worry about covering the whole problem. just start. (so just) remember you can permute it, and you can change the order and you can do anything you want post facto, but just start.
S7: but it it's not going to be a much shorter trip from one end to the other?
S2: i- it's irrelevant, no, no in fact, you'll know what's important and you'll put those on your first list. but it's_ you might find very important ones that you never even considered, but they'll come up later. and when they come out you'll recognize their significance and you'll change the order of things, and you'll fix it up. um, i have know no other, mechanism, that, doesn't block you. this doesn't block you. um in some respects i guess i (have been) told i'm somewhat of a perfectionist, but, i've never had a problem, starting one of these tables. and it's incredible how quickly they grow, because, just the act of putting it down and starting to work with it, is stimulating. and, frankly i don't get my best things done while i'm drawing these pieces of paper i get my best thing when i've worried the problem. i'm i'm i'm not Newton and i'm not worried about gravity, but i have worried the problem and if i've worried the problem, i know my intuition will come through. if i haven't worried the problem i'm not expecting anything either.
S1: for example in our trying to place students and figuring out, we we had certain criteria, we know their placement score, on the written part and the oral part and all the different parts, that enters into it. whether they're an undergrad or or a grad student enters into it maybe Phd [S7: (yeah but all those) ] and the actual criteria 
S7: possible placements may be fewer. the outcomes [S1: ye- yeah ] may be fewer than the, variables going in. should_ so my question was do we start with all the possible combinations of classes a person could take? because that number is probably smaller than all of the multiplication of 
S1: right right no i, i (hear) [S2: turns out it doesn't matter ] i (do) hear what you're saying [S3: it doesn't matter ] but we we'd all_ we'd had some categories in mind and all of a sudden today a new one came up, the major. what the student will need to know for their ma- for their particular major that's a yet another category 
S3: these kind of tables are all in our placement packet. [SU-F: yeah ] [S3: so so if we were doing, ] high heavy writing low writing [SU-F: yep ] 
S3: so if we were doing that kind of a table, we would actually, create one column that would say, maybe courses that we don't have to offer, simply because that would account for errors is that, is that wha- is that like the invalid (courses) 
S2: well you'd you'd enumerate them and then you'd [S3: right ] do a little taxonomy like i did [S3: okay ] for instance i did a taxonomy of the month 
S3: that's beginning to make sense yeah 
S2: i said that there are
<TAPE CUTS OFF BEFORE EVENT FINISHES> 
{END OF TRANSCRIPT}

