One of the aspects of standardized tests (such as SAT, TOEFFL, GMAT etc.) is the necessity to make all the calculations involved either in your head or with the aid of pen and paper. Another thing is solving questions under pressure. The third one is very limited technical material (the standard formulae sheet is all you can use). Those requirement has raised several questions over the years – why is this so important? And also, why this one test and single grade affects our chances of qualifying for certain college to similar (and even sometimes greater) extent to that of graduation (or first degree) marks, achieved during years of hard work. Is it fair? What’s wrong with formal education? Why do we need more tests? There is an answer to those questions – and I will try to draw the basic lines of it below.
The formal education, had set a course and, unfortunately, has followed it thoroughly throughout the years. “Unfortunately”, because in pursuit of teaching the students more and more TECHNIQUES, school programs tend to omit the necessary ANALYSIS of them. “That’s how it done – and why it is true is really not so important. I will show you once, but you don’t need to remember that. Just remember how to use/apply this rule”. These are the sort of sentences said and heard all over – from elementary schools to respectable universities and colleges. Usage over comprehension. In addition, notice the word “remember” in the above sentence. With the phrase being awkward enough in the content alone, another crime is committed by forgetting completely about the need to UNDERSTAND and COMPREHEND (even just once) the proof/reason behind certain technique.
That’s why questions posed differently will always cause problems for the students and graduates. Here is a simple problem presented in a job interview to a programming position:
Write a program that will get two natural numbers from the user and return them in the ascending order – first the smaller number of the two and then the larger one. DO NOT use operations of comparison.
Well, any beginner programmer knows that this is actually easy – get two numbers from user (basic commands), store them in two variables (basic commands). If the first is smaller than the second – print it, then the other. Otherwise – vice-versa (simple comparison…. Oh…)… It is no good. We have COMPARED the two numbers – and that’s forbidden.
Ok, let’s try another way around. After we have received the two numbers from the user, let’s subtract the second number form the first one. If the result is negative (the second is bigger, and it goes second) – print the first number first. Otherwise – vice-versa. Oops. Not good again – we have COMPARED the result of the subtraction to zero.
Well, this is exactly what standardized tests are about – and also, exactly why they are so important. SAT, GRE and such are trying to check (among other things) our ability to “think out of the box”. The formal knowledge is of little meaning here. One should look at the problem from a different perspective. Not just to APPLY the TECHNIQUE, but to show UNDERSTANDING. After all, all of our education process cannot foresee all the upcoming challenges. Education’s main mission is to equip us with tools to cope with the unexpected. And although techniques are important, understanding should NEVER be neglected. That’s why people in various countries had invented diverse standardized tests, which are, in fact, all pretty alike. Opposed to the formal testing (graduation exams, entry-level test etc.) they strive towards evaluating one’s ability to cope with something he or she had never “even heard of”. And that is very important part of an education process.
Let’s get back to the problem above – I will not leave you wondering how to solve this one. The solution is, in fact, pretty easy, and it is mathematical (and logical) rather than coding-related. Most people know that to calculate the average, you need to sum-up the numbers and divide by the number count (two in our case). It had probably not occurred to most people, however, that the average can also be calculated by subtracting the numbers and adding half the result to the smaller one (or subtracting it from the larger one – I won’t explain it now, but I WILL in another article). Thus, to get the larger number we have to add the half-sum to the ABSOLUTE of the half-subtraction. That’s the solution to our problem! Get the two numbers, store them as variables (a,b) and then print the smaller one: (a+b)/2 – |a-b|/2 ; and then the bigger one: (a+b)/2 + |a-b|/2. Check it, it works!