Лаборатория Математики и Программирования Сергея Бобровского – Telegram
Лаборатория Математики и Программирования Сергея Бобровского
1.29K subscribers
1.19K photos
24 videos
932 links
ЛаМПовое с Бобровским
Download Telegram
В мире продолжается взрывной рост технологий, спецов для которых катастрофически не хватает. В США финансирование военному агентству передовых исследований DARPA по теме искусственного интеллекта на очередной финансовый год увеличено с 50 до 250 млн. долл., а AI в рамках Национального научного фонда NSF будет развиваться не на нынешние 500, а уже на 800 млн. долл. Кроме того, на гражданские проекты до 2022 г. будет удвоено финансирование по направлениям AI и квантовых вычислений ($25 млн. выделено на создание национального квантового интернета).

Но, где на это всё взять разработчиков? :) NSF выделил на подготовку AI-специалистов 50 млн. долл., и на фоне вот таких всплесков финансирования постоянно возникают новые тренды на рынке труда. Свежачок -- это рост в 2019-м в 14(!!!) раз спроса на программистов виртуальной и дополненной реальности, по данным Hired.com. Зарплаты скакнули с 135 до 150 тыс. долл./год. А я ведь всем рекомендую входить в IT через мобильную разработку, это всё идеологически близкие темы -- мобилки, гаджеты, AR/VR, IoT. Интересно, что несмотря на многолетние жалобы на кризис рынка игр, количество вакансий в геймдеве увеличилось в полтора раза. И на 90% вырос спрос на специалистов машинного обучения.
👍1
В группе по машинному обучению я выложил очередной ноутбук, по классификации текстов, тема в тренде: в феврале Microsoft шокировала AI-коммьюнити выпуском языковой модели Turing Natural Language Generation (T-NLG) с 17 миллиардами параметров. По качеству она превосходит и Google BERT, и OpenAI GPT-2, демонстрирует человеческий уровень и в генерации текстов, и в ответах на вопросы. Пока стоимость её эксплуатации высока, но пройдут считанные годы...
https://www.microsoft.com/en-us/research/blog/turing-nlg-a-17-billion-parameter-language-model-by-microsoft/

Интересные рассказываются в посте нюансы оптимизации нейросеток, в частности, выложены в опенсорс ZeRO optimizer и библиотечка DeepSpeed , совместимая с PyTorch
https://github.com/microsoft/DeepSpeed
Тренировали модельку на NVIDIA DGX-2.

Интересующимся этой темой порекомендую свежачок -- датасет TyDi QA , набор из 200 тысяч вопросов-ответов на 11 языках, включая русский
https://ai.google.com/research/tydiqa
Какая самая популярная айтишная работа сегодня? По данным Dice.com за 2019-й год, по количеству вакансий топчик это абстрактный Software developer в вакууме (ну, кто бы сомневался). Более конкретный Senior software developer, наша стратегическая цель, на четвёртом месте.
https://spectrum.ieee.org/view-from-the-valley/at-work/tech-careers/whats-the-hottest-job-in-tech

Самой быстрорастущей специальностью стал Data engineer (рост на 50%), на втором месте бэкендер +38%.

Наконец, в плане конкретных скиллов, чаще всего упоминается SQL , потом Java, JavaScript, управление проектами, Python, Linux, Oracle, C#, Scrum (аджайл) и QA. А самыми быстрорастущими скиллами стали Kubernetes +82% (это тоже понятно), Docker, Azure (немного неожиданно, Microsoft напирает), DevOps.
👍1
Отрыв США и Китая от остального мира в области искусственного интеллекта продолжает расти, и это уже совершенно реальная угроза. Евросоюз выработал ряд стратегий, призванных поддержать европейский AI-бизнес, но уже несомненный факт, что конкурировать в сфере AI сегодня стало тяжело уже даже хорошо развитым странам, и дальше будет только сложнее, потому что все ведущие умы давно разобраны по корпорациям с космическими зарплатами.
https://techcrunch.com/2020/02/19/europe-sets-out-plan-to-boost-data-reuse-and-regulate-high-risk-ais/

Это ведь не программирование, где научить кодить можно почти любого, в AI/ML всё же математика нужна. Да и самих программистов, начиная с джунов, постепенно будут заменять боты: свежак от Microsoft (посмотрите на фамилии, ага), модель CodeBERT, обученная поиску и генерации "документации" не только для естественных языков, но и для языков программирования.
https://arxiv.org/pdf/2002.08155.pdf
Интересная заметка, в которой Бертран Мейер рассуждает о двух подходах к подготовке программистов: классическом академическом, и на всевозможных частных школах и курсах.

