Rust en el portafolio: 5 proyectos que impresionarán a cualquier empleador

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Por qué Rust es tu as bajo la manga en el portafolio

\n\n

Si estás leyendo este artículo, probablemente ya sepas que Rust no es solo otro lenguaje de moda. Es una tecnología que adoran en FAANG y en las startups más populares. Pero una cosa es decir en el currículum «Sé Rust», y otra muy distinta es mostrar un proyecto funcional. Sin un portafolio, incluso el código más genial seguirá siendo solo texto en un editor de texto.

\n\n

En este artículo no vamos a discutir sintaxis ni a enseñarte los fundamentos. Iremos más allá: te mostraré 5 ideas reales de proyectos que cubrirán las necesidades del mercado y harán que el reclutador haga clic en tu currículum. Cada proyecto no es solo una «lista de tareas», sino una herramienta completa que podrás mostrar en una entrevista o publicar en GitHub.

\n\n

Bono: he añadido ejemplos de código para que puedas empezar de inmediato. ¡Allá vamos!

\n\n

Proyecto n.º 1: Utilidad CLI para análisis de logs

\n\n

La forma más rápida de adentrarse en el mundo de Rust es escribir algo útil para la línea de comandos. Las utilidades CLI son el pan de cada día para un desarrollador de Rust. Son rápidas, seguras y perfectas para demostrar habilidades con std::fs, clap y el manejo de errores.

\n\n

¿Qué hace este proyecto?

\n

La utilidad log-analyzer lee un archivo de texto con logs (por ejemplo, de Nginx o de tu aplicación) y genera estadísticas: cantidad de errores, direcciones IP más frecuentes, marcas de tiempo. Todo ello con salida a color en la terminal.

\n\n

¿Por qué es genial para el portafolio?

\n
    \n
  • Trabajo con el sistema de archivos y flujos
  • \n
  • Análisis de cadenas usando expresiones regulares o nom
  • \n
  • Argumentos de línea de comandos (crate clap)
  • \n
  • Salida a color (crate colored)
  • \n
\n\n

Ejemplo de código

\n
use clap::Parser;\nuse std::fs::File;\nuse std::io::{BufRead, BufReader};\n\n#[derive(Parser)]\n#[command(name = "log-analyzer")]\nstruct Args {\n    #[arg(short, long)]\n    file: String,\n}\n\nfn main() {\n    let args = Args::parse();\n    let file = File::open(&args.file).expect("No se pudo abrir el archivo");\n    let reader = BufReader::new(file);\n\n    let mut error_count = 0;\n    for line in reader.lines() {\n        let line = line.unwrap();\n        if line.contains("ERROR") || line.contains("error") {\n            error_count += 1;\n        }\n    }\n\n    println!("Errores encontrados: {}", error_count);\n}
\n\n

Consejo: Añade manejo de argumentos con clap y soporte para formato JSON. Esto demostrará que sabes trabajar con serialización.

\n\n

Proyecto n.º 2: Servidor web con Actix-web y API REST

\n\n

Rust no es solo para programación de sistemas. El desarrollo web en Rust está ganando terreno, y actix-web es uno de los frameworks más rápidos del mundo. Crea una API REST simple para gestionar tareas (CRUD). Es un clásico, pero en Rust se ve fresco.

\n\n

¿Qué hay que implementar?

\n
    \n
  • Endpoints: GET, POST, PUT, DELETE para la entidad "Task"
  • \n
  • Almacenamiento de datos en memoria (con posibilidad de ampliación a base de datos)
  • \n
  • Validación de datos entrantes con serde
  • \n
  • Manejo de errores y devolución de códigos HTTP correctos
  • \n
\n\n

¿Por qué esto añadirá peso a tu portafolio?

\n

Demostrarás que entiendes cómo construir APIs modernas. Los empleadores buscan personas que puedan escribir no solo un script, sino también la parte del servidor. Además, actix-web es una excelente manera de demostrar conocimiento de asincronía y concurrencia.

\n\n

Código para empezar

\n
use actix_web::{web, App, HttpServer, Responder, HttpResponse};\nuse serde::{Deserialize, Serialize};\nuse std::sync::Mutex;\n\n#[derive(Serialize, Deserialize, Clone)]\nstruct Task {\n    id: u32,\n    title: String,\n    completed: bool,\n}\n\nstruct AppState {\n    tasks: Mutex<Vec<Task>>,\n}\n\nasync fn get_tasks(data: web::Data<AppState>)                

Blogs

Book Recommendations