Search
Write a publication
Pull to refresh
3
0.2
Павел @WebPeople

Менеджер проектов

Send message

Как типы делают сложные задачи простыми

Level of difficultyMedium
Reading time20 min
Views20K

Последнюю пару лет мой мозг программиста всё больше увлекался типами, принципами функционального программирования и Typescript. По большей мере на это повлияло огромное количество времени, потраченное мной на кодовую базу Heartbeat — фулстек-приложения из трёхсот тысяч строк на Typescript, включающего в себя веб-приложение React, мобильное приложение React Native и сервер Node.js. Мой опыт работы с этой кодовой базой показал мне, что чем больше я полагаюсь на систему типов, тем больше пользы из этого извлекаю.

Написание кода в кодовой базе, полностью сделавшей упор на типы, похоже на жульничество. Часто я могу реализовать 80% новой фичи, ни разу не запустив код. Я начинаю работать над крупным рефакторингом, требующим нарушить допущение, принятое во всём коде, но вскоре выясняю, что благодаря системе типов изменения оказываются тривиальными. Простые фичи практически кодируют себя сами, потому что опечатки мгновенно отлавливаются, а половина моего кода пишется автодополнением. На вопросы от команды техподдержки о тонкостях работы какой-то фичи можно ответить при помощи Ctrl+F в коде, даже если письменной документации почти нет. Целые категории багов, с которыми мне приходилось бороться, попросту исчезли.

Я начал называть стиль кодинга, позволяющий реализовать подобное, Type Driven Development. В статье я приведу разрозненные мысли и ссылки на ресурсы, сильно повлиявшие на то, как я понимаю type driven development.
Читать дальше →

Фундаментальная математика — теория всего в IT и не только. Теория типов и формализация в Coq

Reading time38 min
Views15K

У нас есть 3 "теории всего" - научная картина мира (все сводится к законам физики), информатика (все сводится к битам) и фундамент математики (все сводится к логике). Именно фундамент математики представляет особый интерес, так как он является фундаментом для двух других фундаментов и имеет глубокий философский смысл. Последние 2 года я сильно им увлекся и проделал довольно большую работу по углубленному изучению теории типов (Calculus of Constructions), и готов поделиться результатами, а также рассказать о девяти направлениях, где можно применить это на практике. Очень многое получилось лучше, чем я планировал. Изначально перспективы были не очень понятными, и поэтому я не рассказывал друзьям и коллегам про мою работу в этом направлении и называл это «Секретный Проект». Но теперь, когда многое прояснилось и получилось, можно поделиться успехом. Собственно, в этой статье я расскажу вам не только про сам фундамент математики, а еще его связь с ежедневной работой программиста, а также с Computer Science/Data Science и AI/ML. Я вам нарисую большую и красивую картину, на которой все понятно и логически следует из маленького набора правил выведений типов (11 штук) и аксиом теории множеств (9 штук).

У нас есть 3 фундамента математики — теория множеств (удобна для человека), теория типов (удобна для компьютера) и теория категорий (не знаю, зачем она вообще нужна). Они примерно одинаковой мощности и одну можно выразить внутри другой. Особый интерс представляет именно теория типов, тк ее довольно легко можно запрограммировать внутри компьютера и использовать как строгий фундамент для других теорий, который не дает совершить ошибку и проверяет каждое ваше действие.

Читать далее

Судный день: топ-10 ошибок в C и C++ проектах за 2024 год

Level of difficultyMedium
Reading time24 min
Views9.2K

Каждый год мы наблюдаем одинаковую картину: ошибки портят нам код, пытаясь доказать, что они здесь главные. Но сегодня настал день расправы. Давайте посмотрим, какие самые интересные баги мы нашли в этом году...

Читать далее

«Непонятки» в изучении программирования

Level of difficultyEasy
Reading time4 min
Views12K

Однажды, в ходе очередной попытки освоить программирование, мне попалась переводная книга, где автор на первых страницах обещал научить программировать даже тех, кто никогда этого не делал. И в качестве примера приводил собственного сына 8 лет, которого он как бы научил тоже.

Воодушевлённый таким началом я бодро взялся за чтение. И вот, где-то на первых страницах, при обсуждении типов данных, автор ничтоже сумняшеся сообщает, что целое число, которое Int, может быть Int16, Int32 и т.д., со всеми вытекающими подробностями.

