Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.18K photos
24 videos
929 links
ЛаМПовое с Бобровским
Download Telegram
Смешно: в Кембридже формализовали модель параллельной работы памяти в С++ (!) -- описали семантику многопоточных программ и доказали в Isabelle/HOL корректность процесса компиляции
https://www.cl.cam.ac.uk/~pes20/cpp/popl085ap-sewell.pdf

А потом оказалось, что в стандарте C++20 она была внезапно переделана более чем наполовину, и теперь надо начинать всё с нуля.

Вообще, поразительно конечно, какой бардак творится в мировом IT даже на топ-уровне ведущих комитетов по стандартизации :)
Судьба неайтишника 😂😂😂

"Мало работать на 100 процентов, надо, чтобы твою работу замечали. Это не значит, что нужно безудержно заниматься самопиаром, но важно хотя бы просто общаться с коллегами, налаживать связи. Удаленка этому очень помешала, на удаленке сложно себя продвинуть. Офис превращается в привилегию, люди будут сражаться за то, чтобы в него попасть , а удаленка станет уделом для тех, кто находится в карьере на периферии"

Офис -- это оказывается привилегия. А удалёнка оказывается мешает развивать нетворкинг.

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

сражаться чтобы попасть в офис == унижаться чтобы попасть в офис
Некоторые люди боятся собеседований потому, что опасаются, что "под давлением" будут делать больше ошибок.

Но разве это давление? Это детский сад.

Вот например случай, как 17-летняя (!) девушка после полётов с инструктором отправилась в тренировочный полёт в одиночку, и вдруг диспетчер сообщает: "От вашего самолёта отвалилась правая часть. Скажите, что вы собираетесь делать?" (!). Мэгги что-то отвечает, вроде "надо посадить самолёт", не разбираюсь в авиатехнике, и диспетчер уточняет: "У вас отвалилась именно та штуковина, которая необходима для посадки самолёта (вроде, колесо?). Сообщите, что вы собираетесь делать?".

https://www.youtube.com/watch?v=B229-KLudTo

Вот это действительно давление.

Но Мэгги оставалась предельно спокойной и сконцентрированной до самого конца, действовала очень хладнокровно, мастерски применяла все изученные навыки, и в итоге успешно посадила разваливающийся в воздухе самолёт!

И то, что её не убило, безусловно, сделало её существеннее сильнее.

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

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

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

А для учителя, инструктора, ментора, тренера самое приятное -- это видеть, как ученик идеально выполняет реально сложное задание. Именно так и понимаешь, что сам хорошо выполнил свою работу по обучению.
Хорошая заметка, что такое сильный программист с т.зр. СЕО, у которого работает 50 разработчиков. Брали парня на Android-сеньора, при этом он также был экспертом в node.js и в облачных технологиях, на гитхабе три полноценных проекта, и одна из его программ в гугл маркете была скачена 100,000 раз без какой-либо рекламы. А на вопрос "ваше хобби?" он ответил -- спортивное программирование :) в частности на codeforces.com
И вдобавок у него были отличные софт-скиллы -- он например любил помогать другим.
Наблюдаю, как сеньоры регулярно проваливают собеседования за собеседованием.

Они приходят такие, просидевшие 5-10 лет на одном месте, самодовольные (официально в должности "старший инженер-программист"), с внушительным многолетним опытом.

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

...

-- Спасибо, что пришли сегодня, Олег! Расскажите пожалуйста нам о проекте, которым вы гордитесь?

Минута молчания. Горжусь? Эммм...

-- Ну, понимаете, был один проект, в котором я участвовал... мы разработали бубулятор...

-- Отлично! Бубуляторы важны для основной деятельности вашей компании?

-- Ну.... думаю, да... ммм..

-- А почему вы его создали?

-- Ну, тимлид сказал мне... В общем, мы создали этот бубулятор, который использовал джавалайзер, и мы...

-- Джавалайзер? Странный выбор. Как же так получилось?

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

