Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.18K photos
24 videos
929 links
ЛаМПовое с Бобровским
Download Telegram
В России на днях выделили Р600,000,000 на обучение обучению технологиям AI -- ну то есть массово универских преподов готовить. Могу себе представить, каким же легаси технологиям за эти денежки будут студентов учить, потому что от США и Китая в научном плане мы отстали безнадёжно, если судить хотя бы по составу международных научных конференций AI/ML. Я бы даже поставил на то, что AGI который захватит мир будет скорее китайский, хотя в американских компаниях сейчас вроде все мировые AI-топы работают.

В наших университетах ситуация совсем печальная:
https://habr.com/ru/post/562476/
И как бы не надували щёки МГУ и СПбГУ, в мировом рейтинге университетов они замыкают top 100 (если в этом году вообще попадут в него). Надо понимать, что это отличие качественное: уровень обучения computer science в Массачусетсе или Стэнфорде такое, что наши лучшие универы в сравнении с ним это как третий школьный класс арифметики и третий вузовский курс по матану.

Тем временем вузы по всей стране, офигев от результатов ЕГЭ и уровня нынешних 11-классников, пробившего дно в этом году особенно сильно, срочно снижают проходные баллы. Ну и кого через 3-5 лет будем учить AI?

Как надо было? Как в футболе, когда банк покупает клуб и хочет его быстро сделать чемпионом -- тут не до развития молодняка и своих академиев. Вы же знаете, что подавляющее большинство успешных стартапов их создатели организовали, будучи в возрасте 24-39 лет (средний возраст 34 года)? и никаких студентов на самом деле.

Просто перекупаются топовые звёзды на пару сезонов. Потому что до сингулярности остались считанные десятилетия, и пока ещё не поздно совсем, надо срочно переманивать мировых спецов -- пару десятков схантить вполне достаточно (ну и у нас человек пять найдётся), и организовать для них единый центр, где и обучение бы велось, но не массовое, а по вполне конкретным прорывным темкам, в прямом направлении на AGI. И преподов готовить, только тоже не массово, а точечно.
Вы сами должны быть самым первым и объективным (и желательно, придирчивым и занудным) ревьюером вашего же кода. Если ваш собственный код труден вам же для code review, то он тем паче будет труден для понимания другими :)

Полезная микра: оставлять комменты, предназначенные для понимания его ревьюером (вам же самим, в частности, через пару месяцев, когда вы уже всё забудете). Например, если у вас в проекте 10 файлов, то прежде всего хорошо бы понять, а какой из них "первый" в семантическом плане, с чего вообще начинать разбирательство с проэктом.
Иначе вы будете регулярно получать вот такие предложения ))) =>
Отовсюду лезет реклама AI pair programmer
https://copilot.github.com/
смешно, что в примере parse_expenses.py используется float для хранения денег хм.
Это абсолютная ошибка проектировщика и никогда так не надо делать, но -- но бывает ли это реальной проблемой?
Помнится, из 1990-х история, как некий умник в каком-то американском банке подправил логику округления (32-разрядный float наверное в 5-6 знаке ошибается), и по центу с лавины округлений денежных транзакций сбрасывал себе на счёт, и якобы стал миллионером. Но с тех пор каких-то эпикфейлов из-за использования стандартных типов с плавающей запятой для хранения денежек особо не было слышно.
Впрочем, совсем не исключено, потому, что мэйнстрим пробил дно уже так, что данный тип багов, несмотря на массовое явление более-менее норм типов из коробки вроде decimal, стал повсеместным :-)
Из ИТ-сфер, которые мощно поднялись в 2021-м, больше всех разбогател, хм кто бы мог подумать ))) геймдев. 2,7 миллиарда активных игроков!

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

Я в gamedev-е работал ещё с конца 1980-х, а в последнем игровом проекте поучаствовал лет семь назад, и все эти десятилетия наблюдаю, как отечественные порталы по разработке игр скатываются и скатываются в УГ, стабильно пробивая дно токсичности, которое, казалось бы, уж некуда дальше пробивать. В основном нытьё, как всё стало плохо, игр миллионы, никто не покупает бла бла бла... В жанре сменяются целые эпохи - shareware, онлайн, кикстартер, мобилки, соцсети, f2p, инди, гиперказуал... И всё так же одни пилят игры и (иногда) делают миллионы долларов, а другие только плачут.

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