И в эту минуту я чувствую как начинают шевелиться волосы на моей голове. От шока, что не понимаю, чтоэто такое.

Потом подумал, что он, наверное, это где‑то объяснил, а я пропустил. Проверил предыдущие страницы, не нашёл. Может он потом объяснит, бывают же такие преподы, сначала что‑то скажет, а потом разберёт. Посмотрел вперёд, не нашёл тоже.

В общем, сильно загрустил. Мечта стать программистом разбилась о стену как хрустальный шар. И далее, по цепочке, знакомые всем мысли о собственной непригодности.

С тех пор, если встречается в книге, что автор научит всех, даже тех, кто «никогда не программировал», то невольно вздрагиваю, как от легкого удара электрическим током.

И самое смешное, что недавно, на современном курсе по изучению программирования, услышал то же самое. Преподаватель, как только зацепился за тип Int, тут же начал рассуждать все о тех же Int16, Int32, Int64 и т. д. Как будто он попадает в разъезженную колею и уже не может из нее выбраться.

К чему я все это говорю? — К тому, что нередко преподаватели программирования не замечают и не осознают, что новички, которые раньше действительно не программировали, реально не понимают ряд вещей, которые людям с опытом кажутся сами собой разумеющимися.

Читать далее

Символы Unicode: о чём должен знать каждый разработчик

Reading time7 min
Views442K


Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.
Читать дальше →

404: Почему наше сознание — баг, но мы всё равно его любим

Level of difficultyEasy
Reading time4 min
Views7.7K

Поговорим о том, как программист Вася борется с багами не только в своём коде, но и в сознании, где гиппокамп — это сборщик мусора, многозадачность — перегруженный процессор, а эффект подтверждения — фильтр с предвзятыми запросами.

Читать далее

Как учиться во взрослом возрасте: 7 советов, проверенных на практике

Level of difficultyEasy
Reading time5 min
Views20K

Привет! Меня зовут Валентина Прончатова, и я руковожу командой методистов в Практикуме. Методисты отвечают за проектирование студенческого опыта. Наша задача не только обеспечить достаточный объем знаний и навыков, но и сделать так, чтобы обучение было максимально эффективным и комфортным. 

Для этого мы работаем в доказательном подходе и регулярно отслеживаем учебные метрики. Например, для оценки учебного опыта в Практикуме есть специальный инструмент — LX index, который измеряет впечатления от обучения. 

А ещё мы собираем обратную связь наших студентов. Недавно провели небольшое исследование успешных кейсов обучения: в рамках глубинных интервью со студентами выяснили, какие поведенческие паттерны помогли им дойти до конца с хорошими результатами. В этой статье делюсь выводами и советами, проверенными на практике. Что делать, чтобы ваше обучение прошло без лишнего стресса и академов?

Читать далее

Scrum is dead или почему Kanban намного эффективнее Scrum

Level of difficultyEasy
Reading time6 min
Views25K

Методы управления проектами в сфере разработки программного обеспечения, такие как Scrum и Kanban, стали основными инструментами для команд, работающих по методологии Agile. В этой статье я рассмотрю, какие преимущества даёт Kanban по сравнению со Scrum.

Читать далее

ИИ-агенты: от теории к практике

Level of difficultyMedium
Reading time10 min
Views32K

Два наиболее интересных похода в создании AI‑систем в 2024 — это агенты (agents, agentic AI systems) и мультиагентность (multi‑agent systems)

Ключевая черта, отличающая агентов от других AI‑систем — это автономность

То есть мы можем говорить что имеем дело с Агентом, если наша система обладает автономностью в решении задачи. Степень автономности может быть разная: от выбора действий в рамках заданных шагов и инструментов до самостоятельного определения плана и последовательности выполнения.

Большинство гайдов по агентам ограничиваются теорией и супер-абстрактными примерами, игнорируя реальные проблемы, которые возникают в процессе разработки.

Сегодня мы решим задачу, приближенную к реальности и актуальную для многих бизнесов — сделаем агента-ассистента для сбора данных.

Читать далее

Математическая продлёнка. Про НОД, НОК и суперсилу

Level of difficultyEasy
Reading time10 min
Views7.8K

