Category: Разное

01
Июл
2021

🧭 Не только игры: VR/AR-разработка – профессия будущего

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

Что такое VR/AR?

Термин «виртуальная реальность» относится к трехмерной среде, созданной компьютером. VR – это полностью цифровой опыт, который может имитировать или полностью отличаться от реального мира.

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

Чтобы больше узнать о видах и технологиях VR и AR рекомендуем прочитать гайд по виртуальным мирам из «Библиотеки программиста».

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

Экскурс в историю

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

  • Сама концепция виртуальной реальности – иллюзорного опыта неотличимого от реального, существует довольно давно. В 1935 году писатель-фантаст Стэнли Вейнбаум написал рассказ «Очки Пигмалиона». В нем главный герой встречает профессора, который изобретает очки, позволяющие ему попасть в виртуальный мир.

  • В 1957 году кинематографист Мортон Хейлиг изобрел Sensorama, мультимедийное устройство для театрального шкафа, которое предлагало зрителям интерактивный опыт. Sensorama представляла собой механическое устройство, включающее цветной стереоскопический дисплей, вентиляторы, излучатели запахов, стереофоническую звуковую систему и подвижное кресло. Оно имитировало поездку на мотоцикле по Нью-Йорку и создавало впечатление присутствия.

  • В 1961 году два инженера Philco Corporation создали первый налобный дисплей (HMD) под названием Headsight. Он имел два видеоэкрана, по одному на каждый глаз, а также устройство магнитного слежения. Это было первое устройство отслеживания движения, которое дало возможность пользователю осматривать окружающую среду, не находясь там физически, при помощи удаленной камеры.
  • К 1980-м годам термин «виртуальная реальность» популяризировал Джарон Ланье. Он основал лабораторию визуального программирования VPL и разработал вместе с Томом Циммерманом ряд устройств, в том числе Dataglove, перчатку для взаимодействия человека с компьютером и шлем VR EyePhone HMD, что сделало VPL первой компанией, которая начала продавать очки виртуальной реальности.
  • В 1990-е годы появились первые массовые коммерческие гарнитуры VR. В 1992 году журнал Computer Gaming World предсказал «доступную виртуальную реальность к 1994 году».
За последние 10 лет мир виртуальной и дополненной реальности значительно продвинулся в развитии в результате конкуренции технологических гигантов. Amazon, Apple, Facebook, Google, Microsoft, Sony и Samsung создали собственные подразделения VR и AR. С началом пандемии COVID-19 отрасль переживает очередную волну роста, на фоне вызванного вынужденной самоизоляцией спроса.

Где применяется VR/AR

Несмотря на популярность VR/AR в игровой отрасли, сферы применения этих технологий не заканчиваются на компьютерных играх и Pokemon Go. Рассмотрим далее перспективные из применений.

Торговля

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

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


  • Различные компании пытаются предоставить опыт покупок в виртуальной реальности, в том числе европейский розничный торговец ASOS, который инвестировал в компанию по разработке программного обеспечения Trillenium.
  • Трудно представить, как будет выглядеть мебель в вашем доме, даже если осматриваешь ее в салоне, поэтому многие покупатели хотят использовать AR при покупке мебели.
  • IKEA и Wayfair – всего лишь два ритейлера из множества, которые помогают покупателям визуализировать мебель и товары в их доме благодаря технологии дополненной реальности.
  • Кроме того AR можно использовать для повышения вовлеченности в магазинах. Некоторые розничные продавцы, в том числе LEGO и Best Buy, используют элементы дополненной реальности в своих офлайн-магазинах, чтобы удивить и заинтересовать потребителей.

Образование

Онлайн-образование в настоящее время является очень востребованным. Многие в секторах сейчас повышают свой технический уровень, обращаясь к VR и AR, чтобы обеспечить расширенный опыт. Это делает обучение более доступным, дешевым и повышает уровень удержания знаний.

Использование виртуальной реальности для экспериментального обучения дает множество преимуществ:

  • VR может имитировать реальные жизненные ситуации;
  • использование ИИ для общения с аватарами и изменения исхода ситуации в зависимости от действий ученика;
  • отсутствие ограничений по времени;
  • обучение и практику можно разделить на более мелкие фрагменты по сравнению, например, с тренировочными днями;
  • VR среда обладает широкими возможностями настройки. Это улучшает эмпирическое обучение, сделав упражнение значительно более реалистичным.
  • использование VR – более увлекательный способ обучения, поскольку он полностью привлекает внимание;
  • виртуальная реальность стимулирует память во время обучения. Это полезно для запоминания в долгосрочной перспективе и более эффективно, чем пассивное вспоминание, такое как перечитывание информации или просто просмотр видео.
Кроме того дополненная реальность помогает педагогам вовлекать учеников с помощью динамических 3D-моделей, наложений релевантных фактов и визуальной информации по темам, которые они изучают. Студенты могут получить доступ к информации в любом месте и в любое время без специального оборудования.

Здравоохранение

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

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

AR делает важную информацию доступной для хирургов в пределах их поля зрения во время операции. Стартапы строят технологию AR для поддержки цифровой хирургии, трехмерной медицинской визуализации и специальных операций.

Навигационные системы

AR способна повысить эффективность навигационных устройств. Информация может отображаться на лобовом стекле автомобиля с указанием направления и места назначения, погоды, местности, дорожных условий и информации о дорожном движении. С 2012 года швейцарская компания WayRay разрабатывает голографические системы навигации с дополненной реальностью, в которых используются голографические оптические элементы для проецирования информации о маршруте, включая направления, важные уведомления и достопримечательности, прямо в зоне прямой видимости водителей. На борту морских судов AR позволит наблюдателям на мостике отслеживать важную информацию, такую ​​как курс и скорость судна при движении.

Строительство

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

Архитекторы годами используют 3D-модели, но использование иммерсивных инструментов, поможет понимать и исследовать пространство на самом глубоком уровне, видеть здание «сквозь стены», просматривать его внутренние объекты и планировку.

Развлечения

Туристическая индустрия использует обучающие видеоролики, чтобы продавать направления и поездки с помощью виртуальной реальности. Такие сервисы, как Discovery Channel и Google Expeditions, позволяют людям поплавать с акулами в Тихом океане, исследовать коралловые рифы или поверхность Марса.

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

VR дает организаторам мероприятий возможность приглашать больше людей. Например, Пол Маккартни в 2016 году выпустил запись концерта в VR 360. Многие музеи предлагают виртуальные туры с возможностью приблизиться к экспонатам не выходя из дома, а также AR приложения, которые позволяют лучше ориентироваться и получить больше информации в залах музея.