https://cacm.acm.org/blogs/blog-cacm/242741-there-is-more-than-one-way-to-become-a-good-programmer/fulltext

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

there are excellent programmers out there who may not know the difference between PSPACE and EXPSPACE but still churn out efficient, well-structured and bug-free code day in and day out.

Более того, даже многолетнее обучение в университете имеет ряд недостатков (например, непосредственно программированием там занимаются не так уж и много, да и слишком энергичное следование ИТ-трендам не поощряется, что в общем-то и правильно). И кстати, на различные онлайн-курсы приходит довольно много ребят с университетскими дипломами, по сути как на курсы повышения квалификации, потому что одна из самых лучших схем подготовки -- это "intensive hands-on program with personal coaching".

Да, далеко не каждый может стать хорошим программистом, однако раньше многие способные люди даже и не мечтали об этом. Университеты работают на некоторых, но не на всех. И поэтому для многих других, ярких и амбициозных личностей, чей внутренний программист жаждет выхода на свет, всевозможные онлайн-школы и курсы по программированию вполне могут стать как раз тем самым катализатором, который им нужен.
Вернёмся немного в прошлое (которого как оно было последнюю десятилетку, уже больше никогда не будет), всего на месяц назад, пока вот это вот всё ещё не началось: в начале 2020-го огромный и постоянно растущий спрос на айтишников оставался уникальным на фоне всего остального рынка труда, где работодатели обычно размещали в январе-феврале ощутимо меньше вакансий. А вот спрос на программистов продолжал бить рекорды удивительным образом: в начале каждого года количество вакансий ежегодно достигало пика, начиная с 2014-го года!
https://fortune.com/2020/01/22/new-year-january-job-hunt-how-to-succeed/

7 из 10 компаний планируют схантить разработчика в первое полугодие, акцент на облачных вычислениях, базах данных и кибербезопасности; при этом в 75% случаев предлагаются очень хорошие дополнительные бонусы.
http://rh-us.mediaroom.com/2020-01-14-Survey-75-Of-Tech-Leaders-Say-Their-Company-Offers-Extra-Perks-Or-Benefits-To-Sweeten-Pot-For-IT-Pros

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

Основная масса вакансий (11% от вообще всех вакансий, включая и нетехнические!) приходятся на программиста-миддла и программиста-сеньора. Список языков типичен: Java, Python, JavaScript, C#, Си/C++.

Tim Tully, CTO Splunk, отмечает, что самая важная черта, которой подчас не хватает многим кандидатам -- это сильное желание учиться.

Tully называет пять важных навыков для современных highload-проектов:
-- управление данными в реальном времени;
-- думать над проектом не просто как кодировщик, а как проектировщик;
-- мобильная разработка (все дружно захотели мобильные версии своих веб-систем);
-- AI / ML;
-- мета-навык (ага, я только вчера об этом говорил!) -- умение правильно комбинировать и развивать эти четыре навыка.

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

1) подробнейший гайд вообще по всем сопутствующим темам
http://odeskconf.github.io/guide/

Из литературы по развитию карьеры кстати рекомендуются три американские книги (на русский не переводились), именно на которых я сейчас и развиваю бесплатный курс карьеры для тех, кто "на сервере".

2) хороший блог о фрилансе, рекомендую всё изучить
https://zen.yandex.ru/id/5a8801bdc89010921435fddd

3) ещё отличное руководство для начинающих на апворке
https://jff.name/how-to-upwork/

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

"c 2013 года работаю удаленно, в тоже время начал писать блог jff.name про фриланс и Upwork. С течением времени благодаря блогу появились и другие проекты связанные с фрилансом: книга, slack чат, подкаст, группы в социальных сетях"
На фоне всей этой мутной шелухи ещё более незаметно подкрадывается очередная технологическая революция, которая судя по всему окажется ещё круче, нежели машинное обучение, которое и так даёт удивительные результаты. Вы наверняка периодически читаете новости про квантовые вычисления (quantum computing) с невероятным вычислительным потенциалом, и вот они следом за ML тоже весьма сильно пошатают самый фундамент computer science.
В частности, большие надежды на QC возлагаются конечно применительно в первую очередь к AI/ML, где процессорные ресурсы очень важны. Но для этого предстоит эпическая работа по перепроектированию нынешних алгоритмов и фреймворков под квантовые калкулусы. Кто тут в первых рядах, понятно: Google AI в марте анонсировала релиз TensorFlow Quantum для работы в квантовых архитектурах.
https://ai.googleblog.com/2020/03/announcing-tensorflow-quantum-open.html

