Вопросы, комментарии, предложения: http://twitter.com/squadette 2015-03-11 Мульти-блиц Меня зовут Алексей Махоткин, я стою на фейс-контроле в московском ночном клубе, который называется undev.ru. Сегодня сбылась моя мечта, я выступаю на разогреве у Валкина. Некоторые темы преследуют меня всю мою профессиональную жизнь. Я хочу обсудить сразу несколько таких тем, потратив на каждую приблизительно по семь с половиной минут. Я не собираюсь рассказывать об успехах, потому что их нет, или о технических деталях, потому что они мне не интересны. Я, скорее, хочу обратить ваше внимание на несколько вещей, на которые, как мне кажется, имеет смысл обратить внимание.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Меня зовут Алексей Махоткин, я стою на фейс-контроле вмосковском ночном клубе, который называется undev.ru.
Сегодня сбылась моя мечта, я выступаю на разогреве у Валкина.Некоторые темы преследуют меня всю мою профессиональнуюжизнь. Я хочу обсудить сразу несколько таких тем, потратив на
каждую приблизительно по семь с половиной минут. Я не собираюсьрассказывать об успехах, потому что их нет, или о технических
деталях, потому что они мне не интересны.Я, скорее, хочу обратить ваше внимание на несколько вещей, накоторые, как мне кажется, имеет смысл обратить внимание.
Документирование для программиста
2015
-03-
11
Мульти-блиц
Для начала я хочу рассказать кое-что о документированиипрограммного кода для снижения bus-factor. Это одно израспространенных мечтаний среди программистов —
«документировать программу», чтобы пойти в отпуск илиуволиться. К сожалению, на дороге к этой прекрасной цели нас
подстерегает ряд опасностей.
Документация к коду — это текст.
2015
-03-
11
Мульти-блиц
Вообще, любой текст будет существенно проще писать, если у негоесть цель. Это что-то вроде сильной типизации — если перед
написанием текста сформулировать ответы на несколько простыхвопросов, то текст часто начинает вытекать из-под пальцев
самостоятельно и без напряжения.
Для кого конкретно мы пишем текст?
2015
-03-
11
Мульти-блиц
Кто конкретно тот человек, для которого мы документируем код?Например, наша задача сильно облегчится, если мы признаем, чтоэтот человек не уступает нам в компетентности и квалификации.
Ему, в общем, даже не нужно объяснять что-то в духе «здравствуй,малыш! ты оказался в лабиринте!» — ему это ваш же менеджер
объяснил на собеседовании. Он умеет бегать не хуже вас — простоон пока еще не знает, где именно в этом лабиринте разложенысюрпризы. Он все равно узнает об этом так или иначе из своего
опыта — вопрос только в том, о каком проценте сюрпризов вы емурасскажете на раннем этапе.
Что этот человек знает заранее?
2015
-03-
11
Мульти-блиц
Что этот человек должен знать заранее? Не надо документироватьничего, кроме сюрпризов. Часто документирование начинается с
описания работы функции max() или класса File, и им жезаканчивается, не добравшись до функции «n-мерная сверткакластеризованных коэффициентов». Не надо документироватьфункции, которые соответствуют всяким стандартам языка —вашему читателю очевидно, что делает функция to_json.
Документируйте сюрпризы
2015
-03-
11
Мульти-блиц
Я думаю, что эта манера программистов взята из разного родадокументации на разного рода API — именно эту документациюпрограммисты читают чаще всего и подражают ей. Там, конечно,надо стремиться к стопроцентному документированию, порой даже
избыточному.
Напишите план сочинения, как учили в школе.
2015
-03-
11
Мульти-блиц
Попытка документировать кодовую базу похожа на марафон —необходимо планировать время и энергию. Соберите, например,список классов. Разложите их на три группы — бизнес-логика, непойми что и утилиты. Документируйте бизнес-логику. Не тратьтевремя на утилиты. На следующей итерации сфокусируйтесь на
второй группе.
Что этот человек узнает, прочитав текст?
2015
-03-
11
Мульти-блиц
Представьте себе, что у вас через три часа поезд. Теперьдокументируйте то, что приходит на ум и не тратьте время на
шелуху.Представьте себе, что вы даете человеку ключи от дачи. Вы небудете рассказывать ему о том, что в вашей даче есть дверь соступеньками и три окна. Вы расскажете, как включить газ и
электричество, где ближайшие электрички (и какую из них частоотменяют), где покупать по дороге продукты, какой ключ заедает и
т. п.
Pidgin English, ч. I.
2015
-03-
11
Мульти-блиц
У программистов есть несколько способов продемонстрироватьзнание английского языка. Один из них — написать на нем
документацию. Это порочная идея (если, конечно, вы не работаетена западного работодателя). Скорее всего, ваш преемник будет
говорить на одном с вами языке. Скорее всего, и вам будет труднописать, и ему будет трудно восстанавливать смысл из чужого языка.Я так понял, что у многих программистов есть некое стремление
интегрироваться в мировую инфраструктуру. Обычно этовыражается в некоем полуоформленном стремлении «когда-нибудьподключиться к опен-сорсу». Готовясь к этой мечте, они пытаются
писать тексты на английском языке. Почему при этом они неподключаются собственно к опен-сорсу — вопрос открытый.
Однако — не надо обманывать себя.
Pidgin English, ч. I.
2015
-03-
11
Мульти-блиц
Либо подключитесь к опен-сорсу и начните разрабатывать тамкакую-то нетривиальную фичу — и тогда у вас моментально
вырастет искомый английский язык от дискуссий с коллегами. Либоперестаньте самообучаться на безвинных людях, которые потом
будут переводить ваш текст обратно на русский язык.
Самодокументируемый код
2015
-03-
11
Мульти-блиц
Хорошо, если код прозрачен, как слеза программиста, сидящего наего поддержке. Тяжело документировать код, который вообще-тонадо бы частично переписать, переименовать несколько функций,убрать коросту и прочее. Однако, в этот момент лучше включитьрежим патологоанатома: «у ребенка три ножки, зато отсутствует
правая ручка. также его нельзя отключать от вот этого вотпроводочка. число, подпись.»
Это тяжело. Часто программист, сформулировав очередной абзац обустройстве какого-нибудь очередного компонента, с мучительнойясностью осознает, насколько далеко его детище от одного из
идеалов, которые он носит в сердце. Его окружают демоны, онивоют и призывают то покаяться, то рефакторить, то бросить этобессмысленное занятие и пойти почитать что-нибудь утешающее.
Скорее всего, ситуация сейчас такова, что ничего трогать не нужно.Лучше потратьте это время на то, чтобы хотя бы классифицировать
области возможного рефакторинга.
Самодокументируемый код
2015
-03-
11
Мульти-блиц
Завершение секции про документирование
Отслеживание требований
2015
-03-
11
Мульти-блиц
В долгоживущих проектах некоторые требования с течениемвремени отмирают. Однако, зачастую код, поддерживавший этитребования, остается в кодовой базе и в лучшем случае ничего не
делает (а на самом деле он тратит внимание разработчиков,всплывает в выдаче grep’а и т. п.). Конечно, в таких проектах всегда
есть процесс рефакторинга, который постепенно позволяетизбавляться от такого кода.
Интересно было бы подумать и поэкспериментировать с разметкойкода по определенным требованиям, чтобы превратить требования внекоторый объект первого класса. Например, можно было бы вести
файл со списком «требований», и размечать с помощьюспец-комментариев отдельные функции, участки кода, классы и
файлы на предмет их принадлежности к требованию.
Отслеживание требований
2015
-03-
11
Мульти-блиц
Маркапить можно и нужно все что угодно — яваскриптовые файлы,CSS-файлы, картинки и проч.
Требованием могут быть разные вещи — инфраструктурная фича,обеспечивающая надежность и отказоустойчивость; конкретный
юзкейс, который должна поддерживать наша программа; поддержкакакой-то третьейсторонней системы, которая в какой-то момент
может оказаться ненужной, и т. п.
Метрики
2015
-03-
11
Мульти-блиц
Все это великолепие можно парсить и проводить глобальный анализкодовой базы. Процент покрытия, относительные объемы каждоготребования, степень изолированности требования (сколько файлов
оно затрагивает) и проч.Если требование устарело, то его можно удалить из
соответствующего файла и тогда автоматически соответствующийкод можно диагностировать как «устаревший».
Метрики
2015
-03-
11
Мульти-блиц
Завершение секции про отслеживание требований
SELECT * FROM <tblname> — плохой способ организацииконтента
2015
-03-
11
Мульти-блиц
Экономия энергии — эволюционно обусловленный механизмразвития человека, и разработчики интерфейсов — не исключение.Все знают про оператор «SELECT *», все знают ключевые слова
«LIMIT и OFFSET». Очень легко придумать интерфейс, основанныйна этих двух идеях. В этот момент включается эволюционныймеханизм экономии энергии — в глазах возникает характернаячерно-белая спираль и голос «ЭКОНОМЬ ЭНЕРГИЮ». Таким
Этот интерфейс очень эффективно нагружает базу данных, носпускает в унитаз всю структуру контента, который он призван
визуализировать.
Придумайте что-нибудь
2015
-03-
11
Мульти-блиц
Рискуя гибелью от нехватки ресурсов, можно попробовать придуматьчто-нибудь. Например, многие виды контента размещаются на
некотором таймлайне, и можно попытаться визуализировать именноего. Эволюционный инстинкт настаивает на том, чтобы придумать
календарь и ограничиться этим (экономим энергию).Может быть, можно сделать что-то еще — например, что-то вродеheat-map активности на линии времени. Шарики разного размера ицвета? Учитывать как количество сообщений, так и количество
участников?Может быть, это гистограмма активности, как в графиках
статистики посещений, как в Google Analytics? График активностиможно аннотировать, «подсвечивая» причину всплеска — сезонные
обострения? важные события в жизни сообщества? тренды?
Emotion mining
2015
-03-
11
Мульти-блиц
Вообще говоря, вся эта история — она про data mining. Она пропостроение производных структур поверх некоторого первичного
контента.С одной стороны, наверняка половина обсуждений, для пагинациикоторых требуется 649 страниц — представляет из себя шум на 95процентов. С другой стороны, это надо еще доказать. С третьейстороны, получение такого механизма обратной связи можетулучшить качество обсуждения, улучшить само сообщество.
Я буду еще говорить про производный контент в приложении кклассификации стартапов.
Emotion mining
2015
-03-
11
Мульти-блиц
Завершение секции про пагинацию
Деградация глобального контента
2015
-03-
11
Мульти-блиц
Интернет полон устаревшей информации. Гугл покупает все большедисков, заполняя свой поисковый индекс. Индустрия не стоит на
месте, и почти каждый текст о ее фактическом состоянии рано илипоздно устаревает.
Иногда при поисках решений некоторых вопрос программированияна рельсах в первых позициях серпа находятся блог-посты,
датированные 2006 годом, то есть где-то районом версии 1.2.Понятно, что указанные в них советы давно и невероятно устарели.Понятно, что так же устаревают аналитические статьи, переписка в
форумах, описания продуктов и многое другое.
Деградация глобального контента
2015
-03-
11
Мульти-блиц
Проблема не только с технологическими статьями, но и с другойфактографией — информация о визах, юридические консультации,
рассказы о медицинских технологиях (например, технологиялазерной коррекции зрения радикально меняется за пару лет, и
читать ужасающие отзывы делавших операцию пять лет назад нетникакого смысла).
Понятно, что никто ничего не будет менять, потому что контент невырубить топором.
Таймлайны
2015
-03-
11
Мульти-блиц
Мне кажется, что можно было бы ввести в оборот такую идею, кактаймлайн событий. Таймлайн это некий объект первого класса,
который ведется совместно в духе Wiki. Таймлайн можноподключить к тому или иному сайту — форуму и т. п. Глядя на
время написания текста, можно выводить некие, что ли, подсказки— «На всякий случай сообщаем, что с тех пор вышло уже две
мажорные версии рельсов. Обратите внимание, что визовые правилашенгенского соглашения изменились.» и т. п.
Подобные напоминания может также выдавать расширение кбраузеру, так или иначе анализируя содержимое страницы (илипросто позволяя пользователю выбирать нужный таймлайн).
В любом случае, мне кажется, что таймлайны какструктурированный объект первого класса — это перспективная идея.
Кстати, домен timewiki.ru свободен )
Таймлайны
2015
-03-
11
Мульти-блиц
Завершение секции про таймлайны
Future shock.
2015
-03-
11
Мульти-блиц
Меня бесит ситуация, на мой взгляд сложившаяся в мире NoSQL.Отсутствует единый согласованный корпус знаний о теории ипрактике. Есть много разрозненных сведений о практическом
применении. Есть классическая теория, которая лежит в основемногих решений.
Есть удивительная инженерная культура, которая помогает людямнаходить остроумные и свежие решения для актуальных проблем.
Нет целостности. Тысячи, десятки тысяч человеко-часов тратятся наподбор решения опытными специалистами. Тысячи, десятки тысячменее опытных разработчиков могли бы получить десятки мощныхинструментов в свое распоряжение. Однако, сообщество продолжает
накапливать все новые реализации, все новые отчеты обиспользовании, отчеты о переходах и миграциях. Половину этих
историй, честно говоря, сложно читать без слез.
Future shock.
2015
-03-
11
Мульти-блиц
Я понимаю, что все в стрессе, у всех внезапный успех или внезапноеизменение требований, или внезапная недооценка необходимости ипереоценка возможностей. Однако, от выслушивания историй о том,что сначала мы пользовались MongoDB, а потом оно ВНЕЗАПНОвдруг стала работать со скоростью один запрос в час, поэтому мы впанике поставили Redis, и все работало хорошо, пока однажды мы
ВНЕЗАПНО перезагрузили сервер и оказалось, что то что мыпринимали за персистентный сторадж, оказалось RAM-based
решением, и поэтому мы...Я с ужасом понимаю, что я не застрахован от всей этой истории. Янабираю команду из полудюжины высококлассных разработчиков, и
я понимаю, что мы будем идти по всем текущим граблям всехтекущих решений, и перед нашим носом снова будут маячить
морковки из альтернативных решений.
Коммодитизация технологии
2015
-03-
11
Мульти-блиц
Лично мне для возможности принимать чуть более предсказуемыетехнические решения не хватает очень простой вещи — актуального,
поддерживаемого сообществом экспертов, нейтральногоклассификатора NoSQL-решений. Хорошо структурированный текст,который без соплей излагает факты, с расчетом на компетентную
аудиторию.
нижележащая структура данных;первые производные структуры;возможные алгоритмы;алгоритмическая сложность;конкурентное поведение (блокировки);классификация по CAP-теореме;распределение нагрузки и отказоустойчивость ×алгоритмы;ad-hoc решения;список внедрений;родственные связи;протокол доступа;20
15-0
3-11
Мульти-блиц
Вообще хочется обойтись в этом тексте без историй типа здравствуймалыш! сейчас я расскажу тебе, что такое графы, а потом мы споем
вместе песенку.Ad-hoc решения — это например про то, что Redis позволяет
работать в режиме message queue.На сайты решений сложно смотреть без слез. Больше всего менябесит фраза про «высокую производительность» и «надежность»,
которая повторяется на всех сайтах.У меня есть идея сделать СбербанкДБ. Это такое nosql-решение, вкотором каждый запрос обрабатывается минут по 15-20, и еще
перерывы на обед с двух до трех по часовому поясу сервера. Такжеоно иногда отвечет фразой «ой а мы ваш ключик потеряли».
Таймлайны снова
2015
-03-
11
Мульти-блиц
Как мы все понимаем, вся эта история — снова во многом протаймлайны как механизм устаревания контента. Также эта история
— про первичную информацию, это будет темой одной изследующих частей.
Сообщество
2015
-03-
11
Мульти-блиц
Никто не в состоянии в одиночку поддерживать такой корпус знанийв одиночку. Однако, мы могли бы поработать вместе, объединитьнаш опыт и знания и создать вещь, которая позволит нам всем
увеличить свою техническую эффективность.Если вы чувствуете, что в моих словах есть смысл — давайте
свяжемся и попробуем стартовать этот проект.
Сообщество
2015
-03-
11
Мульти-блиц
Завершение секции про классификацию NoSQL
Немного о резюме программистов
2015
-03-
11
Мульти-блиц
Давайте немного поговорим о чем-нибудь попроще, например орезюме. Я нанял наверное человек 80 для Undev.ru, то есть я
прочитал около 1000 резюме, или может быть тысячи полторы.Процентов двадцать этих резюме я предпочел бы никогда не видеть.
Сопроводительное письмо (cover letter)
2015
-03-
11
Мульти-блиц
Некоторые почему-то считают, что кавер леттер — этоформальность. Наоборот, кавер леттер — это специальный формат,который был придуман для того, чтобы обратиться непосредственно
к личности нанимающего менеджера (если, конечно, компанияустроена так, что у нанимающих менеджеров есть личности).Идеально, если вы хотите работать в той или иной компании,например, в Undev.ru. Тогда вы пишете в кавер-леттер, почему
именно там, и фокусируете внимание на те или иные аспекты своегоопыта которые, как вам кажется, должны быть особенно интересныкомпании. Идеально, конечно, если вы еще и подстраиваете резюме
под работодателя.
Сопроводительное письмо (cover letter)
2015
-03-
11
Мульти-блиц
Понятно, что вы можете и не быть таким мотивированным (хотя тутнадо бы задать себе вопрос — а почему?) Тогда вы рассылаете одно
и то же резюме без всякого кавер-леттера на двадцать разныхадресов и ждете ответа. Постарайтесь организовать свое резюме,как и всякий целенаправленный текст, так, чтобы оно хотя бы не
мешало нам его читать.
резюме должно быть;
обратный хронологический порядок работ;
не пишите туда ерунду;не надо устраивать балаган;заполните moikrug.ru;пишите по-русски;
2015
-03-
11
Мульти-блиц
Даже если вы адский специалист, который никогда не ходит пособеседованиям, я все равно скорее всего захочу увидеть ваше
резюме. Оно нужно мне для того, чтобы сориентировать коллег ируководство.
До сих пор встречаются резюме, в которых самое свежее местоработы находится в конце списка. Это настолько отвратительно, что
я вычеркиваю этот пункт.
резюме должно быть;
обратный хронологический порядок работ;
не пишите туда ерунду;не надо устраивать балаган;заполните moikrug.ru;пишите по-русски;
2015
-03-
11
Мульти-блиц
Не надо присылать смешные резюме — в виде кода на Ruby, в видекомиксов, а особенно — в виде resumup (этот стартап занял первоеместо на проведенном мною конкурсе самых идиотских стартапов).К сожалению, чистая статистика заставляет меня относиться с
подозрением к смешным резюме — я видел может быть один случай,когда под таким резюме скрывался адекватный профессионализм.Мы очень любим moikrug.ru, и мы хотели бы, чтобы в нем былобольше активных на рынке труда людей, и чтобы у них были
максимально полные резюме.
Pidgin English, ч. II
2015
-03-
11
Мульти-блиц
Зачем вы присылаете мне резюме, записанное латинскими буквами?Присылайте в российские компании резюме на русском языке,
пожалуйста.
Начало карьеры
2015
-03-
11
Мульти-блиц
Завершение секции про резюме
Вопросы, пожелания, предложения?
2015
-03-
11
Мульти-блиц
Вопросы
UNDEV.RU
2015
-03-
11
Мульти-блиц
Несколько заключительных объявлений.На стенде undev.ru можно купить экземпляр книги БенджаминаПирса «Типы в языках программирования». Из-за особенностейкнижной дистрибуции он продается слишком дорого в Москве,
Санкт-Петербурге и интернет-магазинах книга-почтой. Я постепеннораспространяю эту книгу среди еще неохваченных слоев общества.
Там же можно получить по листу прикольных лопающихсяпупырышков, у нас их почти четыре квадратных метра.