¿Por qué es que el ADN humano completamente secuenciado toma solo 3.2 gb mientras que los programas de computadora a menudo toman más gigabytes y aún alcanzan solo una fracción de las capacidades humanas?

Brian Farley escribe: “ EL ADN NO ES EL CÓDIGO DE FUENTE . Esta analogía es indescriptiblemente horrible, sin embargo, parece persistir entre los informáticos y otros tecnófilos que solo son capaces de ver el mundo a través de lentes tintados por tecnología “.

Voy a estar en desacuerdo: la analogía es muy adecuada, es solo que “los informáticos y otros tecnófilos” no entienden el código fuente. Afortunadamente, estoy aquí para explicártelo … 😉

Vamos a comenzar con una computadora muy simple (la simplificación de Stephen Cole Kleene de la máquina Turing, si tiene curiosidad). Tienes una cinta con un número infinito de celdas; cada celda contiene inicialmente un 0. Un cabezal de lectura / escritura atraviesa las instrucciones de ejecución de la cinta. Las instrucciones son de la forma (w, m, s): w = el símbolo a escribir, 0 o 1; m es la dirección para moverse, ya sea a la siguiente celda a la izquierda (L) o derecha (R), y s es el siguiente “estado”. Cada estado tiene dos instrucciones: una instrucción si la celda debajo del cabezal de lectura / escritura es un 0, y una instrucción separada si la celda tiene un 1.

Lo hice sonar más complicado de lo que es. Usted lee desde la celda, busca las instrucciones, escribe en la celda, pasa a la siguiente celda y cambia el estado al siguiente par de instrucciones. Comienzas en el estado A, y si alguna vez aterrizas en el estado H, dejas de ejecutar. (Si eso no estaba claro, vea la entrada de castores ocupados en wikipedia).

Aquí hay un programa interesante (tenga en cuenta que usa notación (s, w, m), la operación es idéntica). La instrucción de la izquierda se ejecuta si read = 0, la instrucción de la derecha si read = 1. Crédito a http://www.drb.insel.de/~heiner/…

A: B1R F0L
B: C0R D0R
C: D1L E1R
D: E0L D0L
E: A0R C1R
F: A1L Z1R

¿Por qué es interesante este programa? Primero, se sabe que se detiene. Escribir programas que entren en bucles sin fin es bastante fácil. Este no lo hace.

En segundo lugar, cuando se detiene, la cinta tiene bastantes 1s. He aquí cuántos.

unos =
12914951964730997250673433546819849509549358087128 \
69005395873005091204311405044485024013143268788877 \
96982050179592672794672477591595948221752253054324 \
81859864495796137909683447198447312843568880129905 \
33063069223512777765526485338267097939892666393404 \
33645541695093655408344618435778415742964338602689 \
29575034928793440722283883496539655948945100141899 \
42944746881736756960481303815091265680548717247559 \
30418437122794678536247499891470543037484990932498 \
45855395105658447844504456040960051641314951220524 \
82406177581463473827266448103006672709418626513574 \
98031478037424866640095921801194216728219139588401 \
23231130890028804306931645773916087727281493526404 \
73317019897976560342477660683368440952973000704411 \
85616248748736529970020326673445871378590029099788 \
72928814647043325481327200728882173015355211743620 \
25443804176796589274203597930628676364226731372114 \
6548318330807873

¿Es este el mayor número de 1 que se puede escribir? Esa sigue siendo una pregunta abierta. De hecho, no sabemos el número máximo de 1s que puede escribir una máquina de 5 estados.

Piense en eso por un momento. Incluso para una máquina tan simple como esta, no entendemos completamente el comportamiento en 5 estados y 10 instrucciones.

El ADN es como este tipo de código fuente. Podemos escribir el código. Entendemos los cambios de estado individuales. Pero hay un cambio de fase fundamental que va desde la comprensión a nivel micro hasta la comprensión del resultado macro.

Cuando los humanos escriben el código fuente, estamos optimizando para poder pasar del resultado macro al micro entendimiento. Eso hace que el código sea enormemente ineficiente, pero nos da la capacidad de razonar sobre el código. La biología (y los enteros), por otro lado, no fueron optimizados para ser comprensibles.

