Sequencing and Hierarchies
Aug. 6th, 2010 08:14 pmThis is a post with a question for my programming friends. I was going to say that it might also be useful for people who are having trouble falling asleep or who would like to just space out for a while, but then I got all flowery with the language. Still, this is likely the most boring thing you would ever read that involves handcuffs, a gym teacher, a freeze, and beings with a thousand hands.
So, my colleagues are creating a new degree audit system and one of its features is that processing sequence will not be controlled using the same mechanism as is used for creating unique identifiers for each requirement.
Specifically, in the current system, you might number your requirements in multiples of five in the order you want them to be processed. This leaves space to add in extra requirements between current requirements. No matter how many requirements you add or delete, the long-time ones will always have the same "rule number." We actually refer to some requirements by rule number. "Rule 20" is the rule that kicks out duplicate courses.
In the future system, each rule will be numbered in sequence starting with 1 and not skipping any integers. Each time you insert a new rule, the sequence numbers for all the following rules will be adjusted upwards. Meanwhile, each rule will also be assigned an unchanging unique identifier so that references that stick can still be made to it. This all makes sense to me and is obviously a good idea. "It's like Netflix."
Well, Netflix is a great example, but it involves a single list of movies. The degree audit rules are sets of several lists. First you have the list of university-wide rules. Then you have the list of college-wide rules. Then rules for all the BA's in your college versus all the BS's in your college. There are also department-level rules and up to two additional levels of rules. This system thus allows us to, for example, create university-level rules once and update them once each time the requirement changes instead of updating them separately for each of the thousands of current degree programs.
The rules for the different levels can be interspersed. For example, first you calculate the GPA, a university-wide rule. Then you throw out all courses that can't count toward any degree (such as courses with grades of F). Then you throw out all courses that can't count toward your specific degree (such as physics for nonmajors classes in physics degrees). Later you check that the student has taken all the science classes required by the state. Then you check for additional sciences classes required for all degrees earned in the college of natural sciences. Etc.
In the current system, every rule has a number so no matter what level the rule is at, it is after all rules with lower numbers and before all rules with higher numbers. If you want to make sure that the university-wide second-science rule is processed before any college additional-science rules, you find all the additional-science rules in the individual programs and make sure your number is lower than those numbers. That takes a long time, but you can do this--and even have the colleges renumber their rules to make room for your new one--before you add your new one. The degree audit system is working the old way right up until the new rule is added and then it is working the new way. For everyone.
In the new system that won't be possible. There aren't various empty places to choose from in which to slide your requirement. The current proposal is to just stick the rule in somewhere between the first-science rule and the visual-and-performing-arts rule, and then freeze the system until all the programs have been checked, adjusted if necessary, and then officially approved. The new university-wide rule has to be created first; the rules at other levels have to be adjusted afterwards.
Great, so what happens if a degree plan is frozen for two weeks while someone is on vacation, thus preventing anyone from certifying progress toward degree for a football player who will now have to sit out two games? Well, the world would come to an end, that's what would happen.
Is there any other way to do this? Part of my problem is that I don't even know how you program sequence numbers in this situation. There are sequence numbers showing in the front, but how are they connected in the back? I'm imagining rules holding hands (and university-level rules have the most hands of anyone) in a big two-dimensional gymnasium floor. So when you've got two university-level rules near each other, perhaps even holding hands with each other, but sometimes also holding, in their many other hands, several jump ropes made of other rules holding hands with each other. And now you're going to insert another university rule between the these two university rules, but how does that new rule decide where to pull apart all the different jump ropes so it can join them?
Is the default to just stand there, waving its other arms around while all the jump ropes yell, "Red Rover, Red Rover, let the new rule come over!" until the gym teacher picks the spot in each jump rope where it is to stand? Or does it automatically just stand next to the lower-numbered (or higher numbered) rule grabbing that guy's hand plus those of all the other rules that guy was previously holding hands with? Or does it pick places at random? Or does it find the mathematical center?
And what does holding hands mean? Does it mean that the rule associated with one unique identifier is handcuffed to a rule associated with another unique identifier? Or is it more like they are surfing adjacent waves in the sea? My programmers say there are many ways to insert a rule, but the only one I have been told is the add-after method (it gets connected directly to the rule you specify it is to be added after--no parts of any jump ropes would find themselves between those two rules).
Can any of you tell me about some of the ways to do this, specifically how hierarchies are handled in sequencing tasks? I don't even know how to google for the information or how to look it up in a programming book.
P.S. Sadly, I have simplified things somewhat, though I don't think it will affect the answer I am looking for. Specifically, there is also trumping. In the current system, you can have rules at several levels with the same rule number. For example, the university-level requirement that a student have a minimum total GPA of 2.0000 can be trumped by a Plan II Honors Program requirement for a total GPA of 3.0000. When the system sees more than one rule with the same number, it automatically applies the more specific one
P.P.S. I think it goes without saying that I am not a programmer. If you just show me some lines of code, that may or may not do anything for me. I know you guys are good at describing strategies in English, too, a language with which I am much more bettery than programming languages.
So, my colleagues are creating a new degree audit system and one of its features is that processing sequence will not be controlled using the same mechanism as is used for creating unique identifiers for each requirement.
Specifically, in the current system, you might number your requirements in multiples of five in the order you want them to be processed. This leaves space to add in extra requirements between current requirements. No matter how many requirements you add or delete, the long-time ones will always have the same "rule number." We actually refer to some requirements by rule number. "Rule 20" is the rule that kicks out duplicate courses.
In the future system, each rule will be numbered in sequence starting with 1 and not skipping any integers. Each time you insert a new rule, the sequence numbers for all the following rules will be adjusted upwards. Meanwhile, each rule will also be assigned an unchanging unique identifier so that references that stick can still be made to it. This all makes sense to me and is obviously a good idea. "It's like Netflix."
Well, Netflix is a great example, but it involves a single list of movies. The degree audit rules are sets of several lists. First you have the list of university-wide rules. Then you have the list of college-wide rules. Then rules for all the BA's in your college versus all the BS's in your college. There are also department-level rules and up to two additional levels of rules. This system thus allows us to, for example, create university-level rules once and update them once each time the requirement changes instead of updating them separately for each of the thousands of current degree programs.
The rules for the different levels can be interspersed. For example, first you calculate the GPA, a university-wide rule. Then you throw out all courses that can't count toward any degree (such as courses with grades of F). Then you throw out all courses that can't count toward your specific degree (such as physics for nonmajors classes in physics degrees). Later you check that the student has taken all the science classes required by the state. Then you check for additional sciences classes required for all degrees earned in the college of natural sciences. Etc.
In the current system, every rule has a number so no matter what level the rule is at, it is after all rules with lower numbers and before all rules with higher numbers. If you want to make sure that the university-wide second-science rule is processed before any college additional-science rules, you find all the additional-science rules in the individual programs and make sure your number is lower than those numbers. That takes a long time, but you can do this--and even have the colleges renumber their rules to make room for your new one--before you add your new one. The degree audit system is working the old way right up until the new rule is added and then it is working the new way. For everyone.
In the new system that won't be possible. There aren't various empty places to choose from in which to slide your requirement. The current proposal is to just stick the rule in somewhere between the first-science rule and the visual-and-performing-arts rule, and then freeze the system until all the programs have been checked, adjusted if necessary, and then officially approved. The new university-wide rule has to be created first; the rules at other levels have to be adjusted afterwards.
Great, so what happens if a degree plan is frozen for two weeks while someone is on vacation, thus preventing anyone from certifying progress toward degree for a football player who will now have to sit out two games? Well, the world would come to an end, that's what would happen.
Is there any other way to do this? Part of my problem is that I don't even know how you program sequence numbers in this situation. There are sequence numbers showing in the front, but how are they connected in the back? I'm imagining rules holding hands (and university-level rules have the most hands of anyone) in a big two-dimensional gymnasium floor. So when you've got two university-level rules near each other, perhaps even holding hands with each other, but sometimes also holding, in their many other hands, several jump ropes made of other rules holding hands with each other. And now you're going to insert another university rule between the these two university rules, but how does that new rule decide where to pull apart all the different jump ropes so it can join them?
Is the default to just stand there, waving its other arms around while all the jump ropes yell, "Red Rover, Red Rover, let the new rule come over!" until the gym teacher picks the spot in each jump rope where it is to stand? Or does it automatically just stand next to the lower-numbered (or higher numbered) rule grabbing that guy's hand plus those of all the other rules that guy was previously holding hands with? Or does it pick places at random? Or does it find the mathematical center?
And what does holding hands mean? Does it mean that the rule associated with one unique identifier is handcuffed to a rule associated with another unique identifier? Or is it more like they are surfing adjacent waves in the sea? My programmers say there are many ways to insert a rule, but the only one I have been told is the add-after method (it gets connected directly to the rule you specify it is to be added after--no parts of any jump ropes would find themselves between those two rules).
Can any of you tell me about some of the ways to do this, specifically how hierarchies are handled in sequencing tasks? I don't even know how to google for the information or how to look it up in a programming book.
P.S. Sadly, I have simplified things somewhat, though I don't think it will affect the answer I am looking for. Specifically, there is also trumping. In the current system, you can have rules at several levels with the same rule number. For example, the university-level requirement that a student have a minimum total GPA of 2.0000 can be trumped by a Plan II Honors Program requirement for a total GPA of 3.0000. When the system sees more than one rule with the same number, it automatically applies the more specific one
P.P.S. I think it goes without saying that I am not a programmer. If you just show me some lines of code, that may or may not do anything for me. I know you guys are good at describing strategies in English, too, a language with which I am much more bettery than programming languages.