
N AN EARLIER ISSUE of this magazine we noted that in the approach to the 1997 general election the public debate on constitutional issues covered a wider range of topics than perhaps ever in the history of the British Isles . Regrettably , after the date of the election was announced these issues were almost ignored as the party propagandists and the editors of the news media concentrated their thoughts on the corruption seemingly then inseparable from political life . The serious consequences of this unbalanced approach aggravated one of the greatest weaknesses of the British style of democracy ~ the confrontational two-party system that suppresses those issues neither of the two main parties wishes to have fully discussed , and then claims that the winning party has " a mandate " to execute whatever policies have been included in its manifesto , whether or not they have been adequately debated in public . The electorate that traditionally accepted the limitations of the system has begun to question it , partly because there is growing unease about the competence and integrity of the nation 's politicians , of course , and partly because a constitution which is not yet proved to have " broken " is about to be " mended " for no obviously rational purpose . Voters now have to recognise that if they supported Tony Blair because they believed John Major to be incompetent , they are claimed as supporters of a Scottish Parliament ( and to have voted for the disintegration of the United Kingdom that may one day follow in consequence ) . But voters who supported John Major because they believed Tony Blair to be soft on militant Trade Unionism can be claimed as supporters of near-total privatisation ( and to have voted for the consequent economic disintegration that will afflict the more geographically remote regions of the United Kingdom ) . This View from Westminster column looks at one aspect of the weakness of a system that allows governments to claim imaginary support for specific measures on the basis of the generic support manifested by an election victory . This is the threat to the nation 's constitutional stability offered by Labour 's intention to " reform " the House of Lords into a kennel of obedient poodles dependent on the patronage of an elected dictatorship . A View from Westminster Tom and the House of Lords A S A YOUNG OFFICER in a county regiment he had been wounded in 1918 and still limped . In 1939 he carried a stick both when he was in uniform , a major in the Home Guard , and in a tweed suit , the headmaster of a village school . Although he would not have known it , he was the " Middle England " of the war years . Tom was a small man , slight of build , who carried authority as one born to it and treated all who met him , staff and parents and pupils , with great dignity and kindness . He was a disciplinarian who believed in the virtue of hard work , the inculcation at an early age of team spirit ( the " British " quality he insisted would win the war ) , and the encouragement of ambition through the promotion of individual competition . In consequence his school of 150 children aged between five and ten was well-drilled ( an essential factor in the management of young children during air raids ) , played football and cricket ( the boys ) and hockey and cricket ( the girls ) , and strove for academic excellence . ( Pupils who performed badly were helped with improved teaching , not with requests for more money . ) During the period I knew Tom , only one child passed his seventh birthday unable to read . ( Little was understood about dyslexia in those days , but Tom recognised that a boy who was average in arithmetic and played games well could not be stupid and took him for personal tuition . ) In the senior class occupied by the ten-year-olds a typical examination question * required the calculation of the time taken to fill a swimming bath with water flowing at a constant rate ( gallons per minute ) . The bath was rectangular with the addition of a level half-circle at one end and a constant slope down to the other end . The cubic volume of a gallon of water was given as a rounded figure . ( A teacher recently confessed that most of her class of fourteen-year-olds would be unable to calculate the correct answer , even with the pocket calculators unknown in Tom 's days ~ but , this being England in 1998 , many in her class could not have read the question anyway . ) Tom has gone now , as did his education system as soon as the reformers seized power . Discipline was judged harmful to the full development of a child 's latent abilities , so the neat rows of desks seating attentive pupils were replaced by scattered groupings of noisy and distracted rebels . Competition , with its inescapable consequence that if one child is to win ( that is , to be rewarded for its effort ) , another will appear to lose , was deemed to destroy a child 's confidence . Games that required physical stamina were discouraged because gifted children made their less gifted friends feel inferior , a deficiency inconsistent with a world in which all were to be equal . And thus to achieve the parity these social engineers sought , there was a levelling down . The fall in educational attainment in British schools , for which anecdotal evidence was overwhelming , was hidden by the reformulation of " standards " and highly prejudiced reports . Centres of excellence were almost wholly destroyed in the state-financed sector while plans were laid for the abolition of the private sector , necessary measures to eliminate comparisons . But the world moved on and grew smaller . New comparisons appeared , this time with the nation 's commercial competitors . Asian students living thousands of miles away were two or three years ahead of their British counterparts . Asian students living in the next road and attending the same school were , in response to the encouragement of their parents , studying hard and achieving more than their indigenous classmates . The Germans and the French , the Dutch and the Belgians were all leaving school with better mathematics and science , two or more languages , and going into better jobs . In the United Kingdom the illiteracy rates were becoming evermore horrific and a new generation of social engineers had become forced to recognise a new cycle of deprivation . Britain at the time of Rab Butler 's Education Act had a traditional system of education that worked . Butler 's measures did not set out to " mend " it ( because it was n't " broken " ) , but did intend to improve it . His measures succeeded , but unfortunately the social engineers who followed Butler had a different agenda . They wanted to restructure society . To do so they were willing first to destroy it . While today all the major political parties can recognise the awful state of British education , they can agree neither on the causes nor the cures . The most recent scapegoat has been the " lack of leadership in the education profession " ~ yet really there has been no lack of leaders , merely a shortage of leaders willing to recognise that what had not been broken should not have been mended . From the masses available , one anecdote should suffice . A six-year-old boy left his village school ( two classes , two teachers , fifty pupils , an ancient building ) when his father 's work took him to a new post . His new school was modern , larger , and its teachers younger with better qualifications , but he very quickly became unhappy . At home he was uncharacteristically ill-behaved . At school his conduct deteriorated to such an extent that the headmaster asked his father to come for a meeting . The father quickly recognised the headmaster to be a natural leader who appeared to understand his job , was eloquent and expansive in his explanations of what was wrong with the boy , and was sufficiently self-assured to countenance no theories other than his own . The principal factor in the creation of the problem was the boy 's father , who obviously expected far too much . That the boy had been taught to read while so young was manifestly wrong , just the sort of mistake these little village schools always made and reactionary parents ill-advisedly encouraged . Now the boy was incapable of working within his own age group , which would not make a formal start to reading until next year , so for his own sake he was to be pushed backward . He would be helped to forget that he could read . He could thus be prepared to fit in with his classmates when they started . The father was asked to ensure that the boy had no access to books at home . The critical factor that justifies the telling of this anecdote is that this headmaster was an intelligent man , albeit of extreme left-wing political views , who truly believed that a fairer and more honest society would be built if the education system could be manipulated wisely . He and his fellows have led the English education system for three decades , almost uncriticised by the major political parties until this last couple of years . Now , far too late for millions of young Britons , far too late for the health of the nation 's industrial economy , British education is to recognise once again the benefits of Tom 's principles . Schools are to return ( slowly , because there will be substantial opposition from some sections of the teaching community ) to disciplined learning and the encouragement of hard work . Tom believed in the greatness of Britain and the benefits the British Empire spread around the world . He believed in the " British way of life " and the virtue of its system of government . He believed in tradition and would never have agreed to anything of well proven value being destroyed to engineer social changes of doubtful or impractical benefit . Tom would never have agreed to what the reformers did to the education of British children . He would have asked first why his system was wrong ~ and he would have received no rational answer . Tom would never have agreed to the dismemberment of the United Kingdom . He would have asked first for an analysis of the losses the Union had created , of the suffering it had inflicted ~ and , again , he would have received no rational answer . Tom would never have agreed to the abolition of the rights of hereditary peers . He would have asked first what damage had been done to the nation , during the lifetime of the oldest Member of Parliament , by the present operation of the House of Lords . He would have asked who stood to gain from the elimination of voices at Westminster who were independent of government patronage . And , yet again , he would have received no rational answer . Tom might never have said , " If it ai n't broke , do n't mend it . " That was not his language . But he would have been the first to stress the unwisdom of wantonly destroying any institution that can demonstrate the value of its contributions , especially when the destruction is irreversible and the supposed benefits of that destruction remain unspecified by its advocates . And , speaking for a people who today find their parliamentary representatives increasingly unrepresentative , he would have questioned the sanity of those who would with Britain 's traditional system of government commit the same tragic errors perpetuated by the social engineers let loose thirty years ago in our traditional educational system . *The typical examination question mentioned above was : Calculate the time taken to fill a swimming pool shaped as a rectangle measuring 30 yards by 15 yards with an additional semicircular pool of radius 14 feet attached . The semicircular pool is 2 feet deep . The rectangular pool is 3 feet deep at the edge of the shallow end and slopes down to 9 feet deep at the edge of the deep end . The water flow is 60 gallons per minute . Take one gallon of water as equal to one-tenth of a cubic foot . Show ALL your working . 