¿Por qué es tan difícil codificar? | Parte 1

Este es un post sobre un tema técnico: la codificación. Pero para que quede claro, no tengo formación técnica.

Soy el orgulloso hijo de un artista que me enseñó a utilizar mis emociones como brújula guía para navegar por la vida, en lugar de la lógica. La arcilla, el grafito, la tinta, la pintura, el lienzo, el papel y el adhesivo corren por mis venas.

Tuve dificultades en la escuela por muchos motivos, entre ellos dos problemas de aprendizaje: un daño nervioso cerebral por complicaciones en el nacimiento y la dislexia, que no se diagnosticó hasta finales de mis 20 años. Mis mejores resultados en los exámenes fueron tan malos que casi no entré en la universidad.

Estudié ciencias políticas en la escuela y mis primeros intentos fallidos de hacer una carrera fueron en Cine y Diseño Gráfico.

Me enseñé a mí mismo a codificar- es una de las cosas más difíciles que he hecho. También he estado enseñando código en un bootcamp aquí en D.C. durante unos 5 años y siendo mentor de amigos de vez en cuando.

Aunque es difícil, no es imposible. Cuando eres autodidacta, vas aprendiendo trozos. A veces algo tiene sentido inmediatamente, mientras que otras hará clic dentro de años. El camino de la explicación está muy trillado, pero he descubierto que tus experiencias vitales, tus disposiciones y tu educación hacen que la mitad de tu batalla sea encontrar los recursos de aprendizaje adecuados.

Dos cosas antes de empezar:

  1. Si yo puedo hacerlo, tú también.
  2. No estás solo.

Vocabulario nuevo, conceptos nuevos, nuevo… todo

Una de las barreras complicadas para aprender a codificar es que los términos utilizados para describir cualquier cosa en «lenguaje de código» a menudo pueden significar algo totalmente distinto en inglés normal. Mi ejemplo es la palabra «Class».

A diferencia de las connotaciones académicas o sociológicas a las que estamos acostumbrados, una Class en el lenguaje de programación es diferente dependiendo del lenguaje de programación que estés utilizando. Aún más confuso en estos diferentes lenguajes de programación, una Clase está lo suficientemente relacionada conceptualmente como para trazar paralelos de semejanza en cuanto a por qué sus autores originales eligieron llamarla Clase, pero el uso real es lo suficientemente diferente como para ser algo totalmente distinto. (Específicamente las clases CSS frente a las Clases Orientadas a Objetos)

Hablar de código es casi parecido a la jerga, que como cualquier padre sabe, es frustrante. Puede ser difícil al principio marcar lo que es una palabra normal en inglés y lo que es un término de «código».

Además, a menudo se escuchan en una sucesión rápida, por lo que una frase completa de lenguaje de código será gramaticalmente correcta y usted conocerá cada una de las palabras por separado, pero no cuando están dispuestas de esta manera.

«Después de haber vaciado la caché del navegador en local y haber pedido a John que borrara las cachés del servidor en el staging, pensando que tenía que ser algún tipo de problema de memoria persistente o de estado, resultó ser una colisión de nombres que sobrescribía las invocaciones definidas anteriormente en la raíz. Haré un ticket para añadir mapas de fuentes para que podamos rastrear las instancias más fácilmente en lugar de buscar en el repo.» -Frase real que le dije a mi jefe, que asintió con aprobación.

No sólo empezar de cero, definir lo que es cero

Encima hay conceptos con los que nunca te has tenido que encontrar, y mucho menos pelearte.

Un ejemplo que me gusta usar con mis alumnos es:
Supongamos que quieres programar tu ordenador para que te haga una taza de café. ¿Simple, no?

Tú: Oye ordenador: hazme una taza de café.

Ordenador: BEEP BOOP: CLARO PAT. ¿QUÉ ES EL CAFÉ Y QUÉ SE HACE?

Imagina todas las formas en las que podrías hacer café… luego imagina el proceso de conseguir el grano de café desde el árbol en el que creció, hasta una forma que puedas usar en este proceso… yikes.

Empezamos desde cero a menudo, e incluso las cosas pequeñas y simples para nosotros son en realidad a menudo asombrosamente complejas de lograr con el código.

No sólo tienes que programar las cosas, tienes que definir lo que son en primer lugar. Luego, tienes que reforzar tu código para manejar todas las formas posibles en que podría salir mal. Las tareas simples se convierten en impresionantes catedrales que honran a los dioses de lo explícito.

«Sólo búscalo en Google»

Quizás el consejo que más me enfurece de mis compañeros a los nuevos desarrolladores es «búscalo en Google».

Cualquiera que haya estado con el pecho hundido en el barro sabe lo poco útil que es esto.

A. No sabes cómo diagnosticar lo que está mal, así que no sabes ni por dónde empezar. (Si lo supieras, no estarías preguntando).
B. Aunque lo supieras, no sabes qué términos están asociados al problema.
C. E incluso si lo hicieras, los resultados son a menudo tan desconcertantes que no los reconocerías ni aunque los tuvieras delante. (O, como decía mi abuelo, no serías capaz de echar agua de una bota si hubiera instrucciones en el fondo.)

La codificación es como una lengua extranjera

Hay sorprendentes paralelismos entre aprender a codificar y aprender una lengua extranjera. He descubierto que los estudiantes de idiomas, ingleses o no, tienden a captar la sintaxis más rápido.

Sí, hay patrones y lógica en los sistemas.

Sí, algunas cosas son idiosincrásicas y no pueden ser transmitidas sucintamente en su equivalente en inglés.

Sí, hay excepciones a los 2 puntos anteriores que se contradicen o no tienen sentido, pero es lo que hay, así que hay que memorizarlo.

Mitad Pastor / Mitad Científico

Quizás la contradicción más enloquecedora que debe cumplir un programador es que tienes la tarea de saber a la vez cómo funciona todo, y atribuir una sana mayoría a la fe.

Para programar, debes usar la lógica, la razón y la inferencia. La depuración es un proceso deductivo. El buen código está bien estructurado, es deliberadamente lógico y está bien organizado.

Por otro lado, utilizamos rocas a las que engañamos para que piensen (ordenadores). Nos basamos en frameworks, librerías y fragmentos escritos por otras personas que, o bien no entendemos por el tiempo, o bien tomamos puramente por fe. En cada línea de código ocurren tantas cosas que nunca podríamos terminar la función si tuviéramos que pararnos a pensar en lo que hace todo.

Para ser programador, debes ser a la vez parte sacerdote/sacerdotisa basada en la fe y lógico Spock de piedra.

Imagen vía Paramount Pictures.

Conclusión

Así que, como pueden ver, tenemos mucho trabajo por delante. Pero al igual que no vinimos a este mundo sabiendo hablar, o escribir, o completar cualquiera de las tareas que ahora encontramos rutinarias pero con las que una vez luchamos: podemos hacerlo.

La verdad profunda detrás de la codificación es que es el producto, el nivel mejores esfuerzos – las buenas intenciones – el regalo honesto de algunas personas muy inteligentes para hacer la vida más fácil. Alguna persona inteligente, en algún lugar dijo: «Esto apesta. Tiene que haber una manera mejor que esta».

Y el código tomó su primer aliento.

En la siguiente sección, te daré algunas estrategias para suavizar este proceso y conseguir que te muevas hacia tus objetivos. El código está aquí para quedarse, está aquí para ayudar, y si no hay nada más, puede que te diviertas un poco.

Leave a Reply

Deja una respuesta

Tu dirección de correo electrónico no será publicada.