Не играйте в игры, пишите игры!

На втором месте в плане денежного роста -- AI/ML. Основной спрос только пока на все эти распознавалки со стороны строителей мирового концлагеря конечно :)

На третьем -- облачные сервисы, ну или пресловутый онлайн, примитивно говоря, который сегодня нужен абсолютно любому программному продукту.
Лет 10 назад была вконтактнике такая игра "Счастливый фермер", которая прославилась тем, что SQL-запросы нативно формировались на клиенте, и игровая логика соответственно элементарно хакалась, а все игровые данные хранились на сервере вперемешку в одной табличке БД, которая периодически ломалась )))

"Где моя свинья девятого уровня??" (с)

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

Я наивно думал, что этот жанр уже давно загнулся, ну или стал нишевым, ан нет: этим летом минские пацаны из Melsoft на своём симуляторе фермы Family Island пробили планку суммарно в сто миллионов долларов дохода ))) Дико уважаю.
Сумма после всех вычетов сторов и налогов, конечно; накопилась всего за два года.

"моей наградой стали 2 миллиарда денег на ферме, 227 уровень, корова прокачанная до 100 000 уровня, следствием чего явилось повышение уважения среди друзей." (с)

А ихний кулинарный тайм-менеджер My Cafe, выпущенный пять лет назад, кстати, уже 127 миллионов долларов намайнил.

В первое время конечно такие игры совсем крохотные копейки приносят: например Family Island в первые месяцы после запуска выдавала ничтожные 50 тысяч долларов. :)

Белорусам в этом плане есть чему поучиться у японцев: месяц назад вышла мимимишная мобильная РПГ Ni no Kuni: Cross Worlds (очень красивая, мультяшка) про бета-тестера VR-игры, так вот она побила мировой рекорд для игр по скорости набора сотки миллионов долларов: за 11 дней (и это ещё мирового релиза не было!). Прежний рекорд 12 дней принадлежал Покемонам, ага. Они были раскручены Ингрессом конечно, но и Ni no Kuni -- это тоже большая серия. Третья Genshin Impact -- 13 дней, ну и линейка-2 вроде так же.
А по скорости зарабатывания в отдельные дни Ni no Kuni была вторая в мире после Honor of Kings.

Кстати, пилилась Ni no Kuni на Unreal Engine 4 той же командой, что и линейку делала :-)
Поучительный пример, как полезно "войтивайти" через геймдев.
https://journal.tinkoff.ru/diary-vladelec-it-kompanii-moscow/
И совсем не важно, что создать свой панцер генерал не получилось: навыки, которые получаешы при разработке игр, очень круты и разносторонни, типовые мэйнстримовские проекты вроде интернет-магаза или просмотрщика котиков до игр обычно сильно не дотягивают (на 1-2 порядка проще). Я несколько раз переходил из разработким игр в бизнес-проекты, и каждый раз удивлялся, насколько в них всё просто и примитивно в сравнении с gamedev-ом.
Несколько фундаментальных архитектурных принципов, абсолютно обязательных сегодня для любого серьёзного ИТ-проекта, уважающего своих пользователей:
-- серверы должны масштабироваться горизонтально, а не вертикально (почему, я поясняю на курсе по highload-системам);
-- архитектура желательна федеративная (например, пиринговая), чтобы небольшая группа засланных казачков не могла выполнить рейдерский захват проэкта :)
-- в системе должна быть встроена блокировка любой внешней рекламы;
-- система должна хранить только самый минимальный объем персональных данных (которые надо бэкапировать отдельно, чтобы легко можно было удалить при необходимости), и периодически вычищать устаревших пользователей;
-- система должна через свои внешние API предоставлять самый минимум мета-данных, дополнительно "загрязняя" их, чтобы усложнить их использование шпионскими системами машинного обучения;
-- обязательно шифрование на стороне клиента, чтобы оператор на сервере не мог увидеть реальные данные в формате обычного текста.
👍1
Есть хорошая, в принципе, книжка "97 things every programmer should know", и её переводы на русский:
https://97-things-every-x-should-know.gitbooks.io/97-things-every-programmer-should-know/content/ru/
https://www.transl-gunsmoker.ru/p/97.html

