Category: Разное

14
Янв
2022

🏆 Как принять участие в хакатоне и занять призовое место. Инструкция для начинающих программистов

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

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

Какие бывают хакатоны?

Можно выделить три разновидности хакатонов:

  1. Технологический.
  2. Управленческий.
  3. Дизайнерский.

Технологический хакатон

Продукт этого хакатона – код. Чаще всего, код пишут на языке, который доступен участнику.

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

Пример кейса технологического хакатона от Росатома по разработке автоматизированного обнаружения аварий на нефтепроводах. Организатор определяет в качестве языка решения кейса языки JavaScript и Python. <span>Скриншот с сайта leadersofdigital.ru</span>
Пример кейса технологического хакатона от Росатома по разработке автоматизированного обнаружения аварий на нефтепроводах. Организатор определяет в качестве языка решения кейса языки JavaScript и Python. Скриншот с сайта leadersofdigital.ru

Управленческий хакатон

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

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

<span>Кейс по цифровой трансформации в медицинской отрасли Ямало-Ненецкого автономного округа. Скриншот с сайта leadersofdigital.ru</span>
Кейс по цифровой трансформации в медицинской отрасли Ямало-Ненецкого автономного округа. Скриншот с сайта leadersofdigital.ru

Дизайнерский хакатон

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

<span>Кейс по разработке экранных форм и пользовательских сценариев для мобильного приложения «Московский транспорт». Скриншот с сайта leadersofdigital.ru</span>
Кейс по разработке экранных форм и пользовательских сценариев для мобильного приложения «Московский транспорт». Скриншот с сайта leadersofdigital.ru

Пять основных ошибок, которые допускают при решении кейса

1. Говорить о технологиях

Задачи хакатона решаются с помощью технологий. Поэтому говорить, что данное приложение вы разработали с помощью HTML и CSS не имеет никакого значения. Скорее всего, все участники сделали то же самое. Вы только тратите на это время. Лучше говорите, какую пользу принесёт ваше решение.

2. Поражать жюри фичами продукта

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

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

3. Не говорить о болях целевой аудитории

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

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

4. Не выдвигать гипотезы

Эта ошибка связана с предыдущей. Гипотеза – это предположение, как решение может повлиять на потребителя.

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

5. Умалчивать преимущества вашего решения и команды

На хакатоне вы должны показать результат. Результат – это преимущества вашего решения перед другими решениями.

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

Больше полезной информации вы можете найти на нашем телеграм-канале «Библиотека программиста».

Что делать, если не умеешь кодить, а презентовать проект нужно?

В июле 2021 года автор этой статьи принял участие в хакатоне «Кибер.Степь» и имел самые минимальные представления о программировании.

Теоретически он знал HTML, CSS, базовый Python и разработку продукта в IT.

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

Кейс предложил Ростелеком. Нужно было разработать игру «Кибер.Мир». Главный герой этой игры должен был приучить детей пользоваться сложными паролями.

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

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

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

<span><span>Пример экрана чат-бот игры </span>«Кибер.Мир» для Ростелекома</span>
Пример экрана чат-бот игры «Кибер.Мир» для Ростелекома

Как выступать на защите проекта?

После хакатона мы усвоили пять правил:

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

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

2. Расскажите, как можно монетизировать проект. Если не знаете как монетизировать, то придумайте. Это может быть и мерч, и партнёрские программы, и платная подписка.

Правильно Неправильно
Возможно, наше приложение поддержат онлайн-школы. У нас будет бесплатный тариф. А ещё, мы думаем, игроки смогут тратить баллы у партнёров. Проект некоммерческий. Мы не пытаемся заработать.

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

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

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

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

5. Будьте уверены в себе и доброжелательны. В жюри такие же люди, как и вы, и не все разбираются в технологиях. Например, это могут быть бизнесмены, которых интересует прибыль, могут быть менеджеры продукта, чиновники или маркетологи. У всех свои интересы на хакатонах. Постарайтесь это учесть.

Правильно Неправильно
Посмотрите на наше приложение. Оно понравится женщинам, которые ведут здоровый образ жизни и воспитывают детей, а ещё его можно монетизировать, если тестирование покажет, что им пользуются 100 тысяч пользователей. Наше приложение работает, а если не работает, то это какая-то ошибка. Мы крутые программисты и не можем ошибаться.
***

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

Материалы по теме

12
Янв
2022

🤔 У меня ничего не получается: как правильно просить о помощи коллег

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

Пробуйте очевидное

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

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

  1. Внимательно читаю сообщение об ошибке. Возможно, ответ кроется где-то в тексте или стектрейсе. Например, мы можем увидеть, что сборка не удалась из-за неудачной проверки стиля в коде.
  2. Пробую самое простое решение. Может проблема с подключением к сети? Кабель подключен? Что, если откатить последние изменения или использовать git stash?
  3. Провожу внутренний поиск. Есть документация, затрагивающая эту базу знаний? Это известный баг? Кто-то уже работает над устранением проблемы?
  4. Провожу внешний поиск. Возможно, на Stack Overflow уже есть ответ на вопрос.

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

Как просить о помощи

Когда я в тупике, то пытаюсь найти решение вышеописанным способом в течение 30 минут. Если не помогло, то я обращаюсь за помощью к коллеге в командный чат или задаю вопрос на Stack Overflow. Вы с большей вероятностью получите ответ на ваш вопрос, если будете придерживаться следующей схемы при составлении вопроса:

  1. Что я пытаюсь сделать и в чем проблема?
  2. Как я пытался решить проблему?
  3. Что именно не работает так, как мне нужно?
  4. Чего я достиг в решении проблемы?
  5. Сам вопрос.

Например, возникли проблемы с тестированием сборки. Я бы задал вопрос так:

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

В этом примере мы сначала обозначили цель (собрать iOS проект) и проблему (ошибка). Далее рассказали, как пытались ее решить (читали инструкцию, проверили зависимость) и что конкретно не работает (отсутствует зависимость). А в конце мы указываем, какая именно помощь нам нужна (проверка кода / проверка импорта файла).

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

  1. Структурируя вопрос, я показываю, что уважаю время собеседника. Подробно расписывая проделанные шаги, я экономлю другому человеку время на решение моей проблемы.
  2. Подготовка вопросов позволяет мне лично убедиться в том, что я обстоятельно подошел к решению проблемы и сделал все, что мог.
  3. Конкретный вопрос, в отличие от стандартного «Кто разбирается в iOS и поможет мне со сборкой?», поможет привлечь именно тех, кто разбирается в моей проблеме. Ведь человек может знать iOS, но конкретно с моей проблемой не сталкивался.

Что делать, если никто не может помочь

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

  1. Продолжайте копать. Иногда вы работаете над чем-то новым и недостаточно изученным, и вам нужно больше времени на исследование этой области.
  2. Пересмотрите свой подход. Случается, что вместо использования общепринятого решения вы изобретаете собственное. Это случилось и со мной, когда я встроил приложение Django в автономный исполняемый файл OSX. Я могу быть первым, кто до этого додумался. Это плохой знак! Возможно, вам стоит вернуться назад и выбрать другой подход к решению поставленной задачи.

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

