Tuesday, October 24, 2023

Genotype Fair

 

Genotype fair


Pilgrimage towards less reproduction, but more fun trying...

Das ist nicht nur nicht richtig, es ist nicht einmal falsch!
Wolfgang Pauli

Hitler never could manage eugenics, partly because of his politics, but mainly because he just did not understand that in biology saying it’s so don’t make it so.

Not that I say he was wrong, mind you — biologically meaningless ideas cannot meaningfully be called wrong: if something meaningful is wrong, its negation is in some sense right, even if trivial; on the other hand, if I conclude that it is untrue that “Solid vortices do corrode dynamic esurient dispersion”, I then find myself in difficulty when trying to confirm instances where “Solid vortices do not corrode dynamic esurient dispersion”. When both assertions neither can be right nor wrong, they are meaningless. This commonly happens with non-issues arising from confused ideas and delusions. And in its fact-denial and issue-evasion, Hitler’s ignorant Aryanism made about as much biological sense as any tooth fairy assertion; he would have fitted perfectly into the politics of plenty of our modern fascistic demagoguery, except that he had too much style to wear a gimme cap.

In fairness, few eugenic practices in history have made more practical sense than Hitler’s, except maybe the Spartans’ leaving new-borns out for a night. Why Spartans wanted to select for neonatal brown fat and unattractiveness to foxes, I cannot think, but it probably was more effective than shrieking about Aryans or whining about lost elections, or similar lunacy.

But, back on planet Earth, we’ll never have a more constructive time than now, ripe for some realistic, compassionate, biologically valid, socially responsible, eugenics; our planet has been peaceful for centuries, except for a few inter-tribal squabbles and pandemics, none of which has substantially threatened global population growth, and we are not yet so poor that we can’t afford biometricians, population trend tracking, pop stars, and tobacco companies. Our current population is perhaps twice what our planetary welfare can constructively bear, but not yet so great that we are destroying anything but planetary clutter, such as whales, frogs, and rain-forests.

Of course humanity needs a more efficient and stringent thinning mechanism than war, say a more lethal and universal brand of football hooliganism or political sloganeering, but some violent factions nowadays disapprove of violence, and they kill people to prove it. So let’s consider alternatives. China made a militant gesture with the one-child-per-family law; it was grossly ill-conceived, but it did at least show that population control could be possible.

Humanity’s long suit at present is our planetary population. It currently is large enough and varied enough to give us plenty of genetic material to select from. As long as selection is equitable and self-regulating, everyone must surely approve. And what is fairer than permitting everyone in the world one live-born child (implying two children for a contracted couple)? Anyone illicitly having more, we reasonably might treat very, very counter-selectively! This would reduce the population gently but quite quickly because many people want no children, and some die before reproducing. We might halve our numbers in say, ten generations.

So we can under-propagate ourselves to extinction, but wouldn’t nukes be faster?” I hear you cry. But a population control scheme on such lines would cause less collateral suffering and destruction of assets than war or nukes would (consider say the thirty-years war, or Hiroshima, or Tokyo) and it also would serve higher objectives than just being limited to population reduction.  Population reduction in itself after all, is at best a nihilistic negativism; intelligent population control would be a powerful tool for selection without genetic impoverishment. It permits propagation of cystic fibrosis, thalassaemia, dystrophy, spina bifida, Ringo’s nose, groupies’ tone-deafness, and other contributors to the richness of our gene pool.

Conversely, we need not specify the biological parents of anyone’s child ration; let them make their own choices.

And in my opinion it probably  would tend to increase parents' sense of responsibility and commitment to their children, in comparison to current (and past) generations, in which the prevalence and variety of child neglect and abuse is endlessly nauseating. And all that while people are making horrified noises about anything as blasphemous as family planning. 

A thought for the unthinking fundamentalists among readers: God said: "Be fruitful, and multiply, and replenish the earth, and subdue it: and have dominion  over the fish of the sea, and over the fowl of the air, and over every living thing that moveth upon the earth..." He did not suggest that mindless multiplication was fruitful, nor that wanton, selfish destruction or extermination of His creations was compatible with dominion. 

Of course, if we were to put any sort of constraint onto any person’s right to reproduction, it would be no more than reasonable to assist in their production of the best possible offspring of their loins. 

Fruitfulness, right? 

If someone is known to carry any seriously deleterious genes, the state should support and pay for genetic selection of the gametes or embryos to produce the most desirable offspring that could practically result, as the parent sees it. It would be better of course, to consult in advance the preferences of the child instead, but that is not foreseeably possible, so we can at best recommend the best options of health, social compatibility, and capability.

One hoary bogeyman is the fear that fashion or politics would skew the population into disastrous trends; however, that is nonsense. The only constraint in this context, should be to forbid any preference for either male or female children. That might be easier in a given community, say within a city or county or the like, where it might be desirable to negotiate babies’ gender to maintain a healthy ratio, but otherwise, there should be direct proscription of gender choice or determination.

Again, there is a dread of skewing the emergent population composition according to prejudice, power, fashion, or traits. That is another impotent bogeyman: it would not matter a scrap to the community if some insane billionaire were to pay a thousand families to propagate his genes, or even his clones, as their own children, instead of their own genetic material, on a basis of “willing buyer, willing seller”. The rest of his project would be legally subject to everyone’s health, and in a population of billions, a few thousands of one genotype would be too trivial to be excited about. They either could be inviable, in which case they would rapidly breed out of the population, or they could be highly viable, in which case everyone would be happy. Or they could on average be within one or two standard deviations of the population mean for most practically practical purposes (they call it reversion to the mean) in which case there would be nothing for most people to complain about, including the foster families. 

The only legal constraint that the authorities might insist on, could be to register each child's parentage and genotype, to avoid inbreeding or related problems.

Individual prospective parents could be encouraged to use information from the Human Genome Project to negotiate genetic engineering or adoption or conception by outsiders, as long as the rigid rule for routine cases remains in force: single children for single parents and six-packs for contracted menages-a-sixe, and no monkeying with the gender ratio.

A rule of this type would favour desirable genomes without special compulsion or prejudice, because the incompetent, inviable, and apathetic would propagate poorly. If they chose to offer their breeding licenses to rich folk for binge money, instead of lumping themselves with expensive children instead of lottery tickets, that would be their personal choices. No problem. 