Техническое обслуживание

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

Искусство и дизайн

Дэвид Эм был первым прекрасным художником, создавшим в 1970-х годах виртуальные миры, по которым можно перемещаться. Среди других художников, исследовавших потенциал VR-технологий в 1990-е годы, можно назвать Джеффри Шоу, Ульрику Габриэль, Чар Дэвис, Морис Бенаюн, Knowbotic Research, Ребекку Аллен и Перри Хоберман.

AR, применяемая в изобразительном искусстве, позволяет объектам или местам вызывать художественные многомерные переживания и интерпретации реальности. Дополненная реальность способствует развитию визуального искусства в музеях, давая возможность посетителям просматривать экспонаты в галереях в многомерном виде через экраны смартфонов.

Социальные сети

Некоторые организации создают социальные сообщества в пространстве VR, такие как vTime, AltspaceVR, Oculus Rooms, Mozilla Hubs и VRChat, а также социальные виртуальные миры, которые изначально были разработаны без поддержки VR, например Roblox.

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

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

Перспективы

Мы перечислили лишь некоторые области внедрения технологий AR/VR в повседневную жизнь и работу. Существуют сотни других применений и они могут повлиять на рабочее место, хобби и социальную жизнь раньше, чем мы предполагали. Корпоративные приложения AR и VR могут стать чрезвычайно ценными в самых разных контекстах.

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

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

Если вам интересно это направление, рекомендуем ознакомиться со статьей «Как освоить разработку приложений AR/VR с нуля», где описаны основные навыки и инструменты, которые могут потребоваться новичку.

***

А если вы всерьез решили углубиться в профессию и стать разработчиком VR/AR, стоит обратить внимание на «Факультет разработки VR/AR» образовательной онлайн-платформы GeekBrains. Там вы научитесь делать игры и мобильные приложения, а также получите востребованную специальность и возможность работать на фрилансе или в крупной IT-компании. На факультете GeekBrains изучают язык C# и движок Unity, а также на практике учат создавать продукты с VR/AR-технологиями – выпускники смогут добавить в портфолио 14 реализованных проектов.

22
Июн
2021

🛠 Лучшие инструменты No-Code для разработчиков в 2021 году

Существует множество инструментов no-code, но выбрать правильные сложно. В небольшом обзоре мы выделили лучшие продукты для разработчиков, которые будут активно использоваться в 2021 году.

22
Июн
2021

🛠 Лучшие инструменты No-Code для разработчиков в 2021 году

Существует множество инструментов no-code, но выбрать правильные сложно. В небольшом обзоре мы выделили лучшие продукты для разработчиков, которые будут активно использоваться в 2021 году.

15
Май
2021

🔀 SDLC модели: как выбрать правильный подход к разработке и не завалить проект

В этой статье Вадим Кулага, проектный менеджер EPAM Anywhere, расскажет об основных моделях разработки программного обеспечения (SDLC), их плюсах и минусах, а также о реальных примерах их использования.

14
Май
2021

🛠 10 забавных расширений VS Code для разработчиков

В сети есть много подборок полезных для программистов расширений VS Code. Мы рассмотрим те из них, которые повысят вашу производительность и эффективность. Они позволяют делать множество вещей – от визуализации данных до изучения JavaScript…

09
Апр
2021

🖋 Как создавать инклюзивные и доступные цифровые продукты

Хорошо спроектированный и продуманный UI/UX влияет на желание людей пользоваться продуктом. Разбираемся в мелочах, которые позволяют сделать интерфейс более понятным и привлекательным.

02
Апр
2021

🗣 45 русскоязычных подкастов для программистов

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

01
Апр
2021

🤔 Как научиться программировать за 24 часа?

Вопрос не самый простой, но и на него можно ответить, если немного поразмышлять.

Допустим, вы знаете компьютер, и хотите научиться программировать. Поскольку многие «умельцы» не де…

30
Мар
2021

🤖 Применение искусственного интеллекта для общественного блага

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

Что…

05
Мар
2021

🕸 Как найти утечки памяти на сайтах и в веб-приложениях

Утечки памяти мешают пользователям долго работать с вашим веб-приложением – из-за них можно потерять аудиторию. Попробуем разобраться как этого издежать.

Перевод публикуется с сокращениями, автор оригинальной статьи
Rafal Kuć.

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

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

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

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


Что такое утечка памяти

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

Что вызывает утечку памяти: признаки, на которые следует обратить внимание

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

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

Во фронтенд-приложениях
существует несколько распространенных паттернов, которые могут вызвать утечку
памяти. К ним относятся:

  • Замыкания – внутренние функции, имеющие ссылки на переменные внешних. Таким образом внутренняя функция не позволяет сборщику мусора освободить память.
  • Случайные глобальные переменные – ранее необъявленные переменные станут глобальными и не будут освобождены.
  • Несвязанные коллекции – массивы, мапы и наборы позволяют хранить данные в каком-то виде, но с багами в коде они могут привести к утечке памяти из-за вечного хранения ссылок. Такой пример будет рассмотрен ниже.
  • Отсоединенный DOM – элемент Document Object Model, который больше не используется, но на него продолжают ссылаться.
  • Несвязанные таймеры – работающие вечно и сохраняющие объекты таймеры могут привести к утечке памяти.

Как обнаружить утечки памяти: пример приложения

Чтобы
проверить фактическую утечку памяти, создадим простое веб-приложение, имитирующее мониторинг поведения пользователей e-commerce. Страница отслеживает продукты,
с которыми пользователи взаимодействуют при просмотре магазина. Каждое показанное объявление, возвращенный товар из поиска и т. д. – все помещается
в массив. Код выглядит следующим образом:

        function(product, timestamp, page) {
 visited.push({product, timestamp, page})
}
    

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

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

Интеграция Sematext Experience с веб-приложением

Первый шаг – настроить
приложение на использование
Sematext
Browser SDK
для отправки данных в облако Sematext.

Для этого
добавим скрипт перед закрывающим тегом </head>:

        <script type="text/javascript">
 (function(e,r,n,t,s){var a=[];e[s]=function(){a.push(arguments)};e[s].queue=a; var o=[];var i=[];var c=true;var p=void 0;if(window.PerformanceObserver&& window.PerformanceObserver.supportedEntryTypes&&( PerformanceObserver.supportedEntryTypes.indexOf("longtask")>=0|| PerformanceObserver.supportedEntryTypes.indexOf("element")>=0)){ p=new PerformanceObserver(function(e){e.getEntries().forEach(function(e){ switch(e.entryType){case"element":i.push(e);break;case"longtask":o.push(e);break; default:break}})});p.observe({entryTypes:["longtask","element"]})}e[s+"lt"]={ longTasks:o,timingElements:i,inPageLoad:c,observer:p};if(t){var u=r.createElement(n); u.async=1;u.src=t;var f=r.getElementsByTagName(n)[0];f.parentNode.insertBefore(u,f)}})
 (window,document,"script","//cdn.sematext.com/experience.js","strum");