Просить о помощи не стыдно

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

***

Желаем удачи и надеемся, что вы найдете решение всех проблем, с которыми столкнетесь!

Материалы по теме

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста».

16
Дек
2021

🧠 Резюме мозга программиста

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

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

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

Часть первая. Лучше читать код


Понимание

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

Данная часть предлагает
несколько решений для облегчения этой боли.

Больше полезной информации вы найдете на нашем телеграм-канале «Библиотека программиста».

Источник

Определяет три момента: недостаток
знаний, недостаток информации и недостаточная вычислительная мощность.

Недостаток информации
вы не знаете достаточно о проекте/коде, который ищете.

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

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

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

Нехватка вычислительной
мощности устраняется за счет заметок, функций и переменных о коде, который вы
пишете. Используя «второй мозг» (бумагу), вы облегчаете нагрузку на свою
текущую рабочую память. Кроме того, может быть полезно преобразовать что-то,
что вы понимаете и с чем уже знакомы. Например, разбивая список Python на циклы
for, пока не поймете все целиком. Затем все снова соберите вместе и перечитайте
еще раз.

Недостаток знаний исправляется
изучением указанной темы – так вы становитесь в ней лучше.

Недостаток информации
можно поправить и чтением.

Чтение

Затем в книге объясняется,
как быстрее читать код на примерах исследований, проведенных с экспертами и
программистами.

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

for loops, if err != nil Теперь это укоренилось в вашей памяти, и можно в будущем быстро это прочитать.

Это означает, что для
того, чтобы помочь с чтением вашего кода, необходимо сосредоточиться на маяках.
Маяки – это небольшие, понятные с первого взгляда части кода. Комментарии,
шаблоны, такие как if err != nil, цепочки, правильные имена функций – все это
маяки, которые помогают лучше понимать и читать код.

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

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

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

Часть вторая. Размышления о коде


Стратегии чтения

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

Эффективное чтение можно
разбить на следующие этапы:

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

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

В книге разделяются
переменные, основанные на поведении. Это может помочь лучше понять код после
его прочтения. Используются следующие 11 категорий:

  • Follower
  • Stepper
  • Walker
  • Temporary
  • Counter/Gatherer
  • Container
  • Fixed value
  • Flag
  • Organizer
  • Most-recent Holder
  • Most-wanted Holder

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

Решение проблем

Ментальные модели

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

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

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

Условные машины

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

Заблуждения

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

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

Часть третья. Написание лучшего кода


Придумываем имена

Это важная глава, потому
что именование – самое сложное. Совет заключается в том, чтобы называть вещи в том
контексте и отношении, в которых они пребывают. Хорошее имя иногда решает всю
проблему само по себе.

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

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

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

Избегайте плохого кода и когнитивной нагрузки

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

Убедитесь, что вы полностью понимаете смысл

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

Упростите код

Иногда код написан
безумно сложно без видимой причины или причина есть, но вы ее еще не видите. Это
нормально! Начните с рефакторинга, чтобы понимание пришло. У меня есть история
об этом.

В eksctl
был тикет.
Реорганизовать логирование, чтобы расширить журнал вложенных задач:

        [ℹ]  3 sequential tasks: { delete nodegroup "ng-5b8f2f94", 2 sequential sub-tasks: { 2 sequential sub-tasks: { delete IAM role for serviceaccount "default/s3-reader", delete serviceaccount "default/s3-reader" }, delete IAM OIDC provider }, delete cluster control plane "irp-test-5-manual" [async] }

    

превратить в такое:

        [ℹ]  3 sequential tasks: {
  delete nodegroup "ng-5b8f2f94", 2 sequential sub-tasks: {
    2 sequential sub-tasks: {
      delete IAM role for serviceaccount "default/s3-reader", delete serviceaccount "default/s3-reader"
    }
    delete IAM OIDC provider
  }
  delete cluster control plane "irp-test-5-manual" [async]
}
    

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

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

Далее в книге
рассказывается о том, как запахи
кода многократно увеличивают когнитивную нагрузку, а их устранение повысит
понятность. Запахи кода были введены Кентом Беком и стали более известными,
когда Мартин Фаулер
написал о них. Книга по рефакторингу идентифицирует такие запахи кода:

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

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

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

Решение сложных задач

Как и ранее – определите,
в чем заключается проблема. Перепишите/переформулируйте ее своими словами. Это
позволит убедиться, что вы правильно понимаете рассматриваемую проблему. Затем
как можно подробнее обрисуйте проблему, определите существующие индивидуальные
ограничения. Перечислите их и изучите. Если уперлись, начните удалять или добавлять
ограничения.

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

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

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

Изучайте. Понимайте. Создавайте
свое – так вы научитесь.

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

Часть четвертая. Совместная работа над кодом


Написание кода

Далее перечисляются
различные действия при написании кода и объединяются в следующих подразделах.

Поиск

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

Понимание

58 % нашего времени
уходит на это занятие. Речь идет о понимании кода и попытке выяснить, что он
делает и как. Изменение/упрощение кода помогает. Рисуйте модели и оставляйте
заметки, которые помогут потом все вспомнить.

Транскрипция

«Just coding», тут вы
знаете, что собираетесь писать, где и почему.

Рост

Добавление новой функции.
Это всегда тяжело, но необходимо.

Исследование

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

Совершенствование проектирования больших систем

Эта глава заставляет
задуматься о дизайне вашей системы с точки зрения когнитивной нагрузки и о том,
как трудно было бы другим найти в ней свой путь. Разрабатывайте свою систему для
людей. Легко ли ее поддерживать? Имеют ли смысл названия пакетов? Должен ли именно
этот код тут быть? Ваша архитектура может быть крутой, но если другие не могут
ее прочитать, они не будут с ней работать. Это особенно важно, если работаете в
команде. В книге это называется CDCB (когнитивное измерение кодовых баз).

CDCB определяет следующие
измерения:

  • Подверженность ошибкам. В основном касается безопасности типов и того, насколько легко в вашем коде допускать ошибки.
  • Согласованность. Насколько согласован ваш код. Названия, структура, где и почему логика находится там, где она есть.
  • Диффузность. Сколько места занимает программная конструкция. Как долго существуют циклы и языковые структуры. Насколько компактен код.
  • Скрытые зависимости. Насколько много зависимостей. Есть ли скрытые фичи, которые нужны пользователю, но не очевидны и не задокументированы?
  • Вязкость. Насколько код устойчив к изменениям.
  • Прогрессивная оценка. Определяет, насколько сложно выполнить кусок кода.
  • Выразительность. Насколько просто понять, что делает конкретный код. Например, в Ruby трудно понять, является ли что-то вызовом функции или переменной: thing.otherother может быть чем угодно. В других языках легко понять, что thing() – это функция.
  • Сложные мыслительные операции. Код требует сложных мыслительных операций, таких как расшифровка неясного синтаксиса или понимание сложных идиом, таких как монады и неочевидные системы типов. Если ваш проект требует сложных умственных операций, контрибьюторы не захотят присоединятся к нему.
  • Вторичная нотация. Комментарии и именованные параметры.
  • Абстракция. Позволяет пользователям вашей системы создавать свои собственные абстракции, которые столь же мощны, как и встроенные.

