Connect with us

Разработка

Григорий Петров: Как и зачем читать чужой код

Тысячи лет практика “посмотреть работу молодого специалиста, ужаснуться, подсказать что-нибудь полезное” помогает нам передавать опыт и знания. Нужно ли говорить о том, что более опытным разработчикам необходимо читать код своих начинающих коллег и помогать им советами? Это же очевидно и все об этом знают? Или нет?

Григорий Петров

Опубликовано

/

     
     

В одной из первых статей я уже писал про code review, настало время рассказать подробности. Тысячи лет практика “посмотреть работу молодого специалиста, ужаснуться, подсказать что-нибудь полезное” помогает нам передавать опыт и знания. Нужно ли говорить о том, что более опытным разработчикам необходимо читать код своих начинающих коллег и помогать им советами? Это же очевидно и все об этом знают? Или нет?

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

Легко ли более опытному разработчику читать код, созданный не его ментальными моделями по другому опыту? Четырем из пяти моих знакомых разработчиков это невероятно трудно. Это очень трудно мне. По сути, чтобы действительно понять чужой нетривиальный код, нужно понять, как работает разум другого человека, плюс провести реверсию Кошелька Миллера – разбить картину на последовательность мазков и эскизов, иначе оно просто не влезет в фокус внимания. Странный вывод: если действительно внимательно читать чужой код, то вам для этого потребуются либо уникальные люди (я таких встречал, одного человека), либо опытный разработчик будет тратить на чтение чужого кода примерно столько же времени, сколько автор потратил на его написание.

code-review

И это только первые грабли. Есть еще вторые. Так как код является отражением ментальной модели разработчика, то чужой код разработчику в большинстве случаев не понравится! При чтении чужого кода разум будет пытаться воспринять его как свой, пропустить через собственные ментальные модели. Но код – это не книга. Естественный язык допускает множество трактовок каждого предложения, чтобы большинство читателей, пропустив текст через призму своего восприятия, увидели каждый свою картину. С языком программирования все не так: программист будет всегда видеть чужую картину, слепок работы чужого разума. И это ему не понравится. Отсюда нелюбовь разработчиков разбираться в чужом коде и инстинктивное желание “все переписать с нуля”.

Что читать

Получается, читать чужой код – слишком сложно? Не совсем. Внимательно читать чужой код сложно. Но для того, чтобы чтение кода принесло пользу, не обязательно читать его внимательно! Ведь важные вещи: архитектура, уровень сложности, соблюдение стандарта кодирования – можно проверить и при быстром просмотре чужого кода. Именно в этом кроется контринтуитивный секрет code review: не нужно внимательно читать все. Опытные разработчики, делая code review, быстро просматривают код в поисках подозрительных моментов, не пытаясь понять каждую строчку и разобраться в хитросплетениях борьбы автора со сложностью. Если что-то привлекло внимание – то на это смотрят внимательнее. Если нет – специально не ищут. Действительно опасные проблемы с архитектурой и скопления сложности видны опытному разработчику сразу. Остальное покажу тесты. У вас ведь есть тесты?

dltf8

Конечно, ситуации бывают разные. Для медицинского софта особо важные участки кода могут построчно ревьювить сразу несколько разработчиков – слишком высока цена ошибки. Но, в большинстве случаев, главная задача code review – избежать ситуации, когда опытный разработчик тратит все свое время на очень внимательный review кода двух-трех джуниоров, и в конце дня гордо говорит – ” посмотрите, сколько я у вас нашел багов!”. Нашел, молодец. Но сколько на это было потрачено времени и сил? Стоило ли оно того? Плюс не забываем о микроменеджменте – свой мозг в чужую голову не установить.

Что не читать

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

7713228_orig

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

Автоматика спешит на помощь

Тим лид знает, что читать чужой код тяжело. Тим лид знает, что читать чужой код необходимо. И чтобы не расслаблялись, и чтобы вовремя отследить уползшую “не туда” архитектуру, и чтобы опыт передавался. Из всего, что я видел, хорошо зарекомендовал себя комбинированный подход. Код читается, но очень быстро, для поиска страшных, видных на первый взгляд проблем. Чтобы оценить его “читаемость” другим человеком. А все остальное: стандарт кодирования, баги, логика работы, эффективность и множество других параметров проверяет автоматика. У вас ведь не только тесты есть, но и автобилд?

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

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

SDK

App Annie запустила аналитику установленных в приложениях SDK

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

AppTractor

Опубликовано

/

Автор:

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

Ускоренное создание потока продаж

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

