Como ser un buen programador


Cómo ser un buen programador

El presente artículo se base en experiencias propias enfocadas en las mejores prácticas y habilidades que se deben de ir formando poco a poco para ser un buen programador, y en un mundo donde la tecnología avanza a pasos gigantescos.

Cómo ser un buen programador? creo que es una de las preguntas que nos hacemos cada vez que aprendemos un nuevo lenguaje de programación o simplemente ya dominamos a nuestra consideración un porcentaje considerable del lenguaje y queremos saber si estamos desarrollando nuestros proyectos de manera correcta, y cuando hablamos de forma correcta simplemente es desarrollar código limpio, reutilizable para otro proyectos y mantenible en el tiempo.

En base a lo anterior, pudiéramos adaptar un viejo dicho a nuestro mundo de programación:

"Todos los caminos conducen a Roma, pero solo uno de ellos es el camino más óptimo."
Que te quiero decir con esto? es simple debemos reducir al máximo la complejidad de nuestros algoritmos.

Reduce al máximo la complejidad de tu algoritmo

La idea es sencilla si reduces la complejidad de tus algoritmos, estarías consumiendo menos procesador, memoria, disco o inclusive ancho de banda de red de un entorno informático, que es el ambiente de ejecución de tus programas.

En español por favor.... Vamos a ver un ejemplo para entenderlo mejor:

Se desea desarrollar un programa que obtenga la sumatoria de la diagonal principal de una matriz de 3x3

como ser un buen programador

Como la imagen lo indica la diagonal principal de una matriz es aquella en que el numero de fila es igual al número de la columna, es decir i=j

Solución NO optima

for(int i=0; i<3; i+=1){
for(int j=0; j<3; j+=1){
if(i==j)
acum+=m[i][j];
}
}
printf("La sumatoria de la diagonal principal es: %i \n", acum);

Análisis:

Cuantos veces se ejecutan los ciclos?

Respuesta: 9 veces

Solución óptima

for(int i=0; i<3; i+=1){
acum+=m[i][i];
}
}
printf("La sumatoria de la diagonal principal es: %i \n", acum);

Análisis:

Cuantos veces se ejecutan los ciclos?

Respuesta: Solo 3 veces

Con esto ejemplo, creo que ahora si estamos claro que es reducir la complejidad de un algoritmo.

Aprende a desarrollar con patrones de diseño

Según la Wikipedia:

Los patrones de diseño son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño resulta ser una solución a un problema de diseño

Aprendiendo patrones de software vamos a poder evitar provocar el famoso y no deseado "código espaguetti", caracterizado por líneas de códigos repetidas, códigos entre mezclados, poca reutilización de código, llamadas a procedimientos y funciones innecesarias, entre otros problemas más, dando como resultado un proyecto difícil de leer y mantener en el tiempo y ni se diga si en el proyecto van a trabajar varios programadores, se llega inclusive al error de que un programador codifica lo mismo que otro programador, o resuelve algo que ya estaba resuelto.

Ejemplo:

MVC (Modelo-Vista-Controlador)es un patrón de software que nos permite separar o descomponer nuestro proyecto en capas, la capa vista es donde se programan las interfaces gráficas, el controlador es la que recibe las peticiones del usuario y las resuelve directamente con la vista o con el modelo, el modelo es la única autorizada para interactuar con las bases de datos.

Imaginemos una tienda virtual Online en la cual hay un botón "Comprar" que permite valga la redundancia comprar un producto. El flujo del sistema sería así:

  • La capa vista muestra el formulario al usuario con los detalles del producto y el botón de comprar
  • El usuario le da clic a comprar
  • El controlador recibe la petición de compra del usuario
  • El controlador re direcciona la petición hacia el modelo
  • El modelo consulta en la base de datos la existencia del producto, y actualiza la tabla de productos para rebajar del inventario el producto comprado, y adicional registra la compra del producto en la tabla compra
  • El modelo le envía la confirmación de compra exitosa al controlador
  • El controlador recibe la confirmación del modelo y le indica a la vista que despliegue un mensaje al usuario de compra exitosa
  • El usuario recibe el mensaje de compra exitosa :)

