Lecciones aprendidas de mi viaje como desarrollador autodidacta

El camino del desarrollador autodidacta es duro y lleno de incertidumbre. No hay una línea recta entre un novato y un programador de carrera. Debido a esto, creo que todos los desarrolladores autodidactas tienen una historia única que contar.

En este artículo, compartiré mi viaje de codificación a través de una serie de lecciones que aprendí a lo largo del camino. Espero que leer sobre mi experiencia enseñándome a mí mismo a programar te ayude a reflexionar sobre tu propio pasado y te motive a seguir adelante.

Lección # 1: Concéntrese en el proceso

Cuando comencé a aprender a programar, nunca tuve la intención de hacer una carrera con eso. Solo quería hacer una aplicación específica.

Mi viaje comenzó cuando estaba en el último año de la universidad. Acabo de terminar la biografía de Richard Branson y probablemente estaba leyendo demasiado TechCrunch. Estaba lleno de energía empresarial.

Leía constantemente sobre cómo los estudiantes universitarios recibían grandes cantidades de inversión para sus ideas de aplicaciones móviles. Pensé que podría ser uno de esos universitarios.

Un día, mientras caminaba entre clases, se me ocurrió la idea de una aplicación. Rápidamente me convencí de que había encontrado la próxima gran novedad.

Me consumió la idea y dejé de prestar atención a las conferencias. Mi entusiasmo por la idea de la aplicación creció rápidamente hasta el punto en que sentí que necesitaba tomar medidas.

Hubo un gran problema. Mi idea era una aplicación móvil y no conocía a nadie que pudiera crear aplicaciones móviles.

Entonces pensé, "¿qué diablos, qué tan difícil puede ser la programación?" Estaba perdiendo interés en mi especialidad y pasaba mucho tiempo jugando a Xbox. Podría dedicar parte de mi tiempo libre a desarrollar mi idea de aplicación móvil.

A veces, ser ingenuo le ayuda a actuar cuando normalmente no lo haría.

Era un estudiante universitario sin experiencia en programación, negocios o diseño que intentaba aprender Android para poder crear una aplicación móvil compleja. Supongo que eso es lo que obtienes cuando mezclas una gran idea con la máquina exagerada de Silicon Valley.

Ojalá pudiera decirte que las cosas salieron bien desde aquí.

Compré algunos libros sobre el desarrollo de Android y pasé incontables horas en mi habitación tratando de pegar con cinta adhesiva mi aplicación. No me importaba cómo funcionaba la aplicación, solo quería un producto terminado.

Pasó el tiempo y la aplicación se convirtió en un Frankenstein de copia y código pegado. La aplicación no tenía muchas funciones y apenas funcionaba sin fallar.

No fue hasta que entré accidentalmente en una clase de Ciencias de la Computación que me di cuenta de que debería concentrarme más en tratar de aprender sobre el desarrollo de software.

Mi incapacidad para programar me llevó a abandonar mi idea inicial de aplicación. Me di cuenta de que no iba a hacer la próxima gran cosa, al menos no todavía.

Con el tiempo, corrigí mi comportamiento y me tomé el aprendizaje más en serio. Comencé a disfrutar de la programación y finalmente comencé una carrera como desarrollador de software.

Mi gran idea de aplicación me consumió durante mucho tiempo. Puse mi enfoque en el resultado final en lugar del proceso para llegar allí.

Cuando te concentras demasiado en el resultado final, comienzas a tomar atajos. Los atajos pueden conducir a algún progreso a corto plazo, pero a la larga, su falta de conocimiento siempre lo alcanzará.

Es importante recordar que aprender algo importante, como la programación, requiere muchos pasos pequeños. Cada paso deberá tratarse con cuidado.

Aprender cosas nuevas es como construir una casa. Empiece con la base y vaya acumulando. Si la base es defectuosa, tarde o temprano todo se derrumbará.

A veces, construir una base sólida requiere que disminuya la velocidad. No hay vergüenza en ir despacio. Las personas que entienden los conceptos básicos la primera vez terminarán adelantándose a las personas que tienen que volver atrás y volver a aprenderlos.

Hay un viejo proverbio chino que dice:

"Es mejor dar muchos pequeños pasos en la dirección correcta que dar un gran salto hacia adelante y tropezar hacia atrás".

No se trata de la rapidez con la que puede hacer algo, sino de la lentitud con que puede hacerlo correctamente.

Yo fui un ejemplo perfecto. Desde fuera, podría haber parecido que era un niño genio de la programación. En realidad, no pude crear una aplicación para salvar mi vida.