</script>
    

Второй шаг
зависит от типа вашего веб-приложения и используемого фреймворка – нужно сообщить Browser SDK, как ему себя настроить. Например, для стандартного развертывания
нескольких веб-страниц вы бы использовали перед закрывающим тегом </head>
что-то вроде этого:

        <script type="text/javascript">
 strum('config', { token: '<token>', 'receiverUrl': 'https://rum-receiver.sematext.com' });
</script>
    

Если вы
используете какую-либо одностраничную архитектуру, инструкции по установке
приложения
Sematext
Experience
помогут выполнить все необходимые
для отправки метрик шаги.

Выявление утечки памяти

Зная
что делает пользователь, мы можем взглянуть на графики в Sematext Experience. Перейдите к отчету об использовании памяти в приложении:


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


Можно
наблюдать скачкообразные сегменты, но в более длительном периоде использование
памяти остается между максимумом и минимумом и не растет бесконечно. Мы видим,
что в нашем гипотетическом примере e-commerce это не так. Если перейти к
просмотру одной сессии, виден постоянный рост использования памяти с менее
чем 2 МБ до 12 МБ, и нет никакого падения в течение этого времени. Обычно это
означает, что где-то в приложении произошла утечка памяти. Глядя на данные сессии, мы можем видеть загрузку страниц и
HTTP-запросы:


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

Поддерживаемые браузеры

Возможности
измерения памяти Sematext Browser SDK зависят от используемого браузером API для предоставления связанных с памятью метрик. Поддерживается он только в Chrome и проходил испытания Chrome Origin для
Chrome 82-87. Начиная с Chrome 89 API будет полностью доступен — это означает, что пользователям потребуется новейший веб-браузер Google.

Заключение

С помощью
правильных инструментов выявить проблемы с утечкой памяти довольно просто. Именно для
этой цели был создан и постоянно совершенствуется Sematext Experience – он предоставляет вам комплексное, доступное и простое в использовании решение для
мониторинга.

Дополнительные
материалы:

03
Мар
2021

🎨 50 онлайн-инструментов для дизайна: веб-сайты и мобильные приложения

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

23
Фев
2021

🎨 40 лучших веб-сайтов и телеграм-каналов по UX/UI для дизайнеров интерфейса в 2021 году

Созданием интерфейсов занимаются не только программисты – сначала их должен придумать исследующий пользовательский опыт дизайнер. Делимся подборкой из сорока интересных сайтов и каналов Телеграм по UX/UI.

02
Фев
2021

📚 С чего начиналась наука о данных: история в лицах и ключевых работах

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

31
Янв
2021

🤹 11 забавных пасхалок в Python

Python очень серьезный язык, но он полон «пасхальных яиц» и забавных отсылок. В этой статье мы собрали наиболее интересные скрытые функции одного из самых популярных языков программирования.

Змеиные яйца

Когда создатель языка Гвидо ван Россум начал внедрять Python, он также читал опубликованные сценарии из «Летающего цирка Монти Пайтона», комедийного сериала BBC 1970-х годов. Ван Россум подумал, что ему нужно короткое, уникальное и немного загадочное имя, поэтому он решил назвать язык Python. Как указано в официальной документации, вовсе не обязательно любить это шоу, чтобы пользоваться всеми преимуществами Python.

N.B. Все последующие пасхалки вы можете проверить самостоятельно в интерпретаторе просто запустив команду:

        $ python3
    

Летающий змий

Одна из самых забавных пасхалок в Python запускается командой:

        >>>import antigravity
    

Команда открывает в браузере комикс XKCD, в котором упоминается Python.


Учтите, что вы можете надолго «зависнуть в воздухе» листая комикс!)

Модуль антигравитации, ссылающийся на комикс XKCD, в котором упоминается Python, был добавлен в Python 3 Скипом Монтанаро.

Geohash


Любопытно, что в этой пасхалке есть еще одна пасхалка. Изучение реализации модуля antigravity.py обнаруживает скрытую функцию под названием «geohash», которая является ссылкой на другой комикс XKCD о геохешировании.

        >>> help(antigravity.geohash)
    

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

Некоторые считают, что функцию можно использовать для назначения встреч в офлайне )

Змеиный Дзен

Zen of Python представляет набор из 19 руководящих принципов для написания компьютерных программ, которые влияют на дизайн языка. Инженер-программист Тим Петерс написал этот набор и разместил его в списке рассылки Python в 1999 году. В списке Петерса оставался открытым 20-й принцип, «который должен заполнить Гвидо».

Дзен Питерса был включен под номером 20 в официальные предложения языка Python Enhancement Proposals. Он также включен в интерпретатор Python, как единственное официальное пасхальное яйцо, которое указано как в Руководстве разработчика Python.

В мае 2020 года Барри Варшава переложил афоризмы на музыку.

Список можно увидеть в консоли, если ввести следующую команду:

        >>> import this
    

Умышленная ирония, стоящая за Zen of Python, заключается в том, что сам this.py модуль нарушает почти все афоризмы. Модуль реализован в виде шифра ROT13.

        s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.

Rkcyvpvg vf orggre guna vzcyvpvg.

Fvzcyr vf orggre guna pbzcyrk.

Pbzcyrk vf orggre guna pbzcyvpngrq.

Syng vf orggre guna arfgrq.

Fcnefr vf orggre guna qrafr.

Ernqnovyvgl pbhagf.

Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.

Nygubhtu cenpgvpnyvgl orngf chevgl.

Reebef fubhyq arire cnff fvyragyl.

Hayrff rkcyvpvgyl fvyraprq.

Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.

Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.

Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.

Abj vf orggre guna arire.

Nygubhtu arire vf bsgra orggre guna *evtug* abj.

Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.

Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.

Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

d = {}

for c in (65, 97):

    for i in range(26):

        d[chr(i+c)] = chr((i+13) % 26 + c)

print("".join([d.get(c, c) for c in s]))
    

Змеиная любовь

Как бы продолжая афоризмы из Дзена, Python иногда предлагает порассуждать на любовную тему:

        >>> import this

...

>>> love = this

>>> this is love

True

>>> love is True

False

>>> love is False

False

>>> love is not True or False

True

>>> love is not True or False; love is love # Love is complicated

True

True
    

Что касается заявления love is not True or False; love is love, оно иронично, но не требует пояснений.

