Mi experiencia en el podcast O corres o te encaramas
Hace poco tuve la oportunidad de participar como invitado en O corres o te encaramas, un podcast de Aníbal Rojas y Freddy Montes, en el que conversan sobre cómo distintas personas utilizan la inteligencia artificial en su trabajo y en su vida profesional. Así que cuando me invitaron a participar, obviamente me hizo bastante ilusión porque soy seguidor del programa desde sus inicios.
En este episodio hablamos sobre uno de los usos de la IA que más me ha servido durante los últimos años: apoyarme tanto en mi trabajo como desarrollador como en mi parte académica. De hecho, sobre cómo la usé para realizar la investigación de mi tesis de maestría en informática.
La IA y mi tesis
Uno de los temas principales fue cómo utilicé la inteligencia artificial en la redacción de mi tesis de Maestría en Informática. Creo que hay mucha controversia en torno al uso de la IA en la universidad, especialmente porque es muy fácil caer en pedirle a una herramienta que genere contenido y utilizarlo sin entenderlo realmente.
En mi caso, la experiencia fue diferente, pues utilicé la IA principalmente como una herramienta para acelerar procesos que normalmente consumen bastante tiempo: investigar temas, encontrar puntos en los que debía profundizar, organizar ideas y apoyarme durante la redacción.
Por supuesto, al final eres tú quien tiene que entender el trabajo que estás haciendo. La IA puede ayudarte con la tesis, pero frente al jurado respondes tú.
También conversamos sobre cómo utilizo estas herramientas para investigar y generar código. Algo que me ha permitido reducir bastante el tiempo entre tener una idea, investigarla y, finalmente, construir algo que pueda probar.
Hablar de mi lado académico
Una de las cosas que más me gustó del episodio fue poder hablar de mi trayectoria académica. Normalmente, cuando participo en eventos, escribo en el blog o hablo en redes sociales, termino conversando sobre programación, desarrollo de software, Linux, inteligencia artificial o alguna herramienta nueva que estoy probando.
Sin embargo, rara vez tengo la oportunidad de hablar sobre mi experiencia en la universidad, la investigación o el proceso de hacer una tesis. Por eso disfruté bastante esta conversación. Además, siendo seguidor de O corres o te encaramas desde hace tiempo, fue genial pasar de escuchar las conversaciones a formar parte de una de ellas.
Si te interesa cómo estoy utilizando la inteligencia artificial para investigar, programar y trabajar en proyectos académicos, te recomiendo ver el episodio.
La IA te ayuda con la tesis, frente al jurado respondes tú
Y si después de verlo tienes alguna pregunta, inquietud o simplemente quieres compartir cómo estás utilizando IA en tus estudios o trabajo, déjala en los comentarios.
Hace varios años desarrollé dos plugins para WordPress: JS Archive List y JS Categories List. Ambos nacieron cuando los widgets de WordPress se desarrollaban prácticamente por completo en PHP: creabas una clase, extendías WP_Widget, generabas el formulario de configuración y, finalmente, renderizabas el HTML. Funcionaba bastante bien, pero WordPress ha cambiado mucho desde la llegada de Gutenberg. Así que decidí migrar ambos plugins para que pudieran utilizarse como un bloque de Gutenberg. En el caso de JS Categories List, ocurrió desde la versión 4.0 y en JS Archive List desde la versión 5.0, manteniendo además el widget anterior en PHP por compatibilidad con instalaciones existentes.
Lo interesante de esta migración no fue solo aprender a crear un bloque. También me hizo ver, de una forma diferente, cómo ha evolucionado WordPress.
Se acabaron los tiempos de plugins 100% hechos en PHP, ahora es bloque de Gutenberg en JS (React) + PHP
De widgets en PHP a una interfaz en React
Un widget clásico de WordPress normalmente hacía casi todo en PHP. Por ejemplo, teníamos algo parecido a esto:
class My_Widget extends WP_Widget {
public function widget( $args, $instance ) {
// Obtener datos.
// Generar HTML.
// Mostrar el widget.
}
public function form( $instance ) {
// Formulario de configuración.
}
}
El formulario que veía el administrador, la configuración y el HTML final estaban muy ligados entre sí. Con Gutenberg la separación es diferente. Ahora puedes tener PHP encargándose de los datos y del renderizado mientras que el editor utiliza JavaScript y React para construir la interfaz de configuración.
Por esta razón, siento que WordPress cada vez se siente más como un CMS que ofrece servicios y APIs en PHP, mientras que diferentes interfaces consumen esos servicios.
Gutenberg es probablemente el mejor ejemplo, porque el editor trabaja con entidades como posts, páginas, usuarios o términos mediante @wordpress/core-dataQue internamente puede procesar los datos mediante las APIs de WordPress.
PHP no desapareció. Simplemente ya no tiene que encargarse de toda la interfaz.
¿Cómo comenzar un bloque de Gutenberg?
WordPress posee una herramienta oficial llamada @wordpress/create-block que genera la estructura inicial de un plugin con un bloque, incluyendo JavaScript, PHP, CSS y la configuración necesaria para compilar todo. Puedes crear uno ejecutando:
Aunque estés migrando un plugin existente, te recomiendo ejecutar este comando al menos una vez. Es una forma sencilla de entender cuál es la estructura recomendada actualmente por WordPress.
Entre los archivos encontrarás uno particularmente importante:
block.json
Este archivo contiene la definición del bloque: nombre, atributos, scripts, estilos y demás metadatos. Por ejemplo:
Con eso PHP conoce nuestro bloque y WordPress puede cargar los scripts y estilos necesarios.
La configuración del bloque de Gutenberg ahora vive en React
En un widget clásico, las opciones se construían con inputs HTML generados en PHP. En un bloque de Gutenberg puedes crear esa interfaz con los componentes que ya ofrece WordPress. Por ejemplo:
import { InspectorControls } from '@wordpress/block-editor';
import {
PanelBody,
ToggleControl
} from '@wordpress/components';
export default function Edit({ attributes, setAttributes }) {
return (
<InspectorControls>
<PanelBody title="Options">
<ToggleControl
label="Show post count"
checked={ attributes.showCount }
onChange={ ( value ) =>
setAttributes({ showCount: value })
}
/>
</PanelBody>
</InspectorControls>
);
}
De esta forma, Gutenberg se encarga de gran parte de la experiencia del editor y nosotros solo debemos definir qué opciones necesita nuestro bloque.
En mis plugins esto reemplazó buena parte de los formularios que antes tenía que generar manualmente desde PHP.
Consumir los datos de WordPress desde el bloque de Gutenberg
Otra parte interesante es que no necesariamente tienes que crear tus propios endpoints para obtener información que WordPress ya conoce. Desde el editor puedes consultar entidades utilizando core-data. Por ejemplo, para obtener páginas puedes utilizar:
WordPress se encarga de resolver la petición, de mantener los datos en su store y de entregarlos al componente. En un plugin como JS Categories List, el mismo concepto permite trabajar con taxonomías y categorías desde la interfaz del bloque, sin tener que imprimir previamente toda esa información en el HTML generado por PHP.
Eso también tiene otra ventaja, la nueva versión de mis plugins puede leer la información dinámicamente y cargar JavaScript y CSS solamente cuando realmente existe un bloque o widget en la página, en lugar de cargar recursos innecesariamente en todo el sitio.
No tienes que reescribir todo tu PHP
Esta fue una de las cosas que pensé inicialmente que serían más complicadas.
Migrar a un bloque de Gutenberg no significa necesariamente convertir todo el plugin a JavaScript. Puedes crear un bloque dinámico y continuar renderizando su contenido desde PHP, por ejemplo, block.json puede indicar:
{
"render": "file:./render.php"
}
Y dentro de render.php Puedes reutilizar buena parte de la lógica que ya tenía tu antiguo widget, permitiendo tener una migración más progresiva:
La interfaz del editor puede estar hecha con React, mientras que el frontend todavía utiliza funciones PHP que llevan años funcionando. Los bloques dinámicos están diseñados precisamente para casos donde el contenido debe calcularse al momento de renderizar la página, y WordPress permite hacerlo mediante un archivo render.php o un render_callback.
En mi caso, esto fue bastante útil porque no tenía sentido reescribir código estable solamente por utilizar Gutenberg.
Mantener el antiguo widget por retrocompatibilidad
También decidí no eliminar de inmediato los widgets anteriores. Tanto JS Archive List como JS Categories List mantienen una versión legacy en PHP para instalaciones que todavía la utilizan, mientras que el desarrollo nuevo está enfocado en el bloque Gutenberg.
Creo que esta es una buena estrategia para plugins que llevan muchos años publicados. Puedes modernizar el código sin afectar las instalaciones de los usuarios que configuraron el widget hace más de cinco años. Ya con el tiempo puedes dejar la implementación antigua únicamente en modo de mantenimiento.
WordPress es bastante diferente ahora
Después de hacer esta migración, creo que desarrollar para WordPress actualmente se parece bastante menos al WordPress con el que comencé hace años.
PHP continúa siendo una parte fundamental, pero ahora tenemos una capa de APIs, bases de datos, componentes y una interfaz escrita en React.
En lugar de pensar:
“Tengo que crear una página PHP para configurar esto.”
Cada vez pienso más:
“¿Qué datos o servicios debe proporcionar WordPress y cómo los va a consumir la interfaz?”
Ese cambio de mentalidad hace que Gutenberg tenga mucho más sentido. Así que si tienes un plugin antiguo basado en WP_Widget, no necesitas reescribirlo por completo de una vez. Puedes comenzar creando un bloque, mover las opciones del formulario a React y reutilizar tu código PHP para el renderizado. Luego moderniza el resto poco a poco.
Para empezar y entender cómo funciona todo, crea primero un bloque vacío con @wordpress/create-block, ejecuta npm start Y comienza a modificarlo. Es probablemente la forma más rápida de dejar de ver Gutenberg como algo extraño y comenzar a verlo simplemente como la nueva interfaz de desarrollo de WordPress.
Añadir un plugin es una respuesta válida cuando resuelve una necesidad concreta, está bien mantenido y no introduce complejidad innecesaria. El problema aparece cuando WordPress empieza a crecer por acumulación: una extensión para esto, otra para aquello, una tercera para conectar sistemas y una cuarta para corregir el comportamiento de las anteriores.
Al principio parece eficiente. Con el tiempo, esa lógica suele traducirse en incompatibilidades, tiempos de carga peores, pantallas de administración confusas y miedo a actualizar. La cuestión no es demonizar los plugins, sino reconocer cuándo el proyecto ya no debería depender de ellos para sostener lógica crítica del negocio.
Señales de que el límite ya ha llegado
Hay algunas pistas bastante claras. Por ejemplo: cuando un cambio pequeño obliga a revisar varios plugins a la vez; cuando una integración importante depende de hacks o campos escondidos; cuando cada actualización genera incertidumbre; o cuando nadie del equipo puede explicar con seguridad dónde vive cada regla funcional.
También es una señal de que la administración se vuelve opaca. Si quienes editan contenidos encuentran campos duplicados, procesos inconsistentes o pasos manuales que no entienden, probablemente el problema no es de formación, sino de arquitectura.
En ese escenario, lo sensato suele ser plantear desarrollo WordPress a medida. No porque “lo custom” sea mejor por definición, sino porque ciertas reglas del negocio merecen vivir en código propio, con alcance delimitado, pruebas razonables y una lógica que el equipo pueda mantener con criterio.
Qué suele llevarse a medida
Normalmente conviene customizar aquello que forma parte del producto o del flujo principal: integraciones con ERP o CRM, automatizaciones, modelos de datos específicos, áreas privadas, buscadores especializados, reglas de publicación, conectores API o paneles internos simplificados. Son piezas donde la configuración genérica se queda corta o genera demasiadas excepciones.
Esto permite reducir la dependencia de opciones ocultas y reacciones en cadena. En vez de adaptar el negocio a un plugin, se adapta el desarrollo a la necesidad real. El resultado no tiene por qué ser más complejo; a menudo es más claro, porque cada responsabilidad queda mejor delimitada.
No se trata de rehacerlo todo
Pasar a medida no siempre implica sustituir toda la base existente. Muchas veces basta con identificar qué piezas pueden seguir siendo estándar y cuáles conviene aislar en una capa propia. Lo importante es decidirlo con una visión de conjunto, no solo reaccionando a incidencias.
La mejor pregunta, por tanto, no es cuántos plugins tiene la web, sino si la arquitectura sigue siendo comprensible, mantenible y segura. Cuando la respuesta empieza a ser no, añadir otro plugin rara vez arregla el problema. Lo habitual es que simplemente lo esconda durante un tiempo más.
La administración también debe simplificarse
Cuando se apuesta por una capa a medida, una parte del valor aparece en el backend. Menos campos irrelevantes, procesos más claros, validaciones coherentes y pantallas pensadas para el uso diario reducen errores y dependencia. Es decir, el desarrollo a medida no solo mejora el código; también puede mejorar mucho la experiencia del equipo que trabaja dentro de WordPress todos los días.
Hace unos días se estrenó The Story of VS Code, un documental que cuenta la historia de Visual Studio Code directamente desde las personas que participaron en su desarrollo. Como me gustan este tipo de documentales sobre la historia del software, decidí verlo y encontré varias cosas que no conocía.
Visual Studio Code es uno de esos programas que hoy parecen haber existido desde siempre. En pocos años pasó de ser un nuevo editor creado por Microsoft, bastante criticado por utilizar tecnologías web para una aplicación de escritorio, a convertirse prácticamente en un estándar dentro de la industria.
Al final no parece que les haya ido tan mal.
¿De dónde salió Visual Studio Code?
Una de las cosas interesantes del documental es que VS Code no comenzó realmente como un editor de escritorio. El proyecto tiene sus raíces en un equipo de Microsoft en Zurich que trabajaba en herramientas de desarrollo para el navegador. De ahí aparecieron proyectos como Monaco, que eventualmente evolucionaron hasta convertirse en Visual Studio Code.
Para construirlo utilizaron tecnologías web sobre Electron. Actualmente esto no resulta demasiado extraño, pero hace diez años utilizar HTML, CSS y JavaScript para crear una aplicación de escritorio generaba bastante discusión, principalmente por el consumo de recursos comparado con aplicaciones nativas.
Otra cosa que me sorprendió fue descubrir que el proyecto era desarrollado por programadores distribuidos en diferentes partes del mundo. Siempre había imaginado que proyectos de este tamaño dentro de Microsoft se construían principalmente entre personas de una misma oficina o región.
El documental además está contado por los propios protagonistas del proyecto, explicando las decisiones que fueron tomando hasta que aquel editor bastante polémico terminó convirtiéndose en uno de los más utilizados de la industria.
Interfaz de Visual Studio Code
Microsoft estaba apostando bastante por la web
Algo que me llamó especialmente la atención fue ver cuántas tecnologías relacionadas estaba desarrollando Microsoft durante esa época. Por un lado estaba Monaco y todo el trabajo alrededor de herramientas de desarrollo para la web. Al mismo tiempo estaban creando TypeScript, que eventualmente tendría una relación bastante cercana con VS Code.
También apareció el Language Server Protocol, mejor conocido como LSP. El cual permite que un editor se comunique mediante un protocolo estándar con un servidor que entiende determinado lenguaje de programación. De esta forma funcionalidades como autocompletado, navegación entre definiciones o detección de errores no tienen que implementarse nuevamente para cada editor.
Como usuario de Neovim esto me parece particularmente interesante porque actualmente utilizo LSP todos los días, aunque prácticamente no utilice VS Code. Es un buen ejemplo de una tecnología nacida alrededor de un producto de Microsoft que terminó beneficiando a todo el ecosistema.
De VS Code a los editores con IA
Otra decisión importante fue publicar buena parte del proyecto como open source. Con el tiempo VS Code no solamente consiguió un enorme ecosistema de extensiones, sino que su código terminó sirviendo como base para construir otros editores.
Esto se vuelve especialmente interesante actualmente con la inteligencia artificial.Varios de los nuevos editores orientados a programación con IA son forks o están construidos sobre tecnologías provenientes de VS Code. En lugar de desarrollar un editor completamente desde cero, pueden utilizar una base que lleva más de una década evolucionando.
El documental habla precisamente de esta nueva etapa y de cómo VS Code terminó convirtiéndose no solamente en un editor, sino prácticamente en infraestructura para otras herramientas de desarrollo.
Me parece curioso que algunos de los productos que ahora intentan competir contra VS Code existan precisamente gracias al trabajo que Microsoft hizo con el proyecto.
¿Utilizo Visual Studio Code?
Curiosamente, casi no. Desde hace bastante tiempo mi editor principal es Neovim y sigo prefiriéndolo para mi trabajo diario. Me gusta trabajar cerca de la terminal y tener un entorno configurado exactamente como quiero. Sin embargo, en diferentes trabajos me ha tocado utilizar Visual Studio Code y realmente no me parece un mal editor.
Funciona en prácticamente cualquier plataforma, tiene un ecosistema enorme de extensiones y para alguien que simplemente quiere instalar un editor y comenzar a programar resulta bastante cómodo. Además, tengo que reconocer que es de las pocas tecnologías de Microsoft que me parece que están realmente bien hechas.
No significa que vaya a abandonar Neovim mañana, pero puedo entender perfectamente por qué terminó siendo tan popular.
¿Vale la pena ver The Story of VS Code?
Si eres programador y utilizas Visual Studio Code diariamente, te recomiendo ver el documental. Cuenta cómo comenzó el proyecto, por qué decidieron utilizar tecnologías web, quiénes estuvieron involucrados y cómo aparecieron tecnologías como Monaco, TypeScript y LSP alrededor de todo este ecosistema.
También resulta interesante ver cómo un editor que inicialmente recibió bastantes críticas terminó afectando para bien la forma en que desarrollamos software y sirviendo de base para una nueva generación de herramientas.
Incluso si no utilizas VS Code, probablemente utilizas alguna tecnología que fue influenciada por este proyecto.