Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
931 links
ЛаМПовое с Бобровским
Download Telegram
В прошлом году американские кадровые ИТ-консультанты стали жаловаться на существенное снижение спроса со стороны разработчиков на их услуги -- причём впервые за 10+ лет, раньше постоянно был регулярный рост (даже, можно сказать, бум спроса на сеньоров в крупные компании). Началось падение ещё весной 2022-го, задолго до явления ChatGPT. С чего бы это? )))

Статья в Computer World, где поясняются причины и приводится весьма обширная статистика по сокращениям.

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

На картинке: как снижался интерес программистов к помощи карьерных консультантов (преимущественно поиск новой работы), а доходы этих консультантов упали на 70-90%. Они, кстати, берут приличный процент от того повышения зарплаты, которое получает клиент (а моя помощь курсантам по карьере бесплатна).
🤔9🫡6🔥3👏3👍1
Кто поклонник "Начала" Нолана и в целом многоуровневых фильмов "про подсознание", наконец появился его духовный наследник -- "Гипнотик". Очень хороший, рекомендую, многомерная реальность (только уже не во снах), местами в духе "Мистера Робота". Смотреть надо внимательно, и финал неплохой (только досмотрите после финальных титров, не пропустите).

Не знаю, почему у нас подобные фильмы не снимают? "Гипнотик" не особо бюджетный, а тема очень ходовая. Снять что-нибудь подобное, но пооригинальнее, чтобы например в финале, как во "Внутри Лапенко", оказалось, что вообще всё происходящее было шизой, как у Инженера или Эллиота.

P.S. Ёлки, не в тот канал отправил )))
🔥155🫡1
В России же ситуация на рынке труда такая, что джуниоры уже довольно давно особо никому не нужны, и спрос на высокооплачиваемых сеньоров ощутимо снизился (компании не хотят вкладываться в нестабильной обстановке; причём и в США спрос упал сильнее всего именно на них), а вот крепкие миддлы чувствуют себя прекрасно, и платят им хорошо, и компании предпочитают растить сеньоров из своих проверенных кадров.

Дело в том, что книги курсы по карьере (да и не только) хороши максимум на 80%, однако важнее всего внедрять некоторую методологию развития карьеры для конкретной ситуации конкретного человека, а это возможно только в индивидуальном порядке. Мне, кстати, особо интересно помогать ребятам, у которых в плане карьеры сложилась самая сложная ситуация, какая только могла сложиться :) Потому что в таких ситуациях и я сам здорово прокачиваюсь как тренер. Типичная болезненная ситуация: хороший миддл получил 1-2 оффера, и начинает паниковать и метаться ))) принять или нет? а если принять, как не продешевить по зарплате?

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

Главное ограничение индивидуальной помощи в том, что она не масштабируется. И при этом хочется помочь как можно большему числу людей, хм. (Уловка-22)
9👍4🤔1
Когда пишешь на языках с динамической типизацией )))

(Я действительно не понимаю, почему люди отказываются от преимуществ, предоставляемых системой типов)
🏆8👍52
Я не очень понимаю смысл асинхронного кода... например, зачем вам вообще нужно, чтобы ваш код был рассинхронизирован?
Anonymous Poll
69%
это сарказм
31%
это всерьёз
🤔3
"Intelligent Machines and Idiotic Humans: A Startup Story"
(идеи для AI-стартапов)

Серия 8. Мета-автоматизация.

8 направлений, по которым сегодня можно неплохо использовать ChatGPT в помощь программистам.

1. Использование в качестве помощника/ментора в обучении программированию. Для начинающих очень хорошо, решения несложных задачек подробно объясняются.
2. Мозговой штурм.
3. Генерация шаблонного кода под вашу задачу (с которым потом всё же придётся поразбираться, как и с ответами на SO). Полезно попутно просить сразу написать тесты к решению (возможно, со 100% покрытием).
4. Code review.
5. Написание документации к коду.
6. Аннотации данных для машинного обучения.
7. Перевод кода с одного языка на другой.
8. SQL-запросы к БД. Только надо подробно объяснить схему базы, зато можно также, например, просить построить визуальные представления (мапы, графы...).

