Почему ваше портфолио на C# решает всё, или Как не затеряться среди сотен резюме
Вы выучили синтаксис, разобрались с классами, интерфейсами и даже написали пару консольных программ. Поздравляю, вы перестали быть «нулём». Но вот беда: на одну вакансию Junior C# разработчика приходит 50–100 откликов. Как HR или техлид поймёт, что вы — тот самый алмаз, а не очередной «гарант трудоустройства» с курсов?
Ответ прост: ваше портфолио на C#. Не список технологий, а живые проекты, которые можно пощупать (или хотя бы запустить локально). В этой статье я собрал 7 идей для портфолио C# разработчика — от простых до среднего уровня сложности. Каждая идея — это не просто «сделайте калькулятор», а полноценный кейс с пояснениями, почему он крутой и какой код писать.
Критерии отбора: что делает проект «лучшим» для портфолио
Прежде чем кидаться в код, давайте договоримся: проект в портфолио должен решать три задачи:
- Показывать владение стеком — не просто C#, а ASP.NET Core, Entity Framework, работа с API.
- Демонстрировать понимание архитектуры — паттерны, SOLID, разделение ответственности.
- Решать реальную проблему — даже если это утилита для себя, она должна быть полезной.
Я намеренно не включил сюда «To-Do List» или «Калькулятор» — это база, которая уже никого не впечатляет. Поехали!
1. Telegram-бот для управления задачами (с напоминаниями)
Telegram-боты — идеальный формат для портфолио. Они компактны, визуально понятны и работают с реальным API. Ваш бот будет принимать команды, сохранять задачи в базу данных и присылать напоминания.
Почему это круто:
- Работа с внешним API (Telegram Bot API).
- Фоновые задачи (Hangfire или BackgroundService).
- Entity Framework Core + SQLite (или PostgreSQL).
Пример кода: запуск фонового сервиса для напоминаний
public class ReminderService : BackgroundService
{
private readonly IServiceProvider _services;
private readonly ILogger<ReminderService> _logger;
public ReminderService(IServiceProvider services, ILogger<ReminderService> logger)
{
_services = services;
_logger = logger;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
using (var scope = _services.CreateScope())
{
var db = scope.ServiceProvider.GetRequiredService<AppDbContext>();
var now = DateTime.UtcNow;
var dueTasks = db.Tasks.Where(t => t.DueDate <= now && !t.IsNotified).ToList();
foreach (var task in dueTasks)
{
// Отправка сообщения через TelegramClient
await SendTelegramMessage(task.UserId, $"Напоминание: {task.Title}");
task.IsNotified = true;
}
await db.SaveChangesAsync();
}
await Task.Delay(TimeSpan.FromMinutes(1), stoppingToken);
}
}
}
Совет: добавьте команды /start, /add, /list, /done. И обязательно — Dockerfile, чтобы бот запускался одной кнопкой.
2. Парсер веб-страниц с экспортом в Excel
Создайте консольное приложение, которое парсит, например, товары с Ozon или Wildberries (или любой другой сайт) и сохраняет результат в .xlsx файл. Это покажет, что вы умеете работать с HTML, HTTP и библиотеками вроде EPPlus или ClosedXML.
Что используем:
- HttpClient для запросов.
- HtmlAgilityPack или AngleSharp для парсинга.
- EPPlus для генерации Excel.
Пример кода: парсинг заголовков статей с PythonLib
public async Task<List<Article>> ParseArticlesAsync(string url)
{
var articles = new List<Article>();
using var client = new HttpClient();
var response = await client.GetStringAsync(url);
var doc = new HtmlDocument();
doc.LoadHtml(response);
var nodes = doc.DocumentNode.SelectNodes("//h2[@class='entry-title']/a");
if (nodes != null)
{
foreach (var node in nodes)
{
articles.Add(new Article
{
Title = node.InnerText.Trim(),
Link = node.GetAttributeValue("href", string.Empty)
});
}
}
return articles;
}
Почему это полезно: работодатель видит, что вы умеете собирать данные из открытых источников — навык, востребованный в аналитике и ETL-процессах.
3. REST API для библиотеки (ASP.NET Core + Identity)
Классический CRUD, но с авторизацией и ролями. Сделайте API для управления книгами: пользователи могут брать/возвращать книги, администратор — добавлять/удалять.
Стек:
- ASP.NET Core Web API (.NET 8).
- Entity Framework Core + SQL Server.
- JWT аутентификация + Identity.
- Swagger для документации.
Пример контроллера (с атрибутами ролей):
[ApiController]
[Route("api/[controller]")]
[Authorize(Roles = "Admin")]
public class BooksController : ControllerBase
{
private readonly AppDbContext _db;
public BooksController(AppDbContext db) => _db = db;
[HttpPost]
public async Task<IActionResult> AddBook([FromBody] BookDto dto)
{
var book = new Book { Title = dto.Title, Author = dto.Author, IsAvailable = true };
_db.Books.Add(book);
await _db.SaveChangesAsync();
return CreatedAtAction(nameof(GetBook), new { id = book.Id }, book);
}
[HttpGet("{id}")]
[AllowAnonymous]
public async Task<IActionResult> GetBook(int id)
{
var book = await _db.Books.FindAsync(id);
if (book == null) return NotFound();
return Ok(book);
}
}
Добавьте тесты (xUnit) и CI/CD через GitHub Actions — это покажет уровень выше среднего.
4. Десктопное приложение на WPF с MVVM
Несмотря на тренд веба, десктопные приложения на C# всё ещё востребованы (особенно в корпоративном секторе). Сделайте менеджер паролей или заметок с шифрованием.
Почему это ценно:
- MVVM — must have для WPF.
- Работа с файловой системой и криптографией (AES).
- UI/UX на XAML.
Пример ViewModel (INotifyPropertyChanged):
public class MainViewModel : INotifyPropertyChanged
{
private string _noteContent;