Отбор наиболее перспективных потенциальных клиентов

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

  • количество установленных SDK атрибуции рекламы, загрузки, доход, активные пользователи, доля показов — для продаж рекламы
  • количество установленных SDK рекламных платформ, долявыполненных показов, активные пользователи, длительность сеанса вприложении, загрузки, доходы — для работы с издателями

Оценка своих позиций: измерение доли рынка SDK рекламных платформ

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

Комментарии
Продолжить чтение

Разработка

Как сделать HTML5-приложение на Corona

10 июля движок для создания 2D-приложений Corona обновился до версии 2018.3326. Это значит, что поддержка платформы HTML5 наконец вышла в открытую бету, и создание HTML5-приложений доступно всем пользователям.

AppTractor

Опубликовано

/

Автор:

Что такое HTML5-игры и почему они важны

Легкие онлайн-игры на основе HTML5 запускаются во вкладке любого браузера или внутри знакомых всем приложений: в социальных сетях или мессенджерах. Чтобы начать HTML5-игру, не нужно скачивать приложения из App Store или Google Play или обновлять плагины браузера  достаточно выбрать игру парой кликов из каталога встроенной в социальную сеть / мессенджер игровой платформы. Подобные платформы уже есть во «ВКонтакте» (Direct Games), в Facebook (Instant Games) и даже в Telegram и китайском WeChat. Благодаря этому аудитория игр расширяется: пользователи ждут новых игр, а девелоперы с удовольствием их создают, адаптируя новые жанры, усложняя игровые механики.

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

Все указывает на то, что пора собирать свое первое HTML5-приложение и зарабатывать на нем, пока это не сделал ваш сосед. Поэтому сегодня рассказываем и показываем, как поставить готовую игру на HTML5-рельсы и разместить ее на платформах Facebook Instant Games и VK Direct Games с помощью движка Corona.

Портирование в HTML5:

  1. Заходим на сайт Corona Labs и скачиваем на свой компьютер последнюю версию Corona 2018.3326.

  1. После установки ПО и открытии Corona Simulator создайте аккаунт в открывшемся окне – Corona Developer Login или зайдите под существующим.
  2. Теперь самое интересное – начинаем портировать игру в HTML5-формат. Мы покажем на примере игры из Corona Marketplace. Скачиваем и открываем игру в Corona Simulator: Open Project -> Папка игры -> main.lua. Даже если у вас несколько файлов .lua, выбираем сначала main.

  1. Чтобы cобрать из вашего проекта HTML5-приложение, выберите в меню Corona Simulator — File -> Build -> HTML5(BETA).

  1. В открывшемся окне портирования задайте имя и расположение файла. Что делать с опциями под галочками:
    – Include Standard resources означает, что ваша игра сможет использовать стандартные элементы Corona (кнопки, фигуры) — рекомендуемая для начинающих;
    – Create FB Instant archive (создает архив файлов, который потом пригодится для портирования проекта на игровую платформу Facebook) — ставьте галочку.

  1. После нажатия OK запустится портирование игры в HTML5-формат. В окне Corona Simulator Console отобразятся списком все файлы приложения и итоговый вес игры.
  2. Когда портирование закончится, игра автоматически откроется в системном браузере. Можно также открыть в любом удобном браузере, нажав в всплывающем окне на Open in Browser, чтобы запустить игру. Внешне она будет выглядеть одинаково во всех браузерах, в том числе, в мобильных.

  1. В папке с готовым HTML5-приложением вы найдете zip-архив для загрузки игры на Facebook Instant Games.

Портирование на Facebook Instant Games

  1. Зарегистрируйтесь на странице Facebook для разработчиков (developers.facebook.com) -> Начать работу (или «Мои приложения», если аккаунт уже есть).

  1. На странице всех ваших приложений Facebook -> Добавить новое приложение (developers.facebook.com/apps).
  2. В открывшемся каталоге приложений выберите «Моментальные игры» (Instant Games)

  1. Добавьте иконки, название и описание будущей игры начиная с вкладки «Информация».
  2. Во вкладке Веб-хостинг -> Загрузить версию загружаем zip-архив, из папки с вашим HTML5-приложением.

Помните, что размер приложения не должен превышать 5МБ. Это связано с использованием webview, который существенно ограничивает производительность устройства;

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

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

  1. Теперь можно посмотреть, как выглядит и работает игра: Настройки в левой панели -> Основное -> Веб-игры на Facebook -> вставляем в адресную строку браузера ссылку из окна «URL Страницы веб-игр Facebook».

  1. Осталось только заполнить все настройки приложения, включая вкладки «Лидеры», «Проверка», «Рекомендации», «Отзывы», «Покупка в приложении» и отправить игру на проверку. И вуаля, ваша игра уже в левом меню среди других на Facebook Instant Games!