Как привлечь новых разработчиков

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

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

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

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

Заключение

На этом все. Спасибо за
внимание. Мы надеемся, что прочтение книги принесет больше понимания, как все
устроено в этом мире и какая сложная штука этот наш мозг. Как обычно, ждем
ваших комментариев о материале и о книге после прочтения. Удачи!

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

06
Дек
2021

📚 ТОП-10 книг о языке программирования Rust: от новичка до профессионала

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

30
Ноя
2021

📈 5 сложных навыков, которые позволят экспоненциально расти в программировании

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

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

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

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

Посмотрим на следующую
диаграмму:

Экспоненциальная кривая (источник: <a href="https://en.wikipedia.org/wiki/Exponential_growth" target="_blank" rel="noopener noreferrer nofollow">Википедия</a>)
Экспоненциальная кривая (источник: Википедия)

Мы говорим о зеленом
графике.

Рассмотрим 5 вещей, которые могут привести к незамедлительному экспоненциальному росту вашей карьеры программиста.

1. Возня с игрушками

Какое отношение игрушки
(гаджеты) имеют к программированию?

Когда мне было 8 лет, я сломал свои цифровые часы, чтобы понять, как работает контроль времени. Мне потребовалось 2 дня, чтобы собрать все заново. После всех мучений я не смог понять, какова связь между микросхемой и цифрами на LCD-панели.

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

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

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

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

В этом занятии есть
три важных момента:

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

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

Больше полезной информации вы найдете на нашем телеграм-канале «Библиотека программиста».

2. Бросать вызов самому себе

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

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

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

Допустим, вы написали
функцию, которая считывает набор переменных из конфига. Реализация будет
включать жестко заданное имя файла (например, «myfile.config»). Ее интерфейс
выглядит следующим образом:

        func readParams()
    

Чтобы испытать себя, после
написания этой функции настройте ее так, чтобы она принимала имя файла (с
аргументом по умолчанию, который является именем файла).

        func readParams(filename: String="myfile.config")
    

Только подумайте, сколько
возможностей откроет это небольшое изменение:

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

3. Грамматика

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

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

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

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

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

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

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

4. Презентация

Когда дело доходит до
работы, программисты практически не общаются. Они либо общаются на непонятном
для других техническом жаргоне, либо просто пишут код.

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

Представьте себе сценарий
входа в систему, объясненный 2 программистами:

Программист A:

Пользователь приходит на
экран авторизации, вводит имя пользователя/пароль и нажимает кнопку входа. Если
он вводит символы #, & или *, вход отклоняется, и пользователь остается на
той же странице. Если все хорошо, генерируется запрос к API. Пароль должен
быть хэширован, т. к. API сопоставляет хэш пароля с хэшем, хранимым в БД. Эта
проверка не должна происходить, если имя пользователя не совпадает. Когда совпадают
оба введенных параметра, возвращается код 200 и пользователь перенаправляется
на страницу профиля, а если нет – 401. В случае успеха выдается токен,
который действителен в течение 2 недель.

Программист Б:

  • У нас есть два процесса: внешний код и внутренний API (рисуем два квадрата).
  • Оба общаются через HTTP-запрос (соединяем их стрелками).
  • Фронтенд принимает вводимые пользователем данные и проверяет их.
  • Бекенд должен проверять наличие пользователя в БД и правильность хэша пароля.
  • И здесь начинается важная часть: если ответ будет успешным, фронт получит токен от серверной части, который будет хранить 2 недели. Пока он действителен, пользователь может сразу попадать на страницу профиля. Эта логика проверки токенов предшествует странице авторизации.
  • Вы можете посмотреть подробности API в документе, который я отправил всем/загрузил в облако.

(на этом этапе,
возможно, на доске/блокноте много стрелок, и каждая стрелка помечена порядковым
номером)

Чья презентация будет успешной? Программист А может быть на 100% прав, но он наверняка потерпит неудачу в своей передаче идеи. Коллегам было бы скучно из-за его неорганизованного способа представления и ненужных деталей (коды статуса HTTP).

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

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

Цель презентации –
ясность и простота.

В Amazon это уже осознали
и теперь предпочитают шестистраничную
памятку, а не PPT-файл. Если вы не можете с помощью 6 страниц описать свою
идею, она не заслуживает внимания. Упростите любой ценой!

5. Переключение контекста

Мозг большинства
программистов подобен микросервисам. Разберемся на примере.

Монолитный подход:

API: /get/payments

Сначала парсим входные параметры. Если есть ненулевой параметр учетной записи, он будет возвращать только платежи из учетной записи. В противном случае все платежи будут возвращены.

Микросервисный подход:

Микросервис более
специфичен и ориентирован на объекты.

Микросервис для учетных записей (/get/payments) будет возвращать платежи только для
учетной записи, с которой совершается вход.

Микросервис для платежей (/get/payments) вернет все платежи, произведенные в
системе.

В чем разница? Парсинг – это налог за наличие монолита. Другими словами, микросервис уже знает, что он должен делать.

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

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

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

Ваша работа программиста
требует только доставки кода.

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

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

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

Заключение

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

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

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

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

Истина лежит где-то
посередине.

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

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

28
Окт
2021

🐍 2 простых проекта за час или 3 причины выбрать Python первым языком программирования

Существует множество языков программирования и, что самое главное, их количество стремительно растет. Чем же хорош именно Python и почему его стоит выбрать в качестве первого языка? Рассмотрим три главные причины.

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

1. Простота и легкий вход

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

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

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

2. Широкая сфера применения

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

3. Большое количество модулей

Зачем изобретать велосипед с треугольными колесами, когда за время существования Python сообщество написало огромное количество модулей?

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

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

Из последнего: недавно я нашел модуль для управления квадрокоптером и прикрутил его к своему проекту.

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

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

Backend (Python + Flask)

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

Код проекта:

        from flask import Flask
import datetime

app = Flask(__name__)

@app.route("/")
def index():
    x = datetime.datetime.now()
    return str(x)

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
    

Менее десяти строк кода, и у нас на локальном хосте работает такой сервер. Можем добавить немного кода и написать еще один route().

        from flask import Flask
import datetime

app = Flask(__name__)

@app.route("/")
def index():
    x = datetime.datetime.now()
    return str(x)

@app.route("/test")
def intestdex():
    return "Hello from Flask :)"

if __name__ == "__main__":
    app.run(host='0.0.0.0', port=8080)
    

Теперь, если мы обратимся к localhost:8080/test, наш сервер вернет строку: “Hello from Flask”.

Круто! Дальше все ограничено только вашей фантазией и можно много чего добавить: прикрутить базу данных, сделать авторизацию, работать с шаблонизатором и html.

NLP – Natural Language Processing

Задача
Написать реализацию подсчета наиболее частых слов в тексте. Для примера возьмем произведение А.С Пушкина “Метель”.

Код проекта:

        import string
import nltk
import time
from nltk import word_tokenize
from nltk.probability import FreqDist
from nltk.corpus import stopwords
from wordcloud import WordCloud
from pylab import figure, axes, pie, title, show
import matplotlib.pyplot as plt

