Al principio me centraré en la segunda pregunta y luego responderé la primera pregunta.
Por favor, perdónen mi inglés: lo estoy aprendiendo durante 15 años y todavía no puedo escribirlo lo suficientemente bien, sea lo que sea. Siempre fui tímido al respecto y no lo usé debido a la ansiedad de rendimiento. Aunque últimamente comencé a practicarlo y esa es la razón por la que respondo la pregunta
Cuando comencé a aprender a programar en la escuela primaria, en general me consideraba un buen programador con potencial para ser un gran programador. Nunca lo dudé, es decir, creé serpientes, arkanoides y pong a la edad de 13 o 14 años (hace 16 años), uno de los cuales tenía casi 1000 líneas de código. Piénselo, hombre, Arkanoid tenía 1000 líneas de código y una clase que se instancó 50–100 veces y podía reproducir mp3 en el fondo. Y tuvo editor WYSIWYG. Y el código verificó cada bloque 60 veces por segundo, lo que equivale a 3000 cheques por segundo. Estaba a 2 años de trabajar para Microsoft. ¿Suena divertido? No debería.
Justo antes de la secundaria, investigué olimpiada en informática, porque ¿qué tan difícil puede ser? He leído algunos problemas, no pude pensar en una solución, así que simplemente me encogí de hombros. Luego me fui a la preparatoria y vino la olimpiada real.
Hay tres etapas de la OI. La primera etapa la estás haciendo en casa, teniendo 4 semanas y 5 problemas o algo. La segunda etapa es muy similar desde el punto de vista de los problemas: la misma dificultad, las mismas reglas de evaluación, etc., pero tienes que ir a la universidad local y al código en el sitio. Hay dos días; al comienzo de cada día, conoce 2–3 problemas y tiene 5 horas para codificarlos. La tercera etapa es la misma que la segunda. 5 semanas vs 10 horas es para llevar básico.
En la primera etapa lo hice bastante bien, sin embargo, requería una cantidad de tiempo monstruosa, ya que pasaba fácilmente de 4 a 6 horas al día durante 4 semanas completas. Intenté no pensar en cómo voy a comprimir eso en 10 horas. Como era de esperar, la segunda etapa fue un desastre total.
No fue una realización repentina, pero poco a poco me vino a la mente lo mucho que no sé. Otras personas pudieron pensar en soluciones y codificarlas teniendo solo 5 horas, mientras que yo apenas pude pensar en una solución para un problema durante todo un día. Sin mencionar el código. El “Cormen”, que tenía 1000 páginas, era muy difícil de leer, y solo enseñaba lo básico. Algunas veces tuve que revisar el capítulo 5–10 veces o leer la página 5 veces. Si los conceptos básicos son difíciles, ¿cómo podría ser posible combinar esos conceptos básicos en un algoritmo complejo? Ese fue mi pensamiento en ese momento.
Recuerdo el sentimiento de resignación desesperada. Parecía muy difícil, casi inalcanzable y las personas que podían hacerlo me parecían una raza diferente de personas. En este momento realmente creí que no era apto para eso y nunca seré capaz de entender los algoritmos, por no mencionar combinarlos para resolver el problema. Aunque me comprometí y decidí continuar (también tuve una * tonelada * de apoyo)
2 años después (y bastante trabajo) logré la medalla de plata en OI, de lo que estoy muy orgulloso hasta el día de hoy. Más tarde en la universidad fui bastante bueno en las competiciones.
Fui Good Programmer (r) que creó Good Code (r) de nuevo. Podía pensar en algoritmos y mezclarlos libremente, pude codificar de forma rápida y precisa. Fui reconocido localmente en la Universidad. No podía creer que fuera tan estúpido pensar que Arkanoid me hizo un buen programador (r), de alguna manera era embarazoso. El arkanoid era realmente malo: para la detección de colisiones, comparaba todos los bloques de cada cuadro, lo que no tiene ningún sentido. Yo despediría a esa persona. De todos modos, yo era un buen programador (r).
Entonces, espero que lo hayas adivinado, en alguna ocasión tuve otro problema que me hizo pensar “bueno, realmente no sé cómo codificar”, el mismo sentimiento de desesperanza. Dunning-Kruger me consiguió de nuevo, eso es vergonzoso. Pero fue diferente esta vez, simplemente lo absorbí y comencé a aprender.
Entonces otra vez, y otra vez.
Entonces me di cuenta: eso es solo una parte del intercambio. Si no estás ocasionalmente bajo el agua, significa que no estás evolucionando. Si no estás evolucionando estás aburrido, que es mucho peor que estar bajo el agua. Por fin para mi
En 10 años, espero ver la corriente y pensar “wow, apestaste”. A pesar de que probablemente dolerá, todavía lo espero.
Así que es una buena sensación tener que estar bajo el agua o descubrir que no estás cumpliendo tu ideal. Siempre y cuando no te hunda, porque eso es posible. El pánico y la ansiedad ante el rendimiento son cosas reales.
No debes sentirte bajo el agua todo el tiempo, porque eso te está desgastando, pero creo que 50–50 es una buena proporción. Tal vez sea 10–90, o tal vez 90–10. No lo sé, probablemente sea personal.
De todas formas.
¿Puedes mejorar? Bueno, probablemente puedas, sin embargo, la pregunta más interesante es si deberías? O: “¿Puedo convertirme en un programador razonablemente bueno en un tiempo razonable?”. Y la respuesta que creo es: no sabemos. En primer lugar, todo es subjetivo. Tienes que definir el tiempo razonable y el programador bueno razonable para ti. Puede ser difícil juzgar, por eso traté de darte un contexto.
Es una posibilidad que la programación no sea para ti. Personalmente creo que no somos aptos para todo. Es decir, podemos mejorar en cualquier cosa, pero es probable que haya un límite individual y una tasa de aprendizaje. Si tardé 50 años en lograr algo que “normalmente” lleva 5 años, simplemente no vale la pena, porque hay mejores opciones para mí.
Sin embargo, a partir del conocimiento muy limitado que tenemos, parece que está programando, lo que representa aproximadamente el 50% del éxito. Y las cosas más importantes de todas: puede ver sus defectos y aceptarlo. Eso me parece algo bueno y * raro * para mí.
Solo tenga en cuenta que algunas cosas tardan años en aprenderse y son, tan simples como eso, difíciles.
Buena suerte;