Furthermore, it could reduce the persistence of harmful, in fact tragic, recessives such as Tay-Sachs disease and thalassaemia, as well as genetic accidents such as Down’s syndrome or haemophilia. Then, once population numbers were suitably reduced, demographers could exploit the slack to breed actively for desired biological quality — nothing Hitlerian: suppose the demographers decided that a surplus of ten thousand were desired for a given county some year. I suggest say, a three-way allocation of those ten thousand spare reproductive slots: one third of the slots could be allocated by government invitation based on certified, publicly audited, desirable and willing performers, according to recommendation by medical councils and the like; one third could be invited by public vote for extra child tickets for popular heroes who had expressed their support, and they could be chosen irrespective of whether they were pop stars or sports champions or other major achievers.

The remaining third of the slots would be for the nobodies like us, allocated by public lottery, together with cash prises. Purchases of multiple tickets and auction of unwanted winnings would be encouraged, always on a willing-buyer-willing-seller basis. The lottery funds could go to suitable benefits such as the upbringing of some proportion of the children.

A reasonable slice of the lottery profits could be allocated to cash prizes for casual gamblers, as well as support for winning parents. And why not? The most successful systems are the ones that run designed to run downhill; if you want spontaneous virtue, you must organise it. No one need enter such a lottery, but with many cash prizes and a few reproduction tickets, no one need be pressured to do anything undesired with his winnings. It even could be arranged to pay back most of the ticket purchase prices, or to offer a free ticket for the next round, to losers who have bought more than one ticket..

Such selection of parents among lottery winners and according to popularity and audited medical assessments would support rapid evolutionary progress without reducing diversity. Genes sufficiently unfit would lose ground to beneficial “extended phenotypes”. Objectors fear that fads would doom us to a uniform population of Michael Jacksons, or fashionably engineered designer genotypes, or something equally nauseating. But our gene pool has the size and resiliency to outlast fashions and even to benefit from them. Ideals of beauty or of non-functional excellence change several times per generation and usually correlate significantly with good fitness anyway. 

After all, just think: suppose a Schwarzenegger or a Woody Allen or a Madonna did sell a couple of million somatic cells for cloning, or gametes for zygotes for implanting, before the fashion changed in favour of some other caricature; those would be a drop in the bucket, and probably a generally beneficial drop at that; even superficial notoriety generally is associated with some above-average genetic attributes.

Suppose too that someone actively wanted a genetically engineered child from their own genetic material instead of from haphazard mating; as long as the engineers in question could certify the practice and the genetic quality of the output, whether by cloning or otherwise, why should there be any objection, except possibly to a choice of gender? Such a child generally could be expected to be socially desirable anyway.

Again, no matter what the apparent stupidity or nastiness of prominent sportsmen and public figures might be, such figures tend to have a better genotype than the average groupie. And even if notoriety does boost the reproductive success of publicity-plumed cuckoos, I suspect that when the novelty wears off the predominant tendency among rabble eager to improve their line would be towards a surprisingly sensible selection of gametes. Possibly even their own.

Religious objections? The only religious objections relevant to one’s own choices, could be to that of limiting one’s own reproduction. 

Tough if that is the way they feel about it; if your religion compels you to go out and kill people, the laws in most countries forbid it as being anti-social, no matter what the ecclesiastics demand. The same applies here: people who wish to propagate ad libitum at the expense of society cannot expect society to support their preferences or selfish demands. Any moral or religious objections to other people’s approved choices are socially as irrelevant as other people’s religious choices, and are not subject to anyone else’s personal judgement.

Sex...???

Oh that!

Why, sex could at last assume its proper functions of fun and bonding instead of listening to idiots who irrelevantly confuse the issue with rights to reproduction. What a selection pressure that will apply! By all means let anyone who wishes to reproduce by sexual activity do so, whether with a contracted mate or otherwise; that would be largely irrelevant. It only would have to be subject to the same restrictions as any other means of reproduction: one parent, one child at a maximum; ten parents, ten children, even if only one of the ten is a (willing!) woman. If you use up your ticket, do not expect any favours, unless you want to buy a lottery ticket.

Unfair? How could it be unfair? Certainly someone rich enough to buy other people’s reproduction tickets could do so, but that is no different from rich people at present  being able to buy more and better cars than I can afford. 

Or lottery ticket holders winning prizes that I failed to win.

But what about a lottery winner who lacks the money to support the pregnancy and parturition, and raise the child?

That is a separate question: every birth should be state-supported, including food, health care, education, and general welfare. And what happens after the child grows to majority is a different question, but not a novel question.

I realise that some people will oppose the very principles of population restriction or population improvement as blasphemous, but I decline to consider such objections before they have been supported in meaningful terms.

Meanwhile think about it, but tread gently in your thoughts; you tread on our future.


Evil's Existence

Evil Existence?

 

A sting to a tale

 

I cannot remember how much of the following text is my own, or how much of it I based on a lying claim that has become an online cliché, so, if I am plagiarising anything non-trivial, I apologise in advance. In contrast to the liars, I do not claim that my version of the confrontation is literally true.

And what point am I making...?

If that is what you ask as you reach the end, you have answered your own question; and I hope that you have done so to your own gratification.

A professor asked the students : “Did God create everything?”

One said: "Yes, he did!"

According to the bible, and to various religious sects, yes, God was the only creator; to suggest that anyone else, angel, devil, or human, created anything else, directly or indirectly, would be blasphemy” the professor continued. "If so, then God created evil, since we see evil everywhere, and since God is omnipotent, omniscient, and omnipresent, it follows that the creation was deliberate, making nonsense of the myriad of mutually contradictory Abrahamic faiths that extol the antipathy of God to evil".

The student subsided.

Ignoring his friends’ snickers as calmly as he ignored the authority of the professor, another student asked, "Professor, does cold exist?"

"In what sense of existence? "

"My point professor, is that cold does not exist. What we consider cold is in reality the absence of heat. Absolute zero is the total absence of heat; all matter becomes inert and incapable of reaction at that temperature. We have created this word to describe how we feel if we have no heat."