Портирование в VK Direct Games

  1. Активируйте плагин VK Direct Games в Corona Marketplace. Зайдите на страницу плагина и нажмите кнопку Activate;

  1. В своем проекте в файле build.settings установите плагин VK Direct Games. Как это сделать описано в документации к плагину;
  2. Соберите из вашего проекта HTML5-приложение как описано выше.
  3. Готовое HTML5-приложение перенесите на свой сервер. Если нет сервера, можно воспользоваться сервисом GitHub, который организует ваш сервер по адресу yourname.github.io;
  4. Наберите в браузере строку yourname.github.io и проверьте, что ваше приложение работает корректно, помните, что игры в ВК должны занимать не более 10МБ;
  5. Зайдите на страницу в VK для разработчиков. Выберите пункт «Мои приложения» из верхней панели и нажмите кнопку «Создать приложение»;

  1. Выберите пункт «Встраиваемое приложение», заполните поле названия и описания игры и нажмите кнопку «Перейти к загрузке приложения»;

  1. На ваш телефон должно прийти уведомление о создании вами игры — вам надо подтвердить это действие, чтобы продолжить;
  2. Добавьте иконки для описания игры, как указано на странице «Информация»;

  1. В левой панели выбираете пункт «Настройки» и выбираете тип приложения iFrame, включаете состояние «Видно всем» и самое главное, в поле «Мобильная версия»: добавляете адрес вашей HTML5-игры (пример: https://yourname.github.io);
  2. Важно! Оставьте поле адрес iFrame пустым;

  1. Сохраните настройки — иконка вашей игры будет в левой панели — нажмите на нее — у вас появится экран игры и кнопка «Отправить на телефон»;

  1. Подключите телефон через USB к компьютеру, погасите приложение VK и нажмите кнопку «Отправить на телефон» — вы услышите звук пуш-нотификации;
  2. Смахните сверху вниз по экрану телефона и выберите пуш-нотификацию — ваша игра запустится внутри приложения VK;

Bingo! Теперь ваша игра есть на ведущих игровых платформах, а также во вкладках самых популярных десктопных и мобильных браузеров.

Комментарии
Продолжить чтение

Медиа

Android Dev Подкаст. Выпуск 70. React Native. Впиливать или выпиливать?

Мы обходили стороной вопросы кроссплатформенных фреймворков, но вот настал час для обсуждения одной и самых модных и более-менее стабильных платформ. Мы пригласили разработчиков с большим стажем. В мир Reat Native кто-то пришел из Andorid, кто-то из iOS, а кто-то из веб – и тем и интереснее получилась беседа. Надеемся, что к концу выпуска, слушатель, вместе с ведущими, сформирует свое мнение о React Native и будет готов к обсуждению внедрения этого фреймворка на работе.

AppTractor

Опубликовано

/

Автор:

Мы обходили стороной вопросы кроссплатформенных фреймворков, но вот настал час для обсуждения одной и самых модных и более-менее стабильных платформ. Мы пригласили разработчиков с большим стажем. В мир Reat Native кто-то пришел из Andorid, кто-то из iOS, а кто-то из веб – и тем и интереснее получилась беседа. Надеемся, что к концу выпуска, слушатель, вместе с ведущими, сформирует свое мнение о React Native и будет готов к обсуждению внедрения этого фреймворка на работе.

Материалы

Комментарии
Продолжить чтение

Дизайн и прототипирование

17 лекций о разработке интерфейсов Школы разработки интерфейсов Яндекса

Этой весной в Яндексе прошла очередная Школа разработки интерфейсов. Школа рассчитана на начинающих разработчиков, которые всерьёз интересуются созданием интерфейсов и уже знают азы, но пока не набрались опыта. Чтобы освоить программу Школы могли все желающие, Яндекс выпустил видеокурс — он объединяет все лекции, которые читались в ШРИ весной.

AppTractor

Опубликовано

/

Автор:

Материалы для самоподготовки

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

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

Курс даёт базовую теорию. Тех, кто хочет применить знания на практике, Яндекс приглашает на очные занятия в Школу разработки интерфейсов. Практики будет много — слушателей ждут семинары, домашние задания и работа над учебными проектами. Для поступления нужно заполнить анкету и решить тестовое задание.

Обучение в Школе бесплатное. Набор открыт в трёх городах: Москве, Симферополе и Минске. Жители других мест могут приехать на учёбу в столицу: тем, кто пройдёт отбор, Яндекс оплатит дорогу и проживание в хостеле.

Комментарии
Продолжить чтение

Реклама

Наша рассылка

Нажимая на кнопку "Подписаться" вы даете согласие на обработку персональных данных.

Вакансии

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.