-- Понятно. И ваша компания размером с Шмандекс?

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

-- Хорошо, давайте двигаться дальше, Олег. Что вы делали в этом проекте?

-- Я помогал.

-- Как помогал?

-- Ну, я был вовлечен в это всё...

-- Что именно вы делали, Олег? Писали код? Проектировали классы? Решили сложную архитектурную проблему? Может быть, в свободное время написали промотрщик котиков?

Неловкое молчание.

...

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

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

Настоящий инженерный талант выходит далеко за рамки технических навыков. Речь идет о мудрости, о проницательности, о боевых шрамах.

Это мышление взрослого.
Что бы вы ни готовили, если навалите в кастрюлю слишком много некоторых ингредиентов, блюдо не получится вкусным.

Очень немногие проекты масштабируются "естественно".

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

Именно в этот момент нам как раз нужно набраться смелости и перестать механически делать проект ещё больше.
Поразительно конечно, насколько ИТ-мэйнстрим далёк от понимания самых элементарных принципов computer science.

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

"Types can also provide exact bounds on the number of evaluation steps and result size associated with lambda terms."
The Little Prover

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

Глава 1
Я писал код. Я сделал ошибку в коде. Прод упал. Я не виноват. Мне никогда не стать программистом.

Глава 2
Я писал код. Я сделал ту же ошибку в коде, но сделал вид, что не замечаю её. Прод упал. Опять. Я не могу поверить, что прод снова упал из-за той же самой ошибки! Но я опять не виноват. Мне придётся долго становиться программистом.

Глава 3
Я писал код. Я сделал ту же ошибку в коде. Я видел её, и прод снова упал (это уже его привычка!), но я чётко заметил её. Я знаю, в чём она заключается. Я признаю, что это моя вина. Я немедленно покрыл ошибочный код тестами.

Глава 4
Я писал код. Я сделал ту же ошибку в коде. Я написал тесты, и ошибка НЕ ПОПАЛА в прод.


Глава 5
Я писал код. Я НЕ СДЕЛАЛ той ошибки.
15-20 лет назад, если ты умел пользоваться компьютером, а уж тем более интернетом, большинство окружающих считало тебя волшебником.

Вопрос не в том, станем ли мы продуктивно использовать компьютерные технологии сегодняшнего поколения; вопрос лишь в том, как скоро нас принудит к этому жизнь?

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

Что, если, вместо того, чтобы сопротивляться State of the Art до тех пор, пока у нас не останется никакого выбора, мы наоборот решим стать первопроходцами?

P. S. Это верно и для любых других наших навыков, и хард- и софт-. Например, уже сейчас про профилю "киберспорт" выдаются сотни вакансий и будет только веселее. Бумерам действительно это сложно принять :) но это факт.
Почему стремиться стать full stack-разработчиком (позиционировать себя так в резюме) - это стратегическая ошибка?

Вот почему -- это слишком универсальное понятие, и на практике ваше общение с эйчаром будет постоянно сводиться примерно к такому.

- В вашем резюме говорится, что у вас есть опыт работы с HTML, CSS4, JQuery/React, JavaScript, SQL, Python и NodeJS, и что вы знакомы с настройкой и администрированием серверов Linux и Windows.

Вы: Да, все верно.

-- Хм, здорово, я просто пытаюсь определить, действительно ли вам подойдёт вакансия, которую мы обсуждаем. Потому что эта вакансия для full stack-специалиста, вы знакомы с full stack разработкой?

Вы: ...ну, да
(и хотите добавить, что ваши скиллы и есть full stack, но тактично молчите)

-- О, отлично, но этого ведь нету в вашем резюме, поэтому я не был уверен. Вам это надо обязательно подправить. Эти ребята ищут на full stack кого-то, кто умеет работать с CSS, но у вас есть только CSS4, вы знакомы также с CSS?