Нет шансов для фигурных скобок

Предпочитаете фигурные скобки в стиле C вместо отступов? Увы их никогда не будет:

        >>> from __future__ import braces

 File "<stdin>", line 1

SyntaxError: not a chance
    

types.CodeType – не для слабонервных

Если вы начнете копаться во внутренностях Python, можно наткнуться на предупреждение help для types.CodeType, которое буквально гласит что это не для слабонервных: «Not for the faint of heart».

        >>> import types

>>> help(types.CodeType)

...

Help on class code in module builtins:                                                                                                                         

class code(object)                                                                        

 |  code(argcount, kwonlyargcount, nlocals, stacksize, flags, codestring,                 

 |        constants, names, varnames, filename, name, firstlineno,                        

 |        lnotab[, freevars[, cellvars]])                                                 

 |                                                                                        

 |  Create a code object.  Not for the faint of heart.                                    

 |                                                                                        

 |  Methods defined here:                                                                 

 |                                                                                                                                       

 …
    

PEP 401 и FLUFL

Первоапрельская шутка (4/01), PEP 401 заявляет, что Гвидо ван Россум уходит в отставку. Новый титул, данный ему, будет произноситься как «BDEVIL» (Benevolent Dictator Emeritus Vacationing Indefinitely from the Language – Доброжелательный диктатор, почетно отдыхающий от языка на неопределенный срок), а преемником Гвидо станет Барри Варшава, или, как его ласково называют, дядя Барри. Официальный титул дяди Барри – «FLUFL» (Friendly Language Uncle For Life – Дядя на всю жизнь):

Гвидо написал оригинальную реализацию Python в 1989 году и после почти 20 лет руководства сообществом решил уйти в сторону как Доброжелательный диктатор на всю жизнь. Гвидо оставляет Python в надежных руках его нового лидера и его яркого сообщества, чтобы подготовиться к своей мечте всей жизни о восхождении на Эверест. После единодушного голосования Руководящего союза Python (не путать с Python Secret Underground, которого категорически не существует) на конференции PyCon 2009, был выбран преемник Гвидо: Барри Варшава, или как он с любовью известен, дядя Барри.

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

  1. Выбор Hg в качестве предпочтительной системы DVCS явился явным доказательством безумия BDEVIL, и отмена этого решения перейти на Bzr вместо этого – единственный верный выбор.
  2. Оператор неравенства != В Python 3.0 был ужасной ошибкой, вызывающей боль в пальцах, FLUFL восстанавливает оператор <> в качестве единственного написания. Это изменение достаточно важно, чтобы быть реализованным и выпущенным в Python 3.1. Чтобы облегчить переход к этой функции, был добавлен новый оператор future из __future__ import barry_as_FLUFL.
  3. Функция печати в Python 3.0 была ужасной, вызывающей боль ошибкой, FLUFL восстанавливает оператор печати. Это изменение достаточно важно для реализации и выпуска в Python 3.0.2.
  4. Неутешительная кривая принятия Python 3.0 свидетельствует о его полном отказе, вся работа над Python 3.1 и последующими версиями Python 3.x настоящим прекращается. Все функции Python 3.0 будут перенесены обратно на Python 2.7, который станет официальным и единственным следующим выпуском. Типы строк и байтов Python 3.0 будут обратно перенесены в Python 2.6.2 для удобства разработчиков.
  5. Признание того, что C – это язык 20-го века, который почти повсеместно отвергается программистами в возрасте до 30 лет, реализация CPython будет прекращена с выпуском Python 2.6.2 и 3.0.2. После этого эталонная реализация Python будет нацелена на виртуальную машину Parrot. Альтернативные реализации Python (например, Jython, IronPython и PyPy) официально не приветствуются, но допускаются.
  6. Признается, что Python Software Foundation, превосходно выполнив свою миссию, распускается. Управляющий союз Python (не путать с Python Secret Underground, которого категорически не существует) теперь является единственным распорядителем всей интеллектуальной собственности Python. Все средства PSF настоящим переводятся в PSU (не в этот PSU, а в другой PSU).

Отголосок этой шутки можно по прежнему лицезреть в интерпретаторе:

        >>> from __future__ import barry_as_FLUFL

>>> 0 != 1

SyntaxError: with Barry as BDFL, use '<>' instead of '!='

>>> 0 <> 1

True

>>> 1 <> 1

False
    

Хеш бесконечности

Хеш – это фиксированное целое число, идентифицирующее конкретную величину. Хеш бесконечности в Python равен 10⁵ x π. Интересно, что float(‘-inf’) в Python3 хэш равен «-10⁵ x π», а в Python 2 – «-10-x e».

        >>> hash (float ('inf')) 

314159 

>>> hash (float ('nan')) 

0
    

Еще раз Монти Пайтон

Учитывая, что создатель языка любит это шоу неудивительно, что в официальной документации явно сказано: «Ссылки на скетчи Monty Python в документации не только разрешены, но и приветствуются!». Метасинтаксические переменные в Python принимают имена spam и egg, а не более традиционно используемые foo и bar.

Вот еще пример использования str.format(), явно отсылающий к фильму «Монти Пайтон и Священный Грааль»:

        >>> print 'We are the {} who say "{}!"'.format('knights', 'Ni')

We are the knights who say "Ni!"
    

Математический модуль

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

        >>> from math import pi

>>> π = pi

>>> area = π * r**2

>>> résumé = 'knows Python'

>>> 'Python' in résumé

True
    

Еще одна хорошо известная математическая константа, определенная в математическом модуле, – это e. Оно называется числом Эйлера и является основанием натурального логарифма. Его значение – 2,718281828459045.

        >>> import math

>>> math.e

2.718281828459045
    

HelloWorld

«Hello, World!» часто используется для иллюстрации основного синтаксиса языка программирования. Это также часто первая программа для многих новичков. Сложно сделать это еще проще чем в Python:

        >>> import __hello__

Hello world!
    

Разработчики Python скрыли модуль, который мог выполнять Hello World, просто импортировав этот модуль! Повторный импорт библиотеки не приводит к повторному появлению сообщения.

Заключение

Подводя итог можно сказать, что Python – это не только мощный и функциональный язык. Разработчики и сообщество вложили в него специфическое чувство юмора и много интересных изюминок. Если вы решили освоить его с нуля, вам поможет «Самоучитель для начинающих». В библиотеке программиста вы также найдете множество полезных материалов по Python для разного уровня и задач.

24
Янв
2021

☕ 7 ошибок, которые я сделал (и сожалею) как разработчик JavaScript