"Nature isn’t classical, damnit, so if you want to make a simulation of nature, you’d better make it quantum mechanical” Richard Feynman

Для PyTorch квантовая надстройка вот тут: https://pennylane.ai/

Из других полезняшек, Google Cloud AI Platform -- очень классная вещь, когда надо быстро спроектировать ML-прототип, но возможностей обычных ноутбуков не хватает, нужно всё же что-то приближенное к реальной архитектуре. Жаль, что только TF поддерживается, ну это понятно, ведь торч это фаворит фейсбука, гугловского соперника.

Ну и при желании можно потренироваться в прогнозировании эпидемии коронавируса :)
https://www.kaggle.com/sudalairajkumar/novel-corona-virus-2019-dataset/tasks

P.S. Я выложил кстати вчера новый нотубук по free.ai, определение позиции лица на изображении с тренировкой по аугментации данных.
The Coronavirus Quarantine Developer Skill Handbook
рекомендации от Quincy Larson, создателя freeCodeCamp.org

Что сейчас делать? Скачать новый сериальчик? Установить новую игру? Выглянуть в окно на пустую улицу, допить всё что осталось и завалиться спать?

Или всё же стать чуточку взрослее?

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

-- развивать свои скиллы (онлайн-обучение)
-- строить свою репутацию (блог и гитхаб)
-- взращивать сеть полезных социальных контактов (нетворкинг)

Из хард-скиллов Quincy Larson в 2020-м рекомендует подналечь на фронтенд (JavaScript, ...), Computer Science, Python и его библиотечки применительно к data science, командную строку (линукс, git, bash).

A lot of people freak out about computer science because they "suck at math" or because they took some Java course 10 years ago and hated it. Well I've got good news for you all – computer science doesn't have to be a grind. It can be quite fun.

Много подробных рекомендаций и ссылочки на полезные ресурсы, включая сотни бесплатных университетских курсов:
https://www.freecodecamp.org/news/coronavirus-academy/
Google TensorFlow, Facebook PyTorch -- и вот теперь Microsoft Windows ML.

TF -- это мощная экосистема, включая Keras, плюс поддержка Google.
При поддержке Facebook появился его реальный конкурент PyTorch (что всегда хорошо). Развивается он очень энергично, тоже быстро обрастает фреймворками, и очень показательно, что OpenAI выбрала его в качестве базовой платформы.

Однако к ним пытается хоть немного подтянуться Microsoft, выпустившая Windows ML: With Windows ML, developers can use trained ML models in Windows apps that are written in C#, C++, JavaScript, or Python, either locally on a Windows 10 device or on a Windows Server 2019 machine.
https://blogs.windows.com/windowsdeveloper/2020/03/18/extending-the-reach-of-windows-ml-and-directml/

В её основе DirectML -- своеобразный низкоуровневый аналог DirectX для задач машинного обучения (стиль разработки будет понятен всем, кто юзал DirectX 12).
Основана Windows ML на ONNX Runtime, в которую конвертируются модельки Tensorflow, Keras, PyTorch, scikit-learn, CoreML и др.
https://github.com/microsoft/onnxruntime

И вот формально с этого марта Windows ML стала встроенной в Windows 10; официальные Windows ML redistributable появятся в мае, но экспериментировать можно уже сейчас.
Насколько перспективны в плане работы квантовые вычисления?

Они крайне перспективны потенциально, поэтому IBM, Microsoft, Google вкладывают очень большие средства в квантовые компьютеры, однако пока эти проекты, понятно, больше академические. Зарплаты там заоблачные, но и попасть с улицы в такие проекты сложно. И тем не менее довольно много крупных фирм уже сегодня ищут специалистов с хорошим STEM-образованием, а главное, что государственные структуры облизываются на пост-квантовую криптографию, которая уничтожит все нынешние криптотехнологии. Китайцы втихомолку развивают мощную квантовую систему, способную взломать public key encryption :)

Поэтому MIT и Колумбийский университеты начали готовить преподавателей по этим темам, ну и учитывая нынешний дефицит специалистов по компьютерной безопасности, можно предположить, что растущий кризис образования и талантов вкупе с всё больше наглеющими хакерами существенно ускорит внедрение квантовых технологий, которые невозможно взломать физически (кубиты при любом внешнем наблюдении случайно соскакивают в 1 или 0).

Гиганты уровня ИБМ готовы вкладывать буквально бесконечное количество денег в это всё, но проблема, что подходящих спецов нету. Ну и постепенно растёт число стартапов, которые нередко организуют лица, имеющие доступ к этим безумным бюджетам.

