Primer problema de bioinformática en una serie errática de longitud indeterminada

Periódicamente en mi trabajo o mientras escribo este blog me encuentro con problemas computacionales que tienen el aspecto de hacer, al menos en mi mente, muy buenos problemas de enseñanza. Algunas de las características son que el problema básico es relativamente simple de explicar, las habilidades requeridas son reutilizables en otros problemas, los conceptos son afines a otros problemas y que el problema planteado se puede expandir en pasos a algo mucho más rico. Tales problemas podrían incluso ser el núcleo de proyectos de bioinformática de pregrado o incluso de escuela secundaria, aunque con las noticias recientes de un estudiante de secundaria secuenciando el genoma de su pez ángel muerto ¡la barra para los proyectos de la escuela secundaria ha subido un poco! A diferencia de un problema de programación que no se ajusta a estos, voy a etiquetar publicaciones como «Mejor que FizzBuzz».

¿Qué es FizzBuzz? Es un problema temprano popular en las clases de codificación que he estado luchando con mis sentimientos al respecto. ¿Cuánto me desagrada porque es nuevo y no con lo que me enredé hace eones cuando estaba aprendiendo? ¿O mis objeciones se basan más en que tiene un alcance demasiado limitado? O tal vez sea por la ola de tristeza que me invadió cuando descubrí que FizzBuzz era el único proyecto en el GitHub de un candidato.

De todos modos, si buscas en Google encontrarás toneladas de descripciones. Pero a la versión corta se le da una serie de números enteros, aplica ciertas reglas para que bajo una condición el programa imprima «Fizz» y otra imprima «Buzz». Es un ejercicio simple para escribir declaraciones condicionales encadenadas y, por supuesto, es una habilidad temprana clave. Pero eso es todo. Una vez que haya resuelto FizzBuzz, no hay muchas más opciones para seguir trabajando aparte de más condiciones, hacerlo de una manera verdaderamente barroca o tal vez escribir un intérprete de FizzBuzz que pueda tomar un archivo de reglas y aplicarlo.

Para mí, los problemas interesantes tienen cierta variedad en las soluciones donde esa variedad no es solo hacer las cosas barrocas sino aplicar diferentes enfoques o implementaciones algorítmicas. O tal vez algo que usas como un paso clave para aprender un idioma adicional. Algo que pueda proporcionar una conversación interesante y útil durante una entrevista de trabajo.

En el frente de la entrevista de trabajo, hemos utilizado un problema simple para iniciar la conversación: se lo damos a los candidatos con anticipación para que traten de resolverlo y no tiene la intención de hacer tropezar a la gente, sino de dar un problema común en el que podamos explore cómo el candidato abordó el problema y qué herramientas eligió. Un amigo que está entrevistando me mostró el problema de otra compañía y realmente me gustó, pero no sería justo de mi parte mencionarlo aquí. Pero estaba explorando aspectos diferentes a los nuestros: el nuestro era un ejercicio básico de construcción de una tubería y el de ellos más sobre cómo resolver un rompecabezas computacional interesante. Esa distinción también era apropiada para cada puesto, al menos cómo imagino el nuestro y cuál era la descripción del trabajo para los demás.

Confieso que el problema que describiré aquí no es mi favorito; esa es una de las razones por las que comienza, ya que podría ser una decepción después de los demás. Pero es útil y creo que la biología que explora también podría despertar cierto interés en un joven estudiante. Y tal vez su simplicidad sea ventajosa para el primer problema a descartar.

Es un problema básico en las frecuencias de aminoácidos. Dado un archivo de secuencias de proteínas en un formato estándar, determine lo siguiente:

1. Para cada aminoácido, la proteína más larga que carece de ese aminoácido

2. Como el #1, pero con solo 1 ejemplo de ese aminoácido

3. ¿Cuál es la proteína más corta con los veinte aminoácidos?

4. Para cada aminoácido, ¿qué proteína tiene la mayor fracción de abundancia de ese aminoácido?

Reflexionando sobre mi propia carrera, este es un problema que habría resuelto de una manera (muchos diccionarios) al principio de mi carrera y en estos días lo resolvería de manera muy diferente (algunos diccionarios pero luego todos los números en marcos de datos). Incluso podría ser un ejercicio simple en la construcción de una base de datos relacional.

Esto podría extenderse de varias maneras. Contar pares de aminoácidos adyacentes es una forma. Analizar los campos de anotación de Uniprot o similar podría ser otro, por ejemplo, cómo cambian las respuestas con las proteínas extracelulares. O incluso ejecutar esto en varios genomas para ver qué tan diferentes son los resultados.

Tengo tres problemas más en mente, dos de los cuales solo requieren escribir (uno requiere que se carguen un puñado de archivos en GitHub)



Fuente del artículo

Deja un comentario