Если вы хотите заполучить более высокооплачиваемую работу, обратите внимание на ошибки из статьи и перестаньте их совершать.

Перевод публикуется с сокращениями, автор оригинальной …

23
Янв
2021

🚀 Объектно-ориентированное программирование – самая большая ошибка компьютерных наук

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

C++ и Java, вероятно, являются одними из худших ошибок, которые когда-либо делала компьютерная наука. Многие выдающиеся программисты, включая создателя ООП Алана Кея, критиковали и продолжают критиковать эти языки за то, что они извратили первоначальную идею и породили самую печально известную парадигму современной разработки.

К несчастью, современное ООП приобрело огромную популярность. Это позволило ему нанести огромный ущерб экономике – триллионы долларов – и даже убить (в буквальном смысле) тысячи человек!

Почему же ООП так опасен?

***

Представьте, что вы садитесь в свою хорошо знакомую машину и едете по хорошо знакомому маршруту. И вдруг что-то идет не так, как всегда. Вы отпускаете педаль газа, но машина продолжает ускоряться! Давите на тормоз – не помогает!

Страшно? Подобный инцидент произошел в 2007 году с Джин Букаут – и еще с сотнями водителей Toyota Camry. Десятки человек погибли.

Производитель ссылался на залипание педалей, человеческий фактор и даже половые коврики, однако истинным виновником оказалось программное обеспечение автомобилей.

Команда экспертов 18 месяцев разбирала кодовую базу Toyota – и нашла сотни потенциальных причин возникновения непреднамеренного ускорения. Код в целом был запутанным и беспорядочным – то, что на сленге называется «спагетти». Из-за этого Toyota пришлось отозвать более 9 млн автомобилей и выплатить более 3 млрд долларов.


Проблема спагетти

Подобные инциденты не уникальны – и это пугает. Например, два самолета Boeing 737 Max потерпели крушение из-за ошибки, вызванной спагетти-кодом (346 жертв, 60 млрд долларов ущерба). То же самое может случиться, например, на атомной электростанции или в реанимационной палате.

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

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

Откуда берется спагетти-код?

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

Чтобы бороться с этим нужны строгие ограничения, вроде ограничения скорости на дорогах. Причем такие ограничения должны быть максимально автоматизированы и не зависеть от человеческого фактора. В идеале их должна накладывать сама парадигма программирования.

ООП – корень зла

ООП не накладывает на код никаких ограничений, которые могли бы предотвратить его запутывание. Безусловно, есть лучшие практики разработки – внедрение зависимостей, TDD, Domain Driven Design, которые реально помогают. Однако они не внедрены в парадигму, не обеспечиваются ей, и нет инструментария, который мог бы следить за их соблюдением.

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

Ссылочные типы

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

Это превращает программу в один большой сгусток глобального состояния и противоречит первоначальной идее ООП. Алан Кей, создавая свой язык Simula, предполагал, что части программы будут общаться между собой подобно биологическим клеткам, то есть независимо. Они должны были посылать друг другу сообщения, оставаясь закрытыми от внешнего мира (инкапсуляция).

Но в современном ООП одни «клетки» проникают внутрь других и меняют их состояние. Это приводит к большой связанности кода. Изменения в одном месте программы могут привести к неожиданным последствиям в другом.

Предсказуемость

Склонность к спагеттификации – не единственная проблема ООП-парадигмы.

Работая с ПО мы обычно хотим, чтобы оно было надежным и предсказуемым. 2 + 2 всегда должно быть равно 4, а нажатие на педаль тормоза всегда должно приводить к замедлению автомобиля. Это называется детерминированностью.

Если 2+2 будет равно 5 хотя бы один раз из миллиона, это может привести к ужасным последствиям.

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

Если эта цитата вам не нравится, то это потому, что недетерминированность в целом никуда не годится.

Вот пример кода, который просто вызывает функцию:

nondet-det-func.js
        console.log( 'result', computea(2) );
console.log( 'result', computea(2) );
console.log( 'result', computea(2) );

// result 4
// result 4
// result 4
    

Мы не знаем, что делает эта функция, но кажется, что она всегда возвращает один и тот же результат для одних и тех же входных данных.

А вот другой код:

nondet-nondet-func.js
        console.log( 'result', computeb(2) );
console.log( 'result', computeb(2) );
console.log( 'result', computeb(2) );

// result 4
// result 4
// result 4
// result 2    <=  плохо!
    

Эта функция вернула разные значения для одних и тех же входных параметров. Функция computeb недетерминирована. Она может выдавать ожидаемое значение, но это не гарантируется.

Что делает функцию детерминированной или недетерминированной?

  • Функция, не зависящая от внешнего состояния, на 100% детерминирована.
  • Функция, которая вызывает только другие детерминированные функции, также является детерминированной.
nondet-func-impl.js
        function computea(x) {
  return x * x;
}

function computeb(x) {
  return Math.random() < 0.9
          ? x * x
          : x;
}
    

Результат работы функции computea зависит только от аргумента x и всегда будет одинаков для одинакового x. Эта функция детерминирована.

Функция computeb недетерминирована, потому что вызывает недетерминированную функцию Math.random. С чем мы взяли, что Math.random недетерминирована? Она не принимает аргументов, а вычисление случайной величины основывается на системном времени, то есть зависит от внешнего состояния.

Детерминированный код предсказуем, недетерминированный – нет.

Непредсказуемость

Давайте рассмотрим простую функцию сложения:

nondet-simple-add.js
        function add(a, b) {
  return a + b;
};
    

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

Теперь немного усложним задачу – введем в бой объекты:

nondet-add-boxed.js
        const box = value => ({ value });

const two = box(2);
const twoPrime = box(2);

function add(a, b) {
  return a.value + b.value;
}

console.log("2 + 2' == " + add(two, twoPrime));
console.log("2 + 2' == " + add(two, twoPrime));
console.log("2 + 2' == " + add(two, twoPrime));

// output:
// 2 + 2' == 4
// 2 + 2' == 4
// 2 + 2' == 4
    

Пока все идет хорошо. Давайте внесем небольшое изменение в тело функции add:

nondet-add-mutation.js
        function add(a, b) {
  a.value += b.value;
  return a.value;
}

console.log("2 + 2' == " + add(two, twoPrime));
console.log("2 + 2' == " + add(two, twoPrime));
console.log("2 + 2' == " + add(two, twoPrime));

// output:
// 2 + 2' == 4
// 2 + 2' == 6
// 2 + 2' == 8
    

Что случилось? Внезапно результат перестает быть предсказуемым! В первый раз код сработал нормально, но с каждым последующим запуском его вывод становился все более и более неожиданным.

Другими словами, функция больше не детерминирована.

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