Прогнозы рекрутингового агентства StrategicQC по поиску квантовых инженеров такие что, что квантовые вычисления дадут серьёзный плюс в конкуренции в сферах финтеха, аэрокосмической промышленности, обороны, здравоохранения, телекоммуникаций, энергетики, транспорта, сельского хозяйства -- практически везде, как и AI/ML. Пока это экзотика, но через 2-3 года спрос вполне может стать взрывным.

Как минимум, рекомендую для начала освоить самые азы этой темы (чтобы уметь хоть немного поддержать такую тему на собеседовании, или невзначай вставить умные слова в разговоре), разобраться с четырьмя вещами: понятием кубита, бра и кет Дирака, суперпозицией и запутанностью; а в идеале, понять, при чём тут матричная алгебра.
Бертран Мейер предлагает теорему о кратчайшем графике, которая уже 15 лет подтверждается эмпирически, но есть нюансы (это всё про "Мифический человеко-месяц" Брукса, но действительно ли 9 женщин не родят ребёнка за один месяц? или хотя бы за полгода?):
https://cacm.acm.org/magazines/2020/1/241718-in-search-of-the-shortest-possible-schedule/fulltext

Чем позже добавляются люди в проект, тем меньше эффект от них, и вот тут найдено некое фундаментальное ограничение, которое на практике пока не нарушалось: есть "nominal project" (когда мы выполнили временно-стоимостную оценку и нашли оптимальную точку по ресурсам), и с одной стороны, действительно, в такой ситуации вкладывая деньги в проект (в частности, нанимая людей), мы сокращаем сроки. Однако есть и эмпирическое ограничение, которое подтверждается во множестве крупных проектов: сколько бы дополнительных средств мы не вкладывали в проект, мы не сократим время его реализации более чем на 25% от оптимального.

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

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

Сермяга в том, что если подойти к организации проекта по научному, то, приложив все усилия, можно весьма существенно сократить сроки его сдачи.

Дико уважаю Мейера, на его книгах во многом мои курсы по ООАП основаны.
Подчас вместо хитроумных архитектурных оптимизаций гораздо лучше работают простые дедовские способы :)
Меня спрашивают периодически, стоит ли в достаточно большом проекте ориентироваться на один стек, или лучше несколько стеков? Как лучше распределять ответственность разработчиков? Я всегда привожу в пример Гугл и Фейсбук.

В Google множество разных стеков, и на каждом из них как правило пилится своя инфраструктура, свой фреймворк, а в Facebook 95% решений основываются на одном и том же стеке и одном наборе инструментов. Из этого следует и ответственность за код: в Фейсбуке лозунг "Nothing at Facebook is someone else’s problem", команды легко перебрасываются с проекта на проект. В Гугле наоборот допуск к конкретному коду просто так не получить, вплоть до того, что программисты получают файлы кода "в собственность".

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

Поэтому, если вы занимаетесь созданием технологий, лучше специализируйтесь, добавляйте побольше приватности в проект. Технология -- вещь довольно абстрактная, гораздо важнее специалисты, которые очень хорошо разбираются в узких темах.
А если пилится продукт -- то это обычное производство, где чем универсальнее программисты и чем проще инструменты, тем лучше.
Немного в дополнение вчерашнего про выбор между Гуглом и Фейсбуком.
2,8 миллиарда пользователей Facebook, 11 ЦОДов в США, 3 в Европе, 1 в Азии, и в них при аналогичной вычислительной нагрузке, как в том же Google, используется на 38% меньше электричества и на 80% меньше воды для охлаждения, нежели в среднем по миру, потому что очень круто оптимизирован весь их единый стек.
Отличный наглядный гайд по введению в основные темы искусственного интеллекта от Оксфорда:
https://atozofai.withgoogle.com/

В прошлом году Google выпустила умный спелл-чекер для бизнес-пользователей G Suite Gmail, чтобы избегать таких ошибок, когда босс требует срочного отчёта, лупишь по клавишам, пишешь "мы с Саньком его почти оформили", а отправляется "мы с маньяком его почти оформили". И вот Microsoft выкатила Microsoft Editor: "an AI-powered service that enables you to write with confidence in 20+ languages"
https://techcommunity.microsoft.com/t5/microsoft-365-blog/introducing-microsoft-editor-bring-out-your-best-writer-wherever/

Скоро, скоро уже это всё доберётся и до программистов :)
Прочитал с десяток статей в американских изданиях, посвящённых трендам по ИТ-работе, свежачок март-апрель — пока вообще нигде ничего нету про кризис и эпидемию в отношении программистов. Так что, не парьтесь 😉

