Un día en la vida de un desarrollador C#: código, café y magia .NET

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

Introducción: La leyenda del C# «muerto»

Seguramente has escuchado que C# es un lenguaje para «corporativos», donde todo es aburrido, lento y cubierto por una capa de burocracia empresarial. Pero la verdad es que el desarrollador C# hoy en día es un soldado universal de TI. Escribe microservicios rápidos con ASP.NET Core, optimiza consultas a la base de datos mediante Entity Framework y, a veces, incluso integra aprendizaje automático con ML.NET.

En este artículo no hablaré de teorías abstractas. Recorreremos un día laboral típico de un programador C# en una empresa real: desde el café matutino hasta el push de código a producción. Verás ejemplos de código, herramientas y trucos que te ahorrarán horas de trabajo.



08:30 — Mañana: Café, correo y tablero de tareas

El día no comienza con código, sino con contexto. Lo primero que hago es abrir Slack y Jira. En un equipo típico hay un standup matutino (daily stand-up). En él respondemos tres preguntas:

  • ¿Qué se hizo ayer?
  • ¿Qué haré hoy?
  • ¿Hay algún bloqueador?

Después del standup, una revisión rápida de los pull requests de los compañeros. La revisión de código en C# no es solo una «casilla de verificación». Aquí es importante verificar si hay fugas de memoria (especialmente con IDisposable) y si se usa correctamente async/await.



Ejemplo de la vida real: revisión de código de un método asíncrono

// Mal: llamada bloqueante dentro de un método asyncpublic async Task<User> GetUserAsync(int id){    var user = _context.Users.Find(id); // .Find — ¡síncrono!    return await Task.FromResult(user); // Envoltura inútil}

// Bien: completamente asíncronopublic async Task<User> GetUserAsync(int id){ return await _context.Users.FindAsync(id); // Asincronía real}

Un detalle así puede matar el rendimiento bajo carga. Por eso, el programador C# debe vigilar la asincronía en cada paso.



10:00 — Trabajo con la tarea: Escribimos un nuevo endpoint API

Hoy en el backlog hay una tarea: «Añadir filtrado de productos por precio». Esta es una historia típica para un desarrollador .NET. Trabajo en Visual Studio 2022 con ReSharper (sí, va lento, pero sin él estoy perdido).



Paso 1: Modelo y DTO

Primero definimos el modelo de datos. Supongamos que tenemos Entity Framework Core y una base de datos PostgreSQL.

public class Product{    public int Id { get; set; }    public string Name { get; set; }    public decimal Price { get; set; }    public string Category { get; set; }}

public class ProductFilterDto{ public decimal? MinPrice { get; set; } public decimal? MaxPrice { get; set; } public string? Category { get; set; }}


Paso 2: Repositorio con IQueryable

El truco principal es no traer todos los datos a la memoria, sino usar IQueryable. Esto permite formar la consulta SQL en el lado de la base de datos.

public async Task<List<Product>> GetFilteredProductsAsync(ProductFilterDto filter){    var query = _context.Products.AsQueryable();

if (filter.MinPrice.HasValue) query = query.Where(p => p.Price >= filter.MinPrice.Value);

if (filter.MaxPrice.HasValue) query = query.Where(p => p.Price <= filter.MaxPrice.Value);

if (!string.IsNullOrEmpty(filter.Category)) query = query.Where(p => p.Category == filter.Category);

return await query.ToListAsync();}

Observa: no llamamos a .ToList() hasta el final. Este es un patrón básico pero críticamente importante para cualquier desarrollador C#.



Paso 3: Controlador ASP.NET Core

[ApiController][Route("api/[controller]")]public class ProductsController : ControllerBase{    private readonly IProductRepository _repo;

public ProductsController(IProductRepository repo) =&g

Blogs

Book Recommendations