Hay algunos factores diferentes que contribuyen a la aparente discrepancia.

1. La mayoría de los programas informáticos que ocupan espacio en gigabytes no lo hacen debido al código. Hay muchos otros recursos que generalmente se incluyen con estos programas, como modelos 3D, audio, imágenes o video, todos los cuales ocupan una enorme cantidad de espacio. Grand Theft Auto puede requerir una buena cantidad de programación, pero la gran mayoría de los> 10 GB de espacio que usa son para mantener todos los datos detallados necesarios para modelar una ciudad entera con tanta precisión:

Como analogía, su ADN contiene la información [1] necesaria para construir un cuerpo humano, pero no contiene la información que adquiere más adelante en la vida, como el aspecto de las caras de sus padres, cómo llegar a la escuela, o quién era el presidente de los EE. UU. en 1890. Todo eso está almacenado en los 100 mil millones de neuronas y 100 billones de sinapsis en el cerebro.

[1] No toda la información necesaria para construir un humano está contenida en el ADN. Más sobre esto más tarde.

2. Su ADN no contiene un plano de su cuerpo. Hay algunas criaturas, como el nematodo C. elegans , cuyos planes corporales son altamente estereotipados: dos personas tienen casi exactamente el mismo número de células, con las mismas funciones, en los mismos lugares. Sin embargo, los mamíferos, incluidos los humanos, no son así. Eso significa que su ADN no necesita hacer un seguimiento de cada lunar de su cuerpo o de la forma precisa de su nariz. Solo necesita contener suficiente información para la forma aproximada humana, y muchos de los detalles se completan durante el desarrollo. Del mismo modo, un programa de computadora que quiere mostrarle cómo son los lugares reales en la Tierra, como Google Earth, necesita terrabytes de información, pero un código que genera paisajes fractales como este

ocupa una pequeña fracción de ese espacio.

3. Tu ADN tampoco contiene todas las habilidades que adquirirás durante tu vida. El software de computadora a menudo necesita saber cómo realizar algoritmos específicos. Google Maps no llega a su computadora para pedirle que le enseñe cómo encontrar la mejor ruta entre dos puntos. Eso ya está integrado, así como docenas de otras características, como el refinamiento adaptativo de los mapas en función del nivel de zoom, la carga progresiva de diferentes niveles de detalle para ayudar con la capacidad de respuesta, el análisis de direcciones en una variedad de formatos, etc. habilidades y legendarias técnicas ninja?

Tienes que aprender esos. En este sentido, el típico software de computadora sabe cómo hacer mucho más que tu ADN.

4. Ya sabemos cómo construir algunos sistemas que requieren relativamente poco código pero que pueden aprender a hacer cosas complicadas. Como lo hace tu ADN. Pero eso no siempre es lo que queremos que hagan nuestras computadoras. Este libro en línea le enseña cómo implementar una red neuronal que puede aprender a reconocer dígitos escritos a mano con una precisión> 95%. El código de Python para esto, excluyendo comentarios, es solo unos pocos cientos de bytes. El problema es que el código en sí mismo no sabe absolutamente nada acerca de reconocer dígitos; todo eso tendrá que ser aprendido presentando la red neuronal que implementa con miles de ejemplos. Si en cambio quisieras escribir código que ya supiera cómo reconocer dígitos, eso requeriría mucho más espacio.

Por supuesto, encontramos que las computadoras son útiles precisamente porque no funcionan como nosotros. Los humanos cometen errores, y las redes neuronales también lo hacen. Es por eso que gran parte de la programación que la gente suele hacer tiene como objetivo dar la respuesta correcta de manera consistente, y eso requiere un enfoque muy diferente al de cuando estás de acuerdo con tener razón solo el 95% del tiempo.

5. La longitud del código depende tanto del idioma como de la tarea que cumple. Eche un vistazo a cómo le pregunto a Python si una cadena contiene otra cadena:

doesContain = (s.find (‘otra cadena’)> 0)

Resulta que buscar una cadena dentro de otra de manera eficiente no es completamente trivial; un algoritmo particularmente conocido, el algoritmo Knuth – Morris – Pratt, se ve así cuando está escrito en lenguaje ensamblador:

(código de aquí)

Algunos caracteres en Python pueden requerir cientos de caracteres en otro idioma para realizar la misma tarea. El código de ADN aprovecha, por ejemplo, toda la maquinaria de traducción de una célula, y luego aprovecha cosas como la física del plegamiento de proteínas y las interacciones de proteínas para convencer a un fragmento de ADN para que realice un conjunto complejo de tareas. La mayoría de los lenguajes de computadora son más limitados que eso.

6. Los seres humanos deben poder usar, comprender y mantener su código. La biología no tiene un diseñador y no podría “importarle” menos si usted o yo entendemos cómo funciona. Sin embargo, los humanos necesitan comprender el código para usarlo y mantenerlo. Eso agrega una cantidad considerable de gastos generales, desde cosas triviales como dar nombres largos y legibles a las variables, hasta cosas menos triviales como diseñar funciones que hacen una cosa y solo una cosa.

Como un buen ejemplo de esta diferencia, en los años 90, Adrian Thompson permitió que un FPGA (matriz de compuerta programable en campo) fuera seleccionado por un proceso evolutivo para realizar una determinada tarea. Funcionó. Pero las soluciones encontradas por la evolución fueron extremadamente extrañas, e incluso utilizaron fallas en los circuitos en lugar de depender de la operación nominal para realizar su tarea. Así es también como funciona la biología: aprovecha cualquier truco que pueda encontrar para realizar su tarea (hacer más descendencia). Esto puede generar un “código” muy compacto, pero no muy comprensible. Este es uno de los motivos por los que nos cuesta tanto entenderlo. (Aunque vale la pena señalar que si alguien le mostró una radio a alguien que no sabía nada sobre electrónica, no está nada claro cómo entendería cómo funciona).


Todo esto no significa que el ADN no sea código; es solo un tipo diferente de código de los que estamos acostumbrados de la programación de computadoras. Brian Farley señaló que el ADN es solo una pequeña fracción de la maquinaria que necesita para mantener una célula en funcionamiento, lo que obviamente es cierto. El ADN sin todas las otras cosas que hay en una célula es inútil, lo que por cierto es una de las razones por las que no podemos hacer realidad Jurassic Park: incluso si logramos recuperar de alguna manera el ADN de hace 65 millones de años (eso es un gran ‘si’), no tendríamos un óvulo de dinosaurio para colocarlo. Y la probabilidad de que funcione en cualquier otra celda es muy pequeña.

Sin embargo, eso no es realmente diferente para la programación de computadoras: imagine poner el código Python a través de un compilador de C ++. Nada funcionaria. De hecho, la probabilidad de que poner código escrito en el lenguaje A en un compilador para el lenguaje B resulte en un programa funcional es muy pequeña, al igual que en el caso de la biología. Sin mencionar que ejecutar el código requiere una computadora con la arquitectura correcta, por lo que, como ve, el código de la computadora también requiere mucha maquinaria adicional y, en cierto sentido, es solo una pequeña fracción de lo que hace que las computadoras funcionen. Pero eso no hace que no sea código.

En cualquier caso, es bueno tener en cuenta todas las demás cosas que contienen información para construir un ser humano, desde las marcas epigenéticas en su ADN, hasta los tipos y la cantidad de proteínas que están presentes en el óvulo particular que se convertirá en usted. , al entorno en el que se desarrolla el feto, incluidas cosas como la microbiota simbiótica que hereda de la madre. En el caso de una computadora, conocemos la maquinaria, por lo que podemos comenzar a mirar el código y entender lo que hace. En el caso de la biología, solo estamos comenzando a vislumbrar exactamente lo que hace la maquinaria, por lo que no tenemos idea de cómo leer el código de ADN.