De esta manera hemos visto, que cada quien tiene sus propias responsabilidades, de esa forma evitamos el código espaguetti y ya no sería un problema contratar a varios programadores, ya que cada quien va a trabajar en la capa que le corresponda, de hecho he trabajado en sistemas webs, en los cuales hay diseñadores que se encargan de simplemente construir la interfaz gráfica del sistema(formularios, css, botones) sin inyectar una solo línea de código de programación

Trata de utilizar Framework

Un Framework o marco de trabajo te va a permitir desarrollar código utilizando algún patrón de software existente, pero ya contiene la estructura del proyecto y maneja una gran cantidad de librerías, módulos y componente pre cargados que nos ayudarán a realizar conexiones a base de datos, construir interfaces gráficas, realizar operaciones CRUD (Create, Read, Update, Delete) de registros, evitando de esta forma tener que "reinventar la rueda", y en vez de invertir tiempo de codificación en rutinas de seguridad, validación de datos, o acceso a base de datos, nos enfocaríamos en resolver los problemas en sí de nuestro proyecto como la vender o comprar productos, realizar reservas, entre otros, que son los puntos específicos a resolver dependiendo de la naturaleza del proyecto.

Por otro lado, el Framework te permite desarrollar entre varios programadores sin ningún problema, ya que tiene una estructura bien definida del proyecto, por ejemplo los diseñadores tienen su propio espacio de trabajo, así como los encargados de las bases de datos y los desarrolladores de la lógica de negocio del sistema, y tranquilamente cada quien puede estar haciendo su trabajo en el mismo framework sin entorpecer el trabajo del otro, a esto se le suma que el framework posee su propia documentación que nos permitirá entender su funcionamiento y la manera correcta de poder desarrollar sobre el, de esta forma evitamos tener que pensar como otro programador.

En base a lo anterior, los framework se clasifican en Backend y FrontEnd, los de FrontEnd funcionan del lado del cliente, y Backend del lado del servidor

Ejemplos de Framework:

  • Simphony
  • Laravel
  • nodeJS
  • Angular
  • Entre otros
  • Bootstrap (framework para el diseño de interfaces web)

Ahora bien, si no te gusta desarrollar con framework, debes crear tu propio framework, pero eso implicaría la inversión de tiempo, en no solo codificar, sino en documentar, aparte de que un framework está desarrollado por una comunidad de desarrolladores o una empresa en la cual pusieron su empeño diseñadores, programadores, especialistas en seguridad informática, administradores de base de datos, entre otros. Entonces en mi opinión particular lo más aconsejable es usar framework para desarrollar nuestros sistemas.

Esfuérzate por lo práctico y no por lo filosófico

La teoría es buena, pero si gran parte de nuestra curva de aprendizaje se centra en practicar ejemplos genéricos o filosóficos nunca nos vamos a poner a prueba y cuando nos toque enfrentarnos a casos prácticos de la vida real lo más seguro es que acabemos frustrado.

Para evitar lo anterior, lo mejor será ir de lo filosófico a lo más práctico posible, Con esto te quiero decir que si estás aprendiendo un nuevo lenguaje de programación, o si estás aprendiendo a usar un framework, o si estás aprendiendo un patrón de software, lo mejor sería tratar de practicar con un caso de estudio de la vida real como por ejemplo, el desarrollo de un sistema de facturación, de compras, de ventas, de una agencia de viajes, entre otros, de tal manera que te entrenes en un ambiente parecido al que te vas a enfrentar en tus próximos proyectos, ya que estos proyectos contienes conexiones a base de datos, validaciones, bastante lógicas de negocios, y un largo etcétera que debemos resolver.

Aprende solo de los mejores

El problema de la Internet actual no es que no haya información, al contrario hay mucha información, pero su mayoría no está filtrada, y cuando dijo filtrada es que no sabemos si es verdad o mentira, si la información es real o ficticia, o si es de buena calidad o no, por ende verificar la reputación del recurso digital es de suma importancia para tenerla como fuente de consulta