Concéntrate en el proceso y te sorprenderás de cuánto progresas cada día.

Lección n. ° 2: El desbordamiento de la pila es impresionante (pero peligroso)

Mientras construía mi aplicación asesina, Stack Overflow se convirtió en mi mejor amigo.

Cada vez que me quedaba atascado, intentaba elaborar juntos una pregunta perfecta para hacerle a la comunidad de Stack Overflow. Hice un promedio de algunas preguntas al día.

No solo publicaría preguntas, sino que también trataría las respuestas en Stack Overflow como Evangelio. Pasaría una gran cantidad de tiempo recorriendo el sitio para tratar de encontrar un fragmento exacto de código que solucionara mi problema.

Cuando encontré una respuesta adecuada, la copiaría y pegaría directamente en mi base de código e intentaría que funcione con mi código existente. Pasé poco tiempo tratando de entender el código que estaba agregando.

Hice del ensayo y error de fuerza bruta una nueva forma de arte.

Este proceso se prolongó durante un tiempo hasta que, finalmente, me di cuenta de los defectos de mi enfoque.

Stack Overflow es una bendición y una maldición. Es excelente para ayudarlo a resolver problemas; sin embargo, si no tiene cuidado, rápidamente puede volverse dependiente del sitio web.

A veces, el sitio web es demasiado bueno para resolver problemas. Crea una falsa sensación de confianza que puede provocar más dolores de cabeza en el futuro.

Stack Overflow le muestra cómo hacer que algo funcione, pero generalmente no le dice explícitamente por qué funciona.

Entender el cómo es importante. Los errores deben corregirse y el código debe ejecutarse.

Sin embargo, comprender por qué algo funciona es lo que te ayudará a aplicar el conocimiento nuevamente en el futuro.

Es como la cita ...

"Dale un pescado a un hombre y lo alimentarás durante un día. Enséñale a pescar y lo alimentarás toda la vida".

Copiar y pegar código de Stack Overflow es como darle un pescado a alguien. Comprender por qué funciona un fragmento de código es como enseñarles a pescar.

No hay nada de malo en copiar y pegar código. Todos lo hacemos. Solo es un problema cuando se convierte en una muleta y frena nuestro crecimiento como desarrollador.

Lo que tuve que aprender por las malas fue que es imposible aprender nada si las respuestas se te dan constantemente. No hay atajos en el proceso de aprendizaje.

Cuando esté atascado, intente resolver su problema de codificación al menos unas cuantas veces antes de ir a Google.

Cuando se encuentre copiando y pegando código, dedique un poco de tiempo a tratar de comprender el fragmento de código antes de continuar.

Lección n. ° 3: aprenda a encontrar ayuda con experiencia

Lo primero que hice después de decidir que quería aprender a programar fue comprar dos libros de desarrollo de Android.

Al principio, seguí de cerca los ejercicios de los libros y trabajé en los proyectos de ejemplo. Sin embargo, rápidamente me frustré con el progreso que estaba haciendo siguiendo el libro y decidí irme y descubrir cómo programar por mi cuenta.

Como ha leído anteriormente, eso resultó poco a poco en un desastre.

Pasé incontables horas aislado en mi habitación tratando de resolver problemas simples de programación. Me estaba quedando atascado en cada nueva línea de código y no parecía que estuviera progresando mucho.

Estaba indefenso y mi vida era un cóctel de dudas, frustración y una abrumadora sensación de estar perdido.

Para empeorar las cosas, tuve la brillante idea de comenzar a usar una biblioteca C masiva llamada FFMPEG. Mi aplicación necesitaba editar videos, así que pensé que era una buena idea utilizar la sólida funcionalidad de la biblioteca.

No fue mi movimiento más inteligente, considerando que en ese momento, apenas podía hacer funcionar mi aplicación de Android.

Perdí mucho tiempo tratando de leer el código C y averiguando cómo podía usarlo en mi aplicación. Luché incluso para importar la biblioteca a mi proyecto de Android. El código de Android y el código C no querían jugar bien.

Después de muchas horas sin llegar a ninguna parte, finalmente me sentí frustrado y abandoné la biblioteca.

Casi al mismo tiempo que la debacle de FFMPEG, me inscribí en una clase de programación orientada a objetos. Honestamente, no estoy seguro de cómo llegué. Más tarde descubrí que era la única especialización en la clase que no era informática. Creo que hubo un error en el software de inscripción.

La primera tarea fue crear un programa de Blackjack. Me había estado enseñando a programar por mí mismo durante 5-6 meses en este momento, y me sentía algo seguro con mis habilidades.