Consideremos esta analogía del ADN como código fuente y compleméntelo con lo que sabemos sobre genética. Claramente, el ADN codifica proteínas y moléculas de ARN funcionales, pero no es tan sencillo. Por un lado, aunque el código genético en cada célula de su cuerpo (con pocas excepciones) es idéntico, las proteínas que producen esas células no lo son. Las funciones que realizan sus células hepáticas son muy diferentes de las de sus células oculares. Esto está mediado en parte por el cambio del grado de expresión de ciertos genes en ciertos tipos de células. Se puede hacer que los genes se expresen con fuerza, debilidad o nada, y esta modificación se puede aplicar de forma permanente, a largo plazo pero temporalmente o a corto plazo. Aunque todas estas modificaciones comunican información vital sobre cómo usar el código genético, en realidad no se secuencian y, por lo tanto, no se tienen en cuenta para la cifra de 3.2 GB.

Hasta ahora todavía podemos usar la analogía. El código aún se podría imprimir y se podrían usar marcas adicionales para indicar el nivel de expresión (aumentando el tamaño de los datos pero no a pasos agigantados). Lamentablemente, aún no hemos terminado. El siguiente nivel de comprensión desafiará seriamente nuestra capacidad de seguir usando esta analogía.

Continuemos con la analogía de todos modos. Si el ADN es el software, ¿cuál es el hardware? Para hacer uso del código genético, las células deben tener proteínas que lean ese código. Estas proteínas realmente interactúan con partes específicas del código genético y sin ellas, las proteínas de transcripción no llegarán a transcribir esos genes; se llaman factores de transcripción (TF). Entonces aquí tenemos una situación interesante. Es posible que tenga un gen que esté perfectamente abierto a la transcripción, pero si está en una célula sin el TF correcto, casi no tendrá expresión génica. Para complicar aún más las cosas, los TF son proteínas. Las proteínas no son digitales. Con eso quiero decir, no son entidades binarias con configuraciones funcionales claras (es decir, ON u OFF). Tienen un grado de afinidad por su objetivo y esa afinidad se modifica por su entorno (temperatura, pH, otras proteínas en el entorno, etc.).

Hasta ahora hemos estado tratando el ADN como si fuera información que es intangible, pero no lo es. Tiene una forma física que cambia y ese cambio en la forma cambia la fuerza con la que se lee y si se lee. La región de un gen que detecta un TF se llama potenciador. La región que las proteínas de transcripción deben unir para comenzar a transcribir se llama promotor. Estas dos áreas pueden estar físicamente muy separadas. De hecho, parte del trabajo de muchos TF es doblar el ADN para que estén físicamente juntos. A veces esto es imposible porque el ADN en esa ubicación está demasiado apretado.

Todavía hay más medidas de control. Otras proteínas pueden evitar que los TF se unan a los potenciadores. Algunos ARN codificados se unen y reconocen otros ARN y señalan su degradación. Entonces, incluso cuando un gen se transcribe en ARN, ese ARN puede degradarse antes de convertirse en una proteína.

Entonces, si el ADN debe considerarse un código, entonces es un código que codifica su propio sistema operativo (o quizás muchos sistemas operativos aplicados a muchos genes diferentes dentro del código), eso puede cambiar la frecuencia con la que se lee, y eso es leer de manera diferente es diferentes ambientes. La genética es mucho más complicada de lo que crees y ciertamente mucho más complicada que los 3,2 GB de datos de secuencia genética que te permiten apreciar.

Prefiero pensar en la secuencia genética como una lista de todas las palabras que mis células pueden decir. Para decir algo coherente, tendría que elegir sabiamente qué palabras decir y en qué orden. Tal vez puedas captar algunas palabras mal escritas o partes faltantes en mi vocabulario. Pero simplemente conocer todas las palabras en mi diccionario no es suficiente para poder inferir la trama de la novela que estoy escribiendo.

Porque el ADN NO ES EL CÓDIGO DE FUENTE . Esta analogía es indescriptiblemente horrible, sin embargo, parece persistir entre los científicos informáticos y otros tecnófilos que solo son capaces de ver el mundo a través de lentes con tintes técnicos.

La secuencia de nucleótidos del ADN representa solo una pequeña fracción de toda la información que una célula usa para permanecer viva. A saber: el estado de modificación química de los nucleótidos individuales, la posición y composición de miles de diferentes tipos de proteínas asociadas con el ADN, el estado de modificación química de las proteínas asociadas con el ADN, la estructura tridimensional que adoptan los cromosomas en el núcleo, y el específico La ubicación de las secuencias de ADN dentro del núcleo aporta información nuclear vital a los seres vivos.