Well done for independent thought,” said the professor “though your understanding of absolute zero, and accordingly of cold, is deficient. According to physics and ignoring certain technicalities, absolute zero is not attainable even in principle, and however cold you can make something, it always is possible to make it colder, though the temperature is asymptotic to what we call zero Kelvin. And even at zero Kelvin, matter is not fully inert; this follows from the basic concepts of quantum theory and information, which as it happens are beyond the scope of this module. 

"But your point does not follow; cold is relative, a difference in levels of heat, not an absence. And, in physical terms, relationships are in themselves real, so your claim is suspect at the very least.

Whenever something is a lot less hot than something else we may elect to say, in relative terms, that it is cold. Or cooler at least.  For instance if I dip a rod of ice, cold enough to cause frostbite, into liquid air, it is hot enough to cause that liquid to boil. If I dip a thick red-hot iron rod at say, 700K, into molten iron at say 1812K and pull it out again soon enough, it will come out white hot with extra iron welded onto its outside because it is cold enough to freeze the molten iron. So you need first to clarify what you mean by freezing cold; it is not the simple absence of heat, or if it were nothing but that, there never would be any cold anywhere.

Furthermore, if you dip one hand into ice-cold water and another into hot water at say 50 Celsius, then after a minute take them out again and put both hands simultaneously into another basin of water at a comfortable room temperature, then the one hand feels as if it is in hot water, and the other as cold. Hot and cold are relationships, and not necessarily in every sense symmetrical relationships.

Apart from any idea of cold though, your question ignores the nature of the concept of existence itself, which, semantically, is a treacherous topic; in fact, to save you unnecessary searching, I warn you that existence is not cogently definable except in terms of what effect any item of existence or non-existence may have on relationships within the light cones of the relevant locally existing entities. 

It follows that cold definitely does exist by many measures in many contexts. By all means come back and contradict me once you have investigated the subject adequately.”

The student persisted, "Well then Professor, does darkness exist?"

The professor responded, "Much as the concept of cold is relative and context-dependent, so the concepts of light and dark are relative and context-dependent. Darkness is not to be defined absolutely in terms of how much light, but also what form of light (whether at visible or invisible frequencies, collimated, polarised, or diffuse for example) may be present at given coordinates; arguably the question is even more troubled than that of the existence of cold. What is dark to a bee in red light, which it cannot see, might be quite clear to me, because I can see in red light. The bee in turn can see in near ultra-violet, which would look like darkness to me. If I come out of dazzling sunlight into a room that looks brightly lit to someone coming out of a darkroom, it might look dark to me until my eyes accommodated to the ambient illumination. 

It is perfectly possible to argue in proper contexts that cold and dark may exist as relationships, but not as absolutes. For one thing, you cannot have absolute darkness except at absolute zero, and, as I already have noted, you cannot get to absolute zero. You could save much of your effort and my time if you prepared your thoughts and questions more carefully in advance."

"Professor, I think you are being unfair; you have had longer to prepare these points than I did, but in the context of your original question, does evil exist?"

"You still have not said what you mean by existence. I never mentioned existence in any such context at all; the term as applied to cold or to dark, or to trees falling unheard in forests, or to clouds, or to the stool over which you trip, or the hole into which you fall, means different things. As I already have said of course, God, having created the world and all that is in it, including all the relationships within it, would be responsible for everything happening in it, or existing in it, including man's inhumanity to man, or beasts' beastliness to beasts. Whether or not nature might be evil, it seems evil as God created it full of suffering and pain — suggesting a malicious creator. You may have read Fitzgerald’s Rubaiyat of Khayyam:

‘...For all the sin wherewith the face of man
    Is blackened, Man’s forgiveness give — and take. "

The student replied, "Evil does not exist professor, or at least not unto itself. Evil is just the absence of God. It is just like darkness and cold, that you affirm do exist, a word man created for the absence of God. God did not create evil. Evil is unlike faith or love; those exist just as light and heat exist. Evil is the effect of the absence of God's love when man excludes God from his heart. In that way it's like the cold that comes where there is no heat or the darkness that comes where there is no light."

Your passion does you more credit than your sense, but on the principle of ‘''nullius in verba''’, we need not accept your unsupported assurance that cold or dark do not exist, either more or less than faith or love or hatred or treachery do or do not exist, or in what forms and circumstances they are in themselves evil; the unsuitable intensity of either too little or too much heat, is harmful when it is more than we can bear. Similarly, faithfulness or love are good only in the right intensity at the right time and in the right application; you would not regard faith in or faithfulness to the devil, or love of evil, as good, I hope? Atrocities and tragic absurdities throughout history and in everyday family and community life have been justified in the name of faith and love, and it still happens all around us.

"Consider first for example what you mean by existence: existence is a challenging thing to define, and you do not seem to have taken sufficient care in defining it, even in your own terms. First of all, you need to consider the concept of 'entity', what we might call a 'thing';  to exist in any defensible sense, the presence and absence of an entity must in some ways affect events differently. That is one basis for definition of existence itself. And relationships between entities, such as cold or evil, accordingly are themselves entities as real, and with as definite existence, as any other entity: whenever they mean anything at all, they make differences.

And evil too, is a relationship between a deed and its intent, and the entities affected by it. Love and faith, like cold and anger, when in a favoured cause or directed to a favoured object, do good from some points of view at least, but when not, they do harm, and may be seen as evil, or seen as evil to one, but good to another. The fatted calf could not have shared the joy at the return of the prodigal, any more than the faithful brother did. When one man in a war dies for his country, the man who killed him, whom he would have killed to die for his country was evil from his point of view, but a hero for the other country.

"Two heroes for the price of one, and two villains into the bargain.

Nor are faith or love, as relationships, in any way either more or less existent than evil; certainly the so-called holy scriptures say nothing of the kind, so what is your authority for such claims?

Furthermore, in spite of your assurance, the Word of God does not say that evil is the absence of God; in fact the bible does explicitly say that God is omnipresent, even if you take the wings of the morning; remember? So, how is God to be excluded from the evil or its source? And who are you to assert that it does not exist when god is absent, if he ever could be? There are plenty of biblical texts that speak of evil as something existing in itself; consider the like of: 'I cannot escape to the mountain, lest some evil take me', or 'Wherefore have ye rewarded evil for good?', or 'Thou shalt not follow a multitude to do evil'.

Let’s not blaspheme by making unsupported assumptions about a human’s paltry ability to exclude him in contradiction to scripture, contradiction to God's word, shall we?