***

Детерминированная программа гарантирует, что 2+2 == 4 . Другими словами для входных параметров (2, 2) функция add всегда должна возвращать 4. Независимо от того, сколько раз вы ее вызвали, работает ли она параллельно и что происходит за ее пределами.

Недетерминированные программы – это полная противоположность. В большинстве случаев вызов add(2, 2) вернет 4 . Но время от времени функция может возвращать 3, 5 или даже 1004. Недетерминизм крайне нежелателен, и теперь вы понимаете, почему.

Каковы последствия недетерминированного кода? В нем легко появляются дефекты – баги, которые заставляют разработчиков тратить драгоценное время на отладку и значительно ухудшают качество работы ПО.

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


Побочные эффекты

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

Вернемся к нашей функции сложения:

nondet-add-func-only.js
        function add(a, b) {
  a.value += b.value;
  return a.value;
}
add(two, twoPrime)
    

Функция add выполняет ожидаемую операцию, она добавляет a к b . Однако это также приводит к побочному эффекту – изменению объекта a.

Так как объекты передаются по ссылке, то и объект two за пределами функции изменился. two.value теперь равно 4. После второго вызова станет 6 и так далее.

Чистота

Разобравшись с детерминизмом и побочными эффектами, мы готовы говорить о чистоте.

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

Чистые функции имеют множество преимуществ:

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

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

Насколько чисто ООП?

Для примера давайте поговорим о двух фичах ООП — геттерах и сеттерах.

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

Сеттеры предназначены для изменения состояния объекта, что делает их по своей сути побочными эффектами.

Таким образом, все методы в ООП (кроме, возможно, статических) либо не детерминированы, либо вызывают побочные эффекты. Следовательно, ООП – это что угодно, только не чистое программирование.

Чистое решение

Есть ли что-то, что может спасти программирование – луч надежды в мрачном мире программных сбоев? Что-то достаточно надежное и детерминированное, чтобы на нем можно было строить качественное ПО? Это математика.


В computer science математика воплотилась в парадигме функционального программирования, основанного на системе лямбда-исчисления.

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

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

Значит ли это, что в такой программе нет багов? Конечно нет. Однако и баги в ней детерминированы. Для одних и тех же данных всегда будет возникать одна и та же ошибка, что существенно облегчает ее исправление.

Как я тут оказался?

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

Очень похожий процесс происходит сейчас с ООП. Только вместо вопроса «как я попал в эту точку исполнения», мы спрашиваем «как я попал в это состояние».

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

Функциональное программирование избавит нас от сложных вопросов. Когда состояние остается неизменным, оно не вызывает проблем.

Раньше многие разработчики сопротивлялись рекомендации прекратить использовать goto. К сожалению, сейчас ситуация повторяется с идеями функционального программирования.

А как же спагетти-код?

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

В функциональном программировании есть только композиция. Функции вызывают другие функции, большие функции состоят из малых. Это единственный способ построения программ. Иначе говоря, парадигма программирования сама навязывает лучшую практику, она является нативной, естественной. Когда у нас нет мешанины связей и зависимостей, разработка, тестирование и рефакторинг становятся удовольствием.

Но ООП и ФП дополняют друг друга!

Жаль вас разочаровывать, но это не так.

Объектно-ориентированное программирование – полная противоположность функциональному. Оно нарушает многие фундаментальные принципы:

  • Поощряет нечистоту кода.
  • По своей сути не детерминировано и поэтому непредсказуемо.
  • Принципы композиции для ООП чужеродны и могут лишь привноситься извне.
  • Способствует спагеттификации кода.
  • Усложняет отладку программы и написание тестов.

Программисты ООП тратят большую часть своего времени на исправление ошибок. Программисты ФП – на написание работающего кода.

Действуйте, пока не поздно

ООП было очень большой и ужасно дорогой ошибкой. Давайте все, наконец, признаем это. Если ваш автомобиль работает на объектно-ориентированном ПО, вы не можете быть спокойны.

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

В ближайшем будущем ООП-программисты станут «динозаврами», как сейчас разработчики на COBOL. C++, Java, C# умрут. TypeScript тоже умрет.

Начните изучать функциональное программирование прямо сейчас! F#, ReasonML и Elixir – все это отличные варианты для начала.

Присоединяйтесь к надвигающейся революции!

14
Янв
2021

🕸 Что не так с веб-сборкой?

Ее потенциал и перспективы огромны. Что же пошло не так? Почему не все используют WASM? Попробуем ответить на эти вопросы.

Перевод публикуется с сокращениями, автор оригинальной ст…

11
Янв
2021

❓ Почему нельзя соглашаться на тестовый кодинг во время собеседования

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

Перевод публикуется с сокращени…

06
Янв
2021

💸 Программирование с пассивным доходом: 5 способов для разработчиков ПО

О, это прекрасное чувство – получать деньги за любимую работу, особенно если речь идет о пассивным доходе. Держите 5 способов подзаработать на досуге.

Перевод публикуется с сокра…

31
Дек
2020

🎄 С Новым годом!

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

Уходящий год был непростым, и это не дежурная фраза. Кт…

26
Дек
2020

📈 Инфлюенсеры в Big Data и Machine Learning: за кем следить в 2021 году?

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

Инфлюенсеры – это лидеры мнений. Обычно пользователи социальных сетей, которые имеют обширную и лояльную аудиторию. Big Data и ML – одни из самых быстро развивающихся сфер в ИТ, поэтому специалистам важно следить за инфлюенсерами и влиятельными сообществами. Ведущие профессионалы отрасли регулярно делятся с широкой аудиторией опытом, а также последними разработками и новостями.

О работе специалистов по анализу больших данных мы писали в статье «Стать аналитиком Big Data: пошаговое руководство». Продолжая тему, мы собрали в одной публикации влиятельных инфлюенсеров в сфере Big Data и ML, а также сообщества, на которые стоит подписаться в 2021 году.

Предлагаем вашему вниманию подборку самых влиятельных сообществ и инфлюенсеров в сфере Big Data и Machine Learning.

<a href="https://rismedia.com/wp-content/uploads/2020/06/social_media_strategy_1153737066.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Сообщества

Big Data and Analytics

Сообщество LinkedIn, в котором собраны не только курсы и офферы для аналитиков Big Data, но и вся актуальная информация от ведущих экспертов области. Сообщества на LinkedIn – одно из лучших мест для энтузиастов данных и начинающих ученых, желающих овладеть искусством работы с большими данными. Активное участие в дискуссиях и собственные публикации дают возможность укрепить знания, найти наставника и расширить сеть профессиональных контактов.