f = open("pushkin-metel.txt", "r", encoding="utf-8")

# очистка
text = f.read()
text = text.lower()
spec_chars = string.punctuation + "\n\xa0«»\t--..."

def remove_chars_from_text(text, chars):
    return "".join([ch for ch in text if ch not in chars])

text = remove_chars_from_text(text, spec_chars)     #уд. спецсимволов
text = remove_chars_from_text(text, string.digits)  #уд. цифры

# создаем токены
nltk.download("punkt")            #подключаем punkt
text_tokens = word_tokenize(text) #получаем токены

# очистка, стоп слова
nltk.download("stopwords")
russian_stopwords = stopwords.words("russian")
text_tokens = [token.strip() for token in text_tokens if token not in russian_stopwords] #токены списком без стоп слов

text = nltk.Text(text_tokens) # меняем тип для работы с методами nltk
fdist = FreqDist(text)  
      
print(fdist.most_common(5)) # топ 5 по частотности слов
    

Проект посложнее, но если посидеть с чашечкой кофе, можно разобраться. За 5 секунд наш код проанализировал все произведение “Метель”, посчитал частоту кода и выдал топ-5 наиболее часто встречающихся слов. Файл pushkin-metel.txt можно скачать по ссылке.

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

***

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

29
Сен
2021

📖 ТОП-7 проверенных временем книг по AR/VR

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

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

Критерии отбора

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

1. The VR Book: Human-Centered Design for Virtual Reality (2015)


Издание: The VR Book: Human-Centered Design for Virtual Reality, Jason Jerald, Morgan & Claypool Publishers, 2015

Описание: В этой книге вопросы разработки VR-приложений обсуждаются с акцентом на человеческий фактор. Она предназначена для VR-дизайнеров, а также для менеджеров, программистов, художников, психологов, инженеров, студентов, преподавателей и профессионалов в области UX/UI.

Об авторе: Джейсон Джеральд, доктор философии, соучредитель и главный консультант NextGen Interactions. Он также является главным научным сотрудником Digital ArtForms и приглашенным адъюнкт-профессором в Технологическом институте Уотерфорда, входит в состав консультативных советов нескольких специализирующихся на технологиях VR компаний, а также координирует Research Triangle Park-VR Meetup.

Автор книги создает системы и приложения виртуальной реальности около 20 лет. Он участвовал более чем в 60 проектах и более чем в 30 организациях, включая Valve, Oculus, Virtuix, Sixense, NASA, General Motors, Raytheon, Lockheed Martin, трех национальных лабораториях США и пяти университетах.

Отзывы критиков:

Исчерпывающее руководство по созданию взаимодействия с пользователем виртуальной реальности.
Амир Рубин, генеральный директор Sixense.
Краткое руководство обеспечивает быстрый доступ со ссылками на прошлые страницы для дальнейшего понимания.
Крис Пущак, креативный директор SymbioVR.

Оценка читателей: 4,9 из 5 на Amazon и 4,16 из 5 на Goodreads.

2. Learning Virtual Reality: Developing Immersive Experiences and Applications (2015)


Издание: Learning Virtual Reality: Developing Immersive Experiences and Applications for Desktop, Web, and Mobile, Tony Parisi, O’Reilly Media, 2015

Описание: Это практическое руководство по основам разработки VR для настольных, мобильных и браузерных приложений. Читатели познакомятся с тремя популярными платформами (Oculus VR, Gear VR и Cardboard VR), с несколькими средами разработки VR, а также с инструментами и методами программирования.

Об авторе: Тони Паризи – предприниматель и архитектор программного обеспечения. Тони является пионером в области виртуальной реальности, соавтором стандартов VRML и X3D ISO для сетевой 3D-графики и считается новатором в области 3D-технологии. Автор этой книги – соорганизатор встреч WebGL и WebVR в Сан-Франциско, а также член рабочей группы Khronos COLLADA, создающей glTF – новый стандарт формата файлов для трехмерных веб-приложений и мобильных приложений.

Оценка читателей: 4,1 из 5 на Amazon.

3. Oculus Rift in Action (2015)


Издание: Oculus Rift in Action, Bradley Austin Davis, Karen Bryla, Phillips Alexander Benton, Manning Publications, 2015

Описание: «Oculus Rift в действии» научит вас создавать 3D-игры и другие приложения виртуальной реальности для Oculus Rift. Вы изучите оборудование Rift на примерах реальных проектов, использующих Oculus SDK и графический движок Unity 3D. Попутно вы получите практическое руководство по использованию датчики Rift.

Об авторах: Брэд Дэвис – разработчик программного обеспечения для High Fidelity, работающего над социальными VR-приложениями с открытым исходным кодом стартапа. Он является активным участником форумов разработчиков Oculus VR и поддерживает набор примеров приложений Rift на Github.

Карен Брыла – внештатный технический писатель и разработчик.

Филлипс Александр Бентон – младший преподаватель кафедры продвинутой трехмерной графики в Кембриджском университете и старший инженер-программист в Google.

Отзывы критиков:

Вы захотите, чтобы эта книга всегда была под рукой при работе с Oculus Rift.
Хосе Сан Леандро, ACM SL.
Лучший способ глубже погрузиться в виртуальную реальность.
Джордж Фриман, основатель Mazepuncher LLC.

Оценка читателей: 4 из 5 на Amazon.

4. Виртуальная реальность в Unity (2016)


Издание: Виртуальная реальность в Unity, Линовес Джонатан, ДМК-Пресс, 2016

Описание: Используя практический и проектный подход, эта книга познакомит вас с особенностями разработки виртуальной реальности в Unity. Вы узнаете, как использовать Unity для разработки приложений виртуальной реальности для устройств, вроде Oculus Rift или Google Cardboard.

Об авторе: Джонатан Линоус – владелец консалтинговой фирмы Parkerhill Reality Labs. Он настоящий энтузиаст виртуальной реальности и 3D-графики, веб-разработчик полного цикла, инженер-программист, успешный предприниматель и преподаватель. Автор книги получил степень по изящным искусствам в Сиракузском университете и степень магистра в MIT Media Lab.

Оценка читателей: 7.5 из 10 на Лабиринте.

5. Augmented Reality: Principles and Practice (2016)


Издание: Augmented Reality: Principles and Practice, Dieter Schmalstieg, Tobias Hollerer, Addison-Wesley Professional, 2016

Описание: Первое исчерпывающее, последовательное и авторитетное руководство по дополненной реальности объединяет ключевые достижения в этой области. Оно включает многочисленные тематические исследования, а также практическое руководство по разработке Android AR с помощью Qualcomm QCAR. Исследователи-новаторы Дитер Шмальштиг и Тобиас Хёллерер тщательно соблюдают баланс между принципами и практикой, освещая AR с технической, методологической и пользовательской точек зрения.