Вот например 24 марта
https://devops.com/what-the-best-developers-do-to-be-great-at-their-jobs/
Спрос на программистов к 2028-му вырастет на 21%, но при этом их средний уровень будет падать. К 2023-му количество программистов в мире разрастётся до 27,7 миллионов человек, и конкуренция будет расти как за хорошие вакансии, так и за хороших специалистов.

3 апреля
https://www.informationweek.com/strategic-cio/team-building-and-staffing/it-recruitment-time-to-take-a-non-traditional-path/a/d-id/1337263
В США полмиллиона вакансий, причём 60% компаний не могут их закрыть 12 месяцев и более. При том, что иммиграция сократилась на 70% в 2019-м, приходится массово переучивать на программистов многих людей среднего возраста, и активнее привлекать домохозяек и мамочек.

Очень интересный тренд-- активное применение AI/ML к поиску подходящих специалистов.
https://www.zdnet.com/article/how-artificial-intelligence-and-machine-learning-are-used-in-hiring-and-recruiting/
Mark Brandau, principal analyst on Forrester's CIO team, заявил, что в этом направлении идут все компании, и за этим однозначно будущее.
Hilton, Humana, AT&T, Procter & Gamble, CapitalOne не только напускают роботов на сайты с вакансиями, но и используют их для организации интервью, проведения (пока) первичного тестирования и т. д.
Потенциально перспективные направления, где можно запилить хороший стартап, это
выявление с помощью AI реально талантливых специалистов, оперативное общение ботов с кандидатами и грамотная их фильтрация.

Что лучше -- набрать на интервью несколько слабых кандидатов, или отсеять одного сильного? Конечно главное не упустить хорошего спеца, который не будет ждать, когда ему перезвонят через две недели.
Ровно за это как стратегический подход я всё время топлю:
https://github.com/fabianfett/pure-swift-json

Fabian переписал json encoder/decoder просто на чистый Swift, без использования сторонних библиотек и без фреймворка Foundation, и получил выигрыш в быстродействии на macOS 1.5-2 раза, а на линухе 8-10 раз(!). Понятно, что универсальные фреймворки существенно ускоряют процесс разработки в целом, однако в каждом конкретном проекте таятся огромные ресурсы в плане оптимизации (которую, главное, не надо делать преждевременной :), ну и в идеале под свой проект (категорию схожих проектов) лучше пилить оригинальный, шустрый, лёгкий, максимально нативный фреймворк/движок (и в идеале, на базе хорошей формальной математической модели). Таким образом из инструмента, первоначально задумывавшегося под узкий спектр задач, можно вырастить отличный продукт для правильных пацанов, который по скорострельности будет в десятки/сотни раз бить универсальные технологии.

Кстати, Fabian молодец, вовремя подсуетился -- пилит мобильное приложение для немецких аптек. Обратите внимание на его социальные скиллы:
Are you currently in Berlin? Let's grab a coffee. I'm always eager to learn about new ideas and I'm willing to help great products succeed.
Выбор в проекте между реляционными СУБД и NoSQL, это вообще-то "выбор" между ортогональными понятиями.
В РСУБД (точнее, в реляционной модели) отношения всегда нормализованы и находятся в первой нормальной форме, и именно к ним мы применяем операторы реляционной алгебры. Вообще, строго говоря, реляционная модель декларативна, то есть вопросы реализации (как конкретно мы получаем результат), в ней не рассматриваются в принципе.
NoSQL -- это прежде всего простые запросы в конкретном движке, часто без какой-либо сильной теории в своей основе, их производительность довольно хорошо предсказуема, и работают они шустро как раз потому что данные денормализованы (это конечно тоже надо уметь делать правильно). Поэтому в случае NoSQL надо смотреть не на универсальную мощность API, а на операционные характеристики под конкретную задачку, и тут удобно получается оценивать буквально нативно, по чистому критерию процессорной нагрузки, облачные системы наподобие DynamoDB.
Когда ты Мастер, и отлично разбираешься в теории того, чем занимаешься, то уже что ни делай, всегда будет шедевр.

Andrej Karpathy
ok I'm pretty sure I wrote the tiniest autograd engine with a neural net library on top of it, weighing about ~50 LOC for the engine, ~50 LOC for the neural net library, and it's super cute and totally works. MicroGrad

Поизучайте ноутбук, это восхитительно :)
https://github.com/karpathy/randomfun/blob/master/MicroGrad.ipynb