Terminé la tarea y me sentí bien con mi trabajo.

No pasó mucho tiempo para que ese sentimiento se desvaneciera.

Todo mi programa fue escrito en un método enorme. Casi todos los demás en la clase pudieron darse cuenta del hecho de que el programa debía dividirse en clases.

No está bien.

Afortunadamente, el trabajo de clase y la orientación del profesor me permitieron dar un paso atrás en mi aplicación de Android y reflexionar sobre mis habilidades de programación. Comencé a valorar el aprendizaje y reprimí mis deseos de hacer una aplicación completa.

Ahora me he dado cuenta de que si hubiera hablado con un solo desarrollador experimentado en esos primeros días, habrían visto lo que estaba haciendo. Podría haber establecido mis prioridades y hacerme entrar en razón. Me habrían ayudado a corregir mi camino cuando estaba pasando por callejones sin salida inútiles (como tratar de trabajar con FFMPEG).

En cambio, me aislé del mundo en parte porque sentí que no había nadie que pudiera ayudarme.

El aislamiento es un arma de doble filo. Por un lado, le ayuda a concentrarse en la tarea que tiene entre manos. Por otro lado, te aleja del mundo y te priva de comentarios cruciales.

Había muchas formas en las que podría haber encontrado ayuda. Podría haber intentado encontrar un profesor / estudiante en la universidad con experiencia en Android o haber buscado ayuda en la comunidad local. También podría haber intentado encontrar una comunidad de Android en línea.

Los desarrolladores experimentados son como una brújula. No lo llevarán a su destino, pero se asegurarán de que apunte en la dirección correcta. Su ayuda a menudo puede marcar la diferencia entre el éxito y el fracaso.

Asegúrese de buscar orientación donde sea que pueda encontrarla. Le ahorrará tiempo y frustración en el futuro.

Lección # 4: Crea tu entorno

Esto podría ser lo único que sentí que hice bien cuando me estaba enseñando a programar.

A lo largo de mi vida, he sido muy malo estudiando para los exámenes o haciendo mi tarea en casa. Hay demasiadas distracciones en un momento dado. A menudo intentaba encontrar refugio en bibliotecas o cafeterías.

Por suerte, apliqué esta regla cuando me estaba enseñando a programar.

Terminé convirtiéndome en un habitual de algunas cafeterías locales. Prefería las cafeterías a otros lugares de estudio porque brindaban algo de variedad y es fácil de ocultar (el fácil acceso a la cafeína tampoco duele).

Si estaba estudiando en casa, me aseguraba de que mi puerta estuviera cerrada y mis compañeros de cuarto supieran que no debían molestarme durante un cierto período de tiempo.

Independientemente de dónde estuviera, me aseguraría de que mi música fuera lo suficientemente alta como para no poder escuchar lo que sucedía a mi alrededor.

No puedo decir que fui perfecto para encontrar un entorno de trabajo libre de distracciones, pero pude tener éxito la mayor parte del tiempo.

Tener el entorno de trabajo adecuado es a menudo una parte del aprendizaje que se pasa por alto.

El enfoque es un componente fundamental de la memoria y la adquisición de habilidades. Cuando intentas aprender algo nuevo, la fuerza del aprendizaje está directamente relacionada con la intensidad de tu enfoque. Cuando su enfoque es débil, la nueva información será menos pegajosa, lo que resultará en un aprendizaje más lento y más tiempo de estudio.

Su entorno de trabajo debe estar libre de distracciones y debe permitir largos períodos de concentración ininterrumpidos. Incluso con COVID-19 que hace necesario trabajar de forma remota, todavía hay acciones que puede tomar para diseñar su entorno de aprendizaje.

Aquí hay algunas cosas que puede hacer:

  • Encuentra un lugar donde la gente no te interrumpa
  • Pon tu teléfono en modo avión
  • Utilice algún tipo de bloqueador de sitios web programado para las redes sociales y los sitios de noticias
  • Use auriculares y escuche música que no distraiga (preferiblemente una lista de reproducción larga para no tener que cambiar constantemente de canción)
  • Evite la televisión u otros entornos muy estimulantes
  • Tenga un cuaderno cerca para anotar cualquier tarea o idea que se le ocurra
  • Haz saber a las personas que te rodean que no quieres que te molesten

Solo usted puede decidir dónde y cómo crear su entorno. Pero asegúrate de hacerlo, porque vale la pena.

Lección # 5: Salir al mundo y conocer gente

Conseguir mi primer trabajo de programación fue una especie de ocurrencia aleatoria.