Об авторах: Дитер Шмальштиг является профессором и руководителем Института компьютерной графики и зрения Технологического университета Граца (TUG) в Австрии. Его исследовательские интересы – дополненная и виртуальная реальность, графика в реальном времени, трехмерные пользовательские интерфейсы и визуализация. Он также является автором и соавтором более двухсот рецензируемых научных публикаций, младшим редактором журнала IEEE Transactions, членом редакционного совета по компьютерам и графике в Springer Virtual Reality, членом руководящего комитета Международного симпозиума IEEE по смешанной и дополненной реальности, председателем рабочей группы EUROGRAPHICS по виртуальным средам (1999-2010), советником Центра компетенции K-Plus по виртуальной реальности и визуализации в Вене и членом Австрийской академии наук.

Тобиас Хеллерер – профессор информатики в Калифорнийском университете в Санта-Барбаре, где он возглавляет лабораторию «Four Eyes», проводя исследования по визуализации, взаимодействию и инновационным интерфейсам. Доктор Хеллерер имеет диплом по информатике Берлинского технического университета, а также степень магистра и доктора философии по информатике Колумбийского университета. Он получил награду CAREER от Национального научного фонда США за свою работу над «Anywhere Augmentation». Доктор Хеллерер является автором более ста пятидесяти рецензируемых журналов и публикаций на конференциях в области дополненной и виртуальной реальности.

Отзывы критиков:

Это важная книга для всех, кто интересуется дополненной реальностью (AR), написанная двумя ведущими пионерами отрасли. Она обеспечивает отличную основу для быстрорастущей области AR, как для тех, кто уже работает в этой области, так и для тех, кто просто хочет глубже понять технологию.
Доктор Марк Биллингхерст, Университет Южной Австралии.
Сначала я думал, что эта книга обеспечивает очень прочную основу для любого новичка в области дополненной реальности (AR), которому необходимо изучить все аспекты AR, но затем я понял, что не могу перестать копаться и учиться… она идет глубже, чем многие книг по дополненной реальности, которые я видел за последнее десятилетие!
Ори Инбар, исполнительный директор Augmented World Expo, генеральный директор и основатель AugmentedReality.org.

Оценка читателей: 4,5 из 5 на Amazon.

6. Designing Virtual Worlds (2003)


Издание: Designing Virtual Worlds, Richard A. Bartle, New Riders, 2003

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

Об авторе: Ричард Аллан Бартл, доктор философии, стал соавтором первого виртуального мира MUD («Многопользовательское подземелье») в 1978 году. В прошлом преподаватель технологий искусственного интеллекта в университете, он является влиятельным писателем по всем аспектам проектирования и разработки виртуальных миров. В качестве независимого консультанта он работал почти со всеми крупными игровыми онлайн-компаниями в Великобритании и США за последние 20 лет.

Оценка читателей: 4,3 из 5 на Amazon.

7. Virtual & Augmented Reality for Dummies


Издание: Virtual & Augmented Reality for Dummies, Paul Mealy, For Dummies, 2018

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

Об авторе: Пол Мили работает с виртуальной реальностью с момента выпуска Oculus Rift DK1 в 2013 году. Он проектировал и разрабатывал приложения для Oculus Rift, HTC Vive, Samsung Gear VR, Windows Mixed Reality, Google Daydream и Google Cardboard. Пол работал с разнообразным оборудованием и технологиями дополненной реальности, включая Microsoft HoloLens, ARKit для iOS, ARCore для Android и Vuforia.

Оценка читателей: 4,2 из 5 на Amazon.

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

Заключение

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

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

***

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

27
Сен
2021

🎥 ТОП-10 фильмов и сериалов последних лет про современные технологии

Есть мнение, что после культовых «Хакеров», «Джони Мнемоника» и первой «Матрицы» больше не снимали хороших фильмов на околоайтишную тематику. Так ли это? Попробуем разобраться в обзоре лучших кинокартин о современных технологиях, вышедших з…

24
Сен
2021

📖 ТОП-10 актуальных книг о виртуальной и дополненной реальности: от новичка до профессионала

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

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

1. Augmented Reality and Virtual Reality: New Trends in Immersive Technology (2021)


Авторы: M. Claudia tom Dieck, Timothy H. Jung, Sandra M. C. Loureiro.

Описание: Augmented Reality and Virtual Reality, Springer, 1-ое издание, 5 мая 2021.

Содержание: Книга представляет собой сборник исследовательских работ видных ученых в области дополненной и виртуальной реальности. Она охватывает самые важные в этой сфере темы и представляет интерес для теоретиков и практиков.

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

2. Multimedia and Sensory Input for Augmented, Mixed, and Virtual Reality (2021)


Автор: Amit Tyagi.

Издание: Multimedia and Sensory Input for Augmented, Mixed, and Virtual Reality, Engineering Science Reference, 7 декабря 2020.

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

Чем может быть полезна: Книга содержит сборник бизнес-примеров, охватывающих множество тем, связанных с VR/AR и смешанной реальностью (MR), включая их использование в приложениях.

3. Unity 2020 By Example: A project-based guide to building 2D, 3D, augmented reality, and virtual reality games from scratch


Автор: Robert Wells.

Издание: Unity 2020 By Example, 3 издание, 30 сентября 2020.

Описание: Изучите разработку игр Unity на C# на примере практических проектов, от создания простой 2D-игры до использования возможностей AR/VR и технологий машинного обучения простым.

Чем может быть полезна: Третье издание этой книги по Unity обновлено с учетом новых функций Unity 2020 и современных методов разработки игр. Она содержит:

  • высокоуровневый обзор игрового движка Unity;
  • практики для реализации игровой анимации, игровой физики, шейдеров и эффектов;
  • описание элементов управления плеером и функциями ввода для игр на Unity;
  • основы разработки игр, включая GameObjects, компоненты и сцены;
  • методы искусственного интеллекта, такие как поиск пути, конечные автоматы и машинное обучение с помощью ML-агентов Unity;
  • UnityVR и AR Foundation.

Книга будет полезна разработчикам, которые хотят изучить новые функции Unity 2020, включая возможности применения технологий VR/AR. Требуется базовое понимание программирования на C#.

4. Metaverse Charlie Fink’s (2018)


Автор: Charlie Fink.

Издание: Metaverse Charlie Fink, Cool Blue Media, 1-ое издание, 1 января 2018.

Описание: Книга написана бывшим руководителем Disney, AOL и AG Interactive, который теперь пишет для Forbes о VR, AR и новых медиа. В ней объясняются все аспекты того, что Финк называет метавселенной, от терминологии до технологий и продуктов.


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

5. Advances in Usability and User Experience (2019)


Авторы: Tareq Ahram, Christianne Falcão.

Издание: Advances in Usability and User Experience, Springer, 1-ое издание, 1 июля 2020.

Описание: Материалы международных конференций AHFE 2019 по юзабилити и опыту пользователей, человеческому фактору и вспомогательным технологиям, 24-28 июля 2019 г., Вашингтон, округ Колумбия, США.

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

6. Creating Augmented and Virtual Realities: Theory and Practice for Next-Generation Spatial Computing (2019)


Авторы: Erin Pangilinan, Steve Lukas, Vasanth Mohan.

Издание: Creating Augmented and Virtual Realities: Theory and Practice for Next-Generation Spatial Computing, O’Reilly Media, 1-ое издание, 30 апреля 2019.