Продолжаю делиться с вами своими заметками для занятий математического кружка. Эта статья носит пятничный характер, и представляет опыт лёгкой болтовни на глубокие математические темы. Именно такие беседы с моим папой, а потом с учителями в новосибирской ФМШ когда-то привели меня в науку, и именно они оставляют у учеников ощущение прикосновения к чему-то большому и стройному, что популярные ныне стоики называли словом Логос.

Сегодня я поделюсь своим опытом ученичества и учительства, возможно, полезный тем, у кого есть дети, племянники, внуки или, тем более, ученики, с которыми так хочется разделить свою любовь к точным наукам.

Читать далее

Толкаем байты, или Простейший эмулятор своими руками

Level of difficultyEasy
Reading time11 min
Views12K

Есть хороший способ начать свой путь в системное программирование: написать эмулятор и ассемблер для какого-нибудь простого процессора. Сегодня популярностью в узких кругах пользуются fantasy consoles: виртуальные игровые приставки в ретродухе. Я расскажу, как создать свой вариант виртуальной приставки BytePusher с процессором, имеющим всего одну команду. Если вы интересуетесь системным программированием, любите изучать необычные архитектуры процессоров или цените произведения из области демосцены, то эта статья для вас.

Читать далее

Babysitter для больших менеджеров

Level of difficultyEasy
Reading time6 min
Views3.1K

Привет! Меня зовут Иван, и я руковожу отделом управления проектов в ИБ Ozon. Прошёл путь от первой линии поддержки в одном из вендоров по защите информации до текущей должности, работая с различными задачами и людьми. В этой статье хочу поделиться своими наблюдениями. Надеюсь, что кому-то они дадут возможность посмотреть на происходящее вокруг с иного ракурса. 

Можно было бы подумать, что в мире управления проектами вся работа состоит исключительно из управления сроками, ресурсами и бэклогом задач команды. И хотя эти задачи, безусловно, являются частью стандартного рабочего процесса, у любого проектного менеджера, который отвечает за крупный проект, есть ещё и негласная роль: «бейбиситить больших менеджеров».  

Под большими менеджерами тут стоит понимать высоких руководителей и/или экспертов, которые являются заинтересованными сторонами в проекте (как со стороны заказчиков, так и исполнителей).  

Кто-то может сказать: «А что тут такого? Просто стандартное управление ожиданиями одной из заинтересованных сторон» и будет прав, но не совсем. Управление «вверх» — это управление не только теми ресурсами, которые тебе выделили для выполнения проекта, удовлетворение пожеланий и ожиданий высшего руководства. Это обеспечение успеха проекта, одновременное жонглирование вниманием топ-менеджеров, и это непростая задача. 

Менеджеры проектов находятся на стыке лидерства и исполнения задач. Их роль требует координации команд при подотчётности заинтересованным сторонам. Последняя обязанность может быть сродни присмотру за активными детьми, которые хотят делать и получать всё и сразу.  

Читать далее

Электроника в вопросах и ответах

Reading time13 min
Views15K

В одной из предыдущих статей я предложил (в рамках коллективной внутриотраслевой терапии Проклятия знания) членам электротехнических хабов обменяться техническими вопросами. Сформулировать вопросы по своему узкому профилю и попробовать поотвечать на вопросы коллег.

Не всё из предложенного в той статье оказалось реализуемо, но, в общем, на мой субъективный взгляд, эксперимент оказался весьма любопытным :)

Ответить на вопросы смежников

Сиракузская проблема, идея для решения (часть 1)

Reading time5 min
Views6K

Сиракузская проблема - одна из самых странных задач математики, которая имеет школьное представлние, но не школьное решение (которого пока нет). Интересно не в лоб смотреть решение задачи, а посмотреть какие идеи требуются для решения. Рассмотрим несколько таких вариантов для "осязания" потенциального решения, которое может появится когда-нибудь...

Разберемся?

Roadmap в DevOps 2025

Level of difficultyEasy
Reading time18 min
Views30K

