What's the Point of Equal Opportunity for Education?
Many discussions of equal opportunity focus on equal opportunity for education. This focus is even more emphasized in policy discussions of equal opportunity. Yet, what is the purpose of this kind of equal opportunity?
There are two generic reasons why something is good: it is either intrinsically good or instrumentally good. The first kind of good is simply good in and of itself. The second kind of good is only good because it does in fact lead to the first kind of good. Given this distinction, is equal opportunity for education intrinsically or instrumentally good (or both)?
Current equal opportunity policy debates seem most focused on specific institutions of higher education, which seem to me to have the weakest claim to intrinsic good. If equal opportunity for education is exclusively (or even mostly) instrumental, maybe we don’t need equal opportunity for education to reach our goal? For if the point of (a) equal opportunity for education is to provide (b) equal opportunity for income and wealth in order to offer (c) equal opportunity for some intrinsic goods like welfare, freedom, or power, perhaps we can cut (a) out of the picture? As it turns out, (a) equal opportunity for education is an inefficient and intrusive way to reach our goal, (c), in comparison to jumping straight to (b) an ex post endowment tax.
Let me illustrate with an analogy. Imagine that society thinks that it is a matter of justice whether everyone can realize a certain score in the game of golf because your score lets you buy groceries, run for senate, start a company, etc.—that score is like income or wealth. Realizing that some groups of people are statistically less likely to buy their children golf clubs, send them to private lessons, etc., this society decides to implement equal opportunity for golf education. This society now scrutinizes the finest golf academies’ acceptance policies, spends political and economic energies trying to solve the social problem of bad golf scores, and provides all children with golf clubs and a minimum number of hours of practice. Thousands of new golf courses pop up, even more private golf tutors emerge. All of this does indeed improve the average individual’s golf abilities. Nonetheless, Tiger Woods is still the best golfer in the world and we can still find easily identifiable groups of people whose golf scores are statistically different from other groups.
Now, someone comes along and says, “instead of all of the above (or as a complement thereto), let’s take everyone’s observed score and subtract their expected score (i.e., their endowment) in order to determine the final score—the score that lets people buy more groceries, bigger houses, etc.” This way, we “enable players of varying abilities to compete against one another.” This way, scores are sensitive to hard work and insensitive to luck. This second solution is like an ex post endowment tax and it seems clear to me that it is simpler and more just if what you care about is equal opportunity for consumption, welfare, freedom, power, etc.—rather than equal opportunity for golf education.
library(DiagrammeR) # Create a node data frame nodes.all <- create_node_df( n = 7, label = c("Education", "Talent", "Hard Work", "Other", "Income", "Wealth", "Intrinsic Good"), type = "premise", style = "filled", fillcolor = c("gray80", "gray80", "gray80", "gray80", "gray80", "gray80", "green"), fontcolor = "black", shape = c("parallelogram", "parallelogram", "parallelogram", "parallelogram", "parallelogram", "parallelogram", "square"), fontsize = 11, height = 0.75, width = 0.75) edges <- create_edge_df( from = c(2,3,4,1,2,3,4,5,4,5,6), to = c(1,1,1,5,5,5,5,6,6,7,7), rel = "leading_to") graph.arg <- create_graph(nodes.all, edges) # Run this in the Console and Export render_graph(graph.arg, layout = "tree")
## Warning: The `x` argument of `as_tibble.matrix()` must have column names if `.name_repair` is omitted as of tibble 2.0.0. ## Using compatibility `.name_repair`. ## This warning is displayed once every 8 hours. ## Call `lifecycle::last_warnings()` to see where this warning was generated.