занавес.
Не один год постоянно наблюдаю, как занимающиеся сами себе часто усложняют процесс обучения. Регулярно отклоняются от темы, гуглят какую-то дикую фигню со stackoverflow, или наоборот, слишком заумные для их текущего уровня вещи, которые изучать будет смысл через 1-2-3 курса, не ранее, иначе в голове сложится странная каша кривейших скиллов. Хотя у меня вообще нету наверное ни одного занятия ни на одном курсе, где требовалось бы что-то дополнительно гуглить. Ну может в 3% занятий даю конкретные ссылочки, но не более.

Спрашиваешь:
- зачем это вам?
- интересненько!

Ну а как это вам поможет в прохождении текущего задания? или помогло уже может быть?

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

Ну и? (с) Карпин

Почаще напоминайте себе конкретную цель в том важном занятии, которым вы занимаетесь в текущий период времени, и обязательно спрашивайте при этом: а имеет ли значение для достижения этой цели то, на что я сейчас трачу своё время?
Стать сеньором в понимании мэйнстрима на самом деле легко. Вам надо проработать пару лет в быстро развивающемся стартапе, или пять лет в стабильной компании, и просто выполнять все рекомендации с моего курса карьеры. Те же, кто начал у меня учиться в 2020-м, и вот спустя год не повысил свою зарплату хотя бы на 15-20%, честно скажу, так ничему и не научился :)
Про продуктивность программистов x10 x100.
Где-то в середине 1990-х работал в фирме, где много программировали на C++ (тогда это был для того времени довольно новый, и при этом единственный, по сути, "серьёзный" язык, применяемый для всех почти проектов на персоналках, а потом Delphi подоспела, и началось тотальное формошлёпство :). И вот пришёл новый кандидат, уже с опытом программирования на C++, который успешно ответил на несколько довольно сложных, и даже экзотических вопросов по этому языку (фреймворков тогда не было, только скромные текстовые IDE - Borland C++ или Microsoft C++). При этом сам парень дружелюбный и коммуникабельный. Все были очень довольны, он, похоже, явно обходил по уровню большинство наших разработчиков.

Его взяли, он включился в проект, и тут стало быстро понятно, что он то ли не может, то ли не хочет заниматься рабочими задачками :)
Он игнорировал требования, делал явно не то, что нужно, не тестировал код... До сих пор так и не знаю, в чём было дело. Он был умен и прекрасно знал плюсы, ну возможно сама работа ему не нравилась, хотя ведь он в принципе знал, куда и на что шёл. В итоге он довольно быстро уволился (после некоторого давления :).

Можно быть хоть 1000-кратно круче других разработчиков, но если не хватает мотивации, этот множитель становится совершенно неважным.
💯1
В ИТ кстати не очень любят не только "джуниоров без опыта", но и слишком квалифицированных сеньоров. Действительно, довольно многие из них -- и совсем начинающие, и самые "старшие" кандидаты подчас не справляются с типовыми задачками, предлагаемыми на собеседовании. Причём эти задачки, вызывающие проблемы и у начинающих, и у оверинженеров -- отнюдь не академические алгоритмы, а вполне реальные проблемы. Джун как правило пока просто не знает, какие абстракции/технологии/инструменты/практики ему лучше выбрать и применить, а сеньор, наоборот, знает их столько, что довольно часто не может эффективно ими распорядиться.

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

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

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

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

Но тут есть важный нюанс: так можно бесконечно прыгать от темы к теме под детскими предлогами -- нашёл что-то более "интересненькое", и вроде как это стало новым важным приоритетом. Отмазки можно придумывать бесконечно: новые вакансии, модные технологии...

Поэтому критериев, когда ваш текущий проект теряет свой приоритет, только два: либо вам так сказал начальник, либо (когда начальника нету, например, вы делаете проекты на фрилансе) новый проект принесёт вам на 30+% больше денег, нежели текущий.

Во всех остальных случаях без исключения (например, делаете проект просто для себя, для изучения какой-то технологии) вы абсолютно обязаны его завершить.
по мнению начинающего программиста, язык программирования -- это Angular или Блокчейн :)

