Codes That Were Never Tried
The genetic code is famously “one in a million”. Recomputing that result from scratch confirms it and then keeps going: the code is extraordinary against chance, ordinary against directed search, not itself a local optimum, and — once a second axis is scored — not on the Pareto frontier either. What the number measures, what it does not, and why the question has stopped being rhetorical.
There is a sentence that appears in almost every popular account of the genetic code, and it comes from the title of a paper: the genetic code is one in a million.[1] Stephen Freeland and Laurence Hurst generated a million alternative codes, scored each on how much damage a single-letter mutation would do, and found that only one of the million did better than the code every organism on Earth actually uses. The number is correct and the result has held up. It is also narrower than the use it is usually put to, in three specific ways: the space it sampled is very much smaller than the one usually quoted alongside it, the number moves by two orders of magnitude depending on an assumption about how misreadings happen, and it scores a code on one of the several things a code has to do. Each of those is where the interesting biology turns out to be.
A companion essay on this blog used that result as its example of a made thing pushed into a found region: Crick's frozen accident, frozen somewhere very good.[2] This one goes into the space the accident froze in. How large is it, what shape does it have, how much of it did evolution actually see, and how much better could it have done? Those questions were rhetorical in 1998. They are experimental now, because laboratories have started building organisms whose codes are not the standard one, and because the arithmetic can be redone by anyone with an afternoon.
I redid it. The numbers below are from a computation whose code is in this repository, not from the papers, and they reproduce the published results closely enough to trust and differ from the folklore in exactly the way the published results do.
Which million, out of how many
Some vocabulary first, because this essay turns on the details. A protein is a chain of amino acids that folds, as soon as it is made, into a particular three-dimensional shape, and the shape is what the protein does — the pocket an enzyme grips its substrate with, the hole an ion channel lets sodium through. Which amino acids in which order is written in the cell's genetic material in an alphabet of four letters — A, C, G and U in the RNA that the translation machinery actually reads. Four letters cannot name twenty amino acids and nor can the sixteen possible pairs, so the machinery reads three letters at a time. Each triplet is a codon; there are 43 = 64 of them; and each one either names an amino acid or tells the machinery to stop. The table of which codon means what is the genetic code.
A genetic code is therefore an assignment of the sixty-four three-letter codons to twenty amino acids and a stop signal. If the assignment were unconstrained, there would be 2164 of them, about 4 × 1084 — a number of the order of the count of atoms in the observable universe squared, and the one usually quoted when people want the space to sound large. Almost every member of that space is nonsense: codes in which some amino acid has no codon at all, codes that are all stop, codes with no structure of any kind.
Freeland and Hurst did not sample that space, and neither did Haig and Hurst in the 1991 paper that invented the method.[3] They sampled the space of codes that keep the block structure of the natural one. In the standard code the sixty-four codons fall into twenty blocks of one to six codons each, plus three stops, and the blocks are what the third-position redundancy produces: GGN is glycine whatever N is, CUN is leucine whatever N is. Keep those blocks and permute which amino acid sits in which, and the space has 20! members — 2,432,902,008,176,640,000, about 2.4 × 1018. It is a seating plan: twenty tables whose size and position are fixed — glycine's seats four codons, leucine's six, tryptophan's one — and twenty guests, with only the question of who sits where. Twenty choices for the first table, nineteen for the second, and so on down to one, which is what the factorial counts. That is the space in which the code is one in a million.
This matters for what the result means. It is not the claim that the natural code beats almost every conceivable way of mapping codons to amino acids; most conceivable ways are not codes. It is the sharper and more interesting claim that, given the block structure — given that the third letter barely matters and the second letter matters most — the particular assignment of amino acids to blocks is very good at limiting the damage of mistranslation. The block structure itself is not being tested. It is assumed, and then the contents are shuffled.
What makes an assignment good is that chemically similar amino acids sit in chemically neighbouring blocks, so that a misread letter usually swaps an amino acid for one much like it. Similar in what respect, though? Here the folding matters. What drives a chain into its shape is mostly water: the cell is wet, and the chain settles into the arrangement that buries the amino acids that repel water and leaves the ones that tolerate it facing outwards. So the property that matters most about an amino acid, as far as the fold is concerned, is its relationship with water. Substitute a buried leucine for an aspartate and you have put something that repels water where there is none, and the structure fails; substitute it for an isoleucine and nothing happens at all. That is the chain of reasoning the whole measurement rests on — misreading, different amino acid, altered fold, altered shape, lost function — and it is why polarity is the property to score. The scale used to measure similarity is Carl Woese's polar requirement, a measure of how a given amino acid partitions between water and a less polar solvent, which he obtained by running each amino acid up a strip of paper in pyridine–water mixtures of varying composition and taking the slope of its mobility against the water content. It is a sensitivity, not a concentration, and it runs from 4.8 to 13.0: Cys 4.8, Ile and Leu 4.9, Phe 5.0, Trp 5.2, Met 5.3, Tyr 5.4, Val 5.6, Pro and Thr 6.6, Ala 7.0, Ser 7.5, Gly 7.9, His 8.4, Gln 8.6, Arg 9.1, Asn 10.0, Lys 10.1, Glu 12.5, Asp 13.0. Woese introduced it in the 1960s precisely because it predicted the code's structure better than the alternatives — which is worth remembering when the code then scores well on it.[4] Colour the code by it and the structure is visible without any statistics at all.
Read the figure by column. The second letter of the codon is doing most of the work: every codon with U in the middle is a hydrophobic amino acid, every codon with A in the middle is a polar one, and the four squares within each block — the third letter — are usually identical, which is why third-position errors are usually silent. That is the block structure.
The first letter is doing something different, and the way to see it is to measure. Here is the measure, which the rest of this essay also uses: for a given misreading, take the two amino acids involved, subtract their polar requirements, and square the difference; average that over every misreading of a given kind. Call it the cost. GGU to GGC is glycine either way, so the cost is zero; UGG to UGU swaps tryptophan (5.2) for cysteine (4.8) and costs 0.4² = 0.16; UUU to GUU swaps phenylalanine (5.0) for valine (5.6) and costs 0.36; but GUU to GAU swaps valine for aspartate (13.0) and costs 7.4² = 54.76. The worst single substitution in the code is UAU to GAU, tyrosine for aspartate, at 57.76. By that measure a second-position error costs 10.56, a first-position error 4.88, and a third-position error 0.14, so the first letter matters about half as much as the second and thirty-five times as much as the third. (These three are unweighted, necessarily: the weighting used later is a weighting by position, and the point here is to compare positions.) But that average hides a split. Within the two hydrophobic columns a first-letter slip is almost free (0.23 and 0.37); in the column with A in the middle it costs 15.98, worse than an average second-position error. The first letter is conservative exactly where the water-repelling core of a protein is being built, and reckless among the polar amino acids that face outwards.
What the first letter tracks instead is biography. Amino acids that share a first letter tend to share a biosynthetic origin: the GNN row holds glycine, alanine, aspartate, glutamate and valine, which are the simplest amino acids and the ones that dominate prebiotic syntheses and carbonaceous meteorites; the CNN row is mostly the glutamate family — proline, glutamine, arginine, histidine — with leucine the exception; the ANN row is largely the aspartate family, threonine, methionine, isoleucine, lysine and asparagine. Taylor and Coates called this the code within the codons.[5] It is the main evidence for the coevolutionary account of the code's origin discussed below, and it is the clearest sign in the table that the code has a history as well as a function.
The question Freeland and Hurst asked is whether, on top of all this structure, the specific amino acids are well placed.
Two hundred thousand shuffles
What follows varies one thing and one thing only: which amino acid sits in which block. The blocks themselves stay put, so leucine's block still holds six codons whatever amino acid is put in it; the three stop codons stay where they are; the alphabet stays the same twenty. Everything being compared is a different seating plan for the same room.
Here is the calculation for a whole code, in full. For every codon, take its nine single-letter neighbours. For each neighbour that codes for an amino acid rather than a stop, take the cost defined above — the squared difference in polar requirement. Average over all such pairs, this time weighting by how often each kind of error actually happens: third-position misreadings are commonest, first-position next, second-position rarest, and transitions about twice as common as transversions.
The sum runs over ordered pairs of codons c and n that differ at exactly one letter; P is the polar requirement of the amino acid a codon encodes; and w is the weight for that kind of error, 1.0, 0.5 and 4.0 for the first, second and third positions, doubled for a transition. Of the 576 such pairs, the 50 that involve a stop codon are dropped, leaving 526; 134 of those are synonymous and cost nothing. For the standard code the sum comes to 2261.3 over a total weight of 1294.0, so the cost is 1.748. Lower is better. Then do the same for a random permutation of the amino acids over the blocks, two hundred thousand times.
The natural code scores 1.75. The random codes average 5.33, a little over three times worse, with a standard deviation of 1.00. Of the two hundred thousand, exactly one scored as well as or better than the natural code. That is Freeland and Hurst's result, reproduced from scratch: one in two hundred thousand here, one in a million there, the difference being how the error weights are set. Drop the weighting entirely — count every single-letter error as equally likely — and the code is one in about seven thousand instead. The headline number is real but it is elastic, and what it is elastic to is an assumption about mistranslation frequencies in an organism that no longer exists.
It is worth being exact about what that number does and does not say, because this is where the folklore goes wrong. Drawing codes at random and ranking the natural one among them answers a question about chance: is this assignment unusual, compared with what blind shuffling produces? The answer is yes, emphatically. It does not answer the question about optimality: is this the best assignment, or close to it? Sampling cannot answer that, and the reason is arithmetic rather than effort. Two hundred thousand draws out of 2.4 × 1018 is a fraction of about 10−13 of the space — ample for estimating the shape of the distribution and a percentile within it, hopeless for finding its extremes. The best code my random sample contained scored 1.669, barely better than the natural one. To ask the second question you have to stop sampling and start searching.
So: searching. Take a random code and improve it greedily: swap two amino acids, keep the swap if the score goes down, repeat a few hundred times. Do that from two hundred random starting points. The resulting codes average 1.61, and one hundred and forty-one of the two hundred beat the natural code. Let the search run properly, from many starts, and the best code I found scores 1.19 — thirty-two per cent better than the one life uses, and far outside the range of anything the random sample contained.
This is not my finding. Artem Novozhilov, Yuri Wolf and Eugene Koonin published it in 2007, with a much more careful search, and their conclusion is the one the arithmetic forces: the standard code is far better than random and far worse than optimal.[6] They describe the landscape as rugged, and the code as a partially optimised point in it rather than an optimum. My own computation says something slightly stronger: under this cost function the standard code is not at a local peak at all. Start from it and make only improving swaps, and twelve are available in succession, ending at 1.28. Whether that survives a different similarity scale or a different notion of a neighbouring code I cannot say; it is what this one gives. Sampling measures the code against chance; searching measures it against what a process that climbs could have reached. Evolution climbs. The code is not the best code. It is not even a particularly hard code to beat, once you are allowed to look.
How rugged is the landscape it sits in? That can be measured rather than asserted. Take a random code and make, repeatedly, the single swap that improves it most, until no swap improves at all; what you reach is a local optimum by construction. Do that six hundred times from six hundred random starts. The descents end at 313 distinct codes — the landscape is not one hill but hundreds — with scores from 1.18 to 2.29 and an average of 1.40. Five hundred and fifty-six of the six hundred are better than the code life uses.
Three things that does not mean, before the sentence gets away from us. It does not mean the standard code is bad: one random assignment in two hundred thousand beats it on the weighted score, and not optimal and not good are different claims. It does not mean those codes would be better for an organism: the cost scored here is one function of a code, and a cell also cares how fast its ribosomes run, how abundant each transfer RNA is, what each amino acid costs to make, how the messenger RNA folds, and what regulatory signals are written into the same stretch of sequence that spells out the protein. A code that wins on mistranslation could lose on any of those, and nothing here has scored them. And it does not mean evolution could have reached them, which needs a paragraph of its own.
That third point is the sharpest of the three. A swap — exchanging the amino acids of two blocks — is a move in the space of codes, not a step evolution could take. A code changes in a cell by an alteration to one transfer RNA or one synthetase, which reassigns codons singly and rewrites every protein in the organism at the same moment; that is Crick's argument for the freeze, and it applies here as much as anywhere.[2] So the honest reading is that better codes exist and are not far away in the space, not that evolution could have walked to them. Whether they were reachable is a question about the period before the freeze, when codes were still changeable, and that is precisely the period the collective-evolution account below is about. The landscape and the path across it are different claims, and only the first has been measured here.
The best code found makes that concrete, and it is not what one might expect. It is not the standard code with two or three assignments improved. Of the twenty blocks it shares exactly one with the code life uses — serine keeps its codons — and the other nineteen all hold a different amino acid: aspartate, the most polar of the twenty, has been moved out of GAU/GAC and into AUG, the single codon that now means methionine; phenylalanine has taken the block aspartate left. The two codes are at least sixteen transpositions apart. Whatever the better regions of this space contain, they are not neighbours of ours, and a lineage sitting where we sit could not have drifted into one.
What the computation found
Everything above is one calculation run several ways. Gathered, and separated into what reproduces a published finding and what goes past the papers cited:
The right-hand column is not a claim of priority. It is a statement about this essay's sources: those numbers are not in the papers cited, and I have not searched the literature systematically enough to say whether they are anywhere else. What can be said is that they were computed here, from the definitions given above, and that the scripts are available for anyone who wants to disagree with them.
Four ways to be in a good region without aiming at it
A thing that is much better than chance and much worse than optimal needs a different explanation from either. Four are on the table, and they are not exclusive. The first two are the old pair, and they are the two the table compares.
The first is the adaptationist story: selection acted on the code itself while it could, and the freeze stopped it partway, which is why the result is good rather than optimal. The second bundles two older ideas that both make the good score a by-product rather than a purpose. Wong's coevolution theory, from 1975, says the code grew as the amino acid repertoire grew, each new amino acid taking codons from the one it was synthesised from, which explains why chemically related amino acids sit together without anyone optimising anything.[7] The stereochemical account, which goes back to Gamow's guesses and was given its modern form by Michael Yarus and colleagues, says certain amino acids physically stick to certain codons or anticodons, and the code is a fossil of those affinities.[8]
The third explanation is the strangest and the most interesting. Kalin Vetsigian, Carl Woese and Nigel Goldenfeld argued in 2006 that the code's universality and its optimality have the same cause, and that the cause is horizontal gene transfer.[9] If early cells swapped genes promiscuously, then a lineage whose code differed from its neighbours' could not use what it received, and the community as a whole was selected to converge on one code — and, because innovation was shared, to converge on a good one. On this account the code is not the property of an organism at all. It is the property of a community, optimised collectively, and the freeze happened when the sharing slowed. It also predicts exactly what we see: a code that is very good, universal, and not optimal, because collective optimisation stops when consensus is reached rather than when the peak is.
The fourth is deflationary and has to be taken seriously. Steven Massey has argued that the error-minimisation signal can arise with no selection for error minimisation at all, as a by-product of the order in which amino acids were added under a coevolutionary scheme.[10] If that is right, the code's robustness is not a function that was selected but a shadow cast by its history — which would make it chance in the strict sense the afterword of the Found or Made series uses, rather than necessity or choice.
The other twenty choices
Everything so far treats the twenty amino acids as given and asks how they were assigned. The harder question is why those twenty. Life uses a particular set out of a very large number of chemically plausible ones; the Murchison meteorite alone contains dozens of amino acids that no organism encodes, and the prebiotic synthesis experiments produce more.
Melissa Ilardo and colleagues put a number on it in 2015. They assembled a library of 1,913 plausible amino acids and sampled 108 random sets of twenty, scoring each set on the range and evenness it covered in size, charge and hydrophobicity. The natural twenty came out in the extreme tail: fewer than one in a hundred million random sets covered those three properties as adaptively.[11] A related analysis by Philip and Freeland found the same for the ten amino acids thought to be prebiotically available.[12] Whatever chose the alphabet, it was not choosing at random, and it was choosing before the assignment problem the rest of this essay is about even arose.
So there are two nested questions, and the famous number answers only the inner one. Which twenty letters, out of the thousands available? And then, which letter for which block, out of 20! ways? The alphabet looks more remarkable than the assignment does.
Codes that were never tried, tried
All of this was, until recently, arithmetic about a counterfactual. The reason the question has changed is that the counterfactual has started being built.
The sequence is quick to tell. In 2013 Farren Isaacs, George Church and colleagues replaced all 321 instances of one stop codon in Escherichia coli with another and deleted the release factor that read it, freeing a codon for reassignment.[13] In 2016 the same group reported a genome designed to use 57 codons rather than 64, built in segments, most of which worked.[14] In 2019 Julius Fredens and Jason Chin's group in Cambridge synthesised the entire four-million-base genome of E. coli with every instance of two serine codons and one stop codon replaced — a 61-codon organism they called Syn61.[15] It grew, a little slowly. In 2021 they deleted the machinery that had read the three vacated codons, producing an organism in which those codons mean nothing at all, and then assigned them to amino acids that no natural protein contains.[16] Along the way, the same laboratory built ribosomes that read four-letter codons, which enlarges the space of possible codes rather than merely rearranging it,[17] and Floyd Romesberg's group made a bacterium that stably carries a sixth and seventh base and translates them.[18]
What these experiments can and cannot settle is worth being precise about, because the popular framing — life with a different code — overstates them. None of them is an alternative assignment of the twenty canonical amino acids to the sixty-four canonical codons. They are codes with fewer codons in use, or with extra letters, or with extra amino acids bolted on. The experiment that would test Freeland and Hurst directly — build an organism whose code is one of the random permutations, and race it — is still out of reach, because it would require rewriting every gene simultaneously and the resulting proteome would be a different proteome.
What they do establish is the premise the whole argument rested on and could not previously check: that the code is changeable at all, that the barrier is the number of edits rather than any law, and that a cell whose code differs from its ancestors' can live. Crick's argument for the freeze was that no change could be tolerated because every protein would change at once.[2] That is true of a change made by mutation in one step. It is not true of a change made by rewriting the genome first, which is what these laboratories do, and the bacteria that result are the proof that the freeze is a fact about how evolution moves rather than about what is possible.
There is also a second-order finding in this work that bears on the landscape. The recoded organisms are consistently a little less fit than their ancestors — slower growth, subtle defects — and the fitness cost usually turns out to come not from the code change itself but from the disruption of overlapping signals in the DNA: ribosome binding sites, mRNA structure, regulatory motifs that share the same bases as the coding sequence. Shalev Itzkovitz and Uri Alon had shown in 2007 that the codon assignments leave unusual room for such parallel codes to be embedded.[19] If that is part of what the code is for, then scoring it on mistranslation alone is scoring a machine on one of its functions, and every number in this essay is a projection of a higher-dimensional problem onto one axis.
From how good to what shape
Before any verdict, the objection the last section raises has to be met. Every number so far scores a code on one thing. What happens if you score two?
The obvious second axis is size rather than polarity: how much a misreading changes the volume of the amino acid. It is largely independent of the first — the two scales correlate at only −0.30 — and it is the second thing a fold cares about: water decides which residues are buried, and size decides whether the buried ones actually fit. A residue too large for its pocket breaks a structure as surely as one that repels water in the wrong place. On that axis the standard code scores 1128, and 22,604 of the 200,000 random codes do better. It is unremarkable. Whatever the code was shaped by, it was not shaped to conserve size.
Two axes changes what the word “optimal” can even mean. With one, there is a best code. With two there is no best, only a frontier: the codes that nothing beats on both at once. The question becomes whether the standard code is on that frontier, and the answer is that it is not — but the way it fails is the interesting part. Of the 200,000 random codes, not one beats it on both axes; its polarity advantage is large enough that blind rearrangement never dominates it. Of 300 codes hill-climbed on polarity alone, 197 turn out to beat it on volume as well, because improving one axis drags the other along. The codes that dominate the standard code are precisely the ones a directed search produces and never the ones chance produces. Sampling and searching again, one dimension up.
So: is the genetic code optimal? On polarity, no. On polarity and volume together, still no. On all the axes at once — including the ones nobody has scored, the speed of translation, the abundance of each transfer RNA, what each amino acid costs a cell to make, the room left over for regulatory signals in the same sequence — the honest answer is that nobody knows, because the question has never been posed in that form. Two axes is not many axes, and the one axis on which the code is known to do unusually well besides polarity is the parallel-information one.[19] A proper multi-objective analysis of the genetic code does not exist, and until it does “the code is optimal” and “the code is not optimal” are both claims about a projection.
What can be said is narrower and still worth saying. On the axis that has been measured most, the code is roughly three times better than a random assignment of the same amino acids to the same blocks, one random code in two hundred thousand beats it under one weighting and one in seven thousand under another, and it is beaten decisively by any short greedy search. Repeating “one in a million” without the second half of that sentence has made a genuinely interesting fact sound like an argument for design, which is the opposite of what it is. Nor does the second half license the opposite mistake: a code that blind shuffling essentially never improves on, scored on one of the several things a code has to do, is not a poor piece of engineering.
The question that replaces it is about shape. How rugged is the landscape — how many local peaks, how high, how far apart? How connected is it: can a code walk from one peak to another through codes that are viable, or is every path downhill? The vocabulary is worth attributing: the landscape is Sewall Wright's, from 1932, and it travelled from population genetics into optimisation and machine learning rather than the other way round.[20] John Maynard Smith asked exactly this question about protein sequences in 1970, and his answer — that evolution requires the viable sequences to form a connected network in sequence space — is the right frame here too.[21] Where the code sits is a fact about one point. Whether it could have got anywhere else is a fact about the network, and nobody has mapped it.
That is a question the synthetic organisms can start to answer, because they convert a score into a growth rate. Every recoded strain is a measurement of one point in code space with real units on the vertical axis — not polar requirement squared, but generations per hour. The programme that would follow is obvious and expensive: build a series of codes that differ from the natural one by one swap, two swaps, three, and see how fitness falls away. That is a fitness landscape, measured rather than modelled, and it is the first time the word has been literally applicable to the genetic code. The figure below is the first step of that programme done in arithmetic instead: the cost of the standard code as amino acids are exchanged one pair at a time. A single swap already gives up more than a third of the distance to a random code, which says the code sits in a narrow basin; what nobody knows is whether the floor of that basin connects to any of the deeper ones.
And it bears on the argument the companion essays have been making. If the landscape turns out to be smooth and single-peaked, the code is necessity lightly disguised, and any lineage anywhere would have found something close to it. If it is rugged and the peaks are unreachable from one another, the code is history — one of many good solutions, fixed by which region the first cells happened to be wandering in. What has been measured so far points to the second: hundreds of peaks, most of them better than ours, and the best of them sharing one assignment out of twenty with it. The measurement tells you which, and the measurement is now buildable. Cardano's useless subtlety took three hundred and eighty-one years to reach the laboratory. This one has taken about fifty-five.
Where this could go
The landscape, actually mapped. The obvious computation has not been published in full: enumerate the local optima of the block-permutation space under a standard cost function, count them, measure their heights and their separations, and ask how many are reachable from a random start by single swaps. The space is 20! but the search is cheap, and the answer would say whether the code's position is typical of an interrupted walk or unusual.
A better cost function. Every number here rests on polar requirement and a guess at mistranslation frequencies. Modern substitution matrices, measured misreading rates from ribosome profiling, and the fitness effects of real amino acid substitutions are all available now and were not in 1998. Rescoring the code against them is a weekend's work and would tell us how much of the result is the code and how much is the 1960s.
The Pareto question. The two-axis result above is a sketch of an analysis nobody has done properly: score every code on polarity, volume, the room it leaves for embedded signals, the biosynthetic cost of its amino acids and the tRNA economy it implies, and ask which codes are on the frontier and whether ours is among them. That is the form in which “is the code optimal?” is actually answerable.
Scoring the parallel codes. If part of what the code is optimised for is room to embed regulatory signals, that can be measured: score random codes on how much sequence freedom they leave for a given set of motifs, and see whether the natural code is unusual on that axis too. Itzkovitz and Alon started this; nobody has combined it with the error-minimisation score into one number.
The fitness of a swap. The experiment the synthetic biology makes possible: recode an organism with one amino acid pair exchanged, and measure growth. Even a handful of such strains would convert the whole argument from arithmetic into data, and the first one to be built will be a landmark whatever it shows.
Alphabets before assignments. Ilardo's result deserves the treatment the assignment problem has had: which subsets of the plausible amino acids are reachable by prebiotic chemistry, how the adaptive ones are distributed among them, and whether the natural twenty are unusual among the reachable sets or only among all sets. The second is a much weaker claim than the first, and the literature does not always distinguish them.
This piece was written collaboratively with Claude Opus 5 (Anthropic): human specification, editorial direction and critical review; machine synthesis, drafting, computation and figure generation.
The numbers in the measurement section are not quoted from the literature. They come from a computation written for this essay — 200,000 random codes drawn by permuting the twenty amino acids over the codon blocks of the standard code, scored on squared differences in Woese's polar requirement across single-base neighbours, with position and transition weights as described in the text, plus hill-climbing from 200 random starts. The landscape figures come from a second script in the same place: the per-position costs, 4,000 random codes at each distance from the standard code, 600 steepest descents to local optima, the comparison between the best code found and the standard one, and the two-axis comparison using Grantham residue volumes as a second scale. Both scripts and their JSON output are in this blog's repository, as scripts/codespace.py, scripts/codespace_landscape.py and scripts/codespace_multi.py; the figures are generated from that output by scripts/codespace_figures.py, so every number in the text and every mark in the figures traces to one run. It reproduces Freeland and Hurst's order of magnitude and Novozhilov, Wolf and Koonin's conclusion; it is not a replication of either paper's exact method, and the weights are a reconstruction rather than theirs.
The per-position costs quoted in the text (10.56, 4.88, 0.14 and the column breakdown) are from the same computation. Figure 1 is the standard code and published polar requirement values, drawn to scale. Figure 3 is the histogram of that computation, with the natural code, the mean of the greedy walks and the best code found marked at their computed positions; Figures 2, 4, 5 and 6 come from the second script.
The limitations are stated where they arise and are worth collecting: polar requirement was chosen by Woese partly because it fits the code, which makes scoring the code on it close to circular; the error weights are a reconstruction, and the headline percentile moves by two orders of magnitude when they change; a swap between blocks is a move in search space and not a step evolution could take; two axes is not many axes, and the second one uses Grantham's volumes, another single scale; and nothing here has been checked by anyone but its author. Where accounts are contested the text says so: the stereochemical evidence, Massey's neutral explanation, and the collective-evolution hypothesis are live positions, not settled ones, and the fitness costs of recoded organisms are still being argued over. The claim that the landscape's shape is the question that replaces optimality is the authors' framing.
Authored by: Luis Matos Ferreira — Physicist, Developer, Writer
- The Frozen Accident — biology made by history and found by physics; this essay expands one of its open threads.
- Chance, Necessity and Convention — the afterword whose third term the recoded organisms belong to.
- Invented, Then Unavoidable — Part I of Found or Made: rigidity, and inventions with no room to invent.
- The Complete Parts List — what biology knows and what it can predict.
- Freeland & Hurst, “The genetic code is one in a million”, Journal of Molecular Evolution, 1998.
- Crick, “The origin of the genetic code”, Journal of Molecular Biology, 1968.
- Haig & Hurst, “A quantitative measure of error minimization in the genetic code”, Journal of Molecular Evolution, 1991.
- Woese, Dugre, Saxinger & Dugre, “The molecular basis for the genetic code”, PNAS, 1966; Sonneborn, “Degeneracy of the genetic code”, 1965.
- Taylor & Coates, “The code within the codons”, BioSystems, 1989.
- Novozhilov, Wolf & Koonin, “Evolution of the genetic code: partial optimization of a random code for robustness to translation error in a rugged fitness landscape”, Biology Direct, 2007; Koonin & Novozhilov, “Origin and evolution of the genetic code: the universal enigma”, 2009.
- Wong, “A co-evolution theory of the genetic code”, PNAS, 1975.
- Yarus, Caporaso & Knight, “Origins of the genetic code: the escaped triplet theory”, Annual Review of Biochemistry, 2005.
- Vetsigian, Woese & Goldenfeld, “Collective evolution and the genetic code”, PNAS, 2006.
- Massey, “A neutral origin for error minimization in the genetic code”, Journal of Molecular Evolution, 2008.
- Ilardo et al., “Extraordinarily adaptive properties of the genetically encoded amino acids”, Scientific Reports, 2015.
- Philip & Freeland, “Did evolution select a nonrandom alphabet of amino acids?”, Astrobiology, 2011.
- Lajoie et al., “Genomically recoded organisms expand biological functions”, Science, 2013.
- Ostrov et al., “Design, synthesis, and testing toward a 57-codon genome”, Science, 2016.
- Fredens et al., “Total synthesis of Escherichia coli with a recoded genome”, Nature, 2019.
- Robertson et al., “Sense codon reassignment enables viral resistance and encoded polymer synthesis”, Science, 2021.
- Dunkelmann, Willis, Beattie & Chin, “Engineered triply orthogonal pyrrolysyl–tRNA synthetase/tRNA pairs enable the genetic encoding of three distinct non-canonical amino acids”, Nature Chemistry, 2020; quadruplet-decoding ribosomes, 2021–24.
- Zhang et al., “A semisynthetic organism engineered for the stable expansion of the genetic alphabet”, PNAS, 2017.
- Itzkovitz & Alon, “The genetic code is nearly optimal for allowing additional information within protein-coding sequences”, Genome Research, 2007.
- Wright, “The roles of mutation, inbreeding, crossbreeding and selection in evolution”, Proceedings of the Sixth International Congress of Genetics, 1932.
- Maynard Smith, “Natural selection and the concept of a protein space”, Nature, 1970.
Comentários
Enviar um comentário