As Stephen Fry said: ‘You can't just say there is a god because the world is beautiful. You have to account for bone cancer in children’; whose exclusion of God from whose heart causes that cancer, or other evils, would you say?

Now meanwhile, what are the rest of you laughing at? You lacked the sense to ask, and the nerve to argue; you should be ashamed. If you must laugh, laugh at yourselves.”

 

Any reader might object that this professor seemed to be unfairly well prepared with arguments, positively glib in fact, but no professor would be worth his salt if he presumed to raise such a topic in class, without being properly prepared.

Incidentally, in contradiction to the claim that prompted this account, this rebellious young man, whatever his name might have been, had nothing to do with the more famous Albert Einstein; neither Einstein's views nor his parentage match those asserted in the original version of the story. Even if the details had matched, that would have added nothing to the merits of the parable.  However, the urge to add puffery to the account is characteristic of the ethics, honesty, and dignity of the sources of such trite religious homilies.


One wonders what sort of person they should impress, and in which direction...

 

 

Friday, October 20, 2023

Program design as a tool in education

 

Program Design as the Tool of Preference in Computer Literacy Education:

Experience, Incentives, Implications


 

Abstract  1

1. Introduction  1

2. Incentives  2

3. Obstacles  3

4. Desiderata  4

5. Generalities  6

6. Key points in the procedure  7

6.1 Introductory remarks  7

6.2 Basic concepts of process  7

6.3 Concepts of data and data manipulation  8

7. Class timetable  9

8. Parthian shot  10

References  10

 

Abstract

Even if you’re on the right track, you’ll get run over if you just sit there.
Will Rogers

Structured program design is a rewarding vehicle for the introduction of problem solution and computer concepts to age groups ranging from mid primary school to senior management. Progressively expanded subsets of the material form natural units after each of which the student may continue to more advanced levels, or stop with a logically coherent grasp of the subject so far. The intellectual and practical value of the concepts are emphasised, together with the speed with which they can be instilled. Material requirements and training aims are illustrated with an outlined instructional procedure.

 

1. Introduction

If it's stupid but it works, it aint stupid
Anonymous

After sociology, psychology, and economics, there are few fields of endeavour that spawn so much philosophical dissension as education. More than most contentious subjects, its product is both real and of crucial importance, but the scope for argument is varied and vast. Firstly, few practitioners of most subjects will agree on the best technical practice; few administrators agree on the selection of subjects or subject matter; few teachers agree on the best teaching techniques for a given subject; and no-one seems to agree on how to assess the results of the teaching. It has been quoted [1] that if computers had existed in the Middle Ages, programmers would have been burnt at the stake by other programmers for heresy. Teachers did burn other teachers at stake in those days, but the practice has largely been discontinued, to the apparent discontent of a large minority of the profession.

In view of this modern exemption from too-literal contribution to public illumination, I herein honour the venerable tradition of amateur contribution to the subject (if not necessarily to its advance). Not all the following opinions and observations are revolutionary and none are contaminated by excessive attention to the theory of didactics; their justification relies on good intentions, strong views on the merits of the subject matter and varied experience in its teaching and application. Those are no guarantee of soundness, but might serve to confuse hecklers. What I most dramatically lack is any pretence to controlled studies or other requirements for academic rigour — not out of disrespect for such, but simply for lack of the opportunity or incentive for the necessary investment of resources. You are invited to consider without prejudice, the plausibility of the views and the promising empirical observations, as grounds for formal investigation or practical application.

It is perhaps a bad sign that I shy away from too tight a definition of one of the key words in the title. Computer literacy — or computeracy, as I prefer to call it in analogy to numeracy — is a term that people airily apply to a number of concepts, ranging from confidence in use of a terminal without any idea of what is going on behind it, to a sophisticated appreciation of a wide range of technical topics.

Various parties invoke vague definitions of the term “computeracy”, based on various levels and assorted criteria of competence. In appropriate contexts, insight into hardware might be one topic, and, at more superficial levels, knowledge of computer languages and data representation. As I see it however, the ability to generate, or at least follow, an algorithm in some familiar notation, is arguably fundamental. At the next level we might rank an ability to apply certain disciplines to the generation of algorithms to solve a reasonable range of classes of problems and to grasp in principle how more advanced problems might be approached. Expression of algorithms in a programming language, plus appreciation of details of the implementation may follow, by which time we decidedly encroach on the territory of programmers, or at least coders.

Such simple computeracy need not in principle be a sound basis for further study, but a student with the will and aptitude should be well placed to continue from any point in the process that I describe here. If my recommendations should yield material and intellectual benefit, I would be gratified.

 

2. Incentives

If you think education is expensive, wait till you have tried ignorance.
Various sources. Possibly starting with John Lubbock

Like almost every practitioner of any subject, I regard mine as being of special educational value and philosophical significance, and my justification is not simply the growing importance of computers in the modern world. The generation and manipulation of abstract algorithms seems to me so fundamental a skill for minds that have the aptitude, that their undoubtedly mundane value is of secondary interest. Their intellectual value I see as rivalling pure mathematics or any applied science, and, as a skill in problem solving, of practical value close to that of the three R's.

So much for the first exhibit.

The next point is that program design is teachable, at least to the calibre of pupil likely to select it as a subject. Teaching, no less than politics, is the art of the possible and it would be criminal to permit computer-related skills to be passed over on the grounds of intrinsic unteachability. In fact, in the subject of algorithmic skills, it seems to me that the main differences between teaching children and teaching adults arise on the one hand from the adults' greater repertoire of familiar skills, and their perspective on problems and requirements arising from their wider experience. This eases the assimilation of certain classes of new skills and gives the instructor more scope in the selection of examples and exercises. At the same time however, it simply might harden their preconceptions, leaving them with more to unlearn, with overconfidence, or with defeatism, in any combination.

On the other hand, children have their own strengths: greater receptiveness to, and retention of, new concepts and procedures as long as they are given the necessary background knowledge at each stage of the learning, and as long as they can immediately apply each point as they learn it. These provisos make certain demands of the instructor in the construction of examples and exercises, but need not be severely restrictive. Also, perhaps because the children I have been in contact with have tended to be bright, they have shown themselves able to cope with abstraction rather better than most naively incomputerate adults.

