Es indudable que a este punto ChatGPT es una herramienta que todos los profesionales tech (Programadores, UX/UI, Project Managers, etc) estan usando en sus trabajos para facilitar muchas tareas y por supuesto generar código y crear software.
Y la razon es que ofrece muchas ventajas:
- Ayuda a reducir tiempo al generar codigo mas rapido
- Puedes aprender practicamente cualquier tema
- Te permite enfocarte en hacer las tareas complejas o funcionalidades principales de un proyecto en lugar de pasar mucho escribiendo el mismo codigo
- Y puedes tener un asistente las 24/7 para trabajar en cuaquier cosa
Y otras ventajs más, pero aunque es obvio que la herramienta es útil, tambien es muy fácil usarla de cierto modo que yo creo puede ser perjudicial para cierto tipo de programadores, principalmente por los malos habitos que puede enseñarles indirectamente, y especialmente para esos programadores que realmente creen que la herramienta es inteligente o aquel tipo de persona que cree que porque la herramienta devuelve una respuesta inmediata ya no tiene que estudiar o cree que no necesita mejorar en escritura de codigo.
Y digo esto porque a diario cuando trabajo con programadores ayudandoles en sus proyectos o cuando pago a desarrolladores para llevar un proyecto a cabo y empiezo a revisar código, me es muy fácil ver cuando esta generado con ChatGPT, y me es dificil evitar pensar el daño que estan haciendose profesionalmente mucho de estos se estan haciendo a largo plazo al usar la herramienta de una forma tan irresponsable.
Y no lo tomen a mal, el empezar a usar ChatGPT para por fin crear proyectos es algo muy bueno, pero la forma en la que se hace es la que creo se deberia tener en cuenta para que puedan convertirse en desarrolladores en lugar de tan solo de alguienb que solo copia y pega codigo.
Así que como estoy seguro que muchos de ustedes pueden estar aprendiendo estas practicas y quieren mejorar para convertirse en profesionales de esta area, en este video me gustaría hablarles de 5 malos habitos de ChatGPT para Programadores.
Vamos a empezar.
Copiar y pegar sin Pensar
La primera cosa que he notado en muchas personas que usan ChatGPT a este punto es que por supuesto copian y pegan codigo, esto es muy normal porque es lo que ofrece la herramienta, genera texto y codigo.
Esto ha hecho que muchos principiantes en programacion, pueden generar proyectos de tamaño medio, y eso es bueno, porque usando el Chat le preguntan como generar una estructura de un proyecto y los archivos y a medida que le van preguntando van rellenando las carpetas y archivos con código.
Pero un error grave que tienen muchos principiantes es que como GPT ya genera el codigo, ellos creen que pueden evitarse tratar de entenderlo o estudiarlo. Esto lleva a que el codigo muchas veces este escrito horriblemente, o tenga muy mal rendimiento o hasta perjudica al desarrollador porque como no aprendio a resolver algo basico, cuando tenga que añadir mas complejidad a ese codigo que copio y pega se va a demorar más cuando se necesiten cambios encima de esa funcionalidad o a veces simplemente ya no encuentra una forma de extenderlo.
El generar codigo para proyectos repetitivos y simples, esta bien porque no tenemos que escribir todo desde cero si ya lo lo entiendes muy bien, pero cuando se trata de codigo para un nuevo proyecto, y que no es tan simple quizas estas haciendo una funcion de busqueda, una algoritmo de la ruta mas corta, un diseño de grafos, un buscador, es ecir una funcionalidad especifica que el chat rapidamente te puede dar, y copias y pegas sin leerlo y no tratas de entenderlo, cuando tengas que mejorar esa funcion, no podras hacerlo facilmnete o revisar que lo haga correctamente, simplemente porque no entiendes sus bases y a mas modificaciones se requieran para el proyecto mas vas a empezar a dar vueltas.
Una forma facil de solucionar esto es que si tienes una parte complicada, por supuesto ayudate del chat, pero trata de comprender el funcionamiento de ese codigo que ha generado. Hacerlo es simple, como poder hacer un diagrama sencillo o rapido de como funciona esa solucion o tomando notas resumiendo el funcionamiento.
Por ejemplo si estas haciendo una funcion recursiva que procesa algo, y es algo compleja y el chat te lo dio, intenta hacer el pseudo-codigo, o estas aprendiendo como funciona la autenticacion con JWT o OAUTH, como esta lleva muchos pasos puedes pedirle que te genere un diagram de como funciona, o si estas llevando un sistema que es más dificil de recordar todos sus pasos, graficalo, creando un grafico de algun tipo.
De hecho en el video de Como usar ChatGPT para ser más productivo les muestro como usar ChatGPT para generar un Roadmap grafico usando una herramienta llamada Markmap
Bueno bajo una idea similar tambien hay otra herramienta llamada Mermaid que genera graficos a partir de un lenguaje, si necesitas explicar como autenticar con OAuth, dile al chat que te explique como funciona OAUTH y que genere un formato de mermaid, o si necesitas entender como funcionan los JSON Web Tokens o JWT, tambien puedes decirle que te genere un diagram de como funciona JWT, usando mermaid, y listo tienes una guia visual de como funciona.
Y bajo la misma idea puedes puedes generar diagramas de todo tipo, como Diagrams de entidad relacion, diagramas secuenciales, graficos de Pie, Diagramas de Gantt, entre muchos otros.
La idea es que tu puedas entender todos los pasos que llevan crear sistemas o porciones de codigo mas dificiles que solo copiar y pegar, asi que si bien puedes generar todos estos grafico al instante, mi sugerencia es que lo vaya redibujando y a medida que no entiendas algo investigas o le preguntas al chat más acerca de ese tema que no entiendes.
Aqui tambien recomendaria tomar notas, o si encuentra el enlace de algun recurso que te explica mejor que el chat, guarda el elnace, copia y pegalo en tu app de notas, en mi caso yo uso Obsidian o Notion. Y aqui ya estarias estudiando y no solo copiando y escribiendo codigo.
Muy pronto voy a publicar un video de como yo tomo notas o hago este proceso.
No saber modularizar código
Otro error muy comun que creo que tienen muchas personas que estan generando codigo con GPT, es el generar archivos gigantes de código.
Lo que sucede es lo siguiente, piden algo al Chat, este les da una respuesta, y vuelven a copiar y pegar todo el codigo y asi hasta que cumplen su tarea.
Y muchas veces funciona, porque el problema esta resuelto, pero el código tenemos que leerlo otras personas asi que el dia que le toque a otro desarrollador que realmente programe y no solo copie y pegue va a tenerlo mucho más dificil leer toda ese archivo inmenso.
La solucion más recomendada aquie es que estudies un poco de que forma estructurar tu proyecto en el lenguaje de programación que uses.
No todo los lenguajes se estructuran igual, asi que necesitas estudiar las bases primero de ese lenguaje, o tambien puedes ir pidiendole al chat que una vez te de la respuesta, te de el codigo separado en archivos o directamente puedes decirle "¿Como modularizo este codigo?"
Y Esto te llevara un paso mas a evitar la dependencia al chat, porque este solo te da nombres de archivos y carpetas, no los crea por ti, aun, así que tu tienes que ir creandolos y organizandolos tu mismo.
Ademas tamben te ayudara a tener mejores respuestas del Chat, porque el modularizar tu codigo te ayudara a tener distintas funciones o clases separadas que solo hacen una sola cosa, lo que significa que si antes necesitabas darle un archivo gigante ahora solo puedes copiar y pegar una pequeña parte y el chat solo se enfoca en esa parte del codigo, incluso hasta puede ayudarte a generar tests mas facilmente porque ya esta modularizado.
Aunque algo tambien a tener en cuenta es que se vuelve más dificil luego consultar multiples archivos por lo que aqui tabien sugeriria usar Github copilot chat, si en caso ya estas pagando por el, que es una variacion de GPT, pero dentro de visual studio code y que este si puede leer varios archivos de un mismo proyecto, aunque claro no es tan bueno respondiendo que ChatGPT, pero es una ayuda extra.
Para conocer esto te dejo mi video de Github Copilot en Visual Studio Code
Tambien algo que aqui sugeriria estudiar es la creacion de paquetes, modulos, bibliotecas o tambien llamada librerias en tu lenguaje de programacion, sobretodo si tienes un proyecto grande o estas trabajando con otros desarrolaldores, esto ayudaria tambien a modularizar un proyecto e ir separando logica en otros paqueños proyectos y que el chat tambien te puede ayudar con esto.
No usar Recursos alternativos a ChatGPT
Yo los entiendo, ChatGPT ya te da la respuesta, ¿para que ir a leer la documentación oficial de un proyecto, cierto?. Bueno todos los que creen esto de momento hacen que un proyecto tenga lo siguiente:
- Código desactualizado. GPT al ofrecer respuestas no usa el código más moderno, asi que he visto proyectos por ejemplo de Frameworks creados en versiones viejas, solo porque el chat lo sugirio. En donde puedes llegar a obtener errores de codigo desfazado o deprecated, ademas que puedes hasta sugerirte formas antiguas de crear tu proyecto, porque para el chat eso sigue siendo correcto, solo que para nosotros no nos conviene usar versiones antiguas.
- E ironicamente, estos desarrolladores se demoran más en resolver problemas, quizas te ha pasado esto, escribes codigo obtienes un error se lo preguntas al chat, lo resuleves y obtienes otro error, y asi. Bueno he llegado a encontrar desarrolladres que han pasado dias buscando solucion a un error, tras otro, solo porque el chat no llegaba a la respuesa, cuando pudieron ir a la documentacion y darse cuenta que alli esta en una nota el cambio que tenian que hacer, y que el chat nunca se los iba a dar porque este simplemente desconoce esa nueva version, y a pesar que GPT actualmente puede ir al sitio y leerlo por ti, solo genera una respuesta generica muchas veces, o incluso a veces las inventa y no llega solucion puntual, sobretodo cuando el error es complicado.
La solución a esto es simple, ten a tu disposicion muchos más recursos adicionales a ChatGPT, es decir aprende a hacer pregunta en GIthub Issues, en stack overflow, incluso puedes aprende Google Dorking, para que puedas filtrar sitios en el buscador, unirte a las comunidades de la biblioteca, servicio, lenguaje o Frameworks que estes usando, muchas veces las personas de esas comunidades tienen problemas similares a los tuyos, usando la ultima version y te dan la solucion o incluso tambien puedes usar otros chats alternativso, por ejemplo Claude3, esta muy popular y es un servicio que compite en calidad con GPT.
Es decir como desarrollador el ChatGPT se convierte en una de tus herramientas pero no la unica que necesitas para desarrollar.
Evitar estudiar las bases
Quizas muchos de ustedes conocen este meme de este programaor que copia y pega código.