Конечно 97 темок это здорово, но они тут никак не систематизированы, набросаны линейно и вперемешку, а главное, что фактически почти все они -- просто следствия гораздо более глубоких инженерных принципов и научных парадигм в computer science, которые конечно в этих правилах никак не упоминаются.

Собственно, и сами авторы сборника говорят:
"Здесь нет никакой общей идеи повествования: цель сборника - просто собрать многочисленные и разнообразные взгляды на то, что следует знать программистам, по мнению участников проекта. Это может быть что угодно от совета по коду до культуры, от использования алгоритма до agile-мышления, от внедрения ноу-хау к профессионализму, от стиля к сути и т.д."

Резюме, что один разок просмотреть стоит, и если в голове останется хотя бы 2-3% - уже будет хорошо :) Но лучше изучать фундамент cs, который будет свободно и легко порождать нужное именно вам множество подобных оригинальных правил, оптимальных именно для вас, для вашего стиля разработки.
Топ-3% разработчиков характеризуются одной привычкой, которую, соответственно, не имеют остальные 97%, ну или она у них совсем слабо выражена.
Что же это за привычка?
Топовые программисты постоянно делают какие-то проекты с новыми фишками, которые они ранее не изучали.
И на работе, и после работы.
Неделями, месяцами, годами и десятилетиями.
Дико уважаю:
https://habr.com/ru/post/569522/
Как правильно относиться к своему обучению и к поиску работы, эталон для подражания.

"Я была по обе стороны собеседований, суммарно их около 100+ наберется...
Если бы мне кто-то сказал курсе на 2-ом, что нужно прорешать 500+ задач и попробовать податься, как postgraduate, то я бы обязательно попробовала, хотя и была очень не уверена в себе...
Я старалась решать по 2-4 задачи в будний день из разных разделов, это примерно 4 часа в день до/после работы. Например, одна на строки, другая на графы. Разделам, где я проседала больше, выделяла отдельное время - в частности, на динамическое программирование. Полностью вся суббота и часть воскресенья уходили на подготовку. Будьте к этому готовы, подготовка съест очень много вашего личного времени. На текущий момент у меня 352 задачи..."

Впрочем, ещё философ Гераклит говорил, что таких людей -- 2-3 процента.
Лишь несколько человек из ста станут профессиональными бойцами, но не более. Остальные — серая масса, которая погибнет при столкновении с серьёзным противником.
Кто вы по жизни? Воин, боец или серая масса, у которой в голове интровертная манная каша из невротического мусора?
Этой девушке всего 25 лет! Ну, да, сегодня многие пацаны куда трусливее девчонок.
Джоб-сайты для айтишников совсем перестают работать в смысле реальной помощи в поиске работы.
Особенно это чувствуется в регионах, чем дальше от msk/spb, тем резко меньше от них толку.
В целом провал также отмечается по всем IT- и инженерным специальностям независимо от места жительства.
Говорил об этом ещё года два назад: шаблонные схемы поиска работы скоро погибнут. Ну и вот.
Новое поколение разработчиков и рекрутеров не желает более возиться с олдовыми сайтами, впустую тратить время на заполнение и просмотр многостраничных резюме и вакансий, где за расплывчатыми формулировками нифига обычно непонятно. Да и персональные данные на них сливать теперь совсем немодно.
Сейчас основной тренд по поиску работы -- соцсети, где можно мгновенно пообщаться с кандидатом или работодателем.
Соответственно, если ваша страничка в соцсети и гитхаб отстойные -- по ним не видно, как вы регулярно фигачили последние год-два в плане развития в профессии -- ну штош...
Кто не старается добиться настоящего успеха стратегически, кто хочет добиться быстренького "успеха" к следующему вторнику -- всегда будет проигрывать.
Как войти в ИТ, если ты кот, и ещё разные истории (относительного) успеха тех, кто перешёл в программисты из неайтишных профессий. Неплохие советы, рекомендации что как изучать, какие курсы бесплатные и какие почём покупали, как искали работу, сколько платят и т. п.
https://journal.tinkoff.ru/uyti-v-ayti/
Как работает бесконечное колесо ИТ-сансары.