по мнению миддла, язык программирования -- это Python или Java, C++ или C#

по мнению сеньора, язык программирования -- это F#, Haskell, Coq, TLA+, Arend.
Если N > 1 компаний предлагают одинаковые курсы, например "в профессию Java-программист за 9 месяцев с нуля", значит, N-1 компаний из них не нужны :)

Можно запасаться попкорном и наблюдать, как они зачем-то бьются друг с другом (точнее, враг с врагом) на крохотном пятачке среди огромной пустой площади.
Не хватает "думалки", сложно решать даже простые задачи по программированию, как быть?

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

Немало кстати таких, кто даже не разбирается в арифметике на уровне первого класса!
Ну конечно вы в таком случае не сможете заниматься программированием, если не знаете самых элементарных вещей, например что такое разряд числа (взять n-ю цифру числа), что сегодня изучают в первом классе.

У меня просят периодически что-то волшебное, чтобы прочитать не особо напрягаясь, посмотреть видосик, и ум вдруг станет сильным и начнёт решать сложные задачи. Такие глупые вопросы собственно и объясняются отсутствием даже 1% логического мышления.

Рецепт: начьните :) с школьной математики, именно с самого первого класса. Вы знаете, что такое разряд числа? Ну вот значит вам в первый класс.

Решаете абсолютно все задачки, сколь бы простыми они вам не казались. Не выбирайте, не думайте "а, это я прекрасно знаю", нет -- делайте всё подряд без исключения. С 1-го по 11-й класс всю-всю-всю математику.

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

Ждать и откладывать, откладывать и ждать, ждать и откладывать...

Но в таком случае ваша жизнь никогда не cтанет лучше.
В воскресенье я написал пост, как в США топовые учёные ведут научные исследования в области стратегических кибератак, равных которым по масштабам пока не было, а через несколько часов была обрушена работа сети автозаправок по всему Ирану (местные власти обвинили американских хакеров), спровоцировав народные волнения :) даже не знаю, случались ли ранее столь масштабные по социальным последствиям кибернападения.
Совпадение? Не думаю.
Точнее, не думаю, что это было именно такое научно обоснованное нападение, скорее всего, ну в любой реализации TCP-стека например найдётся куча непропатченных багов, да и официально невыявленных ошибок тоже полно.

Cитуация в мире совсем печальная: профессор Карл Хьюитт, автор парадигмы стратегических кибератак, заявил в октябре 2021-го, что в США киберзащита во многих государственных ведомствах организована "на уровне детского сада". У нас, думаю, всё ещё печальнее -- ясли :) ну хотя бы потому, что практически весь софт западного производства. Поможет ли введение Чебурнета? Ну тактически, на несколько лет, возможно, но тут равняться на Китай глупо: и они и США сейчас с огромным отрывом в плане научных исследований лидируют (по криптографии например в США ежегодно международные научные конференции проводятся, а у нас в последний раз была такая 15 лет назад). Отключение от всемирного Интернета нам, в отличие от Китая, стратегически сделает совсем плохо, станут недоступны все научно-информационные ресурсы, и за считанные годы американский AI просто поглотит Чебурнет с потрохами.

Правильно -- активнейшая вписка в мировое научное сообщество, научно-промышленный шпионаж :) , очень качественная подготовка специалистов по computer science мирового уровня, и переформатирование учебных программ российских университетов по информатике.
"Я использую Ubuntu на отдельном ноутбуке. На нём нету интернет-соединения. Я переношу данные на обычной флешке между ним и Маками, на которых я работаю в интернете, или если нужна хорошая графика, но мои семейные драгоценности я доверяю только Linux. Кстати, для наилучшей клавиатурной фокусировки я работаю в классическом менеджере FVWM, а не в GNOME или KDE."
Дональд Кнут
Услуга: уговариваю за небольшие деньги не пытаться войти в ИТ :)