To me the two most exciting things about the approach that I favour, are firstly that: except in detail, the approach is equally valid for any age group, from post-toddler to sub-decrepit, and secondly that: unlike most syllabuses, it is more or less independent of the pupil’s pre-existing levels of knowledge outside the field. Sometimes, for students entering the course in the context of previous training, even a fair amount of unlearning may be in order (say: learning how to do without gotos; or: when to avoid bottom-up thinking...).

However, in beginning with abstract structured design and justifying the process by demonstrating examples of the fruits of the principle on the computer, one can quickly supply the basic concepts and confidence required for the superficial student on the one hand, while on the other laying the groundwork for any future level of algorithm, data, or procedure design required by the future professional.

The conceptual structure is generalised, and the smallness of the kernel of understanding it requires, should have as much impact on the ease of teaching teachers as on teaching students. Actually, in the right circumstances any keen student is likely to achieve more in the application of computers than one might predict from his rated academic level, if the work of such as Papert [2] is anything to go by. What the application of computer facilities does for computer literacy, is a subject in itself, but apt students are likely to apply structured thinking to external problems solving as well. 

Note that this essay is no diatribe against bottom-up work; anyone who regards bottom-up design as undesirable on principle, or against designs that are not based on procedural programming or linear logic, has a long way to go in computer theory and practice, but such considerations are not relevant at the point of program design relevant at this point in the student's education.  

 

3. Obstacles

Better to understand a little than to misunderstand a lot
Anonymous

Perhaps because of its youth, computer/information science is rarely taught with any great technical competence in schools outside the field of Information Technology. All the best practitioners are too busy earning a living and sneering at the products of the educational institutions, to contribute much to solving the educational problems. Teachers still tend to lack the in-depth experience necessary to appreciate the merits of those disciplines that have been shown to contribute to sound practice. (“Don’t waste your time on all that fancy indentation, comments, and variable names; get on with the job!!!”)

Also, unexpectedly in view of the simplification introduced by the more popular of current techniques, it seems to demand of teachers that they master in advance, a surprisingly sophisticated grasp of the principles, if they are to impart them with conviction.

None the less, the simplicity of top-down design in the form of structured programming is there, and enables one to produce in a short time and without tears, students who are house-trained and have a sound basis for further development.

Frustrations that beset anyone with views consistent with those I now detail, include the combination of the obscene incompetence of design of language and support systems foisted on the market by the dominant vendors, with the smug idiocy of practitioners who see their ability to "get on with the job" irrespective of quality of the tools, as a merit of those tools. This spurious merit in application they then tout as merit in education. Sometimes they see it as not mattering at all, and sometimes as a positive virtue that the beginner be given a taste of things to come.

Others point out with perfect truth that it is a bad language indeed that cannot be used in a style that conforms to the spirit of good structure and useful notation. That such expedients are aesthetically offensive may be an over-fastidious view, but they undoubtedly are severe sources of noise in the instruction of beginners.

The arguments that it is easy to be wise in hindsight, and that a vendor without his own version of BASIC together with his own horrible extensions will go to the wall, hold no water. The hindsight has been accessible to all for decades, but the unifying feature of almost every BASIC to come on the market, is the ingenuity with which their language extensions ape each other without achieving compatibility, generality, elegance, or even usability. The stench of ad hockery is pervasive and it is hard to believe that we have anything but the whims of systems programmers to thank for the motley collections of rarely-used instructions that clutter the manuals. The largely counter-productive obsession of vendors with locking-in their customers, seems to inhibit their support of the recognised structures. This conflicts with the stated justification of say, Java or a structured dialect of BASIC as the universal language.

Like several other popular languages, these have their respective merits, but they have a nasty way of setting the minds of naïve pupils like concrete, with a resistance to the idea that there is anything more fundamental to programming or to computers, than the programming notation that they have become comfortable with.

If that is as far as it goes, then very well, but otherwise, one has to grapple with wistful thoughts of teaching the students machine language. That would be desirable for students of computer science, but might be a doubtful kindness to naïve users.

The design of languages and extensions by the academic community has not been free of acrimony or monstrosity, but, individually, their most prominent prospects for general introduction have all been usable. Meanwhile, the main difficulty in supplying students with sound tools to exploit the exciting equipment now available, is that most of the cheapest and most attractive systems either support none of the acceptable notations, or do so unacceptably clumsily, or as very expensive options. This perpetuates the situation as a sort of technological-commercial blackmail. The simple production of better tools may be feasible for the individual user, but the effort is sizeable even if he is equipped for the task; the delay in implementation of the teaching project is often prohibitive; and the fact that he is then saddled with the maintenance of an incompatible package on an obsolescent system is a powerful disincentive to independent action.

This does not prevent sound education, but it severely inhibits it, increases the expense and persistently introduces contamination from proponents of the quick-and-dirty. In theory the recommendations of this essay are notation-independent, but students typically wish to get down to business after mastering a notation, so it commonly is more desirable to select a language that is available on the system that is likely to support the programming environment in question, rather than to choose a language on the grounds of intellectual excellence.

Depending on the intended objective of the class, one need not use simple procedural languages at all; for example, one could use specialist or application-oriented languages such as spreadsheets, or scripting languages such as AWK, Javascript, or Python.

 

4. Desiderata

Notation is a tool of thought.
Kenneth Iverson

What would be the features that I would specify in a system to suit the teaching methods I recommend? Actually the requirements are rather simple and even loose. Personally, as a practitioner predominantly of functional decomposition using pseudocode, I want a target language that is itself usable as pseudocode with minimal modification of syntax, and with a convenient comment facility.

In particular, violation of functional structure in translation to the target language is undesirable. It also is a nuisance if the language or its interpreter or translator requires too cumbersome a superstructure of declaratives. Declaratives are tolerable at worst, but it makes life easier if they can be neat and, in concept and format, compatible with the procedural text. Declaratives tend to strike students as mystifying, cumbersome, and irrelevant to the concepts embodied in their code. It also is nice if it is convenient to omit declaratives from the students' first efforts, or at worst, to invoke them automatically from a standard library or some other automatic source.

Unusually among evangelists, I do not necessarily consign other notations and methods to outer darkness, but do insist that the road to salvation lies through the ability to handle abstraction at varying levels, both bottom up and top down, without violation of structured programming basics.