23-летний парень, закончивший университет по информатике с хорошими оценками, без проблем устраивается на первую работу и получает задание сделать простой онлайновый просмотрщик котиков. Начитавшись статей в Школе Бобровского, он решает ориентироваться на топовые уровни в ИТ, изучает статьи разных гуру, разбирает примеры на гитхабе, проходит дополнительные курсы, равняясь на лучших специалистов.

Вместо примитивного варианта "статический PHP на хостинге за 100 рублей в месяц" парень решает взяться за работу по-взрослому: беcсерверная инфраструктура очередей с заданиями MapReduce для пакетной обработки данных вертится в Docker, развернутом с помощью Kubernets поверх AWS, а для клиента заюзан изоморфный фронтенд React с рендерингом на стороне сервера.

Проект разрабатывается полгода, стоимость его эксплуатации составляет 30,000 рублей в месяц, и он отлично обслуживает 10 одновременных пользователей в онлайне.

Мелкие неполадки автор устраняет быстро и оперативно. Он реально многому научился.

=

Проходит 1 год. Парень получил хороший архитектурный и инфраструктурный опыт, и теперь пришло время двигаться дальше.

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

продолжение следует
Парень пишет в резюме "Один год опыта работы, построение с нуля serverless-архитектуры: Docker, Kubernets, AWS, Firebase, Redux, React Native, Vue, Angular". Всё честно.

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

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

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

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

Парень настойчиво придерживается одной линии, как и рекомендовалось в Школе Бобровского: развивает экспертизу в конкретном стеке (Kubernets, Docker, AWS, Firebase, Vue, Redux). Всем нравятся его статьи об этом удивительно мощном технологическом стеке, который он создал, и о том, как он успешно поддерживает финтеховский стартап на плаву.

Прошло 3 года. Парень научился всему, чему только мог. Его банковский счёт за время работы в стартапе вырос на несколько миллионов рублей.

Пришло время двигаться дальше.

продолжение следует
Парень пишет в резюме "4 года опыта работы фуллстек" и получает работу в крупной ИТ-компании с известным брендом.

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

Парень продолжает играть с крутыми технологиями.

Всё работает прекрасно. Kubernets и Docker, Firebase и бессерверные и изоморфные React и MapReduce работают на полную катушку. Масштабирование доведено до предела, система работает на всех серверах, что имеются в корпоративном ЦОДе, и они едва поспевают за ней.

Технический директор считает, что из этого стека можно выжать ещё немного. Добиться чуть большего масштаба. Немного снизить затраты.

Но парень этого не может. Использованные в стеке технологии просто не позволяют это сделать.

Парень пишет статьи и комментарии на хабре и медиуме, выступает на highload-конференциях и встречах с докладами о том, как всеми любимые технологии его подвели. Они просто не масштабируются. Он не может заставить этот стек делать то что нужно -- получается слишком дорого, поэтому, действительно, пришло время для чего-то нового.

Пришло время двигаться дальше.

окончание следует
Парень начинает работать над новым проектом.

Компания предоставляет ему много времени и ресурсов для улучшения оригинального стека. Он гуру, а у компании есть время и ресурсы. Если он не сможет сделать этот стек продуктивнее, то кто?

Парень изобретает что-то новое.
Проходит 2 года.

Новая оптимизирующая технология снижает стоимость эксплуатации стека на 5% и уменьшает требования к памяти на 2%, и пользователи восторженно рассказывают о том, как всё летает. Большой команде инженеров нравится работать с новым стеком, он великолепен.

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