Описание: В этой книге Эрин Пангилинан, Стив Лукас и Васант Мохан исследуют конвейер разработки AR и VR и предлагают практические задания, которые помогут вам отточить навыки.

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

Книга состоит из трех частей:

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

7. Unreal Engine VR Cookbook: Developing Virtual Reality with UE4 (2017)


Автор: Mitch McCaffrey.

Издание: Unreal Engine VR Cookbook: Developing Virtual Reality with UE4 (Game Design), Addison-Wesley Professional, 1-ое издание, 6 февраля 2017.

Описание: Всемирно известный разработчик и инструктор виртуальной реальности Митч МакКэффри предлагает проверенные рецепты преодоления множества сложных проблем разработки. Unreal Engine VR Cookbook – полное и авторитетное руководство по созданию потрясающих приложений для любого VR-оборудования, совместимого с Unreal Engine 4.

Чем может быть полезна: Рецепты Маккафри содержат пошаговые инструкции, а также дают краткие объяснения лежащей в основе теории и математики. Книга содержит:

  • объяснение основных концепций и терминологии VR;
  • разъяснение логики VR с помощью визуальных сценариев Blueprint;
  • примеры базовых проектов VR, реализованных с помощью Oculus Rift, HTC Vive, Gear VR, Google VR, PSVR и других сред;
  • сведения об отслеживании взаимодействий и телепортации;
  • разъяснение работы с UMG и 2D UI;
  • сведения о реализации обратной кинематики персонажа (IK) для головы и рук;
  • сведения об эффективном взаимодействии с контроллером движения;
  • сведения об оптимизации приложений VR;
  • информацию о редакторе VR, ссылки на ресурсы сообщества и многое другое.

8. Virtual Reality and the Built Environment (2018)


Автор: Jennifer Whyte, Dragana Nikolić.

Издание: Virtual Reality and the Built Environment, Routledge, 2-ое издание, 14 февраля 2018.

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

  • Каковы бизнес-стимулы для использования виртуальной реальности?
  • Каковы его ограничения?
  • Как можно реализовать виртуальную реальность?

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

Чем может быть полезна: Virtual Reality and the Built Environment – важный материалом для профессионалов в области архитектуры, строительства, дизайна, геодезии и инженерии, а также для студентов профильных специальностей, которым необходимо понимание BIM, CAD и виртуальной реальности в этом секторе. Новая редакция расширяет возможности для рассмотрения иммерсивной виртуальной реальности как способа привлечения профессионалов в информационную модель здания, а также в качестве способа переноса этой модели и связанной с ней информации об активах на место работы. Технологии также рассматриваются в контексте таких разработок, как лазерное сканирование, мобильные решения и большие данные.

9. Augmented Reality Game Development (2017)


Автор: Micheal Lanham.

Издание: Augmented Reality Game Development, Packt Publishing, 20 января 2017.

Описание: Эта книга отправит вас в путешествие по созданию AR-игры, основанной на местоположении.

Чем может быть полезна: Книга затрагивает основные технические концепции:

  • основы GIS;
  • GPS для мобильных устройств;
  • картографирование;
  • текстуры карт в Unity;
  • камеры мобильного устройства, текстуры камеры в Unity;
  • доступ на основе определения местоположения;
  • сервисы и другие полезные советы по Unity.

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

10. Дополненная реальность. Все, что вы хотели узнать о технологии будущего (2019)


Автор: Хелен Папагианнис.

Издание: Дополненная реальность. Все, что вы хотели узнать о технологии будущего, Бомбора, 2019.

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

Чем может быть полезна: Это подробное руководство для дизайнеров, разработчиков, предпринимателей и студентов объясняет. Из него вы узнаете:

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

Какие книги кому подойдут?

Чтобы познакомиться с миром VR/AR с нуля и просто разобраться стоит почитать следующие издания из нашего списка:

  • Metaverse Charlie Fink’s
  • Дополненная реальность. Все, что вы хотели узнать о технологии будущего

Если вы мечтаете построить карьеру в GameDev и интересуетесь играми с элементами виртуальной и дополненной реальности, обратите внимание на эти книги:

  • Unity 2020 By Example
  • Unreal Engine VR Cookbook
  • Augmented Reality Game Development

Для разработчиков и дизайнеров приложений рекомендуем оставшуюся литературу:

  • Augmented Reality and Virtual Reality: New Trends in Immersive Technology
  • Multimedia and Sensory Input for Augmented, Mixed, and Virtual Reality
  • Advances in Usability and User Experience
  • Creating Augmented and Virtual Realities: Theory and Practice for Next-Generation Spatial Computing
  • Virtual Reality and the Built Environment

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

***

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

17
Сен
2021

🎨 ТОП-10 книг по дизайну интерфейса (UX/UI): от новичка до профессионала

Ищите пособия по UX/UI? Эти десять полезных книг помогут углубить ваши знания в области дизайна интерфейса и пользовательского опыта. В обзор вошли лучшие издания на русском и английском языке.

14
Авг
2021

🕸 Веб-аутентификация: файлы cookies или токены?

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

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

Cookie-Based Authentication

Аутентификация – это процесс обмена учетными данными для идентификации пользователя. При аутентификации на основе cookies уникальный идентификатор (файл cookie) создается на стороне сервера и отправляется в браузер.

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

Чтобы лучше понять, как
работают файлы cookie, разобьем этот процесс на 5 частей.

1. Пользователь входит в приложение со своими учетными данными


2. Сервер проверяет учетные данные и создает сеанс в базе данных

Примечание:
Хотя сеанс можно создать в памяти, он не масштабируется.


3. Сервер отправляет файл cookie браузеру, включая его в заголовок Set-Cookie


Файл cookie отправляется в виде пары имя-значение и содержит уникальный идентификатор (id) пользователя.

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

        HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<number>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

[page content]
    
Примечание:
Вы можете использовать один заголовок Set-Cookieдля установки нескольких атрибутов (Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain>; Secure; HttpOnly).

4. Браузер сохраняет cookie в хранилище и отправляет его с последующими запросами


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

Найти все сохраненные в браузере файлы cookie можно в хранилище файлов cookie в разделе
приложения с помощью инструментов разработчика (devtools).


5. Когда пользователь выйдет из системы, сервер удалит сеанс из базы данных


Как только пользователь
выйдет из системы, у сервера истечет срок действия файла cookie и сеанс в базы данных будет очищен. Браузер делает то же самое, удаляя файл
cookie из хранилища.

Мы разобрались, как
работает аутентификация на основе cookie, теперь рассмотрим фичи, плюсы и
минусы этой схемы.

Это полностью автоматизированный процесс

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

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

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

Безопасность

Cookie не имеют надежной защиты от атак, и они в основном уязвимы для атак с использованием межсайтового скриптинга (XSS) и подделки межсайтовых запросов (CSRF).

Мы можем явно изменить заголовки файлов cookie, чтобы защитить их от таких атак.

Например, куки могут быть легко защищены от
XSS-атак с помощью атрибута HttpOnly при настройке заголовков:

        Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
    

