Por qué tu portafolio en C# lo decide todo, o cómo no perderte entre cientos de currículums
\n\nAprendiste la sintaxis, entendiste las clases, interfaces e incluso escribiste un par de programas de consola. Felicidades, dejaste de ser un "novato". Pero aquí está el problema: para una vacante de desarrollador Junior C# llegan entre 50 y 100 respuestas. ¿Cómo sabrá el de RRHH o el líder técnico que eres ese diamante y no otro "garante de empleo" de un curso?
\n\nLa respuesta es simple: tu portafolio en C#. No una lista de tecnologías, sino proyectos vivos que se puedan tocar (o al menos ejecutar localmente). En este artículo he recopilado 7 ideas para el portafolio de un desarrollador C#, desde simples hasta de nivel medio. Cada idea no es solo "haz una calculadora", sino un caso completo con explicaciones de por qué es genial y qué código escribir.
\n\nCriterios de selección: qué hace que un proyecto sea "el mejor" para el portafolio
\n\nAntes de lanzarnos al código, acordemos: un proyecto en el portafolio debe resolver tres tareas:
\n- \n
- Mostrar dominio del stack — no solo C#, sino ASP.NET Core, Entity Framework, trabajo con API. \n
- Demostrar comprensión de la arquitectura — patrones, SOLID, separación de responsabilidades. \n
- Resolver un problema real — aunque sea una utilidad personal, debe ser útil. \n
Intencionalmente no incluí "Lista de Tareas" o "Calculadora" — eso es básico y ya no impresiona a nadie. ¡Allá vamos!
\n\n1. Bot de Telegram para gestión de tareas (con recordatorios)
\n\nLos bots de Telegram son el formato ideal para el portafolio. Son compactos, visualmente claros y trabajan con una API real. Tu bot recibirá comandos, guardará tareas en una base de datos y enviará recordatorios.
\n\nPor qué es genial:
\n- \n
- Trabajo con una API externa (Telegram Bot API). \n
- Tareas en segundo plano (Hangfire o BackgroundService). \n
- Entity Framework Core + SQLite (o PostgreSQL). \n
Ejemplo de código: iniciar un servicio en segundo plano para recordatorios
\npublic class ReminderService : BackgroundService\n{\n private readonly IServiceProvider _services;\n private readonly ILogger<ReminderService> _logger;\n\n public ReminderService(IServiceProvider services, ILogger<ReminderService> logger)\n {\n _services = services;\n _logger = logger;\n }\n\n protected override async Task ExecuteAsync(CancellationToken stoppingToken)\n {\n while (!stoppingToken.IsCancellationRequested)\n {\n using (var scope = _services.CreateScope())\n {\n var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();\n var now = DateTime.UtcNow;\n var dueTasks = db.Tasks.Where(t => t.DueDate <= now && !t.IsNotified).ToList();\n\n foreach (var task in dueTasks)\n {\n // Enviar mensaje a través de TelegramClient\n await SendTelegramMessage(task.UserId, $"Recordatorio: {task.Title}");\n task.IsNotified = true;\n }\n await db.SaveChangesAsync();\n }\n await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);\n }\n }\n}\n\n\nConsejo: agrega los comandos /start, /add, /list, /done. Y obligatorio: un Dockerfile para que el bot se ejecute con un solo clic.
\n\n2. Parser de páginas web con exportación a Excel
\n\nCrea una aplicación de consola que parseé, por ejemplo, productos de Ozon o Wildberries (o cualquier otro sitio) y guarde el resultado en un archivo .xlsx. Esto demostrará que sabes trabajar con HTML, HTTP y librerías como EPPlus o ClosedXML.
\n\nQué usamos:
\n- \n
- HttpClient para las solicitudes. \n
- HtmlAgilityPack o AngleSharp para el parseo. \n
- EPPlus para generar Excel. \n
Ejemplo de código: parseo de títulos