As far as may be practical, support systems should be user-friendly, but can be obscure if that is the price of brevity and convenience. It is less disruptive to be told, first to enter a string of say two letters, a delimiter and carriage return when you start, and then enter a similar but different string to run, and another variant or two to stop etc, than to understand the helpful technical terms that appear, variously mangled, in many commercially-oriented command languages.

Of course, since the days in which I originally wrote that, command languages have largely fallen away, but the principle remains valid, and is badly violated in many GUI designs.

A natural language command handler sounds nice in theory, but most implementers seem to think that they achieve such a facility by using long English words for mnemonics, arbitrarily selected, often partly abbreviated and with rigid American spelling.

In practice I find that most naïve users seem happier with few, short commands, even if they do not understand the mnemonics, as long as access to a menu or list is instant and convenient. It also is important that the circumstances for the use of each is easily described and recognised. Children in particular take to this like ducks to water; in fact, they sometimes revel in esoteric terms, apparently relishing them as "in" words. They also like single-stroke function and abbreviation keys and complain (but quickly adapt) when new systems lack features that they are accustomed to. Another attractive approach is for a system to accept full English words but to require only enough letters to avoid ambiguity in context.

Again, since I originally wrote that, the need for caution with naïve auto-completion has become painfully obvious.

Minimisation of keystrokes and of independent concepts appear to be key factors in achieving the kind of user friendliness that appeals to the budding computer initiate. A more worthwhile attribute than a misleading resemblance to English is that the work required to identify and specify an action is slight, and that disaster does not lurk in a thoughtless keystroke. It should not be possible, without elaborate idiocy, to destroy the system or the last session's work, or even find oneself bootstrapped out of the current game.

Automatic saving of one's status at strategic points is also nice if available.

It is more important to ensure fast and convenient response and job submission, than to use English commands. This makes interactive facilities attractive and local intelligence preferable to remote computer processors. Local time sharing with several access points connected to a processor in the same room is all right, as it not only cuts out the communications unreliability, but helps pupils recognise the consequences of sharing. In particular, if the system goes down, all can swear or groan together, without the bitterness, frustration and confusion of wondering whether the remote terminal has gone glassy-eyed because of one's own fault, line-, terminal-, processor-, software-, or systems programmer- fault.

Again, pupils nowadays tend to have their individual personal computers online, so it is easier than it used to be, to avoid such annoyances.

In fact if need be, the committed pupil will accept monthly response by runner with cleft stick, but as a rule such delays take the fun out of things.

No fun — no learn.

Still, although the modern child is too blasé to appreciate systems that would have been regarded as miraculous even a generation ago, one can run a successful course with unimpressive resources.

In summary, happiness in a school environment would be a system of personal computers, probably connected, possibly with a few screens each, supporting at least one suitable language, say Modula 2, Python, or Java, preferably in both interactive and compiled versions, and with a variety of I/O devices, including modest-resolution interactive graphics and high resolution hard-copy graphics. Data storage preferably should not be restricted in speed or volume.

For courses for students who need to achieve more advanced programming insights, it would be highly desirable for them to be able to inspect the lower-level code generated by their compilers.

It is important to get the requirements into perspective. One cannot expect to get the best results in strongly unfavourable conditions. In particular, if the students cannot get at some facilities to see the results of their efforts, it would be naïve to expect most of them to maintain much enthusiasm. At the same time, the methods outlined here do not compare unfavourably with any others under matching restrictions. Much can be done with chalk when computer access is in short supply. The compromises that one then must make may be disappointing, but need not be disastrous.

 

5. Generalities

If you don't know how to do something, you don't know how to do it with a computer
Anonymous

There are many valid routes to a working knowledge of computer related matters. Like most practitioners of my generation, I began on second-generation machines in low-level languages and developed from there. That suited me, and my only regret is that structured concepts were not in general currency in those days. For years my prescription for the beginner was to begin at the low level and build on the sound foundation thus provided. Since then several things have happened to reduce the general applicability of that advice.

For one thing, it now is commonplace to require a non-trivial understanding of matters concerning computers, even for staff who are not in the IT industry as user or vendor etc. Secondly, it now is the rule rather than the exception, to use high level interfaces only. An amazing number of commercial programmers nowadays do not even know what a low level language is. That thought is somehow disgusting, but the material grounds for objection are few — and shrinking.

Now, apart from the question of the academic soundness of the run-of-the-mill practitioner and the emergence of users peripherally associated with IT, another class of educational requirement has emerged. Children started the invasion as scattered secondary-school students, but they now bid fair to become the major consumers of all computer-related education.

What is more, it now seems to me that their computer education should overlap the three R's and precede sexual instruction. If so, then there are at least two factors invalidating the low-level to high-level route as a fixed policy. Firstly, the intellectual relevance of the technical low-level information is far lower. In fact, pre-computer concepts need not suggest computers at all; they could deal with the likes of algorithmic concepts such as dictionary or directory searches, or critical path planning in making a meal. Computing toys that demonstrate mechanical arithmetic, such as abacus, finger calculation, mechanical adding machines with visible works, even slide rules, would work — for interested pupils.

Secondly, while some of that type of material is easily assimilable and even interesting to some children, it is a large subject and few would have an appetite for enough to constitute a course, even if it were of enough practical relevance or urgency to justify the investment in school facilities.

On the other hand, the basics of program design as an abstract subject can nowadays be imparted in a few hours of classroom time and if suitable computer facilities are available, can yield pleasing and rapid concrete results; it forms the foundation of a subject wide in its own range, rich in intellectual content and of value as a mental skill and practical tool in many other subjects.

Such a combination of teachability and teach-worthiness should surely be the educator's dream. The youngest children I have tried it on were six years old. To the limits of their arithmetic abilities, they did rather well at it. Eight-year-olds were easier to deal with, but I should hesitate to undertake to teach it on a routine formal basis to such an age group. Keen, bright ten-year-olds are no problem.

One must of course distinguish between instruction of individuals and teaching in the classroom situation. It is hard to see how one could go about teaching a mixed-ability class of fair size and varied motivational level, but as an elective subject, it is a beauty. Of course, other approaches enable one to impart non-trivial computer skills to even younger children. Most prominently perhaps, Papert [2] has impressively demonstrated the development of both programming and debugging in his pupils. He argues that both are skills of many unexpected intellectual benefits and that each is worthy of recognition in its own right.