De hecho da tanta gracia porque todos hemos hecho esto alguna vez, hemos buscado algo en google, vemos la respuesta en stack overflow y ahora en ChatGPT, copiamos y pegamos y funciona. Pero algo que debes saber que la diferencia esta en que el programador más experimentado sabe porque eso arregla un error, mientras que el que empieza cree que es un truco, algo que por algun motivo debe añadirse y funcionara porque si,y que cree que no necesario entender esto porque ya funciona.
Lo notas cierto, la unica diferencia entre estos dos tipos de programadores, es que a pesar que ambos copian codigo, un trata de entender y el otro solo copia y pega.
Es lo mismo si usar el Chatgpt. es decir el dejar de estudiar un tema solo porque el chat lo genera, es lo mismo que antes se podria pensar que no necesitabas aprender un lenguaje, framework o conocer como funciona alguna biblioteca de codigo, solo porque lo podias buscar en Google.
Tanto ChatGPT como Google y otros sitios más (Github Issues, StackOverflow, Foros, y comunidades), a pesar que tengan toda la información, no evita que necesites estudiar un tema.
POr ejemplo he tratado con varios programadores que les he dado proyectos y creen que no necesitan estudiar las bases de un framework o lenguaje porque el chat ya se los da.
- Les doy codigo en algun lenguaje de programacion y generan más codigo que el que deberia
- He visto aplicaciones de React que pueden obtener por ejemplo los datos de una query usando hooks de la biblioteca, pero usan la API del navegador, cuando no tiene sentido por las bibliotecas ya hacen eso, pero un junior no sabe eso, porque no programa en realidad, solo esta copiando y pegando codigo.
- Por ejemplo les doy un proyecto en Nestjs, pero lo escribien como si fuera otro framework, como express
- Si tienen que hacer operaciones matematicas, como promedia, calcular estadisticas, o calcular cualquier dato. Solo se lo piden al chat. Este genera codigo de FRontend pra aello, y no piensna que quizas eso seria mejor generarlo en el Backend con una llamada de API y asi.
quiero que noten que el problema no es tanto el chat, sino es que como estos programadores no tienen bases, y creen que no ncesitan aprender los temas mas eseneciales con el entender todo lo que puede hacer su Framework o lenguaje y simplmenete van directo a crear aplicaciones, lo que hace que cometan estos errores, porque se saltan el paso de estudiar primero.
Como resultado generan proyectos de código que en un cierto punto, ya no entienden como continuar, o codigo que ya no saben que arreglar, el proyecto esta mal optimizado en ejecucion y tiempo de contruccion, porque han copiado y pegado tanto codigo que no saben cual es necesario y cual no.
- O simplemente se les hace mas dificil optimizar el codigo, porque como no tienen bases para saber si deberian separarlos en archivos, o crear clases o crear paquetes, simplemente no entienden que el codigo necesita ser modularizado.
De hecho esto tambien produce un problema que en mi opinion es grave, que es el eterno programador Junior, aquel que cree saber programar, pero no puede empezar ningun proyecto sin el chat, similar al problema del tutorial Hell, que es un programdor que no puede crear ningun proyecto porque necesita de un tutorial para empezar.
Bueno la solucion es simple, si mañana tienes un proyecto para crear, supongamos un e-commerce, no solo empieces a generar codigo, tambien dedicale unas horas a estudiar las herramientas que usas, pro ejemplo tu proyecto usa Nextjs, no vayas directo a pedirle al chat, estudia tambien las bases de Nextjs primer, crea un proyectito pequeño antes del proyecto de verdad, practica un poco unas horas, si quieres ayudate del chat, pero la idea es que practiques primero los fundametos. Luego usa el chat para que te ayude a generar tu proyecto si quieres, pero tu eres que el estará a cargo, notaras los errores que te genera el chat, y podras comprobar si lo que te da es correcto, o al menos sospechar que quizas no es la mejor forma en la que se puede llevar a cabo un proyecto.
Incapacidad para reconocer Codigo de baja calidad
Recuerdo que hace años antes de GPT, cuando desarrollaba cuidaba mucho de usar solo el codigo que necesitaban mis proyectos, y los desarrolladores que trabajaban conmigo, les era mas dificil al inicio entenderlo, pero cuando pasaba unos meses y continuaban estudiando, tomaban la misma idea, y el codigo al estar bien organizado y tomarnos un poco de tiempo en genera una buena estsructura, era simple de añadir modificaciones, es decir costaba un poco al inicio pero el proyecto eventualmente estaba mas cuidado.
Con Herramientas como ChatGPT y Github Copilot a este punto, recibo tantas modificaciones de golpe en un Pull Request, que pareceria que la productividad se duplico, y si se genera mas codigo, pero si antes ya generabas codigo de mala calidad ahora tengo que revisar el doble de codigo de mala calidad, porque de nuevo GPT no programa, solo genera codigo, el que programa es el desarrollador, el debe revisar que el codigo deba seguir las mejores practicas, tanto en orden ,reusabilidad, y facilidad de lectura.
Esto parece que no importa a un Junior, pero esto tiene costes caros a la larga, por ejemplo:
- Rendimiento Subóptimo: El código generado puede no estar optimizado para el rendimiento, resultando en soluciones ineficientes.
- Complejidad: Puede generar soluciones que son más complejas de lo necesario, aumentando la dificultad de mantenimiento y comprensión del codigo.
- Suposiciones Incorrectas: Puede hacer suposiciones incorrectas sobre el contexto del problema, lo que lleva a soluciones inapropiadas.
- Contexto Limitado: A veces, el código generado puede no tener en cuenta el estado completo del proyecto o sistema en el que se está trabajando.
- Vulnerabilidades: Puede generar código que contiene vulnerabilidades de seguridad, como inyecciones de SQL, exposición de datos sensibles, o manejo inadecuado de entradas de usuario.
- Malas Prácticas de Seguridad: Puede no seguir las mejores prácticas de seguridad, como la validación y sanitización de entradas.
- Convenciones de Codificación: Puede generar código que no sigue las convenciones de codificación del equipo o de la industria, lo que puede dificultar la integración y el mantenimiento.
- Estilo Inconsistente: El estilo del código generado puede ser inconsistente, lo que afecta la legibilidad y la cohesión del código base.
- Comentarios Insuficientes o excesivos. Esto parecera una contridccion porque dirias, como lo contrario seria malo, bueno siempre dependen hay muchos desarrolladores que no les gusta los comentarios y quiern que el codigo sea autodescriptivo, es decir que los nombres se expliquen por si solo, por otro lado hay otros programadores que comentan execesivamente hasta cosa obvias.
En mi opinion el equilibrio esta en documentar solo las partes mas importantes o las parte que ofrece las funcionalidades principael del proyecto.
Consejos para mitigar el problema
Entonce teniendo todo esto en cuenta algunas recomendaciones para mitigar este problema podemos encontrar a:
- Optimización Manual: Ajustar y optimizar el código manualmente para asegurar que cumpla con los estándares de eficiencia y seguridad.
- Revisión y has Pruebas cosntatnemtne: Siempre revisar y probar el código generado antes de integrarlo en el proyecto.
- Mejora la calidad el codigo con Tests: si ya generaste el codigo, tambien ahora puedes añadir algo tan importante como generar los tests de Herramientas de Testing para que se cumplan el codigo, algo que GPT puede ayudarte y hace que tu codigo sea menos propensos a fallar por cambios constantes.
- Mantener Buenas Prácticas: Asegurarse de que el código siga las convenciones de codificación y mejores prácticas de seguridad del proyecto. Para esto si trabajas con otros desarrolladores, siempre lee cuidadosamente los Pull Request que te enviee y no ignores errores porque sino los seguiran comentiendo y creeran que eso esta bien. No todos son tan considerados para escribir codigo de calidad, hay quien solo quiere terminar su tarea e irse, asi que asegurate de revisarlo.
De hecho esto es lo que me refiero en el video de que las IAs no reemplazaran a los programadores, por que solo son herramientas que generan codigo, aun alguien tiene que unir, corregir y diseñar los sistemas que usan estas porciones de codigo, y eso no ha cambiado en nada al dia de hoy para la matoria de programadores.
Conclusión
En fin estos son algunos temas que he notado actualmente al trabajar con desarroladores que usan mucho software de IA como ChatGPT o github copilot, en si como siemprre el problema no es tanto la herramienta sino el desarrollador, que por ver facilidades se esta generando problemas a futuro, porque cuando tenga nuevas entrevistas tecnicas, quiera desarrollar sus propios proyectos o mejor profesionalemtne, notara que a pesar que ha pasado muchos años u nivel tecnico sigue siendo el mismo, porque simplente todo ese tiempo estuvo usando una herramienta de forma erronea.
Esto es bueno, por supuesto, pero tampoco puedo evitar ver otros malos habitos que esta generando y como no puedo evitar pensar en el daño que este les causara eventualmente. Así que tomando en cuenta lo que veo a diario espero que tomes esto como unos consejos personales que quisiera que tomaras en cuenta si quieres ser un buen profesional dedicado al desarrollo de software.
Antes de empezar por el titulo, no vayan a crear que yo creo que no deberian usar chatgpt, para nada, de hecho yo al igual que mucho de ustedes utilizo esta herramienta en mi dia a dia para ganar productividad.
Pero si creo que el tomar la herramienta como algo más que solo eso, una herramienta puede hacer mucho daño a pogramadores que recien estan empezando.