Т-Банк #interview#dev | часть 3 из 3 | (первая, вторая)
На самом деле, они объявились не внезапно. Когда я сказал, что, так и быть, несите вашу джаву, кушать то хочется, мне предложили ещё один фит. Сказали, что команда на Kotlin с использованием собственного т-банковского фреймворка Kora. Kotlin мне интереснее, чем голая Java, потому что Kotlin это как раз попытка превратить джаву в C# (об этом говорили сами авторы Котлина на презентации в JetBrains). Должность тимлида.
Фит 2
Классический фит, много спрашивали про мои цели и пожелания, как хочу развиваться. Я несколько раз подчеркнул, что хочу уходить не в менеджмент, а в тесную связку с техническими задачами: техлидом, архитектором и так далее. Интервьюер довольно долго пытался объяснить, чем именно занимается команда. Было что-то вроде «уменьшение числа повторных обращений в поддержку, но только в рамках функциональности, которая касается первичного контакта пользователя с банком/приложением». И оказалось, что вообще-то команда мобильных разработчиков, отсюда и Котлин. Наверное, было наивно полагать, что Котлин используют в продакшене на вебе в большой компании (ни разу не встречал). И всё-таки, моя сфера это веб-разработка. Даже фронт более менее могу. Но нативные мобилки это то, с чем я вообще не контактировал никогда. Даже микроконтроллеры или, скажем, игры и то в большей степени попадают в мой опыт, чем мобильные приложения.
Тут стало окончательно понятно, что в Т-Банке тимлиды это всё-таки больше менеджеры, именно поэтому технический стек не важен. Зачем собесили на язык, да ещё так подробно, да ещё и занизив оценку за идеальную секцию?
Результат
Эйчар написал, что команда не слишком поняла мою мотивацию, готов ли я вообще уходить в менеджмент. И предложили ещё одно интервью для корректировки. Тут я уже не выдержал. Это было бы восьмое интервью в Т-Банк. Я сказал, что нет, с меня довольно. Компания потратила пару десятков человеко-часов дорогих специалистов, чтобы меня прособесить, и не может ничего подходящего предложить. Если будет вакансия на .NET, и именно разработчиком, не тимлидом (в том значении, которое у них), то я схожу ещё на последний фит, иначе до свидания.
Здесь как раз я узнал, что получаю оффер в 2ГИС, так что отпустил Т-Банк. Но он вернулся за пару дней до, собственно, презентации оффера. Предложили фит разработчиком .NET (не тимлидом, в данном случае это плюс), вакансия с пылу с жару, запускается новый проект.
Фит 3
Из всех фитов, наверное, самый прикольный. Наконец-то мне задавали вопросы в духе: «Топ-3 книги по специальности», «Топ-3 книги не по специальности». Я вообще не очень сильно отделяю работу от своей личности, и уверен, что вкусы и увлечения человека в том числе влияют на его профессиональные навыки и поведение, поэтому с удовольствием пообщался на подобные темы.
Кстати, мои топ-3 книги по специальности:
1. Эрик Эванс, «Предметно-ориентированное проектирование». Это библия DDD, и с неё по факту началось моё изучение солюшен-архитектуры.
2. Генрих Альтшуллер, книги по ТРИЗ. Разработчик это инженер, а инженеру полезно знать ТРИЗ и применять иногда мышление оттуда.
3. Кит Бургун, «Теория геймдизайна». Фундаментальный взгляд на поведение интерактивных систем, полезно, даже, если вы не делаете игры. Писал о ней вам раньше.
Однако, домен, в котором работает команда, оказался с моей точки зрения этически-неоднозначным. А именно система по продаже имущества, которое должники не смогли выкупить из залога. Дело даже не в том, что нужно делать что-то якобы плохое. Просто это как работа в ритуальных услугах: ты постоянно будешь сталкиваться с негативными и болезненными сценариями в жизнях людей.
Результат
Команда меня одобрила, эйчар написал, что будут готовить оффер. Я напомнил, что у меня скоро выходит срок ответа по офферу от 2ГИС, так что надо поторопиться, чтобы я мог принять взвешенное решение. Договорились на преоффер, чтобы узнать цифры, так как общие условия я в целом знал: в Т-Банке есть премии и индексация, предлагали мне должность сеньор-разработчика .NET в новый проект, домен известен.
💧Airdrop: DEV AI 💧
📣Complete Task: 140DEV (~$20) each person #DEV
📊Referral: ➕70 DEV (~$10) each referral
🏆Winners: All Valid Participants
💎Ratings: ⭐️⭐️⭐️⭐️⭐️
📅End Date: 5 April, 2023
🔛Airdrop Bot For DEV AI 🔛
💠 Join DEV AI Telegram Channel.
💠 Follow DEV AI Twitter and retweet the pinned post.
💠 Submit Polygon Wallet Address
📡Enter your information to the airdrop bot.
🗞Note: All airdrop steps should be completed.
Сделал в компании доклад о применении ИИ в архитектуре, давайте и вам расскажу.
Фокус в использовании подхода architecture as code: абсолютно все архитектурные артефакты у нас это тексты. С обычной документацией понятно, это и так некоторый набор текстовых файлов, чаще всего в макрдауне. Для них мы применяем структурный шаблон Arc42 — список из 12 пунктов, по которым нужно распределить информацию о проектируемой системе.
Структурный шаблон, во-первых, хорошо известен нейронкам, и они сразу понимают, о чём речь. Во-вторых, можно кинуться в модель бизнес-требованиям и очень быстро создать некий первоначальный набросок, от которого вы дальше уже пляшете, уточняя по пунктам и исправляя ошибки ИИ. Ну и, в-третьих, готовая структура с ящиками, по которым нужно всё раскладывать, это гораздо лучше, чем свалка ADR'ок, как это нередко бывает в компаниях.
Со схемами и диаграммами ещё интереснее. Берём инструменты со своими DSL-языками, такие, как Structurizr и PlantUML. Вся схема или диаграмма целиком определяется текстовым файлом. Можно применять Git со всеми его преимуществами. А для нейронок это родная среда: вы, как человек, смотрите на схему глазами, но нейронка работает с её DSL-файлом. Навскидку тут прирост эффективности даже больше, чем в программировании, потому что DSL это просто синтаксис, без смыслового наполнения, человеку его можно вообще не знать. Ты пишешь промпты, а смотришь уже на картинку, сгенерированную схему, и следующим промптом указываешь, где какие правки сделать. Нейронке при этом не приходится думать про потоки, асинхронность, типы данных, она просто правит текст как текст, поскольку у DSL нет поведения.
Тут как раз наиболее видна разница между рутинной и интеллектуальной частью работы. Как именно будет выглядеть схема, продумывает архитектор. Если доверить это нейронке, даже мощной, будет полно ошибок, неоптимальностей, неучтённых нюансов среды и так далее. Но вот само по себе написание синтаксиса — имба.
#dev@clockstackwheels
В 2023 году мы с коллегой сделали доклад на DotNext по DDD и архитектуре систем. И там, в числе прочего, показали, что устройство сложного проекта, спроектированного по определённым правилам, может иметь фрактальную структуру. Но мысль эту особо не развивали.
В 2024 году Влад Хононов — автор одной из самых известных книг по DDD — сделал доклад на DotNext по теме «Фрактальная геометрия в проектировании систем». Разумеется, он никаким образом на нашу идею не опирался, а работал над своей системой уже несколько лет к моменту доклада. У него там прям интересные научные обоснования, более серьёзный теоретический фундамент с введением новых понятий и принципов. Но факт близости хода мысли приятен. Типа, мы с коллегой делали систему, которая показала те же свойства, что и системы крутого эксперта в архитектуре.
Прям рекомендую доклад по второй ссылке всем, кто работает в компаниях, где по какому-то странному недосмотру есть архитектура, борьба с техдолгом и попытки не допустить превращения кода в лапшу с высоким зацеплением.
#dev@clockstackwheels
У протокола Яндекса по умному дому есть регламент, согласно которому Яндекс периодически запрашивает состояние всех устройств одного пользователя в рамках конкретного провайдера, одним запросом. Провайдеры забивают на поддержку этого метода, и возвращают не всегда корректный ответ, из-за чего про некоторые устройства Яндекс начинает думать, что они отвалились.
В такой ситуации Яндекс делает несколько попыток, а затем присылает пользователю уведомление типа «Датчик такой-то долго не отвечает». Фокус в том, что, если нажать на уведомление, открывается карточка этого устройства, которая запрашивает его состояние уже более целенаправленно: не методом получения всех устройств, а методом запроса по конкретному устройству. На эти методы производители не забивают, и карточка успешно обновляется.
Так вот. Какого хрена в Яндексе не догадались пропускать шаг с уведомлением и просто при неполучении состояния пытаться запрашивать его напрямую? Это же прям очень просто в реализации, экономит запросы на уведомления, не отвлекает юзера, делает систему более надёжной.
Не, ладно, я сам работаю в энтерпрайзе, поэтому знаю, что можно годами ждать исправления даже мелкого косяка, потому что так процессы устроены. Но всё-таки, блин. Прям подбешивает меня, и как пользователя, и как программиста. #dev
Объявили результаты. Из четырёх команд мы оказались на четвёртом месте. Сказать, что это стало мягко говоря удивлением — ничего не сказать. Секрет оказался прост: мы пришли четверо разработчиков делать проект на хакатон, который был назван таковым организаторами по ошибке. А оказался конкурсом бизнес-идей. В общей шкале оценки реализация значила всего 20%. Двадцать процентов. Двухдневная работа заняла одну пятую от общей оценки (презентация делалась за пределами основного времени). Зато более половины уделялось умозрительным критериям, не имеющим никакого отношения к собственно работе, проделанной командами на самом хакатоне: например «Прогнозируемый объём аудитории», «Вирусный эффект» (ага, для B2G продукта вирусный эффект). Как в той картинке, где разных животных, включая рыбу, просят залезть на дерево, кто быстрее.
При цене реализации в 20% можно было вообще ничего не кодить два дня, прийти без проекта, но зато удачно придумать и продать комиссии маркетинговую лапшу. Хакатоны нередко ругают за возможность «выиграть одной презентацией», но в такой критике обычно речь идёт об обмане относительно степени готовности прототипа. Здесь же такие условия были с самого начала заложены в систему.
Даже не знаю, как к этому относиться. Ну типа чуваки просто не донесли, что реализация почти ничего не значит, и стараться не нужно. На мой взгляд это противоречит концепции хакатона, тогда уж стоило просто объявить конкурс идей, у него совсем другие правила игры. С другой стороны, участвовать нас никто не заставлял, проект получился прикольный, делать его было интересно. С третьей стороны, одно из самых сокрушительных поражений в моей жизни.
В ноябре будет уже более масштабный внутренний so-called-хакатон в компании. Не понимаю, хочу ли теперь участвовать или нет. #dev
Несколько лет назад на конференции TechTrain я впервые сыграл в Code in the Dark. Два разработчика параллельно садятся за компьютеры, запускается таймер. Дается картинка, которую нужно сверстать в HTML, но важный нюанс: ты не видишь результат до самого конца, пока не отправишь своё решение. Вёрстка вслепую. Если где-то поехало, можешь вообще всё сломать, но не узнаешь об этом. Мне очень понравилось, но я никак не мог придумать, как бы подобное соревнование выглядело для бэкенд-разработчиков.
А тут вот на стенде Контура была версия как раз для бэкендеров: даётся набор данных, отражающий валидные вводы и выводы для неизвестных юнит-тестов, и нужно закодить функцию, которая пройдёт эти тесты.
Сыграл дважды, один раз догадался о принципе, но не смог реализовать (видеть вывод твоей функции нельзя, вслепую я не учёл важный краевой случай), а второй раз решил с небольшой подсказкой от организаторов. В общем, это как задача с литкода уровня Easy, но саму задачу ты не видишь, только правильные кейсы.
Мне понравилось. Нужно на вечеринках с коллегами играть :)
#dev
Выступил на DotNext сегодня, уже второй раз в жизни. Вообще, во времена хайпа ML и нейросетей было любопытно подать доклад, который рассказывает о том, как обойтись БЕЗ нейросетей и сделать всё на привычных алгоритмах. Видимо, не один я устал от ИИ, народу было достаточно, прошло вроде хорошо.
Сходил на четыре других доклада, и, пожалуй, с точки зрения докладов этот год лично для меня один из лучших, потому что два прям очень зашли: увидел то, что хотел по темам, всеобъемлюще, с ответами на возникающие в процессе вопросы. Вообще, нередко авторы боятся показывать совсем азы и тривиальные вещи — возможно, чтобы доклад не казался слишком простым. Но вот мне при введении в любую новую технологию или новый подход часто не хватает как раз основ. Чтоб прям с фундамента разжевали. И тут наконец-то такое было.
А вот со стендами дела похуже, имхо — из известного бигтеха только Озон и Контур. Завтра второй день, пойду подробнее посмотрю, что там. И да, снова сама конференция не предложила никакие тематические наклейки, и непонятно, что клеить на ноутбук :)
#dev
Друг делал уборку у себя и обнаружил мою книжку. Двадцать лет у него хранилась. Именно с неё де-факто началось моё изучение программирования. Первые две части про то, как во флэше рисовать, а вот третья — о программировании на ActionScript 2 (тогда ещё), причем очень подробно, с самых основ.
До сих пор считаю убийство Флэша одним из наиболее деструктивных и вредных для человечества действий компании Apple.
Кстати, изучать программирование на движущихся графических объектах было прям очень вдохновляюще. Ничто не давало такую мотивацию, как созерцание того, как тела летают по экрану согласно заданному тобой принципу.
Еще в комплекте с Флэшем был набор демок, и, запуская каждую из них, я думал "Хочу уметь так делать!". Одна из мечт, которые сбылись полностью.
#dev
Программисты пока могут не бояться ИИ.
В Росатоме работать с ИИ-агентами было нельзя, а вот тут в 2ГИС это даже поощряется, и компания сама оплачивает нужные доступы и лицензии. Практически любые модели на выбор, чаты, Copilot и так далее. Поэтому я попробовал выполнять прям настоящую энтерпрайзную работу при поддержке ИИ, и вот что скажу.
Во всех рекламах нейросеток говорят о том, как вам эта сетка позволит создать программу по текстовому описанию без разработчиков. Пожалуй, если создавать программу с нуля и аккуратно итеративно описывать требования, это может сработать. Только дело в том, что в реальной разработке мало работы по созданию с нуля и много работы по внедрению фич и исправлению ошибок. А для этого ИИ-агенту нужно, кроме умения хорошо кодить, ещё и знать (и понимать!) предметную область.
И тут начинаются проблемы.
Во-первых, в большинстве компаний предметная область нигде целиком не формализована в виде какого-то текста, который можно было бы передать в контекст. Я бы сказал, что единственный более-менее полный документ, описывающий предметную область программы — исходный код этой программы. И хорошо, если она сделана по какому-нибудь DDD, а если там хаотичные процедуры с высоким зацеплением?
Во-вторых, и это более важно, мы используем свои человеческие навыки и опыт жизни в окружающем мире, чтобы правильно понимать предметную область. Нужно именно что пожить в мире, чтобы понимать, как пить из пресловутого перевёрнутого стакана. И пока моделькам не получается передать всё многообразие человеческого опыта, люди в относительной безопасности. Ну, кроме тех, чья работа это просто кодить без обдумывания.
#dev