Кроме того, саму эту деятельность во многом можно автоматизировать с помощью AutoAI-ботов, я бы с удовольствием за такой сервис платил, если его установка будет простой и быстрой.
🔥6🫡21
"World Wide Web получился ровно таким, которого мы всеми силами старались избежать: отсутствие необрываемых ссылок, постоянно меняющиеся или отсутствующие ссылки, цитаты, которые вы не можете отследить до оригинала, отсутствие версионного контроля и контроля за правами..."
— Ted Nelson, изобретатель гипертекста, легендарный ИТ-пророк, особо недолюбливающий HTML/XML и браузеры :)

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

"Generative AI is the source of digital effluence that is releasing massive quantities of textual shit, leaving a stain on everything it touches. As several others have observed, this moment in time delineates the Web not unlike nuclear testing did for low background steel."
-- Гради Буч, автор UML, IBM Research
👍12👌1
Теория типов -- это наука о том, как взять всю красоту программирования и сжать её до нескольких (почти никому не понятных) строк с математическими буковками. Или же, теория типов -- это искусство обнаружения того, как тонкие аспекты математических определений приводят к появлению новых странных универсумов программирования.
🤔13👍2🔥2🫡2
2022: К 2030-му рынок метаверсумов составит 5 триллионов долларов.
-- McKinsey

Ну и где теперь это всё?

2023: В ближайшее время генеративный AI будет ежегодно добавлять мировой экономике 4,4 триллиона долларов.
-- McKinsey

Ну штош... А не отнимать ли?
👍5🤔3🔥1
Простые способы удерживать сложность проекта разумной, если вы не пишете highload на 100k rps.

-- синхронное, а не асинхронное
-- последовательное, а не мультитредовое
-- stateless, а не stateful

Особенно строго придерживайтесь этого, когда добавляете новые фичи в уже работающий проект.

Если вы всё же склоняетесь ко вторым вариантам, получите убедительные доказательства, что они вам действительно необходимы.
👍15🫡6🔥3
Я люблю дедлайны. Мне нравятся звуки, с которыми они пролетают мимо.

-- Douglas Adams ("Автостопом по галактике")
👍71
...В течение десятилетий мы боролись с использованием объектно-ориентированных языков, таких как Java или C++, чтоб объяснить эти простые идеи, и все время терпели неудачу. И я могу сказать тем из вас кто не вовлечен в сферу академического образования в данный момент, многие из моих коллег по всему миру находятся в той же ситуации, и отчаялись найти выход из нее. Уродливая методология, "шаблоны проектирования", "руководства по стилю", все они мешают преподавать принципы программирования. И даже если это отодвинуть в сторону, вы по-прежнему придерживаетесь императивного программирования на эфемерных структурах данных. Это просто не работает, поскольку это фундаментально неправильная вещь. Просто попробуйте преподать, скажем, удаление в двоичном дереве поиска; это ужасающая путаница! Вы закончите абсурдной ерундой "null-указателей", и сложной путаницей вызванной методологией, а не самой задачей. Очень скоро вам придется прибегнуть к "шаблонам" просто чтобы дать студентам шанс довести до конца что-нибудь вообще, отдаляя их от существа идей и создавая впечатление, что программирование болезненно и уродливо, что является огромной трагедией.

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

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

-- Роберт Харпер

Выложил в СильныеИдеи два больших материала, где разбираем его подходы, хотя бы на уровне базового понимания.

Ну и в целом вся моя Школа построена по схемам Харпера и других святых computer science из лучших университетов мира -- обучаю фундаментальным принципам программирования.
👍18🔥81
Может ли AI работать в паре по XP + TDD вместо белковых ?

