{'fraction_non_alphanumeric': 0.03935483870967742, 'fraction_numerical': 0.0025806451612903226, 'mean_word_length': 4.8528301886792455, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Commentary on Practical Foundations for Programming Languages (Second Edition)

The earliest attempts to systematize the study of programming languages made use of the concept of a paradigm, apparently from Thomas Kuhn’s The Structure of Scientific Revolutions. The trouble is, with respect to programming languages at least, no one can say what is a paradigm, or when we know we have a new one. Nevertheless, it has become commonplace to classify languages into trendy-sounding categories such as “imperative”, “functional”, “declarative”, “object-oriented”, and “concurrent” programming. The convention is so pervasive that I am asked to justify why I do not adhere to it. It’s a matter of taxonomy versus genomics, as described in Stephen Gould’s critique of cladistics (the classification of species by morphology) in his essay “What, if anything, is a zebra?” (Gould, 1983). According to Gould, there are three species of black-and-white striped horse-like animals in the world, two of which are genetically related to each other, and one of which is not (any more so than it is to any mammal). It seems that the mammalian genome encodes the propensity to develop stripes, which is expressed in disparate evolutionary contexts. From a genomic point of view, the clade of zebras can be said not to exist: there is no such thing as a zebra! It is more important to study the genome, and the evolutionary processes that influence it and are influenced by it, than it is to classify things based on morphology. Paradigms are clades; types are genes.