Tal vez tengas interés, curiosidad o estas en el proceso de convertirte en un programador. Déjame darte una guía que te servirá para enfocarte en los puntos cruciales para aprender a programar.

[0] Pasión por el desarrollo de software.

Lo más esencial que se requiere para esto es la motivación adecuada, así como lo estas leyendo, sin la motivación adecuada, al primer fallo caerás en frustración y posiblemente terminaras renunciando a esta gran idea.

Te encontraras con muchos retos, bloqueos y frustraciones. No te desmotives desde ahora simplemente te muestro el panorama completo para que te des cuenta que todos pasamos por esto, incluso a veces muy seguido, pero nuestra cualidad es que siempre superamos cada reto que se nos ponga enfrente, cuando hayas superado uno a uno de los bloqueos la satisfacción será grandísima, es como tener un disparo de dopamina cada vez que logras resolver el problema que tenías enfrente, es tan satisfactorio que te lleva a tener una pasión por el desarrollo de software.

Un punto clave para superar esos momentos de estrés y frustración, es realizar una introspección, tener bien fundamentado por qué quieres aprender a programar, que meta quieres lograr con esto y sobre todo tener claro que beneficios personales obtendrás de este nuevo skill.

Ahora sí, ya que tienes bien definido tu objetivo veamos por dónde empezar.

[1] Desarrolla tu lógica.

No importa como esté tu lógica sin duda es algo que puedes trabajar y con la práctica obtener una lógica muy fina. La lógica es fundamental para programar, sin ella no llegaras muy lejos, incluso si aprendieras toda la sintaxis del lenguaje de programación y no tienes la lógica, no podrás realizar gran cosa.

Te preguntaras ¿cómo se aplica la lógica en la programación? Se aplica en la resolución de un problema mediante un algoritmo. La lógica te dicta si debes emplear alguna condición, una iteración en código, que tipo de variables vas a utilizar o que estructura de datos necesitas, en pocas palabras la lógica es la que aplicas para resolver un problema en específico dependiendo que tan afinada este tu lógica y el dominio que tengas del lenguaje de programación tu algoritmo será más optimo o menos optimo con relación a ambas cuestiones. La lógica y conocimiento del lenguaje de programación es fundamental para un buen desarrollo de software.

[2] Aprender Estructura de Datos.

Tabla patrones de diseño

Las estructuras de datos son necesarias en todos los lenguajes de programación, incluso el simple hecho de estudiarlas y practicarlas ayuda bastante para afinar la lógica.

Entendamos por estructura de datos como las diferentes formas de organizar la información para poder manipular de manera eficiente los datos.

Pero ¿Qué quiere decir todo esto? Esencialmente es la forma en la que puedo almacenar los datos en memoria para aprovechar de manera correcta los recursos de la máquina para que puedan ser procesados rápidamente.

Ejemplos de estructura de datos:

  • Arreglos o vectores.
  • Listas enlazadas.
  • Pilas.
  • Colas.
  • Tablas Hash.
  • Árboles y Grafos.

[3] Entender los diferentes paradigmas de programación.

Paradigma de programación es la forma en la que debes programar, dicho de otro modo, dicta las reglas de como debes estructurar el código. Existen varios paradigmas en el cual cada lenguaje esta basado para programar de forma ordenada según sus reglas. Hay que recalcar que existen lenguajes que son multiparadigma.

Algunos de los paradigmas de programación más populares son:

Programación estructurada. Conlleva en combinar 3 estructuras básicas:

  • Estructura secuencial: Programación lineal y subrutina.
  • Estructura de alternativas: Uso de condicionales como if, else if y else.
  • Estructura repetitiva: El uso de recursividad o ciclos como for, while o do while.

Algunos lenguajes que utilizan la programación estructurada son: C, C++, Cobol o Ensamblador.

Programación Orientada a Objetos (POO): Modelas tu programa como objetos, estos objetos tienen atributos y comportamientos (funciones). Lenguajes que utilizan POO Java, Python, JavaScript o C#.

Programación funcional: No hay ciclos ni condicionales, el programa es un conjunto de funciones, siempre devuelve el mismo valor data la misma entrada. Por ejemplo: Pearl, Ruby, Scala, LISP.

Programación declarativa: No defines las instrucciones para describir como se hacen las cosas si no que defines que se hace. Solo se específica que quieres obtener, por ejemplo: SQL, Prolog, Miranda, Angular.