I have no fault to find with these views, but think that it will be some time before we can apply them on a large scale. Also, the subject matter I recommend is for the most part more rigidly structured — more of a discipline. This is not to denigrate un-straight-jacketed education, or even to deny its legitimate place alongside formal material in the same subject, but for the age groups in question the formal material is accessible and can yield rapid, predictable results. Besides, taught as a discipline, these skills are more easily applicable to recognisable cases and the procedures are more calculated to avoid wasteful false starts: these are features attractive in budgeting curriculum time. There is no conflict between the approaches; they are compatible in concept and in practice. In fact a fair percentage of the material I prefer to present in an exploratory fashion, using the computer as a tool; and preferably a visual, interactive tool.

 

6. Key points in the procedure


The exact approach and sequence may vary according to taste and especially according to the facilities available. The following text assumes a rather generously equipped class, with at least one interactive screen per small group.

6.1 Introductory remarks

He had bought a large map representing the sea,
Without the least vestige of land:
And the crew were much pleased when they found it to be
A map they could all understand
Charles Dodgson

There is not much special about this. The usual considerations apply for establishing rapport, requirements, expectations etc. It is perhaps more important than usual to put the class at ease and to ensure that there is no reluctance to ask questions; the process is futile if not participative.

6.2 Basic concepts of process

Education is the process of moving from cocksure ignorance to thoughtful uncertainty
Anonymous

At the start the best way to illustrate process is to demonstrate a very simple program text in an interactive interpretive language, very transparently written with descriptive vernacular variable names and including NO COMMENTS. Comments are apt to be taken for part of the functional code. There is plenty of time to introduce comments a little later — at this point they are so much noise. Whatever examples are shown should be impeccably structured and religiously adherent to good algorithmic practice — pre-reading before loops and all that.

BUT this is not the time to point it out to the innocents; let them simply think that this is the way one does it. Do not evade pointed questions, but even then, do not elaborate. Simply explain that violations of taboos cause hair to grow on the palms and that all will be explained anon — and do not forget to explain it anon!

To illustrate: a good starter is something like a counting program that chattily prompts for a digit of input, then prints that many numbers from one up in sequence. Let the students satisfy themselves as to the range of function of the program — usually a minute for adolescents and up, but tots will sometimes raise the roof if interrupted too soon.

Be that as it may, before boredom threatens, but after the first flush of enthusiasm, one shows them how to list the program, then takes them reading step by step through it, not explaining anything unless absolutely essential for immediate understanding.

The purpose at this point is to associate each statement with what was seen on the screen, emphasising the sequence of events and changes of value. As soon as this has been done, however sketchily, encourage the students to experiment — first with modifications to the text, say changing prompts, annotation literals and count constants or whatever is convenient and illustrative, then with changes to statement sequence and duplication or omission of statements; and lastly with enhancements, such as putting the whole code into a loop so that it repeats the whole rigmarole after each performance.

A cardinal danger is the temptation to explain too much. Rather let them experiment hands-on to see what happens. There are dozens of things one can explain, such as the significance of the commands to run the program or editing functions, or the syntactical rules of the language, but now is not the time. What seems to work perfectly well without confusion, jeopardy of future subject matter, or student dissatisfaction, is simply to say that one does so-and-so at this point to do such-and-such. Only if importuned, promise that all will be revealed in good time, but that at the moment we want to carry on.

It is amazing how many foundations for further conceptual development are laid at this point, but it is also now that one first encounters the fact that only the exceptional student has done more. All one can rely on is receptivity for the next stage, and even that evaporates if not quickly reinforced, preferably by another and slightly more advanced program example. One I have used with success prompts for a number and moves an asterisk across the screen that many times. It then repeats the process until an end of job condition is encountered. This introduces string handling through changing the asterisk's "tracks" and various other whims.

About now is a good time to consolidate what has been achieved by identifying and naming the key concepts, so back to class. The first thing I do at this point, is to teach the Dijkstra structures. The notation I used to illustrate the process flow is old-fashioned flow-charting, using only the rectangular process block and the diamond-shaped decision block. Obviously the choice of notation is not critical, as it is the only exposure to flowcharting that they get from me, All that matters is that it must be very simple and very visual and shows procedural flow.

The point of using flowcharts at this stage is that what is being illustrated is just that: FLOW; the flow of control in the sequence, selection and iteration blocks. This flow is not explicit in the notation of the typical block-structured language and explanation that the bottom of a loop means that execution continues from the top until termination, is at first troublesome to many students. Starting from the sequence construct also permits flowcharts to dramatise the occurrence of such components in loops and selections; the nature of each construct: once into the block, all the way through, and once out; and the consequent naturalness of nesting blocks of anonymous content to indefinite depth.

As the concepts are simple and easily memorised, flowcharts are not needed afterwards. Once the block structured notation is understood, the class is generally perfectly happy to use it, suitably indented, as program code and documentation, as indented code is as visual, less trouble to code, and directly compatible with the available I/O media. I have yet to hear a pupil complain on being told that flowcharts are from now on to be ignored in class, though they are free to draw them for their own purposes if they choose.

Incidentally, one of the few items of nomenclature that I insist on having memorised, is the sequence-selection-iteration triplet. Terminology can be a vast help to fixing and accessing concepts in perspective, and this is one case where it works miracles. Throughout the discussion, there is continual reference to the code they have run, to identify rather than merely recognise the structures they are learning. Further examples of very small illustrative segments of code can be elicited in this phase of the class. How much more machine time is to be consumed in the process depends on available facilities and on requirements. The problem of termination of loops due to circumstances arising halfway through their code is ideally dealt with by demonstrating the venerable nested-if-and-flag-variable technique. Having used it till the problem and the structure are ingrained, one can graduate to the loop exit statement and stay with it, as long as the available software supports it.

At this stage, the goto remains a nono, not in deference to any dogma, but because it invalidates the assumptions on which structured programming is based, in particular that blocks are nested, and that each block has precisely one point of entry and one exit. Violation of such assumptions interferes with program design, debugging, proof, subroutine assignment, and re-use of code.

 

6.3 Concepts of data and data manipulation