Me acabo de mudar a Omaha, Nebraska y tenía alrededor de un año de desarrollo autodidacta en mi haber.

Conocía a muy pocas personas en Omaha, así que busqué en Meetup.com para tratar de encontrar a otras personas interesadas en el desarrollo de Android. Encontré un Meetup centrado en el desarrollo móvil que cubría tanto el desarrollo de iOS como de Android y decidí ir.

Ir a esa primera reunión fue estresante. Pasé alrededor de 10 minutos en mi auto en el lugar para decidir si debía entrar o salir.

Me sentí intimidado. No confiaba en mis habilidades de programación y sabía que todos en el Meetup tenían mucha más experiencia que yo.

Finalmente dije, atorníllelo y entré.

Me alegro de haberlo hecho.

Comencé a asistir con regularidad y durante un Meetup, no mucho después de mudarme a Omaha, conocí a un reclutador que estaba buscando un contratista de Android. Hablamos un rato y obtuve una entrevista para el trabajo esa semana.

Antes de la entrevista, me sentí confiado. Durante la entrevista, yo era un ciervo en los faros.

El entrevistador estaba hablando sobre el proyecto en el que estaría trabajando y se me pasó por la cabeza. Traté de mantenerme comprometido, pero se dieron cuenta de que estaba fuera de mi alcance.

Después de la entrevista, me pidieron que pasara el rato una hora para poder hablar con otra persona. Sabiendo que lo arruiné, caminé por el centro tratando de aclarar mi mente.

Terminé entrevistando a otra persona de la empresa y poco después me ofrecieron una pasantía.

Estaba tan sorprendido que después de firmar todo el papeleo y poner en funcionamiento mi computadora portátil de trabajo, me acerqué al CEO y le pregunté si era una pasantía remunerada o no.

La pasantía se convirtió en un trabajo de tiempo completo y comencé mi carrera como desarrollador de software.

Cuando eres autodidacta, la gente no vendrá a buscarte. Necesitará encontrar oportunidades para usted.

Los graduados de universidades de cuatro años y escuelas de código tienen la ventaja de aprovechar la red de su escuela cuando encuentran un trabajo. Los desarrolladores autodidactas no tienen este lujo.

Los desarrolladores autodidactas deberán salir al mundo y construir sus propias redes.

Las llamadas en frío a los empleadores y el envío de currículos pueden funcionar. Sin embargo, he encontrado que a la gente le gusta contratar personas cercanas a ellos en su red social.

Los sitios web como Meetup.com son excelentes para encontrar grupos específicos de programación mensual. Incluso en una pandemia, todavía hay muchos Meetups virtuales que son muy informativos y beneficiosos.

También hay otros canales de Slack o comunidades de Discord que puede aprovechar para establecer relaciones significativas. También puede intentar comunicarse con varias personas en su área y pedir un café virtual rápido de 15 minutos con ellos.

Haga lo que pueda para tener el valor de acercarse y hablar con la gente. Sea amable y hable con ellos sobre sus experiencias. Asegúrese de que la gente conozca su objetivo a largo plazo de encontrar trabajo.

Póngase en situaciones en las que pueda suceder algo positivo. No puedes ganar una rifa si nunca compras un boleto.

Considere cualquier oportunidad que se le presente, porque incluso si parece un callejón sin salida, tiene el potencial de conducir a algo más grande.

Mi pasantía fue un gran recorte de sueldo en comparación con las otras ofertas que tenía en ese momento. Sin embargo, sabía que si trabajaba duro sería una oportunidad para entrar en la industria de la tecnología.

La clave es pensar en oportunidades laborales a largo plazo. Es posible que las pasantías o los trabajos a tiempo parcial no le proporcionen el salario que desea por adelantado, pero pueden abrirle puertas en el futuro.

Espero que aprenda de mis errores y cometa nuevos y emocionantes errores propios

Como puede ver, cometí muchos errores en mi viaje para convertirme en un desarrollador autodidacta.

Aprender a codificar por sí mismo nunca es un camino recto. Todas nuestras historias son únicas.

La clave es seguir adelante y evitar desanimarse cuando las cosas no salen como quieres.

Animo a otros desarrolladores autodidactas a compartir sus historias. No solo proporcionarán información valiosa, sino que también ayudarán a arrojar luz sobre los caminos únicos que hemos tomado.

Con suerte, mi historia y las lecciones que aprendí te ayudarán a seguir adelante.

Gracias por leer. Si desea conocer otras ideas que he aprendido a lo largo del camino, siga mi cuenta Zero to Programmer en Twitter. Mi objetivo es ayudarlo a aprender a programar de manera más eficiente.