Молодой программист читает одну из его статей и думает: "Ого! Мне эта технология обязательно нужна на случай, если взлетит мой оригинальный стек".

Цикл повторяется.

=

Ну я конечно имел в виду, что весь вот этот вот мэйнстрим -- полный зашквар на самом деле, а получилась история, как пацан вроде бы к успеху шёл.....
Мои две копейки по поводу "въё* или уё*".
Сколько работал программистом, ещё с середины 1980-х, во всех программистских коллективах всегда были отношения хорошо-отлично, редко когда на три с плюсом. Единичные случаи (причем только в последние лет 10) выпиливался сам либо когда босс забывал, что программисты -- это белая кость :) и начинал вести себя как барин, либо (сам виноват) устраивался в компании где программирование -- не ведущая сфера деятельности, и для основной массы сотрудников действительно действовал режим галеры-концлагерь , который манагеры распространяли и на программистов, которые в итоге регулярно разбегались.

Я вообще категорически против любого неуважительного обращения с сотрудниками независимо от профессии и причин, ну и вот так трусливо сваливать массовое увольнение на бигдату -- тут всегда вопросы к самой компании: а какого фига набирали таких? Понятно, что найти подходящего специалиста всегда трудно, ну это ваши проблемы.
Проблемы шерифа индейцев не волнуют.
Не можете содержать тех, кого набрали -- значит выплачивайте все деньги на зарплаты и закрывайтесь, но социальные обязательства выполняйте полностью.

Если видите, что бигдата действительно находит низкие KPI -- значит внедряйте чёткие должностные инструкции, и пусть бигдата шлёт напоминалки, предупреждения. Такая мягкая сила отлично действует; периодически консультирую небольшие команды, и в 100% случаев получается обходиться без увольнений, просто организационный процесс надо улучшить, роли грамотно прописать, и т. д. Уверен что в любой конторе 90++% сотрудников вполне можно простимулировать лучше работать именно такими спокойными и рациональными способами.

Я сам вообще трудоголик и не вижу никаких проблем работать разумным темпом и по 12-16 часов 365 дней в году, если соблюдать режим дня (о чём регулярно пишу в тележке в другом канале), но при этом никогда бы не стал принуждать к такому ритму других. Люди действительно выгорают, психологически бывает тяжело в сложных проектах, маленькие зарплаты, проблемы с пандемией... Конечно, лень на работе это не оправдывает,
но и сокращения ради "оптимизации бизнес-процессов", чтобы босс лишний раз с гаремом любовниц скатал на Канары -- таких карма точно покарает; а тех, кто пострадал безвинно, обязательно поощрит :)
Есть несколько часто задаваемых вопросов на собеседованиях, к которым надо быть очень хорошо готовым, максимально избегая шаблонных ответов и типичных ошибок.

Самый топ наверное -- это "с какой технической проблемой вы недавно столкнулись, и как вы её решили?".

На самом деле, это вопрос с подковыркой. Он тестирует не столько ваши технические знания, сколько ваше умение самостоятельно решать проблемы + ваши софт-скиллы.

Вспомните (или придумайте) подходящую к теме собеседования проблему, сперва поясните классические шаги (погуглил -- не нашёл, stackoverflow -- не нашёл; ютуб кстати сегодня тоже неплохой ресурс стал), уточнив, какие именно запросы вы делали. Затем, расскажите, что поискали в блогах профильных специалистов, которых вы читаете, ну или хотя бы на узкотематических сайтах, нашли что-то близкое, но не совсем.
Дальше, идёте к своему наставнику, но он тоже не в теме. Затем, опрашиваете свою сеть контактов (вы же поддерживаете, надеюсь, такую сеть?). Затем обратились непосредственно к авторам той технологии или библиотеки на гитхабе например, с которой связана проблема. И вот вам наконец подсказали, и вы уже сами нашли отличное решение!

Ok, вы наняты! :)

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

Этот процесс, собственно, и есть именно тот товар, который вы им продаёте в обмен на вашу зарплату.