En tal sentido, trata de estudiar en fuentes de reconocida reputación, por ejemplo si estás estudiando Java lo mejor es aprender de la documentación en línea ofrecida por Oracle. Con esto no te quiero decir que no busques en foros u otros sitios alternativos, por el contrario te recomiendo que te inscribas en foros, te suscribas a listas de correos de soporte y cualquier medio digital que trate de la temática en cuestión, un buen ejemplo que te podemos dar de un foro es Stack OverFlow allí se comentan soluciones a problemas reales que en algún momento a algún programador como tú le paso y compartió la solución en Internet.

También, es totalmente valido aprender de libros, acá te recomiendo unos cuantos:

  • Clean Code
  • Patrones de diseño Gamma
  • Code Simplicity

Convierte en un autodidacta

La evolución de la Internet y la creciente demanda de nuevas tecnologías tanto en entornos de escritorio, móvil y web ha ocasionado una considerable exigencia a los programadores, haciendo que la curva de aprendizaje de muchos sea una montaña rusa, y para poder estabilizarla es necesario que cambiemos la forma de aprender no solo nuevos lenguaje de programación, sino también nuevos conceptos, nuevas plataformas, nuevos patrones de diseños, nuevos framework, inclusive nuevos paradigmas

Es por todo lo anterior, que ya no nos podemos dar el lujo de esperar que la empresa nos tome en cuenta para un plan de capacitación, y dijo que es un lujo, ya que la mayoría de las empresas cuentan con un presupuesto muy limitado para cursos de tecnología y mucho menos podemos esperar que algún compañero o amigo nos dedique su tiempo para enseñarnos.

En base a lo anterior, lo más recomendable es aprender por nuestra propia cuenta, centrándonos en los ítems comentados anteriormente, como lo de estudiar de fuentes de buena reputación, así como aprender de libros, intentar resolver problemas de casos reales a fin de aprender haciendo, y aprender a usar framework

La práctica hace el maestro

En nuestro caso como programadores, codifica, codifica y vuelve a codificar. La práctica es la clave del éxito para ser un buen programador, entre más practiques, mejor será tu tiempo de respuesta para resolver problemas, si está aprendiendo Java, ponte a practicar herencia simple, herencia múltiple, polimorfismo, sobre carga de operadores, llamadas al constructor base, ligadura dinámica. Si estás practicando Javascript empieza practicando la manipulación del DOM (modelo de objeto de documento) crea elementos html a partir de javascript, anida los elementos, recórrelos, imprimelos. En fin plantea cualquier problema de la vida real y resuelvo a punta de código.

Escribe código reutilizable y de calidad

Este punto es uno de los más importantes a la hora de saber si una persona es un buen o no programador. La idea de la reutilización de código se centra en desarrollar código genérico que resuelva no solo un problema en específico sino que resuelva varios al mismo tiempo y que dicho código se adapte a cualquier proyecto

Ejemplo: si nos encomiendan desarrollar una función que calcule la diagonal principal de una matriz, lo más idóneo es que esa función reciba como argumento una matriz de cualquier dimensión y de cualquier tipo de dato (enteros, reales), de tal manera que la función resuelva matrices de 3x3 o 5x5 o cualquier otra dimensión y no se tenga que codificar una función para matrices entero y otra para flotantes.

Otro ejemplo sería una función que permita imprimir los registros de una tabla ubicada en una base de datos, lo más idóneo sería que la función reciba como argumento el nombre de la tabla y esta reconociera automáticamente los campos que está posee y los imprimiera sin necesidad de que el programador especifique uno a uno el nombre de cada campo

Javier Garcia Web Developer

Morbi aliquam fringilla nisl. Pellentesque eleifend condimentum tellus, vel vulputate tortor malesuada sit amet. Aliquam vel vestibulum metus. Aenean ut mi aucto.

No hay comentarios:

Publicar un comentario