Кроме того, можно
использовать атрибут SameSite в заголовке файла cookie для эффективного
предотвращения CSRF-атак.

        Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
    

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

  • SameSite = Lex гарантирует, что браузер не будет отправлять файлы cookie по межсайтовым запросам (это поведение по умолчанию, если атрибут SameSite не определен).
  • SameSite = Strict будет следить за тем, чтобы браузер отправлял cookie только для запросов с того же сайта.
  • SameSite = None позволит отправлять куки как с межсайтовыми, так и с внутрисайтовыми запросами.

Обычно работают в одном домене

Файлы cookie работают только в одном домене, если вы специально их не настроили.

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

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

Не подходит для API

Если вы создаете API для предоставления услуг клиентам, cookie – это не лучший вариант. Если клиент не является браузером, это усложнит работу.

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

Могут возникнуть проблемы с масштабируемостью

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

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

Подходит для хранения дополнительных данных

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

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

Все эти манипуляции можно провести и с помощью токенов. Например, токены JWT позволяют хранить Claim-объекты. Поскольку это увеличит размер токена, сохранение большего их количества повлияет на нагрузку сети.

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

Можно ограничить доступ к cookie в браузере
Поскольку файл cookie предоставляет опцию HTTP-Only, мы можем ограничить доступ JavaScript к нему – это предотвратит любое обращение при атаках с использованием межсайтовых сценариев.

Аутентификация на основе токенов

Этот способ был введен для устранения основанного на куках аутентификации. Особенности подхода – требуется ручная реализация и токены сохраняются на стороне клиента.

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

Стандартные реализации
токен-подхода в разы сложнее описанных выше. Например, в
OpenID Connect применяется несколько потоков аутентификации для различных сценариев использования. Чтобы лучше понять, как работают токены, разобьем процесс на четыре части и в качестве примера используем JWT (JSON Web Token) – наиболее широко используемый стандарт.

1. Пользователь входит в приложение со своими учетными данными


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


При передаче обычно необходимо
использовать шифрование (например, SSL) для защиты канала.

На стороне сервера можно
использовать библиотеку NPM (такую как jsonwebtoken) для
создания токенов:

        // Install
npm install jsonwebtoken
// Usage
var jwt = require('jsonwebtoken');
var token = jwt.sign(
              { data: user}, 
              privateKey, 
              { algorithm: 'RS256'},
              exp: Math.floor(Date.now() / 1000) + (60 * 60),            );
    

Сгенерированный с
помощью jsonwebtoken токен будет выглядеть следующим образом:

        eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    

Токен состоит из 3 частей:
header, payload
и
signature (header.payload.signature). Они разделены символом .,
и вы можете использовать этот
сервис
для анализа информации.


3. Сохранение токена в хранилище браузера и добавление в запросы с помощью JavaScript


Браузер может хранить
этот маркер в локальном хранилище, хранилище сеансов или в хранилище cookies.
Затем он будет добавлен в заголовок авторизации и отправлен на сторону сервера
для валидации запросов.

Добавление токена в заголовок должно быть реализовано с помощью JavaScript.

        Authorization: Bearer <token>
    

Кроме того, можно использовать
функцию jwt.decode() из библиотеки jsonwebtoken для декодирования токена.

4. При выходе пользователя из системы токен вручную удаляется из хранилища

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

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

Это stateless-механизм

В отличие от cookie-подхода, вариант с токенами не имеет состояния. Это означает, что он не сохраняет никакой
информации о пользователях в базе данных или на сервере. Сервер отвечает только за
создание и проверку токенов, что позволяет реализовывать более масштабируемые
решения.

Проблемы безопасности

Хотя введением токенов
пытаются решить проблемы безопасности аутентификации на основе cookies, полностью от них не избавиться.

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

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

Заключение

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

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

Спасибо за внимание!

***

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

14
Авг
2021

🕸 Веб-аутентификация: файлы cookies или токены?

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

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

Cookie-Based Authentication

Аутентификация – это процесс обмена учетными данными для идентификации пользователя. При аутентификации на основе cookies уникальный идентификатор (файл cookie) создается на стороне сервера и отправляется в браузер.

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

Чтобы лучше понять, как
работают файлы cookie, разобьем этот процесс на 5 частей.

1. Пользователь входит в приложение со своими учетными данными


2. Сервер проверяет учетные данные и создает сеанс в базе данных

Примечание:
Хотя сеанс можно создать в памяти, он не масштабируется.


3. Сервер отправляет файл cookie браузеру, включая его в заголовок Set-Cookie


Файл cookie отправляется в виде пары имя-значение и содержит уникальный идентификатор (id) пользователя.

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

        HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: <cookie-name>=<cookie-value>
Set-Cookie: <cookie-name>=<cookie-value>; Expires=<date>
Set-Cookie: <cookie-name>=<cookie-value>; Max-Age=<number>
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain>
Set-Cookie: <cookie-name>=<cookie-value>; Path=<path>
Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly

[page content]
    
Примечание:
Вы можете использовать один заголовок Set-Cookieдля установки нескольких атрибутов (Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain>; Secure; HttpOnly).

4. Браузер сохраняет cookie в хранилище и отправляет его с последующими запросами


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

Найти все сохраненные в браузере файлы cookie можно в хранилище файлов cookie в разделе
приложения с помощью инструментов разработчика (devtools).


5. Когда пользователь выйдет из системы, сервер удалит сеанс из базы данных


Как только пользователь
выйдет из системы, у сервера истечет срок действия файла cookie и сеанс в базы данных будет очищен. Браузер делает то же самое, удаляя файл
cookie из хранилища.

Мы разобрались, как
работает аутентификация на основе cookie, теперь рассмотрим фичи, плюсы и
минусы этой схемы.

Это полностью автоматизированный процесс

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

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

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

Безопасность

Cookie не имеют надежной защиты от атак, и они в основном уязвимы для атак с использованием межсайтового скриптинга (XSS) и подделки межсайтовых запросов (CSRF).

Мы можем явно изменить заголовки файлов cookie, чтобы защитить их от таких атак.

Например, куки могут быть легко защищены от
XSS-атак с помощью атрибута HttpOnly при настройке заголовков:

        Set-Cookie: <cookie-name>=<cookie-value>; Secure
Set-Cookie: <cookie-name>=<cookie-value>; HttpOnly
    

Кроме того, можно
использовать атрибут SameSite в заголовке файла cookie для эффективного
предотвращения CSRF-атак.

        Set-Cookie: <cookie-name>=<cookie-value>; SameSite=Lax
    

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

  • SameSite = Lex гарантирует, что браузер не будет отправлять файлы cookie по межсайтовым запросам (это поведение по умолчанию, если атрибут SameSite не определен).
  • SameSite = Strict будет следить за тем, чтобы браузер отправлял cookie только для запросов с того же сайта.
  • SameSite = None позволит отправлять куки как с межсайтовыми, так и с внутрисайтовыми запросами.

Обычно работают в одном домене

Файлы cookie работают только в одном домене, если вы специально их не настроили.

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

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

Не подходит для API

Если вы создаете API для предоставления услуг клиентам, cookie – это не лучший вариант. Если клиент не является браузером, это усложнит работу.

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