Programación reactiva: Trabaja con el flujo de datos de forma asíncrona dependiendo de los datos desencadena una reacción. Es decir, cuando hay un cambio en el estado de un objeto los otros objetos son notificados y realizan una acción de acuerdo con dicho estado.

Muchos lenguajes tienen su librería para poder trabajar con programación reactiva, aquí algunos: Java: RxJAva, Go: RxGo, JavaScript: RxJS, etc.

[4] Realizar pruebas unitarias (Unit Testing).

Siempre que se está programando, lo lógico es probar tu código de manera local ya sea ejecutando esa parte de código que estas creando o modificando. Una buena practica es tener automatizadas esas pruebas y se logra mediante las pruebas unitarias.

Las pruebas unitarias son la forma de probar tu código de forma individual y aislada. Su propósito es comprobar que esa parte de tu código funcione correctamente, debe devolver el resultado esperado con los parámetros enviados o incluso validar que en caso de error tenga un comportamiento adecuado o proceda con el flujo establecido.

Deben cumplir con las siguientes características:

  • Rápidas: Deben tomar poco tiempo en ejecutarse.

  • Aisladas: Deben ejecutarse de forma aislada sin depender de factores externos.

  • Repetible: Con los mismos parámetros el resultado siempre debe ser el mismo.

  • Auto verificable: De forma automática las Unit Test deben ser capaz de validar si la prueba fue exitosa o no.

Para cada lenguaje de programación existen diferentes frameworks que te ayudan a realizar las pruebas unitarias de forma controlada. Este es un listado de los frameworks utilizado para estos lenguajes:

  • Java: Junit Test
  • .NET: xUnit o NUnit
  • PHP: PHPUnit
  • Python: UnitTest o Pytest

NOTA:

Algo que siempre debes tener en mente es que además a las pruebas unitarias, incluso además a las pruebas de integración, la responsabilidad de un desarrollador es validar que tu código se ejecute correctamente en donde sea que esté desplegado tu programa. Debes tener la certeza que tu software, programa o aplicación funcione correctamente en todos los escenarios.

[5] Aprende patrones de diseño.

Hablar de patrones de diseño ya es un tema avanzado, ya que requieres dominar la programación orientada a objetos (POO), conocer a profundidad el lenguaje de programación para determinar que patrón de diseño se adapta mas a las necesidades del software a desarrollar.

Los patrones de diseño son como planos prefabricados, reutilizables y que se puede personalizar para resolver un problema conocido o recurrente en el diseño de software.

Cada patrón explica el problema y su solución, nos da la estructura de clases y como se deben relacionar. Se clasifican en 3 grupos:

Patrones creacionales: Cuando se tiene una jerarquía de clases compleja da solución a la creación de objetos, incrementando la flexibilidad y la reutilización de código.

Patrones de comportamiento: Nos ayuda a tener una comunicación efectiva entre clases u objetos distribuyendo las responsabilidades entre estos de forma organizada.

Patrones estructurales: Explica como utilizar estructura de datos complejas facilitando el ensamble de objetos manteniendo la eficiencia de la estructura.

Tabla patrones de diseño

[6] Ser autodidacta.

Algo obligado es que debes estar en constante investigación y siempre aprendiendo las nuevas tecnologías. Cada vez surgen nuevos lenguajes, nuevos frameworks, nuevas formas de montar y estructurar una aplicación. Es un área que nunca deja de evolucionar por lo tanto te ves obligado a nunca parar de aprender.

Esa pasión que ya adquiriste en un inicio te llevara siempre a querer aprender esa nueva tecnología que está surgiendo y solo así es como nunca dejaras de ser obsoleto.

Conclusión

Si bien podrás pensar que es demasiado camino por recorrer y la verdad es que si, no es algo que se domina de la noche a la mañana, pero lo interesante del desarrollo de software es que puedes empezar poco a poco viendo tangiblemente tu progreso de forma inmediata. Esto es algo que fácilmente puedes empezar con lo más básico, literalmente a prueba y error. Lo único que requieres es una computadora, internet, ser autodidacta y constancia.

Cabe recalcar que tu obligación es volverte un experto en tu área, ahondando y dominando cada concepto y tecnología que vayas aprendiendo, siempre programando con las mejores prácticas, volverte todo un profesional en el desarrollo de software, ya que el mundo necesita tu talento y la mejor versión de ti.

Ahora sí, enfócate en el lenguaje de programación que mas te guste, investiga que requieres instalar en tu computadora para que empieces a tirar tus primeras líneas de código y te veo del otro lado colega.