DevOps — это стремительно развивающаяся область, объединяющая разработчиков и специалистов по эксплуатации для автоматизации, ускорения и улучшения процессов доставки программного обеспечения. DevOps-инженеры играют ключевую роль в современном ИТ-ландшафте, помогая компаниям быстро адаптироваться к меняющимся условиям и требованиям рынка. Их задачи охватывают широкий спектр областей: автоматизация инфраструктуры, управление жизненным циклом приложений, настройка мониторинга и обеспечение надёжности систем.

Основная концепция DevOps заключается в устранении барьеров между командами разработки (Dev) и эксплуатации (Ops), что позволяет внедрять изменения быстрее и с меньшими рисками. Это достигается за счёт использования инструментов и подходов, таких как CI/CD (непрерывная интеграция и доставка), Infrastructure as Code (IaC, инфраструктура как код), контейнеризация и мониторинг. Однако DevOps — это не только технологии, но и культура взаимодействия, прозрачности и ответственности в командах.

Читать далее

Не радуйтесь офферу из СБЕРа

Level of difficultyEasy
Reading time3 min
Views163K

Всем привет! Меня зовут Осипов Арсен.

Несколько лет назад, когда я работал разработчиком, я решил сходить на обучение в школу 21 от Сбера и узнать, почему так много слышал про эту школу. Именно там я влюбился в СБЕР — в его культуру, масштабы и видение будущего. Это была компания, куда я откликался на все вакансии, которые хоть как-то подходили мне. Но в один прекрасный день меня пригласили туда не по одному из откликов, а по рекомендации друга.

Тяжело передать словами, как я был этому рад!

Читать далее

Немного о строках в Си, или несколько вариантов оптимизировать неоптимизируемое

Reading time9 min
Views203K
Хабра, привет!

Не так давно у со мной произошел довольно-таки интересный инцидент, в котором был замешан один из преподавателей одного колледжа информатики.

Разговор о программировании под Linux медленно перешел к тому, что этот человек стал утверждать, что сложность системного программирования на самом деле сильно преувеличена. Что язык Си прост как спичка, собственно как и ядро Linux (с его слов).

У меня был с собой ноутбук с Linux, на котором присутствовал джентльменский набор утилит для разработки на языке Си (gcc, vim, make, valgrind, gdb). Я уже не помню, какую цель мы тогда перед собой поставили, но через пару минут мой оппонент оказался за этим ноутбуком, полностью готовый решать задачу.

И буквально на первых же строках он допустил серьезную ошибку при аллоцировании памяти под… строку.

char *str = (char *)malloc(sizeof(char) * strlen(buffer));

buffer — стековая переменная, в которую заносились данные с клавиатуры.

Я думаю, определенно найдутся люди, которые спросят: «Разве что-то тут может быть не так?».
Поверьте, может.

А что именно — читайте по катом.
Читать дальше →

Как я взломал одну из самых топовых нейросетей (Claude 3.5 Sonnet) для студенческой научной статьи

Level of difficultyMedium
Reading time33 min
Views22K

Я — простой студент, который обучается по направлению «Информационная безопасность». Так вышло, что по программе мне нужно было написать научную статью по теме ИБ. Будучи авантюристом я выбрал тему, которая была мне ближе и интереснее... и так получилось, что в пылу энтузиазма я немного перевыполнил свой план. К сожалению, я был ограничен в объеме по написанию научной статьи, и много интересного материала пришлось вырезать или сократить. Поэтому, тут я хотел бы написать полную версию моей статьи, во всяком случаи, какой я бы хотел ее видеть.

Как итог - у меня получилось полностью снять защиту в современной и защищенной языковой модели, и написать программу которая это автоматизирует. Эта модель признана одной из лучших.

Читать далее

Что спрашивают у проджектов на собесах в Циане, Авито, Яндексе и Сбере: 250 вопросов чтобы подготовиться к интервью

Level of difficultyEasy
Reading time11 min
Views19K

Привет, Хабр!

В августе я собирал здесь 250 вопросов на собесе для продактов. Статью сохранили в закладки 50 раз. Подозреваю, кому-то этот список был полезен при подготовке к интервью, и очень рад, если это на самом деле так. Теперь я попробовал систематизировать российский опыт найма проджектов. Получилось 25 разделов по темам. Сами вопросы спрятал под спойлеры. Сохраняйте себе пост, пригодится при подготовке к интервью.

Посмотреть вопросы

Information

Rating
4,111-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Project Manager, Product Manager
Senior