We introduce metaprogramming in a completely informal way, and sketch out a theory of it. We explain why it is a major stake for computing today, by considering the processes underlying software development. We show, from the same perspective, how metaprogramming is related to another challenge of computing, the free availability of the sources of software, and how these two phenomena naturally complement each other.
The core of the argument is that because computers and the problems they solve are getting more advanced and complicated it has become essential to think about computer programs at a higher level. This higher level is the realm of meta-programming, where abstraction is higher and the ability to manipulate other programs is essential. And of course, to be able to manipulate those other programs more completely the sources must be available. This is what ties these two ideas together.
Faré talks about various types of metaprogramming that exist in the real world but are not done very effectively or well understood. Examples: compilers, interpreters, debuggers, checkers, etc.
The core of the power of metaprogramming is making working with computer programs easier and this often means allowing them to be accessed in the most desirable manner.
If we investigate existing applications of metaprogramming, we realize that it is used to automatically manage the transition between several different aspects of same computational objects: for instance, when one compiles a program, one is interested in the “same” program, under different forms (source or object code), each suited to its own set of tasks (human modification, or machine execution).
In this way, a plane will be for a engineer designing the fuselage, a set of curves and equations of which some parameters must be optimized, for a component manufacturer, it will be a schedule of conditions, for the builder, it will be an assembly process, for the maintenance officer, a set of tasks to perform, for the restoration engineer, a set of problems to fix, for the hardware manager, a set of spare parts, for the pilot, a ship to take to destination safe and sound, for the passenger, a disagreement to minimize to get to another place, for the traffic controller, a dot to route among many others, for the commercial clerk, a set of seats to fill, for the commercial strategist, an element of a float to deploy, for the director of human resource, people to manage, for the accountant, a historic of transactions, for the insurance agent, a risk to evaluate, etc, etc.
What it is important then, is that metaprogramming is a tool that can possibly be used to increase the expressiveness of your computing system. Faré makes the point that this is not the same kind of expressiveness as computability refers to–what problems can be solved–but more over what problems can be understood.
Nevertheless, it is obvious that not all Turing-equivalent languages are worth the same from the point of view of the programmer: all those who made the respective experiences will agree that it is easier to program in a high-level language (like LISP) than in a low-level language (like C), which in turn is easier to use than assembly language, which is better than binary code, which is simpler than the transistor-per-transistor design of a dedicated electronic circuit, or the specification of a Turing machine. Actually, Turing’s result is but the very beginning of a theory of the expressive power of computing systems, and certainly not the end of it. To stop with this mere result, and say that “since all languages, in practice, are not equivalent to each other as they are according to Turing, then theory cannot say anything”, would be to abdicate one’s reason and to look in a vague nowhere for an unspeakable explanation, it would be giving superstition and ignorance a gratuitous and preposterous dignity.
And this expressiveness is desired because it reduces the human costs associated with creating, deploying, and maintaining any particular piece of software. Human time is more expensive that computer time these days and processes should respect and realize that.
Thus, the problem is not only technical, it is also economical, moral, and political, in as much as it involves shifting of human efforts. In the development of computer programs, as anywhere else, the process matters. And it is this very process that the popular notions of code reuse, modularity, dynamic or incremental programming, development methods, etc, attempt to enhance, though without a formal rational approach. Similarly, the trend in computer science to leave too low-level languages in favor of higher-level languages is precisely due to human intelligence being a limited resource, a scarce one indeed, that has to be saved for the most important tasks, the ones where it is indispensible (if not forever, at least for now).
Therefore, a satisfying modelling of the expressiveness of programming languages, even though it be abstract enough not to overly depend on ephemeral technological concerns, must take into account the man-computer interaction in a way that includes a notion of human cost (and perhaps also a notions of error and confidence).
So, how does the lack of freely available software sources impede metaprogramming?
We personally find it obvious that barriers to the distribution of sources are as many brakes to the development of metaprogramming. In fact, the very condition for the use of a program-reading metaprogram is the availability of a program to read; the condition of usefulness of a program-writing metaprogram is that the output program may be distributed and used; and these conditions combine when a metaprogram at the same time reads and writes programs, and even more when the metaprogram depends on the long term accumulation of knowledge about programs! Every limitation on the manipulation of programs is as much of a limitation on the feasability or the utility of metaprograms, and a discourages as much their potential authors.
And secondly, metaprogramming introduces a great deal of fuziness over who the author of a newly created piece of software is.
Actually, as long as the only operation that leads to production of code is manual addition, the writing out of the blue by a human mind supposedly inspired directly by the Muses, then it is possible to attribute an “origin”, an “author” to every word, to every symbol that constitutes a program. Now, as soon as is allowed metaprogramming, that is, arbitrary operations that act on code and produce code, as soon as is considered the environment inside which lives the author (man or machine) of a program then this one is no more the inventor of the program, but only the last link of a holistic process of transformation, in which it is not possible to attribute an unequivocal origin to any produced element whatsover.
(Note: Faré, of course, does not agree with the notion of “intellectual property” in any way, shape, or form, but puts this belief mostly aside and focuses on the technical and legal problems from a not judgmental point of view.)
The answer, a system that acknowledges the benefits of both of these tools is a reflective system, wherein the tools some how manipulate “themselves.”
The free Unix systems (GNU/Linux, *BSD, etc) as well as some others (like Native Oberon) are as many complete reflective systems: they are freely available, and come with the sources of all the software tools required to their self-development, from the user interface to the compiler and to the drivers for peripheral devices. But their “reflective loop” is very long, which identifies programmer and metaprogrammer. If we consider as “given” the operating system and its basic development tools (including a C compiler), then, the many programming language implementations written in the implemented language itself are as “reflective”, and with a shorter reflective loop between implementation and usage; however, these implementations do not constitute complete systems (and do not usually seek to become so), since they depend for their development on numerous external services.
The problem facing any project that seeks to be completely and thoroughly reflective, is finding or developing a programming suitable for a reflective style of development.
Faré has hopes for the future…
Let us then hope that practitionners of computing arts shall free themselves from the flashy but empty slogans like “multimedia”, “object-oriented”, “design-pattern”, “virtual machine”, “intelligent network”, etc, that are by-products of a culture of partitioning and loss of responsibility. Shall they rather adopt a scientific attitude, that is open and critical at the same time, with respect to the essential process that underlie their activity, which processes, for technical that they be, nonetheless have economical, political, and all in all, moral implications.
This article, Public Goods Fallacies: False Justifications For Government, from Faré is dedicated to debunking some myths about why the government is necessary, particularly with regards to having it’s hands in the economic pot.
The Public Goods theory is the idea that some services or goods must be provided by some central organization who will look out for the public’s interest and the public’s benefit. Of course, the core of Libertarianism is that a private solution can always be found and will always be better.
Unhappily, many libertarians concede some “public goods” to the statists, but then they are on a slippery slope, for there is no reason to stop the public goods argument to any particular service. To paraphrase Emile Faguet: minarchists are libertarians who do not have the courage to accept the full consequences of their ideas; anarchists are uncompromising libertarians. Indeed, using arguments of the “public goods” type, government can intervene into just any domain — and once it does, it will make sure that the domain is so messed up that, by the same argument, it will have to extend its grasp over it until the domain is both completely under its control and completely messed up. But of course, intervention is based on the premise that government intervention is useful, to begin with — and this is precisely the point that statists posit as a petition of principle; it is precisely the point that needs to be disputed.
Faré also eloquently differentiates between government as an organization of force and a monopoly of force. The second case is what most people mean and is the immoral and unproductive one, the first will always exist and is okay. It is okay because one can opt-out and thus it will always exist for the mutual benefit of its members.
The first fallacy is that of externalities, that some activities cause “accidental” problems or benefits to people who are not formally engaged in the activity. Examples are pollution from factories that harm communities. Faré writes that the problem is really that the communities’ property rights were not respected in the first place and that this can be extended to any externality.
Actually, governments create new externalities. Indeed, an externality always corresponds to either the lack of definition of a formal property right, or to the lack of enforcement of an existing property right, or to the contradictory enforcement of overlapping property rights. In as much as governments coercively impose their monopoly on the definition and enforcement of new and old property rights, they are the cause of any lasting externality. Governments prevent the use of natural mechanisms by which property rights emerge and externalities disappear: homesteading and the common law.
An example private solution that I can think of for the externality of water pollution would be for the polluting factory to have to negotiate with all the owners of property on the waterfront. These people may be organized, but they may not, and it is not a problem if one refuses to agree to contamination–what right does someone else have over your health?
The second fallacy comes from Game Theory, that many services and goods are most efficiently produced or practiced when they are properly coordinated. While Libertarians like Faré do not reject the notion of coordination, he explains the benefit and why it is desirable, they do however reject the monopoly of government in coordination. Faré frames coordination as a service, and like any service there should be a market for different coordinators of difference skill. But like any market dominated by a de jure monopolist, the result will not be best for the consumers,
Let us now consider the case of government as a coordinator. Just like any private service provider — for government is made of private individuals, just like any institution — government is a player that will maximize its interests. The only thing that distinguishes government from a free market coordinator is that government detains the means of coercion, with which it can exclude or discourage any competing service providers. Thus, in equilibrium, a government will monopolize the coordination of a game; it will then reap off most benefits of the game, leaving the players with just what it takes for them to make the game profitable. In an opt-in situation, where people have the choice to either call for government coordination or relinquish coordination, the government will leave to the players barely more profits than the ambient marginal interest rate (with respect to stakes invested in the game) — and that only if this cooperation proves profitable to all concerned despite the monopoly cost of government. Things are much worse, in an opt-out situation, where a government can coerce people into accepting its protection services for some pattern of services. In such situation, government will not only reap out all the benefits of coordination, but will also go further and charge a surcharge that makes players worse off than if they had not played.
So in fact, game theory does not support government, but the Statist will try to blind you with its faux authority of numbers, rather than use it to show the truth.
The often central theory of “Public Goods” is that they are different from Private Goods in that their use cannot be restricted and are by very definition public in all sense. Faré refers to this as the “Impossibility to Exclude” Fallacy. It is a fallacy because the non-excludable property is the justification of the use of government force to exclude some from its use. Some might say that the only effect control is then by the government and armed forces, but…
Maybe exclusion is indeed impossible without the use of armed force, but the only reason why the use of armed forces seems impossible without government is because the premise that government should have a monopoly on the use of armed force was silently posited, from the outset, in a hugely circular reasoning: government should have a monopoly on some goods, because it has the monopoly of force — which original sin of a monopoly is admitted as necessary without justification. Once again, the government is supposed to be made of superior people, or to have some magic pixie dust, that enables it to do what is admitted to be impossible to mere mortals. And once again, we find that in the end, the magic pixie dust is nothing but the power of legal coercion.
It seems to me that the vast majority of situations where private solutions are ignored comes from the learned laziness of certain people. These people are constantly told by the government and social norms that they are not responsible or intelligent and must always be told what to do by the Boss–either a government official or a government sponsored “expert.” The government claims itself as the only solution to these problems–and why would it not? It serves itself, not the people.
Next is the Catastrophe-Prevention Fallacy, that the government is the only organization of suitable power to repair an industry that has been faced with a great failure. Now, either that industry is not desirable by the people, and thus should not exist because no one is willing to pay for it. Or, it is desirable and something has been keeping the people from supporting it for their own benefit. This implies a de jure monopoly imparted by the government to a particular group in an industry that then fails. Upon this fall the government must find a new champion and source of profit. This is the reality of Catastrophe-Prevention and it should be enough to stop it flat out.
One of my most loathed fallacy that it warms my heart to see debunk is that of “The Collective Will.” The idea is that certain things are good in theory, and thus we should want them, but in practice we don’t actually want them and need to be forced to support them. This corresponds to the government saying one thing is the will of the country when there is in fact no consensus and possibly minority support to begin with.
For instance, in democracies, “the people” is to be coerced to do what it is alleged to want to do but is blatantly admitted to not want at all, to begin with (or else, it wouldn’t need to be coerced). Indeed, if, say, 50.1% of the population wanted to fund this or this other insurance, charity, research project, army, etc. then there’s no doubt that said insurance, charity, research project, army, etc., will be abundantly funded, without the need for coercion. In a free society, each of the “public” goods that a majority of the people want to fund, and even those goods that only a minority wants to fund, will be funded, by people who care, confiding their money to people that they — caring people — deem able to best provide these goods. That is, each “public good”, charity, or whatever, will be controlled by those responsible people who are most interested in it. In contrast, in a democracy, these goods are actually controlled by a class of politicians and public administrators, who are not checked by people who do care, but by a vast mass of people who don’t care; most people are disinterested in any particular “public good” or charity, and won’t vote for one of the two main parties (those who have a chance of making a government) based on any particular issue. Finally, the knowledge that they will have to pay for something on which they have little control anyway makes them cease to care: they are made irresponsible, deprived from any will, by the very system that claims legitimacy from their responsibility and their will.
Even if you do not aspect Libertarianism full on, it would seem easy to me to apply this idea to political campaigns. Rather than the money and monopoly power a few trying to seduce and confuse the people into supporting a particular candidate, a candidate should provide information about themselves and an avenue to get word to that candidate. The candidate should then find the policies that the most people desire and then support those–rather than trying to coerce or confuse the populous into supporting a policy they do not want at all. You can taste this abhorrent style clearly in the way that the two major political parties in America play off each other: the Democrats try to convince that the Republicans are evil and that they must be supported or else; and vice-versa. This renders a situation where it is considered naïve to actual vote for who you want and you should instead vote against who you do not want.
This is not a democracy that serves the people. It is a government that serves itself.
The next public good fallacy is the “Broken Windows Fallacy,” which I feel is poorly named–not that I can think of a better, but I think it is non-obvious name. The idea is that there a certain goods that only the government can create and if they were to be created by a private individual they would be criminal. Examples center around the application of force: stopping people on roads, charging fees on them, forcing people to support a war they do not agree with, etc.
The only difference between these criminals and government agents is the official seal, this magic pixie dust that creates legitimacy when it is sprinkled over the worst crimes, including mass killings. Ambrose Bierce, in his The Devil’s Dictionary, once characterized this superstition in the case of democracy:
Majority, n.: That quality that distinguishes a crime from a law.
Behind this double-standard is the fallacy of What Is Seen And What Is Not Seen: the statists will count only the “positive effects” of intervention on people who benefit from it and conspicuously forget to count the negative effects on people who suffer from it — because the benefits are concentrated, whereas the cost is spread. Although the fallacy is most often used in this crude form, when confronted to its substance, statists will go a long way toward sweeping their fallacy behind the veil of complexity.
A subtle point: Faré is not saying that these are valuable services that the government is preventing others from carrying out. Instead, he says that they are crimes in essence and the government hides behind is supernaturally granted carte blanche power to call them law.
The next fallacy is a blatant attack on the sovereignty of Man, that he is too evil or irresponsible to take care of himself and thus needs the government to take care of him. But of course, the government is made of men and if we grant the Statists that men are inherently evil then there is no reason to that the evil does not get extended and become amplified in government. Faré makes this interesting note:
Libertarians are often unduly reproached to worship a myth of the good savage — quite on the contrary, it is statists who worship the myth of the good statesman. To quote Edward Abbey,
Anarchism is founded on the observation that since few men are wise enough to rule themselves, even fewer are wise enough to rule others.
Actually, it is a common pattern that statists will reproach to libertarians what is actually a blatant failure of their own way of thinking.
Another related fallacy is that only the State can be altruistic and the people are completely egoistic. Faré notes that not only is self-care an important component of altruism, but also the government is not a magical source of altruism and in fact:
Thus, altruism, in its mutualistic form, is already included in personal self-interest. Not only cannot government increase total utility by magically unleashing a secret source of altruism in people; but government can and will only act in an altruist way if it is actually controlled by the altruist tendency in people, which must preexist to any altruism by government. Government is not a superhuman source of altruism, but can only give back the human altruism that was successfully put into it. And then again, nothing warranties that this altruism rather than antagonism will dominate the coercitive apparatus of the state. On the contrary, by concentrating coercive power, government is a great incentive for people without scruples to strive toward seizing power, whereas really altruistic people won’t partake in the struggle for power.
It is important to consistently underlines the ideas that if organization is truly desirable then people will seek it without coercion. And no amount of illogical and hand-waving will change that.
This is an interesting fallacy that is a combination of others: Only the government can consider the long-term effects of actions and thus is the ideal place to create those decisions. As stated in the previous arguments, not only the government can not be any greater than the people who make it up, but also there is a fundamental flaw in the perception of the talents of historic governments.
Thus, contrary to the implicit prejudice behind this fallacy, governments only ever manage things on the short run. Indeed, the horizon of foresight of any political party is the next elective mandate. If ever one politician wanted to see further than the rest, his party would soon remind him of his duties toward it; political parties that do not force politicians to think in the short run get quickly wiped out of significance by parties that do; politicians without a political party simply don’t get elected; and since even “good” political parties can’t remain in power very long, even if their policies are oriented toward the long term, these policies will be changed with next government. In conclusion, politics mean that whatever is politically managed will be led by short term demagoguery.
I am reminded of something Dave Winer said of Gray Davis’ comment about the threat of recall elections being a threat for politicians to never stop campaigning. Dave said something to the effect of, “That is the a fundamental lie. Who does he think he is kidding saying that they are not always campaigning anyways?”
Campaigning constantly is an obvious sign that the government and its composition is only interested in the short-term results of their actions. Namely, more temporal power of their own.
A concern that seems central to many Statists is uniformity. That for some reason it is desirable for as many things as possible to be the same and discourage diversity. This is seen in regulation and certification of trades. It is considered a major leap in reason to suggest that because uniformity is sometimes useful it must be applied as often as possible.
However, uniformity is not always good in itself; coercion by governments is neither the only way nor the best way to enforce standards; moreover the domains that standards will optimally regulate are seldom either large or territorial; and most importantly, a system of coercion hampers the very discovery of which better standards should be commonly adopted and enforced, because it destroys the points of comparison, neglects most opinions save that of the authority and its lobbyists, and prevents dynamic adjustment to varying and evolving individual circumstances.
When uniformity is desirable, it will be sought naturally by private forces and will be best encouraged rather than coerced.
Liberty and Responsibility are the only possible warranty that people will choose to obey good laws rather than bad laws. Peaceful persuasion through rhetorics filtered by critical reasoning and demonstrable benefits is the only way that good habits, good laws, and good institutions can be durably spread among the population, while at the same time discarding bad habits, bad laws and bad institutions.
Any interesting point that Faré makes is that any collectivist scheme contains an essential fallacy, that if this is such a good idea then why not apply it universally and as broadly as possible?
Indeed, why collectivize or not collectivize, say, “toilet paper”? Isn’t there but a more specific need to collectivize “green soft toilet paper in 5 inch wide rolls sold under a brand the name of which ends with an S”? (After all, some company may very well have a dangerous monopoly on these!) Or why isn’t there instead a need to collectivize production of all paper? Why collectivize at the scale of Great Britain? Why not collectivize at a smaller scale, say Westminster or the block next door? Or at a larger scale, say Northern Eurasia, or our quadrant of the Milky Way? And why collectivize it on a geographical scale at all? Why not collectivize for people whose name begin with an “R”, or who wear black socks?
It seems to me that this exposes the power-hunger of collectivists. They seek to control at the greatest scale they can. They recognize that they could control a scale greater than a neighbor and thus seek to do so. At the same time, they recognize that they would like to control an entire continent but sadly cannot directly–instead they try to influence with imperialism and colonialism. What this suggest to me is that these people are fundamentally and unmistakably greedy but recognize the volatility of the system the support, so they take what they can safely get.
I think this point was made clear in George Orwell’s 1984 when there was not one totalitarian government controlling the world, but two that cooperated. Each knew that they could not be larger and that they needed the other.
I can’t decide if the fear they have is good or bad because on one hand it would nice for them to be arrogant and seek to control everything, but on the other it gives up hope that they know as well as we that their system cannot last.
In each case we saw, some “problem” without solution was described, followed by the non sequitur claim that government is useful and necessary as the only (or best) possible solution to said problem. Actually, government was not a solution to any of these problems, and could only be seen as such based on a one-sided view of government: a view that insists on the visible benefits of government action, but that doesn’t take into account the costs associated to any government action, and the costs of ensuring that government will act in the interest of the people rather than to their detriment. Government is supposed to be a magic wand that bestows services at no cost, directed by some godly will above the failures of mankind — but it isn’t.