The only books that influence us are those for which we are ready, and which have
gone a little farther down our particular path than we have yet got ourselves.
E. M. Forster

So far the concept of data has probably been treated very casually. Perhaps the instructor has even managed to avoid talking of constants and variables, or if not, to sidestep the question of storage. Notice that everything has been very abstract and none the worse for it. The primary reason for leaving things out so far, has been. that there is so much to tell, but there is an interesting by-product. Because everything has been structured in coherent modules of concepts, one can let students drop out of the course as soon as they have mastered all that they need, at any of the frequent points when a subject has been buttoned up for the moment. What individuals never ask is largely what they never need if advanced study is not the requirement.

However, this is about as far as it is comfortable to go without considering the nature of data in greater depth.

The first thing is to tell as much as is necessary about the nature of data storage in the machine. The approach depends very little on the background of the class. Even if they know about such things, binary, floating point and the like are not at moment of the essence. The main points are that the storage is finite and that the entities are pigeon-hole-like and can be labelled and accessed as either constants or variables. This need hardly be illustrated with new code, as the examples used so far are ample.

The assignment statement merits explicit attention at this stage, in combination with expressions. Using the pigeon-hole illustration, one can easily show the sequence of operations needed to achieve the effects observed in the running of the programs, including temporary storage locations etc. Here one also can deal with the hierarchy of operators. At points like this one can generally carry on at a moderate speed with advanced ten-year-olds, but the younger children often have too little background. They can pick it up very quickly in this context, but that is hardly the primary object of the class. Partly for this reason and partly for fear of clashing with the educational authorities, it may be better to limit oneself to very simple expressions.

Now comes a major step: the introduction of subscripting. It is not difficult to illustrate, pigeon-hole style, but it is the key to the next set of live examples. The important points are the array membership name, the use of arbitrary expressions as subscripts and the possibility of an arbitrary number of dimensions. Suitable subjects for illustrative programs are sorts, searches, and two-dimensional placing of characters on the screen. Incidentally, this also makes for a very easy introduction to graphs and functions.

By this time it would labour the point if I were to detail the steps. Suffice to say that more sophisticated data concepts such as pointers, and structures such as lists, stacks, trees, and types, derive easily from the same process. The functional decomposition approach developed accommodates the generation and modularisation of code naturally and the sky is now the limit. No common school of disciplined development is excluded, data flow, data entity, functional, the lot. With a little trouble one could probably explain what a go to is, though explaining why one might want to use it could present problems.

Consider the following real life example: I was teaching a mixed class the basics in PC BASIC, and had shown them arrays. I set them the problem of displaying increasing powers of two on the screen. Then I let them continue until they got a numeric overflow condition.

Understandably they were stumped and did not understand the problem. I explained the difference between formal mathematical numbers and the limited physical storage items in a computer, and I cannot remember whether mentioned the concept of adding more storage to accommodate larger number. We were about to proceed with the class when one of the younger class members, perhaps aged twelve, erupted: “I can see how to do it!” and explained his conception of multiple precision. I praised him and tried to proceed, but he insisted that it would only take him a couple of minutes, so I capitulated and he did indeed write a program that we then left running and filling the screen with ever larger powers of two while the class continued.

He was a remarkably precocious but unassuming little lad, and I often wonder about his career thereafter.

Anyway, it illustrates the effectiveness of the principle of letting the class learn by building sophisticated structures on elementary concepts. That is to my mind one of the fundamental objectives of the approach. But do not rely on such moments if there are no gifted and interested class members. They are occasional and special treats.

7. Class timetable

The only books that influence us are those for which we are ready, and which have
gone a little farther down our particular path than we have yet got ourselves.
E. M. Forster

Of course, the speed of progress of such approaches will vary with circumstances, but I hope it is clear that by any standards the rate can be very rapid. Unnecessary delay at the start will cause greater frustration than having to go back and clarify confusion. I have seen curricula in which the Dijkstra structures are introduced on separate days. That is disastrous: much like trying to teach walking with the left foot on the first day, and walking with the right foot on the next, then the hop, then walking with alternate feet.

Really advanced concepts become accessible within a day or so of class time if the facilities are available. If what was once regarded as essential background is never required, it may be ignored. Otherwise it now is easily and quickly assimilable in a context of well-understood goal-directedness of programming.

However, that was the good news. If that day of instruction is not rapidly followed by more of the same, it trickles out of the classes’ heads in no time. It leaves behind an impressive receptivity to related material, but not enough to repay the effort and loss of momentum.

Also, the younger students show a curious tendency to forget, not isolated facts and concepts, but integrated algorithms. Until they have used several of them several times, the most gratifying receptivity and even creativity in class is so much fairy gold. What is required is something like a week's concentrated course. This may not sound much, but in eight-hour days it amounts to some eighty classroom periods or nearly a semester at one period per day. This can not generally be demanded in term time, but if the necessary facilities can be located and an appropriately sized group of enthusiasts can be assembled, much should be possible.

8. Parthian shot

one of the most
pathetic things i
have seen recently
was an intoxicated person
trying to fall
down a moving stairway...
archy

Don Marquis

One of the most tempting thoughts to arise from the contemplation of a supply of youngsters with a sound basis in design at the beginning of the curriculum, is the prospect of teaching them sound follow-up material. In computer science at university level the typical fresher with computer science as a school subject has as much to unlearn as to learn, and one can say as much for the typical graduate entering industry. Sound, applied practice is in principle no harder to teach than unsound, and a good deal more rewarding. Unfortunately the challenges are three-fold: to teach the children; to teach the teachers; and to teach the constructors of syllabuses; probably in ascending order of difficulty.

What this essay has discussed is in effect a three-fold objective. It prepares students in fields other than Information Technology, for casual, informal, but effective, computeracy, and it prepares those with a future in intimate application or study of either Information Technology or Computer Science, with a sound basis for formal study — inadequate inevitably, but with minimal unlearning to waste resources on. It also, more fundamentally, should equip students with the concept of problem analysis and algorithm design for dealing with large classes of challenges that may have no direct connection with programmable devices at all.

References

 

[1] D. W. Barron, Recursive Techniques in Programming. London, Macdonald 1968, (quoting Gill, S. 1960).

[2] S. Papert, Mindstorms: Computers and Powerful Ideas. Brighton. Harvester Press 1980.