Data Science Central

Твиттер-аккаунт одного из самых известных сообществ Data Science, где вы найдете новости о последних технологиях Big Data, машинного обучения, AI, Deep Learning, dataviz, Hadoop, IoT, и BI. Data Science Central объединяет пользователей, которые хотят получить уникальный опыт участия в дискуссиях на темы сбора и интеграции, а также аналитики и визуализации данных. Построенное на инновационной платформе сообщество включает технические форумы и сведения о рыночных тенденциях, а также дает возможности социального взаимодействия и трудоустройства.

DataDriven

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

<a href="https://t4.ftcdn.net/jpg/02/61/98/23/360_F_261982331_9P4vDtQz8briwqDPIs7f94LW7IUuXHiX.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Инфлюенсеры

Ronald Van Loon

Ronald Van Loon, директор Advertisement компании, которая предлагает партнерам и клиентам консалтинговые, технологические, информационные и автоматизированные решения. Известный инфлюенсер в сфере Data Science, Ronald публикует статьи и посты на темы больших данных, искусственного интеллекта, автономных автомобилей, аналитики и многого другого.

Kenneth Cukier

Kenneth Cukier – редактор данных в The Economist и соавтор книги «Big Data: A Revolution That Will Transform How We Live, Work, and Think», а также популярный спикер и член совета по развитию на основе данных World Economic Forum. Cukier является постоянным гостем на BBC, CNN и NPR. С 2002 по 2004 год он был научным сотрудником Гарвардской школы управления имени Кеннеди. Он также является стипендиатом Оксфордской бизнес-школы, где проводит исследования в области авиации.

Ganapathi Pulipaka

Ganapathi Pulipaka – главный Data Scientist в Accenture. Он разработал ряд программ Deep Learning и машинного обучения и продолжает публиковать новые идеи на GitHub и Medium. Советуем подписаться тем, кто заинтересован в математическом моделировании, нейросетях и визуализации данных в TensorFlow.

Kirk Borne

Kirk Borne является советником и главным специалистом по обработке данных в Booz Allen Hamilton. Kirk – астрофизик и консультант по большим данным, он также специализируется на интеллектуальном анализе данных, машинном обучении и вычислительной астрофизике. Kirk уже более 20 лет участвует в нескольких проектах NASA, включая его астрономический центр и операции с данными космической науки. В своем аккаунте в Твиттер он публикует множество ресурсов по машинному обучению и делится опытом работы.

Iain Brown

Dr. Ian Brown – консультант по большим данным и руководитель научных данных для SAS UK&I. За последние десять лет он работал в нескольких секторах, обеспечивая лидерство по темам риска, искусственного интеллекта и машинного обучения. Ian активно публикует посты в Твиттер и рассказывает о проектах в сфере искусственного интеллекта.

Yves Mulkers

Yves Mulkers – стратег данных и основатель популярного цифрового издания 7wData. Как специалист по интеграции, Yves в постах фокусируется на организации данных и возможностях архитектуры данных в организации. Он публикует свое видение проблем бизнес-аналитики и связанных с данными вопросов.

Mike Quindazzi

Mike Quindazzi – лидер продаж цифровых альянсов в PWC. Он помогает управлять бизнес-результатами, предлагая консультации по новым технологиям, вроде беспилотных летательных аппаратов, 3D-печати, блокчейна, IoT, больших данных и робототехники. Mike работал с такими брендами, как Microsoft, SAP, Amazon и Oracle, и помог сформировать инновационные подходы к решению их проблем. Он часто публикует свое мнение о развитии сферы больших данных и рассуждения на темы, связанные с AI и машинным обучением.

Evan Kirstel

Evan Kirstel является ведущим технологическим влиятельным лицом в сегменте B2B и соавтором eVira Health, которая предлагает консультации, а также разработку продуктов и стратегий развития бизнеса для сообщества медицинских технологий. Он работал с такими известными брендами, как IBM, Intel и AT&T, среди прочих, чтобы максимизировать их видимость и масштабирование в 5G, blockchain, AI, cloud, IoT, AR, VR, Big Data и analytics.

Marcus Borba

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

Bill Schmarzo

Инфлюенсер и автор книги «The art of thinking like a Data Scientist». Он очень активен и на LinkedIn: прочтите пост «Will AI force Humans to become more Human» и подпишитесь, если хотите стать «Data Science Think Tank».

<a href="https://image.freepik.com/free-vector/blog-authors-writing-articles_179970-1523.jpg" target="_blank" rel="noopener noreferrer nofollow">Источник</a>
Источник

Michael Fisher

Michael Fisher – технический евангелист и старший системный аналитик в Whitcraft Group. Он считается ведущим специалистом в области IoT, 5G, VR и FinTech, и пишет о таких областях, как кибербезопасность, консалтинг и архитектура больших данных.

Srivatsan Srinivasan

Srivatsan Srinivasan – Chief Data Scientist/Architect в Cognizant. Его опыт в построении сложных аналитических конвейеров, моделей машинного обучения для бизнес-процессов и помощи компаниям в преобразовании пространства данных и аналитики, сможет помочь расширить понимание многих областей больших данных, облаков и искусственного интеллекта. Советуем обратить внимание на его посты в LinkedIn, которые точно будут полезны тем, кто хочет быть в курсе новейших технологий AI и лучших практик в области Data Science.

Nando de Freitas

Nando de Freitas – ученый, который возглавляет команду машинного обучения Google DeepMind. Профессор компьютерных наук Оксфордского университета, Nando de Freitas является специалистом в области машинного обучения с фокусом на нейронные сети, байесовскую оптимизацию и вывод, а также Deep Learning. Как главный ученый в Google DeepMind, он помогает в организации ее миссии – использовать технологии для широкой общественной пользы и научных открытий, обеспечивая при этом безопасность и соблюдение этических норм.

David Langer

Если вы регулярно читаете учебные публикации по теме Data Science на LinkedIn, скорее всего вы уже знакомы с David Langer. Помимо того, что он является VP of Analytics в Schedulicity, он также известен как инструктор и YouTube-блогер. У него слава одного из самых выдающихся педагогов в области Data Science. David Langer создает образовательный контент для всех заинтересованных в развитии навыков работы с данными.

Andrew Ng

Основатель и генеральный директор Landing AI, а также основатель Deeplearning.ai. Andrew работал главным научным сотрудником Baidu Research, был профессором Стэнфордского университета, основателем и председателем правления Coursera, поэтому его считают пионером в области онлайн-образования. Он основал проект Google Brain, который разработал крупномасштабные искусственные нейронные сети, в том числе ту, которая научилась распознавать кошек на видео. Andrew специализируется на Deep Learning и часто делает публикации на связанные с машинным обучением темы.