Могут возникнуть проблемы с масштабируемостью

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

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

Подходит для хранения дополнительных данных

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

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

Все эти манипуляции можно провести и с помощью токенов. Например, токены JWT позволяют хранить Claim-объекты. Поскольку это увеличит размер токена, сохранение большего их количества повлияет на нагрузку сети.

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

Можно ограничить доступ к cookie в браузере
Поскольку файл cookie предоставляет опцию HTTP-Only, мы можем ограничить доступ JavaScript к нему – это предотвратит любое обращение при атаках с использованием межсайтовых сценариев.

Аутентификация на основе токенов

Этот способ был введен для устранения основанного на куках аутентификации. Особенности подхода – требуется ручная реализация и токены сохраняются на стороне клиента.

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

Стандартные реализации
токен-подхода в разы сложнее описанных выше. Например, в
OpenID Connect применяется несколько потоков аутентификации для различных сценариев использования. Чтобы лучше понять, как работают токены, разобьем процесс на четыре части и в качестве примера используем JWT (JSON Web Token) – наиболее широко используемый стандарт.

1. Пользователь входит в приложение со своими учетными данными


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


При передаче обычно необходимо
использовать шифрование (например, SSL) для защиты канала.

На стороне сервера можно
использовать библиотеку NPM (такую как jsonwebtoken) для
создания токенов:

        // Install
npm install jsonwebtoken
// Usage
var jwt = require('jsonwebtoken');
var token = jwt.sign(
              { data: user}, 
              privateKey, 
              { algorithm: 'RS256'},
              exp: Math.floor(Date.now() / 1000) + (60 * 60),            );
    

Сгенерированный с
помощью jsonwebtoken токен будет выглядеть следующим образом:

        eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
    

Токен состоит из 3 частей:
header, payload
и
signature (header.payload.signature). Они разделены символом .,
и вы можете использовать этот
сервис
для анализа информации.


3. Сохранение токена в хранилище браузера и добавление в запросы с помощью JavaScript


Браузер может хранить
этот маркер в локальном хранилище, хранилище сеансов или в хранилище cookies.
Затем он будет добавлен в заголовок авторизации и отправлен на сторону сервера
для валидации запросов.

Добавление токена в заголовок должно быть реализовано с помощью JavaScript.

        Authorization: Bearer <token>
    

Кроме того, можно использовать
функцию jwt.decode() из библиотеки jsonwebtoken для декодирования токена.

4. При выходе пользователя из системы токен вручную удаляется из хранилища

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

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

Это stateless-механизм

В отличие от cookie-подхода, вариант с токенами не имеет состояния. Это означает, что он не сохраняет никакой
информации о пользователях в базе данных или на сервере. Сервер отвечает только за
создание и проверку токенов, что позволяет реализовывать более масштабируемые
решения.

Проблемы безопасности

Хотя введением токенов
пытаются решить проблемы безопасности аутентификации на основе cookies, полностью от них не избавиться.

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

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

Заключение

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

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

Спасибо за внимание!

***

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

07
Авг
2021

👨‍💼 5 привычек малоэффективных удаленных сотрудников

Околоайтишную российскую тусовку взбудоражила новость об увольнении 150 сотрудников компании Xsolla после анализа их активности в средствах коллективной работы. Выгнать людей из-за логов Jira – странное решение, но есть ли реальный способ о…

31
Июл
2021

🕸 Сколько получают фуллстек-разработчики в разных странах?

Универсальные веб-программисты или Fullstack Developers востребованы на рынке труда. Мы собрали статистику по заработной плате фуллстек-разработчиков в России и других странах.

Фуллстек-программисты (разработчики полного цикла) выполняют множество задач и могут использовать разные наборы технологий при создании веб-проектов. В их зоне ответственности находится front-end (пользовательский интерфейс) и back-end (программно-аппаратная часть сервиса). Такой универсальный разработчик способен сделать верстку сайта, настроить функции элементов страницы, написать серверную часть проекта и настроить ее.

В каких сферах востребованы фуллстек-разработчики

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

Что нужно знать такому разработчику:

  • JavaScript (примитивы, объекты, объектные дубликаты) и Python.
  • Frontend-фреймворки (один из): Angular, Vue и React.
  • HTML и CSS (строчные и блочные элементы, шрифты, стили и пр.).
  • Библиотеку Bootstrap (начать с rid-макета, панели навигации и др.).
  • Backend-фреймворки (часто используют Express) и NodeJS.
  • TypeScript (предназначен для пранспилирования в чистый ES5, что позволяет писать код на C#, Java и JS).
  • Инструменты для вызова API (Postman и SoapUI).
  • MySQL, PostgreSQL, NoSQL и MongoDB.
  • Модульное и сквозное тестирование.
  • Аутентификацию пользователя (identity и access-токены, пользовательские хранилища для сессии, сторонние инструменты (Active Directory от Microsoft), JSON Web Token).
Прочитать о требованиях к Junior Full-Stack можно в этой статье.

Сколько в среднем по России зарабатывают Fullstack Developer

Если верить статистике сайта neuvoo.ru, фуллстек-разработчики в среднем получают 70 тыс. рублей. В России специалисты такого рода наиболее востребованы в Москве и Санкт-Петербурге.


Заработная плата (в год) смежных специалистов по версии neuvoo.


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

Средний показатель зарплат веб-разработчика на russia.trud.
Средний показатель зарплат веб-разработчика на russia.trud.

Рейтинг оплаты труда программистов смежных направлении по данным russia.trud.
Рейтинг оплаты труда программистов смежных направлении по данным russia.trud.

Доходы Fullstack Developer по миру

Средний уровень зарплат у программистов в Америке находится в пределах 37-87 тыс. долларов (до вычета налогов). Такой оклад готовы выплачивать компании в Калифорнии, Флориде, Техасе, Вашингтоне. В США компании Facebook, Apple, Google, 3-D Systems, IPG Photonics и Microsoft оценивают труд программистов от 60 тыс. долларов (после вычета налогов).

Статистика оплаты труда Fullstack developer нескольких мировых городов по данным glassdoor.com.

Fullstack developer patch in Canada.
Fullstack developer patch in Canada.
Fullstack developer patch in Bern (Switzerland).
Fullstack developer patch in Bern (Switzerland).
Fullstack developer patch in Chicago (USA).
Fullstack developer patch in Chicago (USA).
Fullstack developer patch in New York (USA).
Fullstack developer patch in New York (USA).
Fullstack developer patch in San Francisco (USA).
Fullstack developer patch in San Francisco (USA).
Fullstack developer patch in Mumbai (India).
Fullstack developer patch in Mumbai (India).
***

Если вы только осваиваете профессию, обратите внимание на курс факультета Fullstack JavaScript образовательной онлайн-платформы GeekBrains. Программа обучения рассчитана на 15 месяцев. Успешно завершившие ее студенты сделают 5 кейсов для портфолио, а также получат диплом о профессиональной переподготовке и помощь в трудоустройстве. Занятия ведут практикующие разработчики, а в программу включено все необходимое для успешного старта в одной из самых динамично развивающихся отраслей ИТ.

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…