Рекомендовано Кентом Беком => can-ai-play-the-tdd-pairing-game
1👍1
Программист должен уметь мыслить в терминах концептуальных иерархий, которые намного глубже, чем когда-либо приходилось сталкиваться одному уму.
-- Эдсгер Дейкстра

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

(только программисты могут лайкать этот пост)
50🙏43🫡3👍1
Продолжение темы про интерфейсы.

...Если мы хотим сделать интерфейс в функциональном стиле (с поддержкой иммутабельных значений), то Java и подобные языки это не позволят. Например, метод pop() для стека, согласно допустимой сигнатуре интерфейса стека, может возвращать только результат выдачи из стека, а где новый иммутабельный стек после обновления? Где-то в коде также должен быть определён явный конструктор, который создаёт пустой стек, но его придётся привязывать к конкретной реализации. А если push() возвращает новый стек с добавленным элементом, из его сигнатуры невозможно вывести, что новый стек должен быть такой же реализации, как и исходный стек.

Поэтому реализация интерфейсов в Java может быть только императивной.
🤔7🔥2🫡21
В продолжение про интерфейсы.

В принципе, можно использовать паттерн Factory для параметризации реализаций функции, создающей новый стек -- параметр типа для привязки фабрик к соответствующим стекам. Однако, если подумать и поэкспериментировать, окажется, что этого маловато будет :)

Тут ещё потребуется нечто , называемое F-ограниченным полиморфизмом ( F-bounded_quantification ), чтобы убедиться, что "входящие" и "выходящие" стеки имеют одинаковую реализацию.

Что-то вроде

interface Stack<T extends Stack<T>> ...

И всё равно это кривоватые приляпки (например, Curiously recurring template pattern, на котором была основана вся Microsoft C++ Active Template Library :), мешающие наглядно показать в коде, как программа может использовать стек, не зная, какая именно это реализация...

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

(Из свежего материала в СильныхИдеях "Модули важнее всего", где поясняется с помощью Роберта Харпера, как об этом всём правильнее думать и рассуждать)
9👍1
По теме system design на собеседованиях любят гонять по архитектурам крупнейших сервисов -- типа, они же эталон, расскажите, как бы вы сделали клон фейсбука или нетфликса.

Да, но, например, Twitter встраивает каждый твит на вашу страницу как iframe, загружая попутно более мегабайта (!) JavaScript, выполняет при этом 20+ HTTP-запросов и использует более 100 DOM-узлов. И в других ютубах инстаграммах ничуть не лучше (вот разве что тг неплохо спроектирован)...

Ну и чему вы "научитесь"?

Я поэтому даже по технической теме SD и архитектур акцент на курсах делаю на фундаментальных, университетских знаниях, без понимания которых у вас и будут получаться только одни твиттеры.
👍14🔥63🤯3
В продолжение темы интерфейсов.

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

С одной стороны, компилятор автоматически выбирает нужную функцию в зависимости от того, как будет использоваться результат, а с другой, для каждого типа может быть только одна такая функция. Если вы хотите иметь два разных способа, например, сериализации некоторой сущности, то извините! Ну или пишите по-хипстерски Serialize1 и Serialize2 :)
👍1🤔1
Готовлю курс по SAT/SMT-солверам (в этом месяце будет бесплатно доступен регулярно у меня занимающимся), будем решать с помощью Z3 вот подобные задачки )))

По тропинке вдоль кустов
Шли 11 хвостов.
Сосчитать я также смог,
Что шагало 30 ног.
Это вместе шли куда-то
Петухи и поросята.
А теперь вопрос таков:
Сколько было петухов?
И узнать я был бы рад,
Сколько было поросят?
🔥16🫡6
Обожаю AI -- настоящий душнила! )))
Отвечает ведь вполне логично, как программист, не придерёшься. Типа, разговор разработчика с менеджером-постановщиком.
👏11👍4💯2😇21