Kristen Kehrer

Kristen Kehrer является преподавателем Data Science в UC Berkeley Extension и основателем Data Moves Me. С 2010 года Kristen предлагает инновационные и эффективные решения для машинного обучения в различных отраслях промышленности, включая коммунальное хозяйство, здравоохранение и электронную коммерцию. Kristen является инфлюенсером и наставником, у которого можно многому научиться благодаря ее опыту и знаниям в области SQL и аналитики больших данных.

***

Без чтения публикаций ведущих специалистов отрасли сложно освоить развивающиеся так быстро профессии. Если же вы только планируете карьеру в этой области, стоит обратить внимание на курс Факультета Аналитики Big Data онлайн-университета GeekBrains. Программа обучения включает основательную математическую и подготовку, изучение основ языка Python и работы с базами данных, а также работу с Hadoop и Apache Spark. Курс ориентирован на применение навыков машинного обучения в бизнесе и построен на основе практической работы над проектами с ведущими специалистами отрасли и личным помощником-куратором. Успешно окончившим его студентам онлайн-университет помогает с трудоустройством.

22
Дек
2020

❓ Потребуются ли программисту на собеседовании алгоритмы и структуры данных?

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

Нужны ли структуры данных и алгоритмы программисту средней руки вопрос спорный. Едва ли ему придется самостоятельно разрабатывать быструю сортировку или что-нибудь в этом духе. С другой стороны, теоретический базис необходим любому специалисту для формирования правильного образа мыслей. Работодатели на собеседованиях проверяют не только владение языками программирования и фреймворками, но и насколько хорошо кандидат знаком с вечной классикой. Если он не может отличить FIFO от LIFO или плавает в вопросе о пузырьковой сортировке, путь в профессию закроется. Есть мнение, будто усвоить необходимые знания можно за пару дней с книжкой в руках, но это не так. Материал слишком объемный, чтобы быстро с ним справиться – о подготовке к собеседованию лучше позаботиться заранее.


Чего хотят работодатели?

Программисты уровня junior и middle для рекрутеров ИТ-компаний – темные лошадки. Какой-нибудь senior или team lead гораздо понятнее работодателю, поскольку уже имеет имя, послужной список и большое количество реализованных проектов в портфолио. Чего ждать от новичков или специалиста среднего уровня, никому не известно, а значит и собеседовать их станут основательно – к этому стоит быть готовым. Требования к потенциальным кандидатам разнятся от компании к компании, но некоторые общие принципы выделить можно.

О чем на собеседованиях спрашивают в корпорациях?

Крупные ИТ-компании не ждут от начинающих разработчиков совершенного владения современными технологическими приемами. Даже программисту middle-уровня на сей счет может быть сделано послабление, но к вопросам наличия у соискателя теоретического базиса гиганты относятся очень серьезно. Список требований обширен и включает весь джентльменский набор из программы профильного вуза. Наличие академических познаний не гарантирует получения места, но их отсутствие точно не даст пройти HR-квест до конца. Как сказал бы математик: теория необходима, но недостаточна для трудоустройства.

О чем спрашивают в средних и небольших компаниях?

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

Чего хотят от соискателей стартапы?

Собеседования в стартапы – всегда лотерея. Слишком они разные, чтобы можно было выделить общий подход к найму. Вопросы об алгоритмах и абстрактных структурах данных могут не возникнуть вовсе или стать главными при отсеве негодных соискателей. Предсказать это не получится, но одна закономерность есть: обычно стартаперы ищут единомышленников. Тут нужно понять, разделяете ли вы идеи проекта, а потом уже думать, какие знания понадобятся для успешного трудоустройства. Учить тем не менее придется, смиритесь. Лишним это точно не будет.


Какие знания необходимо освоить?

Если вопрос с подвохом может прилететь откуда угодно, потенциальному кандидату в разработчики нужно уметь отбивать все хитрые «подачи». Для этого его теоретические познания в сфере компьютерных наук должны быть достаточно широкими и целостными. Учебная программа выглядит примерно так:

  1. Основные структуры данных и алгоритмы: сюда входят стеки, очереди и связные списки, битовые операции, циклы, рекурсия и алгебраические алгоритмы;
  2. Алгоритмы сортировки: простые сортировки, линейная сортировка, пирамидальная сортировка, а также быстрая и внешняя сортировка;
  3. Деревья: двоичные, красно-черные и прочая, прочая, прочая;
  4. Хэш-таблицы: сюда же входят хэш-функции, универсальное и идеальное хэширование, а также разрешение коллизий;
  5. Теория графов и комбинаторная оптимизация: владеть этой областью нужно на уровне студента-математика первого курса. Ничего сложного, все сводится к основным определениям и решению типовых задач, вроде задачи коммивояжера.
  6. Алгоритмы на строках: тут придется вспомнить забытые со студенческих времен фамилии: Ахо-Корасика, Бойера-Мура и прочего Кнута-Морриса-Пратта. Еще потребуется подучить алгоритмы сжатия и шифрования;
  7. Вероятностные алгоритмы: MinHash, SimHash, HyperLogLog, Count-Min Sketch, фильтр Блума и вот это все;

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


Где можно научиться?

Перечисленные выше темы изучаются в вузах, но уже к старшим курсам ударившиеся в современные технологии студенты забывают о классике. У пришедших в программирование из других профессий специалистов теоретический базис тоже хромает, и это вполне естественно. Заполнить пробелы в знаниях помогают книги. В интернет-магазинах доступны неплохие работы: от модной «Грокаем алгоритмы», которую написал Адитья Бхарагава, до классической «Introduction to Algorithms» издательства MIT Press. Некоторым нравится «The Algorithm Design Manual» Стивена Скиены – выбрать есть из чего, но на изучение теории по книгам у работающих программистов не хватает ни времени, ни мотивации. Это тоже вполне естественно.

Не стоит заниматься ̶с̶а̶м̶о̶л̶е̶ч̶е̶н̶и̶е̶м̶самообучением, когда можно обратиться за помощью к профессионалам. Каждый хорош в своей работе: кто-то умеет писать программы, а кто-то – еще и учить этому других. Если вы хотите получить целостные и системные знания, компания OTUS предлагает IT-специалистам более 60 авторских курсов. Сейчас идет набор на пятимесячную программу онлайн-обучения «Алгоритмы и структуры данных»: вступительное тестирование можно пройти на сайте. Желающим также предлагают посетить бесплатный демо-урок, который пройдет 22 января.

Теоретический базис – фундамент вашей карьеры, а дом без фундамента построить невозможно.