Архив недели @Nekrolm
Понедельник
Тут разыменовали nullptr, переполнили int32 и обратились к мертвому объекту — аккаунт захвачен неопределенным поведением!
С вами на этой неделе Дмитрий @Nekrolm Свиридкин. Погромирую на крестах. Нахожу UB везде, к чему притрагиваюсь. И иногда преподаю страшный C++ и около него.
План!
пн — "Что за черт-то?!" Вводная о себе и вообще
вт — Любимый и ненавидимый C++, UB и Rust
ср — Свободный день
чт — Курсы что вел, как, почему и что узнал
пт — Гос/частные компании: где веселее и лучше
сб — Невыгорание и отдых
вс — Свободный день
Прежде всего.
На случай, если кто-то будет расстроен, обижен, возможно и/или разочарован моим мнением или взглядами:
По методу кэрролловской Белой Королевы предлагаю тут выплакать все заранее
Поэтому
Вакцинирован.
Земля — геоид. Эллипсоид Красовского норм.
3.Во многом фаталист.
Склоняюсь к теории симуляции. Большому взрыву это не мешает. Да и без разницы.
C++ нельзя выучить.
Держать два аккаунта с одинаковыми аватарками — неудобно :)
Mac не удобен
Windows не удобен
*nix норм. Ubuntu уже почти не падает
Пишу преимущественно ближе к вечеру, потому что надо еще и работать
Недостаточно эпатажен, чтобы превратить твиттер в тикток
Думаю, с острыми моментами пока все
Кто таков, чем занимался и занимаюсь и по каким вопросам могу прояснить чуть больше, чем по всем остальным (мы же с вами эксперты по всем вопросам)
Тред:
В айти не шел, оно само меня нашло. Поступал на прикладную математику и информатику в @mmcs_sfedu. Родители настаивали на механике и вообще ростовском государственном строительном университете. Ибо "дороги и мосты надо строить всегда".
Но я шел чисто по фану и потому что могу.
Кем и чем буду заниматься совершенно не представлял до 3-4 курса. Просто диффуры делали бррр, а на C++ можно побеждать на олимпиадках. То что айтишникам вообще прилично платят узнал только в магистратуре.
Окончил бакалавриат. Откатался в нем по олимпиадкам. Разочаровался в олимпиадках. Устал от уравнений матфизики и численных методов — потому в магистратуру поступил на фундаментальную информатику и информационные технологии (Computer Science вроде)
Окончил магистратуру. Еще в бакалавриате написал большую дипломную, что ее хватило и на магистерскую, так что мог пинать бал... то есть спокойно работать на полставки. Увы, тогда магистратура в ЮФУ была не очень по нагрузке. Сейчас вроде огонь с геймдевом, но тогда не сейчас
В магистратуру также поступил просто потому что могу: без экзаменов, по олимпиадке. Экзамены те я б, скорее всего, тогда не сдал. Ибо направление ПМИ и ФИИТ вообще-то очень сильно отличались, а не просто "ну, там программирования больше". Выучить бы все не успел.
По окончании магистратуры, спасаясь от южной жары и духоты, скрылся в Питере, где и пребываю. Но жара меня нашла.
Продолжение и подробности чуть позже.
На 4 курсе я успел 9 месяцев потихоньку поработать с машинным обучением (первое место работы) и распознаванием речи. Было интересно (не долго), но я быстро разочаровался в месте работы и в машинном обучении, найдя его скучным.
Тогда я был маленьким и глупым и мне нравился Python. Но за эти девять месяцев меня стало от него тошнить. Еще был go, но его я невзлюбил с первого взгляда.
Потому дальше искал работу плюсистом.
В магистратуре, по-хорошему, надо учиться, а не работать, но кушать тоже хочется, а из семьи я далеко не богатой. Так что в магистратуре работал на полставки в НИИ Чародейства... то есть радиосвязи.
Так что имею опыт настоящего облучения и не только мышей.
После, в Питере, работал снова с распознаванием речи. Но уже, слава богам, не обучал модели. Писал и оптимизировал алгоритмы поиска (инференс). Только C++, только хардкор. В обнимку с профилировщиком — так грустил, когда мне его сломали из-за политик безопасности.
В общей сложности у меня почти 9 лет опыта общения с C++ из них 5 лет разработки, за которую мне платили. Сейчас занимаюсь черт-знает-чем в должности, если верить трудовому договору, ведущего разработчика. Пока веду крестовые походы против неправильно слинкованных компонентов
Также с магистратуры веду всякие факультативы. На ютубе есть пара скромных записей
youtube.com/channel/UCJs8y…
Еще есть где-то ссылка на пару записей факультативы по алгоритмам и структурам данных, но я ее потерял
В прошлом году вел практику по C++ в питерской ВШЭ.
В этом году вел полноценный (лекции и практики) самодельный курс по системному программированию под Linux на МКН СПбГУ.
Популяризирую осведомленность об неопределенном поведении среди разработчиков.
В целом, это вся краткая обзорная информация. Об отдельных моментах поговорим по расписанию.
Тред (Дмитрий Свиридкин)
@itunderhood Я кстати смотрел, как ты рассказывал про распознавание речи но на другом канале. Хорошо получилось. youtu.be/f0WEJEHGOvQ
Сейчас вскроют все мои шкафы со скелетами twitter.com/ivn_finaev/sta…
Вечер близится. В качестве заготовки на завтра предлагаю опросец. Предупреждаю, варианты в нем все совершенно серьезные.
C++ — язык не очень популярный. И мой вопрос такой: пишите ли вы на нем: регулярно, немножко или нет совсем. Встречался лишь в книгах и универе — не катит.
🤔
9.2%
Пишу регулярно🤔
4.0%
Думаю, что пишу🤔
14.4%
Иногда приходится🤔
72.5%
Нет, никогда.Пункт 2 нужен, например, для тех, кто использует C с классами:)
Также есть майкрософтовский C++/CLI, его, пожалуйста, туда же.
Вторник
Вечер близится. В качестве заготовки на завтра предлагаю опросец. Предупреждаю, варианты в нем все совершенно серьезные. C++ — язык не очень популярный. И мой вопрос такой: пишите ли вы на нем: регулярно, немножко или нет совсем. Встречался лишь в книгах и универе — не катит.
Новый день настал. Ожидаемо, плюсовики тут мало представлены. Но есть время. Возможно, они еще не проснулись. twitter.com/itunderhood/st…
Сегодня про C++, Rust и вообще почему я продолжаю кушать кактус
Тред первый.
Как все четкие пацаны, я начинал с паскаля. Но не с турбо или фри, а с @PascalABCNET. Тогда еще без .NET (потом я узнал, что эта инкарнация паскаля уже пару лет как была мертва).
Но потом ушлый десятиклассник смекнул, что на паскале писать олимпиадки не удобно (ибо sort нет)
Тогда я решил "выучить" что-то серьезное. На выбор были Java или C++.
В Java с порога было множество непонятных ключевых слов, и вообще stdin парсить не удобно... А C++ — зашибись. Изи. Выбор очевиден!
Параллельно какой-то диванный стартапер предложил освоить php и html и пилить с ним сайтики и зашибать миллионы: он бы осваивал css, а я бы пыхал.
Мне не понравилось. Но много разных html тегов я выписал в тетрадку...
На первый курс уже поступал со "знанием" плюсов. Они мне так нравились, так классно.
Так бы с одними плюсами и остался, если бы умный человек не шепнул: на олимпиадках важно быстро решить задачу, чтоб не тратить время на простые штуки, полезно иметь в арсенале Python или Ruby.
В универе было много курсов "связанных" с C++. Правда, сути они не раскрывали и подвоха я не видел.
Так что к четвертому курсу был уверен, что буду работать на плюсах и вообще умею и практикую. Смартпоинтеры знаю, мьютекс лочить умею, чего еще надо?
Любимый язык!
А потом я пошел работать... И че-то все падает, все через жо, память течет, треды крашаться. Падение на выходе — вообще любимая тема.
Кажется, это немного не тот C++, которому меня учили...
Сломанные абстракции. Неявно умирающие объекты. Безумие инициализации...
Нас учили слишком радужному C++. Которого достаточно, чтобы сделать что-то игрушечное, ну или в олимпиадки поиграть.
Но обратного пути нет. Надо было работать работу, ничего другого я все равно не знал
Ну ладно, давайте откроем неиссякаемый источник безумия: (Я в процессе такие восхитительные вещи понаходил) Один лайк — один пример UB на C++!
Стал изучать, как со всем этим бороться:
isocpp.github.io/CppCoreGuideli…
Начал ковырять различные виды UB и как их опознавать.
Тут даже старенький тред в твитторе есть:
twitter.com/Nekrolm/status…
Чем больше ковырял, тем больше ужасался и восхищался. Победить это невозможно, только возглавить.
Из удобного языка для меня C++ превратился в неповоротливое чудовище, при использовании которого нужно просто угорать, чтобы не сойти с ума.
Я люблю C++, потому что искать и расковыривать весь этот треш — забавно. По крайней мере для меня
Буквально час назад обнаружил лютый static finalization order fiasco, пофиксил и еще минут 15 писал развернутый комментарий, почему этот код нельзя трогать.
Я люблю C++, за то что среди огромной кучи известной массы и в нем есть что-то хорошее: метапрограммирование шаблонов и constexpr. Там просто UB нет. Почти нет...
Но я ненавижу C++, потому что я вынужден думать об огромной куче деталей, решая простейшую задачу.
А также писать лютое количество велосипедов (обязательно с ошибками), вновь и вновь решая задачу, которая решена везде. Кроме C++.
Я ненавижу его, потому что не могу просто взять чужое готовое решение. У нам совершенно отвратительная модульность и изоляция. Если я втащу что-то — обязательно произойдет какая-нибудь трешнина при линковке.
Ненавижу, потому что у нас никогда не будет фич, которые нам обещают. В нормальном виде.
Неделю назад я видел, как прекрасный стектрейс будущего C++23 внезапно из opencv ведет в сетевую библиотеку Poco, от которой он не зависит... Безумие. А почему? А потому что линковка...
Возникает вопрос
Во-первых, мне за это платят.
Во-вторых, расследование UB — это всегда детектив с погонями и приключениями. Моя работа не рутинная.
В-третьих, множество историй, которые можно рассказать. А рассказывать всякую дичь я люблю.
В-четвертых, я не упорствую 🤡🤡🤡
Поскольку победить C++ невозможно, я решил придерживаться стратегии спикеров с плюсовых конференций: рассказывай всем, как тут круто и здорово, а сам пиши на чем-то другом
Пока получается не очень — писать приходится, но не новый код. Последний год я на плюсах в основном правил старый код.
Тред (Дмитрий Свиридкин)
Сегодня про C++, Rust и вообще почему я продолжаю кушать кактус Тред первый.
Тред второй.
Первый был про кресты. Теперь про ржавчину. twitter.com/itunderhood/st…
Если вы думали, что @Nekrolm шутил на счет Rust - нет, он действительно переписал (пока не всё) и сделал MR pic.twitter.com/d7h6UEctgn
Сегодня я мог бы стать настоящим Rust девелопером, но пулреквест пока еще не влили
twitter.com/0xfe0d/status/…
С ржавым плотно знаком пару лет. Слышал о нем и раньше, но относился скептически. Аля плюсовый auto_ptr безопасный положили в основу и радуются.
(auto_ptr перемещался при копировании, если что, и тем всем доставлял боли)
Сейчас отношусь к нему как нормальной такой альтернативе для C. Но не для C++. Плюсы им полностью заменить пока не получается, да и не надо.
Сношение с ручным контролем лайфтаймов заменены на сношения с компилятором (на самом деле, ничего там сложного нет). Это замечательно. Подолбавшись пару недель, стал лучше писать на плюсах — с меньшим количеством мин — рекомендую.
Такой хорошей жизни захотелось не только в стильном модном молодежном языке, но и в проклятых крестах, так что я начал исследовать возможности шаблонных безумий
gist.github.com/Nekrolm/27ef2c…
По всевозможному перекладыванию забот программиста на плечи компилятора начал упарываться в магистратуре. Глянув однажды запись лекции @_bravit про Idris
youtu.be/o-7zhrUP3ds
Да, я не знал, что так можно. Ибо ПМИ, а не ФИИТ.
@itunderhood Я уже отписался, что можно вливать!
Ну все, я Rust-девелопер twitter.com/0xfe0d/status/…
После глубоких изысканий с плюсовыми шаблонами, от Rust хотелось того же. Но, увы, то const generic еще unstable, то higher kinded types еще только в планах.
А в плюсах есть первое и жалкая, но вполне достаточная имитация второго (template template)
Тем не менее, год назад я все-таки зарядил свой первый продакшон-компонент на Rust. Он совершенно дурной и простой, потому все согласились на авантюру.
Тогда же выяснил, что поднять приватное корпоративное хранилище пакетов — вообще не тривиально. Готовых решений не было. Девопсов напрягать ради непоймичего — дорого.
Сегодня решения есть. Rust усилился
jfrog.com/confluence/dis…
github.com/sonatype-nexus…
Вот интересно, умеют ли компиляторы оптимизировать вот такую фигню? struct Wrapper { float val; explicit Wrapper(float v) : val(v) {} }; struct VecWrapper { std::vector<Wrapper> vec; explicit VecWrapper(std::vector<float> v) { // transform v into vec } } ?
Я читал всякие "разгромные" разборы на тему, что rustc генерит код хуже, чем плюсовые компиляторы.
Но вот эту фичу разборщики осторожно обходят стороной
twitter.com/Nekrolm/status…
Тред (Дмитрий Свиридкин)
Ну и тред третий. Короткий. Про UB.
Очень часто приходят в реплаи и советуют перейти на что-нибудь из JVM. Типа там UB нет.
Вообще, оно везде есть. И C++ != UB.
Самый простой пример — любой ffi вызов может быть с UB, если вы нарушили какие-то предусловия
А в C++ его просто много. Его интересно исследовать. Можно даже книжку написать.
Это, конечно, не книжка, но тоже ничего github.com/Nekrolm/ubbook
Мое самое любимое UB — бесконечный цикл без обозреваемых эффектов. Любимое, потому что крайне редко жахает, но все же может.
Мои самые нелюбимое UB — static Initialization/finalization order fiasco и ODR violation.
Потому что черт знает когда бахнет, но обязательно бахнет. И будет больно. И фиг найдешь.
Тред (Дмитрий Свиридкин)
Среда
Если у Яндекса на собесах будут такие задачи с обсуждением требований, я готов прийти за еще одной колонкой. А в формате задания на дом без возможности выяснить чего хотят — говно. twitter.com/st_1ena/status…
В порядке свободных мыслей в свободный день. Ну и по мотивам нашумевшего тестового
twitter.com/Nekrolm/status…
Минитред
Я не часто хожу по собеседованиям. Всего пару раз (по три-четыре компании) . Так что выборка крайне мала.
Плюсовиков все спрашивают про умные указатели и STL. Любимый вопрос — потокобезопасность shared_ptr.
Вопросов, важных для C++ разработчика на самом деле, почти не задавали. Складывается иногда впечатление, что C++ у них просто потому что, и ищут того, кто что-то напишешь.
В яндексовом скрининге такой вопрос только один был: "знаете ли вы, что такое UB?"
На их "секциях" также никаких полезных знаний, кроме алгоритмических, проявлять не требовалось
C++ большой и разный. Есть милый и пушистый C++ со стандартной библиотекой, фреймворками и by-value семантикой во всем (by-value убивает 90% UB, ценой производительности)
Но если у вас в этом мире нет хорошего фреймворка — то проще выбрать другой язык. Ничего в производительности приложения при таком подходе вы не потеряете. А в разработке будет легче.
И вот на собеседованиях почему-то спрашивают именно про этот мир. Но ведь есть еще и жуткий ад настоящего C++. С выгрызанием производительности через unsafe и платформозависимые вещи. Через глубокое понимание работы компилятора и OS
И как-то в моем преставлении те, кто пишет на C++, должны в основном общаться с этим адом. Потому что зачем еще им C/C++?
Но дай бог иногда про кэш спросят на собеседовании и хорошо.
А задачи из треда с тестовым хорошие. Только их не дома решать надо, а обсуждать с интервьюером. По ним можно много чего узнать.
Я, кстати, тестовые на дом никогда не получал и не выполнял. Наверное, личный бренд решает. Такие дела.
Тред (Дмитрий Свиридкин)
Сегодня я видел множество кривеньких велосипедных конструкций, для которых человечество уже давно придумало полноценные, хорошо оттестированные и зарекомендовавшие себя решения.
(В)опрос:
Как часто вы изобретаете велосипеды и тащите их в прод?
🤔
8.9%
На каждую задачу🤔
31.8%
Только если так проще🤔
53.8%
Иногда -не знаю о готовом🤔
5.5%
НикогдаВ плюсовом мире, по моим ощущениям, наблюдается какая-то велосипедная болезнь.
"В каждом достаточно зрелом проекте найдется класс строки"
Видел по четыре имплементации функции разбиения строки по пробелам в одном и том же проекте.
Иногда по две имплементации в одном и том же файле
Объясняю себе я это по-разному.
Во-первых, тяжелое наследие C, в котором ничего нет из коробки, а когда что-то все таки есть, то оно крайне небезопасно (strtok, привет). И странное наполнение стандартной библиотеки.
Во-первых, готовые решения часто тяжело притащить. Сколько-нибудь адекватными плюсовые пакетные менеджеры стали не очень давно.
проблема с изоляцией и модульностью (нет их, даже с C++20)
В-третьих, решение может быть громоздким, тянуть тяжелые зависимости, которые неприемлемы в ваших условиях и ограничениях
Ну и наконец:
"Эти инженеры гугла/яндекса/фейсбука ничего не умеют — я лучше сделаю"
Путь великой гордыни плюсовиков
Конечно же, тут я не рассматриваю решения, требующие закупок лицензий, сертификации и подобного. Это уже не велосипед.
Тред (Дмитрий Свиридкин)
Четверг
В требованиях и обязанностях в должности старшего/ведущего разработчика на прошлом месте работы я видел "менторство, обучение и курирование".
Правда, это все нужно было причинять к джунам.
Джунов не было, оставалось причинять к кому-то другому...
Ведëте ли вы курсы, преподаете, проводите ли мастер-классы?
Если да, то что именно?
Если не основная деятельность, то связана ли она с тематикой основной?
🤔
0.9%
Да, основная деятельность🤔
10.8%
Не основная, но регулярно🤔
31.5%
Иногда бывает🤔
56.8%
Ничего такого не делаю@itunderhood На четвертьставки пилю курс по Java на Я.Практикуме. И полуобразовательный канал в телеге, но не для джунов. Не могу не учить людей вокруг, это ж отдых, а не работа!
Таки да. Лишь бы бумажной отчетностью не задушили.
Как вариант смены вида деятельности для того чтобы отвлечься — неплохо. twitter.com/PavelTcar/stat…
Тред про всякие курсы и образовательную активность. Поехали.
Прежде всего, я занимаюсь этим потому что оно мне нравится. Ну и чтоб не скучно было.
Начинал с кружков по олипиадному погромированию. Оно мне долгое время крайне нравилось: соревновательный дух, нетривиальные задачи, C++... ух!
Из Ростова-на-Дону и области как-то совсем мало было представлено команд на студенческих соревнованиях. Хотя школьники толковые были.
Если команд нет, их, наверное, можно собрать. Главное заинтересовать, а потом научить.
В @mmcs_sfedu тогда был кружок олипиадного программирования "на полтора человека".
Сначала сам ходил, потом задачи для него стал готовить, затем разбирать... и понеслась...
Концептуально это были занятия и для студентов и для школьников.
Но студентов не очень привлекала вся эта шляпа. У них лабы, матан и зачеты, а вы тут не для всех полезную на практике, но при этом сложную деятельность предлагаете.
Со школьниками наоборот. Плюс у них была мотивация в виде всяких бонусов к поступлению.
Так или иначе, но так я пошел по этой скользкой дорожке: "объясняй другим, чтобы самому разобраться"
Разбираешься с алгоритмом. Придумываешь на него задачу. Выдаешь ее. Потом рассказываешь решение. Слушатели не понимают. Объясняешь по-другому. Сам перестаешь понимать. На третий раз наконец все всë поняли. Наверное.
На первом курсе магистратуры проводил факультатив по алгоритмам и структурам данных. Без привязки к олимпиадкам. На ПМИ подобного курса не было совсем. Так что должно было быть кому-то полезно...
Неудачный выбор времени (субботы, вроде), конкурирующие активности, я как любитель использовать только мел и доску...
В общем, ко мне ходило человек 5. В основном те, кто и так ходил на олимпиадное погромирование :)
Я еще и лекции не репетировал и детального плана не составлял на каждую пару. Да я и сейчас особо не репетирую. Просто заметки к слайдам детальные пишу и один раз промеряю по времени.
На втором курсе проводил небольшой факультатив по цифровой обработке сигналов. Такой курс в универе был, но сильно теоретический. Ну и я в это время работал и как раз демодулировал всякие PAL/SECAM/NTSC. И было чего рассказать и показать
en.m.wikipedia.org/wiki/PAL
Тогда начал все-таки делать слайды, а не мазаться в мелу.
Дизайнерской жилки у меня нет, пилил простенькие слайды с помощью
slides.com
Удобно, но экспортировать никуда без подписки не дает, а я бедный студент, меня жаба душит платить. Благо, интернет работал.
Но опять неправильный выбор времени и конкурирующие активности (там факультатив по гемдеву зарядили) — курс слушали три человека.
Тред (Дмитрий Свиридкин)
Тред про всякие курсы и образовательную активность. Поехали.
Второй тред. Про большие курсы. Их не много. twitter.com/itunderhood/st…
В прошлом году позвали вести практику по C++ в питерской ВШЭ у первого курса. Задачи готовые, проверяй, объясняй, все дела. Ну ок. Я не против. Я знаю, что C++ не знаю, а это отличная возможность, его узнать чуть получше.
У меня в бакалавриате в первый год, если что, C++ не было. И думаю, это правильно. Учить программированию с него — можно, но идея так себе.
Но тут вроде как все олимпиадники, монстры, титаны, аж страшно, и "умеют" программировать. Так что ладно. (На самом деле нет)
Проверять работы тяжело. Особенно если ты их прямо проверяешь, а не просто тесты запустил и ладно.
Тяжело по разным причинам.
Во-первых, я стараюсь проверять все в срок, чтоб студенты как можно быстрее получили фидбек и могли исправить ошибки.
Но непобедимый факт: бОльшая часть студентов отложит все до последнего момента. И не обязательно потому что лентяи.
Может быть высокая нагрузка и дедлайны каждый день.
Читать одно и то же пару раз — норм. Читать 15 раз — кошмар. Нет, не в смысле списывают. А в том смысле, что лабораторные задачи часто простые и имеют только одно решение.
А на C++ никто его, конечно, правильно написать не может
Очень много ошибок при написании плюсовых программ.
Условно: есть 20 типовых ошибок.
Каждый делает 10-15 из них. И каждому надо про его особое множество выстрелов в ногу рассказать и расписать.
Еще бывает отсмотришь одну работу. Вроде, все ошибки нашел — отписал, оценил.
Смотришь следующую — а там какой-то особо изящный отстрел головы. Смотришь снова предыдущую — а там он тоже есть, только менее заметный...
Еще, наслушавшись и начитавшись со всех углов об отменяторах и борцах с токсичностью, невольно задумываешься о том, не будет ли воспринят твой нейтральный фидбек как грубый.
Типовой комментарий
"Ссылка на строку кода: тут UB, потому что..."
Про удаленку кратко:
Повезло большую часть года тогда провести в оффлайне.
Мне, привыкшему к живому взаимодействию и разбору у доски с маркером или мелом в руках, крайне не нравится удаленный формат.
Когда ко мне на факультативы приходило два человека — было грустно. Когда у тебя 8-15 молчащих не реагирующих черных квадрата — вообще депресняк.
Заставлять включать камеры — как-то не очень. Не экзамен ведь. Да и если включить, нагрузка на сеть подскакивает и трансляции начинают лагать.
@_bravit Совместный лайвкодинг — получается хаос Выдать задачи и ждать — на удаленке получается мертвое царство Выдать задачи и потихоньку их по ходу разбирать — получается еще одна лекция... Разбор примеров и крайних случаев — опять лекция... Я так и не понял.
Как вообще по-нормальному вести практические занятия по программированию в удаленном формате — загадка.
Их и в неудаленном формате не всегда понятно как вести
twitter.com/Nekrolm/status…
Однажды от @_bravit поступило заманчивое предложение выучить еще и программирование под Linux. Звучало оно, конечно, не так, но именно так я его понял.
Я взял перерыв на полгода, чтобы переждать удаленку (ха-ха) и подготовиться
Накидал план из тем, которые знал, в перемежку с теми, о которых только слышал. И начал собирать мануалы.
Материалов лекционных набралось достаточно. Что-то уже в бою заходило не очень, что наоборот. Студенты еще набор тем подкинули (на следующий раз).
То есть в первый раз я не знал, с какой подготовкой будут студенты, и накидал немного тривиальщины. На следующий раз ее успешно можно будет заменить, на более полезное.
Но если с лекциями все более-менее понятно, то с практикой начинаются реальные проблемы.
Готовых заданий у меня не было. Все надо было придумывать.
Задачи должны быть нескучными, полезными, реализуемыми и проверяемыми. И это не так легко как кажется
Я пошел по пути больших комплексных задач, закрывающих по нескольку аспектов.
Потому что иначе будет уныло. Просто почитайте файл? Не, давайте лучше почитайте ELF-формат и вычитайте из него все чтобы построить граф зависимостей.
Но большие задачи тяжело проверять. И если каждый из 10-15 человек сдаст решение на 3-4 тысячи строк плюсового кода, я в этом утону
Да и студенты тоже утонут. Потому пошел по пути групповых решений.
Получилось не плохо и не хорошо.
Я не делал промежуточных дедлайнов, к которым надо подготовить определенные фичи. А надо было бы. Чтобы избежать оттягивания всего до конца и ночных хакатонов.
Со стороны это могло выглядеть как "Представьте, что я ваш продакт менеджер, и сделайте хорошо". Ну как обычно бывает :)
Я накосячил с порядком тем, чем также осложнил возможность инкрементального выполнения заданий. Ну что поделать: первый блин
Были и удачные решения: я никак не ограничивал в выборе языка для решений. Ограничение только в здравом смысле и возможности решить задачу на этом языке.
На C/C++ свет клином не сошелся.
Были решения на go, Rust, на питоне тесты всякие. Хорошо.
Ожидал решений на хаскеле, но в таких делах студенты чаще больше грозятся, чем делают
В любом случае я узнал много нового, попробовал себя в роли менеджера (пока не очень) и отлично провел время. Рекомендую.
Тред (Дмитрий Свиридкин)
Не расстраивайтесь, если сильно скучно. Завтра я как наброшу, так наброшу!
Просто последний мой стендап был на защите бакалаврской, когда я начал:
"Представьте, что у нас есть газопровод и наша задача украсть как можно больше..."
Пятница
Не расстраивайтесь, если сильно скучно. Завтра я как наброшу, так наброшу!
Дальше по плану:
Я работал и в гос НИИ и у частников, и у частников, работающих на нужды гос сектора, и мне все везде понравилось.
Имею некоторые мысли по этому поводу.
Тред. twitter.com/itunderhood/st…
Прежде вмего, на всякий случай: я работаю не только ради денег, но и ради того чтобы мне не было скучно.
За неинтересные долгие проекты я не возьмусь. Финтехи, блокчейны и высокооплачиваемые датасатанинские ритуалы мне нравятся.
Дальше нужна небольшая предыстория для раскрытия персонажа.
У меня странно-патриотичные родители, убежденные, что лучше всего быть частью ВПК или напрямую армии (пенсии, квартиры от государства, все дела)
Ну и меня как-то в такой атмосфере и воспитали.
Так что я был тем персонажем, что добровольно бы пошел в армии (но здоровья нет). Меня в школе после олимпиады по криптографии сначала позвали в академию ФСБ, но быстро открестились, увидев историю болезни.
Потому, когда одновременно получил предложение постажироваться в яндексе и допуск в НИИ — я как-то не раздумывал.
В принципе, не жалею.
Мне повезло поработать в подразделении без сидения и рутинного попиливания грантов. Потыкать много разных железяк, поездить по командировкам, попрограммировать в неожиданных местах. В этом смысле все было здорово.
Но, конечно, платят не 300кк/сек.
А еще работать надо.
Часто в авральном режиме.
Так что хорошего понемногу.
За два года в Питере, в ЦРТ, мне ни разу не приходилось таскать серваки, программировать в тумбочке или развертывать комплекс в лесу. В общем скука. Зато без авралов (ну почти).
Вот бы совместить оба варианта, но так, похоже, не бывает.
Вместо занимательных катаний телег с комплектующими и отладкой на коленях (вот так примерно) развлекали скрамом. Развлечение так себе, имхо.
Ну и, конечно же, вот таких прекрасных записей в трудовой книжке, работая на большой и богатой галере, получить сложно
В гос. конторы "тру вайтишники" устраиваться не хотят. И их понять можно. Старые технологии, платят относительно немного. Пугалки запретом выезда за границу.
Но мне повезло — получил отличный опыт и знаения в плюсах, сетях и системном погромировании. И в обработке сигналов.
Технологии старые, кстати, далеко не везде. Но бывают. Помню, как соседствовали C++17 с последними на тот момент Qt и какое-то древнее зло на C++Builder
Также получил важный не только в работе, но и в жизни навык "прохода по звонку". Это когда берешь и звонишь по телефону нужному человеку, чтобы тебя пропустили. Прямо руками берешь и прямо голосом решаешь вопросики. Очень действенно. Рекомендую.
Еще о паре полезных мудростей поговорим завтра.
А в общем: работайте там, где хотите. Работайте там, где хорошо (вам). А где плохо — не работайте.
Ах да:
Мальчик: NDA
Мужчина: Гриф секретности
Тред (Дмитрий Свиридкин)
@itunderhood Меня звали в одну контору писать расширения postgresql на расте, денег нормально, но в заказчиках росгвардию на сайте увидел – отказался сразу.
Забавный факт. С первого места работы (ООО, модельки для распознавания речи пилил) я уволился, узнав, что заказчиком выступает минобороны.
Чтобы устроиться во ФГУП, заказчиком которого является... twitter.com/GolerGkA/statu…
@itunderhood Были времена в #ЦРТ. Во время легендарного проекта в Мексике парни прогали в бункере федеральной полиции. А гостиницу, из которой они уехали через пару недель расстреляли из пулемета. Местный колорит :)
Если ваши процессы разработки выглядят не так, не зовите меня twitter.com/Marauder__/sta…
Суббота
Еще о паре полезных мудростей поговорим завтра. А в общем: работайте там, где хотите. Работайте там, где хорошо (вам). А где плохо — не работайте.
Сегодня как раз по плану эта самая мудрость.
На выходных надо отдыхать. И работать не больше 8 часов в день. А еще в отпуск ходить стоит.
Небольшой тред twitter.com/itunderhood/st…
Я еще ни разу не успел выгореть. Чуть не подохнуть — да, а выгореть пока не получалось. Собственно я и не планирую.
Когда два года назад в один день из двух месяцев 35-40 градусную жару еле живой вывалился на ходу из душного автобуса, в котором около месяца нон-стоп добирался на работу в том числе на выходных (ибо дедлайн близко), тогда твердо решил что-то менять. Желательно все.
Уволился. Переехал в Питер. Больше никогда не работаю по выходным и праздникам. Без надобности стараюсь не программировать. Особенно на C++.
Отпуск весь тратить пока не получается (хз,что делать в долгом отпуске), но 18-20 дней из 28 положенных отгуливаю
У меня нет никаких программистских пет-проектов, которыми надо заниматься по выходным или, не дай бог, по ночам.
У меня вообще нет пет-проектов. Только заметки про UB таковыми можно назвать.
Я не провожу все свободное время за чтением про какие-то технологии, чтобы от чего-нибудь там не отстать.
Я лучше лекции про основания математики послушаю вместо этого.
Внимательные подписчики иногда могут поймать меня за постингом скринов с кодом на выходных. Но это я все ради мемов про неопределенное поведение.
Тред (Дмитрий Свиридкин)
@itunderhood А будет тред как работать 8 часов в рабочие дни, отдыхать в выходные и при этом более менее стабильно развиваться и становиться лучше?
Еще более мини тред: twitter.com/gorancheg/stat…
Что значит стабильно развиваться и становиться лучше?
Если пытаешься развить мелкую моторику, в 25 лет впервые начав учится играть на гитаре — это считается?
Слушать конференции, чтобы следить за развитием технологий, с которыми работаешь? Это каждый день что ли делать надо?
Я раз в месяц а то и два что-нибудь такое погуглю и норм.
Изучать новые технолгии? Это может выполнятся и в рамках рабочих обязанностей. Есть такой замечательный подход: сначала изучить, как задачу решают в мире, какие варианты существуют, а только потом уже рваться все программировать.
Смена вида деятельности — отличный отдых. Хотите верьте, хотите нет. Для меня работает. И когда я пилю материалы для какой-либо лекции я совмещаю приятное с полезным: отдыхаю и изучая новые.
Проверяя работы — улучшаю навыки ревью. Отмечаю новые для себя точки, в которых люди часто делают ошибки при программировании. И применяю все это в работе, чтобы писать проще, понятнее и безопаснее.
Я не работаю в безумно скачущух по фреймворкам областях разработки. И не хочу там работать. Во всем должна быть мера. Ради чего оно? Синдромом самозванца, требующем немедленно пойти и разобраться во всём новом, ведь другие же определенно знают, давно не страдаю.
Тред (Дмитрий Свиридкин)
@gorancheg @itunderhood Можно работать меньше 8 и в рабочее время изучать новое
Все так. twitter.com/art_ptushkin/s…
Воскресенье
Вcе cвое cвободное врeмя конeчно нeт. Нo пoчему бы пeред cном нe почитaть пaру cтраниц cкучной cложной книжки, кoторая имeет нeпосредственное oтношение к таскaм. Кaк тaски cменятся, тaк книжкy в дaльний ящик. twitter.com/itunderhood/st…
Непосредственное отношение к таскам — нафиг.
Отвлекаться от рабочих задач во время отдыха крайне важно.
А так-то, конечно, читайте перед сном то, что вам нравится. Особенно если вы после этого лучше спите. twitter.com/0x3f00/status/…
Я прогулялся, сходил в муз. школу, получил одобрение от преподавателя, что у меня получается уже менее плохо, чем месяц назад, часок посплю, утомленный переменой погоды, посмотрю часовую лекцию про теорему Гудстейна и буду писать заметку про UB.
А как проходят ваши выходные?
Все те, у кого сейчас дежурства — держитесь. Ваше дело благое.
Неделя подошла к концу. Надеюсь, все кто хотел разочароваться разочаровались. Остальные остались.
В основном аккаунте @Nekrolm я шитпостю чаще, лучше и иногда по делу. Можно фолловить. Или нет. Все равно никуда не денетесь и волнами твиттера что-нибудь да донесет.
Всех благ!