Fuera del núcleo, la cantidad, tipos, localización, plegamiento y estado de modificación química de las moléculas de ARN; la cantidad, tipos, localización, plegamiento y estado de modificación química de las moléculas de proteína; toda la red de interacciones proteína-proteína, proteína-ARN y ARN-ARN; y la cantidad, tipos y localización de moléculas pequeñas TODAS contribuyen con información esencial a una célula.

La secuencia de ADN no es “código fuente maestro” ni nada tan tonto; Es solo una de las miles de cosas diferentes que determinan la identidad de las células y los organismos. Supongo que las personas se adhieren al ADN como código fuente porque es una de las pocas cosas en la celda que tiene una representación basada en texto, pero es una analogía muy pobre.

Los programas de computadora están escritos en idiomas.

Los lenguajes informáticos de nivel superior permiten a las personas hacer que las máquinas completen tareas, funciones, métodos, algoritmos, en algo más parecido al lenguaje al que estamos acostumbrados.

Este tipo de lenguaje puede leerse como oraciones que son instrucciones, y uno puede agregar // comentarios anotativos para documentar lo que se supone que debe hacer una sección de código, pero no se lee como comandos.

El compilador o el intérprete ignora la doble barra (//) al analizar o leer el código fuente o las instrucciones del idioma.

Los lenguajes informáticos de nivel superior se compilan o transfieren a código de bytes y luego a código de máquina.

El código de máquina no es más que bits, o cero (0) y uno (1), del sistema de numeración binaria:

00001101010100101010 es lo que trata la CPU, no palabras como “if []; then []”

Las secuencias de nucleótidos, entonces, están representadas por ACTG o ACUG para ARN, y cada símbolo podría representarse como al menos dos (2) bits, pero probablemente más para tener en cuenta el uracilo (U) en el ARN en lugar de la timidina (T) en el ADN.

por ejemplo:

00 = A

01 = C

11 = T

10 = G

Puede ajustar una gran cantidad de cada símbolo en (3.2 * 10 ^ 9 * 8 bits / byte) = 25.6 mil millones de bits.

Además, a pesar de que el ADN es bicatenario, la naturaleza complementaria del ADN hace que sea obvio a qué se une una sola cadena, es una secuencia complementaria. Por lo tanto, grabar ambos hilos ni siquiera es necesario, ya que solo puede tener:

una purina (A, G) emparejada con una pirimidina (T, C) para constituir un par de bases.

A = T

G = C

Las purinas tienen una estructura de anillo único (pequeña).

Las pirimidinas tienen una estructura de doble anillo (grande).

(pequeño) + (pequeño) = demasiado pequeño para la doble hélice

grande + grande = demasiado grande

Pequeño + Grande = Purina + Pirimidina = justo

Si tiene la secuencia AGCTAGCT, entonces sabe que está emparejada con TCGATCGA

Una cosa a considerar es que las entidades vivientes no son Turing Machines como las computadoras. Saque el genoma completo de un organismo y colóquelo en una célula de otro organismo, digamos del ratón a la azalea, y no cambia la célula vegetal a una célula animal. Esto solo le dice que hay mucha información relacionada con hacer que la identidad de un ser vivo se almacene en otro lugar que no sea el ADN.

Otra cosa a tener en cuenta es que, si desea utilizar la analogía imperfecta de los programas de computadora, el “programa” de ADN solo se ha iniciado UNA VEZ. Cada parte de ADN en un organismo vivo en este planeta es el producto de una cadena ininterrumpida de actividad continua, que se remonta al ancestro común de todas las formas de vida en la tierra, en donde el ADN ha sido modificado continuamente por su entorno, y a su vez se ha modificado el entorno. Los datos se han escrito en el ADN, y desde el ADN en otras formas, de forma continua, copiada, alterada, transferida, modificada, durante 3.500 millones de años sin interrupción. Los organismos no nacen de hebras desnudas de ADN. Nacen de las células, una bolsa de componentes químicos en constante cambio que incluye el ADN, pero también mucho más, al recibir una porción de todos esos componentes químicos, no solo el ADN, durante la división celular, y esa célula surgió de células anteriores , todo el camino de regreso a la primera celda. Entonces, en ningún momento de su historia el ADN dentro de cualquier ser vivo nunca ha estado rodeado por toda la maquinaria química de las células vivas, durante los 3.500 millones de años de historia de la vida en la Tierra.

Finalmente, los programas de computadora están escritos por humanos con la intención de que el mismo u otros humanos puedan examinarlos, leerlos, comprenderlos y, si es necesario, modificarlos. El ADN nunca ha tenido tanta restricción. Un ejemplo análogo sería el código fuente generado por algoritmos genéticos, utilizando rondas de ciclos de selección para optimizar una población inicial aleatoria de códigos para una tarea específica. Los resultados finales son a menudo mucho más compactos y eficientes que cualquier código escrito deliberadamente para la misma tarea. También son a menudo mucho menos comprensibles para cualquiera que intente leerlos y descubrir cómo funcionan realmente.

Cualquiera que estudie biología se da cuenta de inmediato de que los 6 Gigabits de información del ADN humano parecen una cantidad muy escasa para especificar todas las funciones del cuerpo a nivel molecular, incluida toda la inteligencia humana.

Entonces 750 megabytes no parece mucho.

Brian Farley menciona posibles fuentes alternativas de información, como el plegamiento de proteínas, etc., pero en realidad esto solo empeora el problema porque mucha de la información del genoma humano realmente especifica cómo construir la mayoría de las proteínas que se encuentran en su cuerpo.

Otro factor que empeora aún más el problema es que la gran mayoría de nuestro ADN se superpone con chimpancés y otras especies.

Entonces, la pregunta es cómo puede explicarse la gran diferencia en inteligencia entre humanos y chimpancés con una cantidad tan pequeña de información (quizás 100 megabytes o menos).

Parte de la respuesta a esa pregunta vendrá del trabajo de los biólogos durante las próximas décadas y parte vendrá de los campos de la ciencia cognitiva.

Por ahora, hay algunas cosas a tener en cuenta:

Podría almacenar un par de conjuntos de enciclopedias en 100 megabytes de datos.

Puede comparar el ADN con las instrucciones del software de un programa de computadora, pero NO con los datos manipulados en la memoria principal de la computadora. Aunque hay muchos programas que usan varios gigabytes de memoria principal, el programa de software en el disco duro requiere MUCHO menos espacio.

Los niños salvajes que no se benefician de una educación moderna no logran una diferencia tan grande en inteligencia por encima de la de los chimpancés. Esto implica que una gran parte de la inteligencia humana no está almacenada en el ADN sino en el entorno externo.

Parece factible que 10-100 megabytes de instrucciones sean suficientes para almacenar un algoritmo de aprendizaje capaz de absorber el conocimiento del entorno. El campo de la inteligencia artificial todavía está luchando por descubrir cómo construir algoritmos capaces de crear realmente nuevos conocimientos que no se deriven de la inteligencia de los programadores. Cuando eso se logre, será posible estimar cuánto ADN humano sería necesario para especificar dicho algoritmo.

Las respuestas existentes pueden ser lo suficientemente precisas, pero me gustaría ofrecer algo más simple, y tal vez omitir la actitud de “eres estúpido por preguntar esto” 🙂

El ADN es solo información. No es funcional No puede hacer nada sin un motor de interpretación. Es como tener un archivo Excel, con mucho formato, bordes y fondos coloridos, pero sin un programa Excel para leerlo y mostrar cosas como “intencionadas”.

Aquellos que están un poco familiarizados con los juegos pueden conocer los “motores” de los juegos. Los juegos modernos en 3D consisten en gráficos y diseños de niveles, puestos a través de un motor de juego que lo presenta todo como un juego funcional. El ADN es como los diseños gráficos y de nivel. Sin motor, todo no funciona. Podemos echarle un vistazo para comprender cómo un juego es único, pero el juego no jugará.

El ADN solo tiene un efecto dados los procesos químicos existentes que responderán a su entrada. Los datos por sí solos no tienen ningún valor funcional.