Durante estos dos años con el uso de IA, casi todo parece que fuera solo desarrollo de aplicaciones o sitios web frontend. Y sí, obviamente es de los entornos más usados actualmente para crear herramientas y servicios. Pero como programador, si has sentido que estás haciendo la misma aplicación web una y otra vez, y que no estás aprendiendo algo distinto, pues entonces estos son otros 3 proyectos que pueden ayudarte a variar un poco el tema de solo crear interfaces web y dominar áreas más avanzadas de sistemas, y quizás hasta conocer algo nuevo y ganar una nueva habilidad o experiencia.
Además, que muchos de estos proyectos ya son para desarrolladores que conocen algo de la web, pero el plantearte a hacerlos se vuelve un reto un poco más grande que las aplicaciones típicas. Empecemos.
Web Crawler
De forma resumida, un web crawler es un programa que obtiene sitios web, convierte estos datos y extrae más enlaces para seguir indexando más información. Crearlo es uno de los proyectos ideales si estás buscando salir de lo común, profundizar en temas técnicos y agregar valor real a tu portafolio.
¿Por qué hacerlo?
Primero, porque desarrollar un crawler te obliga a entender en detalle cómo funcionan las solicitudes HTTP internamente, cómo gestionar URLs y cómo analizar HTML. Estos conceptos son esenciales en casi cualquier aplicación moderna, y aunque muchos frameworks ya realizan estas tareas internamente, comprenderlas te proporcionará un conocimiento más profundo que podrás aplicar en cualquier lenguaje. Además, aprenderás sobre estructuras de datos como colas o pilas para decidir la estrategia de navegación. Por ejemplo, BFS (búsqueda en amplitud) explora primero todas las páginas cercanas antes de profundizar, mientras que DFS (búsqueda en profundidad) explora a fondo una ruta antes de avanzar a la siguiente. También podrás enfrentar el reto de almacenar y organizar datos eficientemente en bases como MongoDB, Redis o Elasticsearch, que típicamente se usan en este tipo de proyectos.
Para programar un crawler puedes usar prácticamente cualquier lenguaje, pero lenguajes que son recomendados aquí son Go, Python o incluso Rust, ya sea porque son lenguajes comunes o, en el caso de Python, que es un lenguaje relativamente fácil de usar. Todo esto te permitirá explorar paradigmas avanzados como la programación concurrente y paralela, además de entender otras estructuras de datos que permiten hacer búsquedas rápidas.
Lo mejor es que un crawler es un proyecto visualmente demostrable y muy atractivo en entrevistas técnicas, ya que evidencia que entiendes problemas complejos como manejo de concurrencia, control de errores y optimización del rendimiento, aspectos altamente valorados en cualquier equipo técnico.
Servidores y Clientes desde Cero
Aunque hoy en día existen frameworks avanzados que facilitan mucho el desarrollo de aplicaciones de servidor y también aplicaciones cliente, construir estos sistemas desde cero es una excelente oportunidad para entender cómo funcionan internamente, y no solamente los protocolos de red, sino también cómo se pueden llegar a crear lenguajes de nivel de sistema. Por ejemplo, podrías programar desde cero un servidor HTTP en C, utilizando herramientas como CMake y Docker, explorando conceptos avanzados como señales para la comunicación entre procesos. Este enfoque también te permite familiarizarte con aspectos importantes de seguridad, páginas de manual y llamadas al sistema operativo, llevándote más cerca del núcleo de tu sistema operativo.
Otra idea es desarrollar un cliente y servidor FTP en C o Go. Este proyecto te ayudará a entender en profundidad cómo se gestionan las transferencias de archivos en red, manejo avanzado de sockets para establecer conexiones, implementación de autenticación básica para asegurar la transferencia de datos, y optimización del manejo del flujo de datos para eficiencia y rendimiento.
Además, podrías construir tu propio servidor DNS básico que responda consultas usando sockets UDP en lenguajes como Python, C o Rust. Este proyecto te permitirá conocer cómo funcionan las resoluciones de nombres en internet, cómo se estructuran y gestionan las solicitudes UDP, y cómo se maneja la concurrencia para atender múltiples consultas simultáneamente. Además de aprender algoritmos no tan comunes como el de Radix Tree (también conocido como Patricia Trie o compact prefix tree), una estructura de datos basada en árboles que se utiliza para almacenar cadenas (strings) de manera eficiente, especialmente cuando comparten prefijos comunes.
Finalmente, desarrollar un proxy HTTP en Rust o Go es un proyecto ideal para profundizar en programación concurrente. Podrás manejar múltiples conexiones simultáneas, implementar gestión inteligente de caché para mejorar la velocidad de respuesta, aplicar limitaciones en el ancho de banda para gestionar mejor los recursos y reforzar la seguridad básica mediante filtrado de solicitudes y respuestas, obteniendo así habilidades fundamentales para construir aplicaciones robustas y escalables.
Y aunque la idea no es que crees tu propio framework, en algún momento sí es vital para que puedas entender conceptos avanzados a futuro cuando un proyecto escala a una masa de usuarios más grande.
Tu propia red Blockchain
Crear tu propia blockchain es uno de los mejores proyectos si quieres entender cómo funcionan realmente las aplicaciones descentralizadas, más allá del tema de comprar solo criptomonedas. Es decir, aquí no hablo desde un enfoque de inversión, sino de cómo funciona este tipo de redes. Aquí no se trata de interfaces bonitas ni frameworks modernos, sino de estructuras de datos sólidas, algoritmos distribuidos y conceptos como hashing, prueba de trabajo (Proof of Work) o consenso entre nodos.
Puedes empezar por una blockchain básica en Python o Go, de hecho, hasta en JavaScript con Node.js puedes crear una. El sistema consiste en que cada bloque contiene datos, un hash del bloque anterior y algún mecanismo de verificación. Luego puedes ir agregando funcionalidades como nodos en red, validación de transacciones, sincronización de cadenas y hasta tu propio sistema de tokens o una interfaz gráfica para buscar transacciones al estilo de sitios como Etherscan, aunque claro, aquí todo es didáctico.
Este tipo de proyecto te ayudará a entender los fundamentos detrás de Bitcoin, Ethereum y otras criptomonedas, además de temas clave como criptografía, integridad de datos, y cómo construir aplicaciones sin depender de un servidor central.
Te fuerza a pensar en cómo mantener la seguridad, cómo manejar datos distribuidos y cómo resolver conflictos de sincronización. Todo esto te convertirá en un mejor ingeniero de software, especialmente si te interesa el backend, los sistemas distribuidos o incluso la ciberseguridad.
Esto te abre caminos a entender sistemas que no son muy comunes pero que ciertas organizaciones están usando internamente, como los Distributed Ledgers, que tienen una idea similar, además que podrías...
Implementación de una estructura de datos distribuida (por ejemplo, un DHT):
Implementa una tabla hash distribuida (Distributed Hash Table) en Go o Python para explorar cómo se almacenan y recuperan datos en redes distribuidas (similar a BitTorrent).
Otras Recomendaciones
- Herramientas de seguridad en línea de comandos. Otra opción es crear herramientas de seguridad enfocadas a escanear red, en donde puedes aprender muchos de protocolos y cómo extraer y organizar información que puede venir sin estructura. Aquí hablo de hacer quizás:
- Sniffer de red en Python o C: Usa librerías como libpcap en C o Scapy en Python para capturar paquetes en la red y analizarlos en tiempo real.
- Escáner de vulnerabilidades simple: Crea un script que realice escaneos de puertos y detección básica de vulnerabilidades utilizando Python y Nmap.
- Implementación de un cifrado básico: Desarrolla desde cero algoritmos clásicos de cifrado como AES, RSA o algoritmos hash simples en C o Python para entender profundamente cómo funciona la criptografía.
- Programación en Kernel con XV6 (sistema operativo educativo): Experimentar con el sistema operativo XV6 (creado en MIT), que permite modificar y extender funcionalidades del kernel como "copy-on-write forking" y otras tareas típicas en programación del kernel. Esto le dio experiencia en diferencias fundamentales entre código de usuario y código del kernel, así como en retos específicos de esta área.
Conclusión
Estos proyectos no solo ampliaron sus habilidades técnicas, sino que también fortalecieron su currículum, lo que le permitió obtener una pasantía como ingeniero de producción en Meta, rol híbrido entre software y sistemas. Finalmente, recomienda fuertemente este enfoque práctico para quienes busquen salir del desarrollo web hacia áreas más técnicas y de bajo nivel, así que si estás empezando recién en desarrollo web te recomendaría ir con proyectos más simples y luego de ganar algo de experiencia, continuar con estos.
Nos vemos en un siguiente video.