- PVSM.RU - https://www.pvsm.ru -
Бизнес в России учится делать не только скучные проекты по автоматизации бизнес-процессов, но и создавать IT-решения, способные помочь в борьбе с конкурентами. Например, проекты по предсказанию спроса, real-time offer management, оптимизации логистики, микротаргетированию. Такие сложные задачи отличаются от типовых внедрений CRM или выбора CMS. Надо иначе искать разработчиков, иначе мотивировать, думать об IT-архитектуре и методологии управления.
Шпаргалка — навигация по темам, которые стоит знать руководителю компании и топ-менеджеру, чтобы грамотно реализовать IT-проекты нового уровня сложности. По каждой теме будет много ссылок на статьи, интервью, обзоры и видео.
Для начала разберём как устроен локальный рынок. Это важно, потому что вы будете нанимать разработчиков и делать проекты в России, хотя бы на первом этапе.
Несколько цитат и моих комментариев к статье CNews100 крупнейших ИТ-компаний России [1]:
Ещё одна цитата из статьи CNews100: Рубеж в триллион пройден – спасибо падению рубля [2] «… в долларах падение [выручки] усилилось в два раза — на 31,16% в 2015 г. по сравнению с 15,32% в 2014». Выводы, которые стоит сделать:
Получается, что в России не много продуктов и услуг мирового уровня. Госсектор не показывает эффективности при заказе и разработке ПО, поэтому экспертиза мирового уровня там накапливается медленно. Это влияет на качество разработчиков, уровень зарплат и развитие IT-сообщества. Чтобы пообщаться с экспертами мирового уровня или привлечь этих экспертов в проект, скорее всего придется выехать за пределы страны.
Более подробные цифры и выводы можно прочитать исследовании РУССОФТ Тринадцатое ежегодное исследование российской индустрии экспортной разработки программного обеспечения [3].
Минкомсвязи еще больше замыкает развитие на внутреннем рынке. В 2014 году Николай Никифоров заявил Минкомсвязи хочет увеличить количество программистов в России с 350 тыс до 1 млн [4], две цитаты:
Маcло в огонь подливает то, что государство ведет неоднозначный курс на контроль интернета внутри страны. Подробней в интервью Герман Клименко: «Нам всего-навсего осталась одна большая история — это деанонимизация» [6].
На описанную ситуацию разработчики резонно отвечают миграцией из страны. Не массовой, но непрерывной и стабильной Немного о миграции ИТ-специалистов [7]:
Российские IT-компании открывают филиалы в Европе и США, чтобы разработчики оставались в компании, но работали в комфортной стране. Кроме этого преследуется цель снизить риск из-за санкций и нестабильной ситуации в стране. Подробнее в статье о вывозе программистов Luxoft перевез 536 инженеров из России и с Украины [8] и интервью с СЕО компании JetBrains Глава компании JetBrains: у программистов неудачный имидж [9]. Моя компания [10], например, разрешает разработчикам работать из любой точки планеты, у нас уже есть примеры переездов.
Надеюсь ситуация с внутренним IT-рынком стала ясной. Ситуация эта не пессимистичная и показывает возможности для предпринимателей.
В целом для IT в данный момент характерно:
Компании условно делятся на чисто технические и на классический бизнес с подразделениями, среди которых IT-отдел. Чисто технические компании отличаются тем, что ключевую бизнес ценность создают технологии и разработчики стоят у руля. Такие компании выигрывают у классического бизнеса с IT-отделом в конкурентной борьбе на рынке и в соревновании за кадры. На это есть ряд причин:
Посмотрите как один из крупнейших банков страны формулирует призыв к разработчикам Встреча с CIO банка «Открытие» Кириллом Меньшовым [15]: «Хорошая новость для любителей рвать шаблоны и разрушать мифы: ИТ-специалист может найти интересную работу не только в технологической корпорации...».
Если банку Открытие приходится объяснять разработчикам, что в компании найдутся амбициозные задачи, то остальным участникам рынка стоит задуматься, как по-новому позиционировать себя для разработчиков.
Мы рассмотрели ценности IT-рынка и проблемы, которые есть у классических компаний с IT-отделом. Исходя из этого, привлечение сильных разработчиков может строиться на следующем:
При переходе от традиционной компании к чисто технической сложнее всего изменить культуру.
Если организацию представить в виде пирамидки, то культура — тугая резинка вокруг пирамидки. Вы сдвигаете одну из частей пирамиды, например, делаете процессы более «гибкими». Резинка натягивается и со временем аккуратно возвращает процессы на прежнее место:
Подробнее о подходах к изменению культуры в статье Culture is a rubber band around your organization [21].
Выбор платформы и языка программирования — сложный процесс, который не стоит делать непрофессионалам. Но если вы решили разобраться и сделать выбор сами, то ниже я дам рекомендации на что обратить внимание и расскажу правда ли этот выбор так критичен для проекта.
Есть базовые требования, которые вы можете проверить при выборе платформы:
Есть набор более общих принципов:
Вы уже знаете, что найти талантливых разработчиков сложно. Поэтому на первом этапе я рекомендую выбирать не технологию, а экспертизу, которая вам доступна. Хорошие разработчики сделают хороший продукт на любой технологии, а плохие разработчики потерпят неудачу с самой лучшей технологией.
Если у вас есть грамотные PHP-разработчики, которые готовы стартовать разработку Minimum Viable Product (MVP), значит делайте MVP на PHP. Не важно, что вы фанат Java. Потом найдете команду Java-программистов. Аналогично, если разработчики знают только mysql, а вы слышали, что postgresql круче — выбирайте mysql, потому что прямо сейчас можно сделать MVP на mysql и быстрее получить обратную связь от рынка. С первых заработанных денег вы перепишите проект на любимые технологии. Параллельно ищите разработчиков на технологиях, которые вам больше нравятся, а пока используйте что есть.
Нет корреляции между языком программирования и успехом IT-продукта. Если всё-таки хочется выбрать язык, то используйте набор факторов, описанных дальше.
Доступность разработчиков на рынке. Проверяется очень просто. Заходите на hh.ru [25] и ищите резюме по словам PHP, Java и т.д. Смотрите на цифру открытых резюме. Вы сразу заметите, что разработчиков на JavaScript [26] — 94 120, а на Kotlin [27] — 420. Чем больше доступных разработчиков, тем больше шансов найти нормальных кандидатов за приемлемое время и приемлемые деньги.
Популярность на stackoverflow. Идете на stackoverflow в раздел тэгов [28]. Это популярная база с вопросами-ответами для разработчиков. Чем больше цифра рядом с тэгом, тем он популярней. Например, по языку C# задали 1 120 0000 вопросов, а по Lotus Notes всего 2 700. Это значит, что при выборе Lotus Notes вы остаетесь один на один с их тех. поддержкой, а при выборе C# вы найдёте ответ почти на любой вопрос.
Популярность на TIOBE. Индекс TIOBE [29] основан на популярности поисковых запросов. По-моему, он отражает реальное положение дел.
Популярность языка в сообществе Open Source. Показывает на каких языках пишут разработчики, которые вкладывают силы в разработку Open Source. Информация собирается на сайте https://madnight.github.io/githut. [30]
Эти четыре критерия удобны для поверхностной оценки непрофессионалом. Разносторонний анализ и выбор языка сделает только IT-архитектор или опытный разработчик. При выборе учитывается текущая инфраструктура, предстоящие задачи, план развития продукта и компании и т.д.
При выборе платформы и выборе языка программирования я рекомендую найти эксперта для консультаций. Вот четыре способа найти хорошего эксперта:
- Найти сайты крупных международных и российских конференции и связаться со спикерами. Они охотно отвечают на вопросы, проверил на своем опыте. Например, GOTO [31] и AgileDays [32].
- Пойти в профессиональные сообщества в соц. сетях и связаться с лидерами или активными участниками. Скорее всего этим людям не всё равно, они болеют за профессию, поэтому есть шанс вовлечь их в решение своих проблем. Например, Архитектура ПО [33] и Agile Russia [34].
- Сделать поиск по сетям с профессиональными контактами на подобие LinkedIn. Находите там нужного человека, пишите ему в личные сообщения и общаетесь. Например, меня так находили не один раз [35] и привлекали в качестве консультанта.
- Банально — спросите рекомендации у коллег, которые получили позитивный опыт при работе с конкретной компанией или человеком. Хорошего айтишника, как хорошего врача, аккуратно передают из рук в руки.
Подходы к управлению IT-проектами отличаются от управления проектами в материальном мире:
Существует множество разных подходов к управлению IT-проектами. Для упрощения я разделю все подходы на итерационно-инкрементальные и каскадные.
Процесс работы в стиле каскадной модели можно представить так:
Процесс работы в итерационно-инкрементальном стиле можно представить так:
Оба подхода имеют свои плюсы и минусы. Ни один из подходов нельзя назвать универсальным. При выборе между подходами можно оценивать пригодность подхода по схеме, которую я нарисовал по книге Balancing Agility and Discipline: A Guide for the Perplexed [38]. Чем ближе характеристики вашего проекта к центру, тем более «гибкий» подход надо выбрать:
Еще один возможный критерий при выборе подхода к управлению — текущий этап жизненного цикла продукта. Об этом подробно рассказал Асхат Уразбаев в выступлении Как сохранить гибкость бизнеса, Agile Days 2017 [39]. На стадии зрелости стоит выбирать более формализованные подходы, а на стадиях создания и роста более гибкие:
Вокруг Agile сформировалось много мифов и легенд. Для начала давайте посмотрим, почему стоит внимательно присмотреться к этому подходу. Рекомендую посмотреть видео Греф про судьбу России и Agile подходах из IT — нефтяной век закончился [40]. Цитаты из видео:
Весь «agile» описан в манифесте гибкой разработки ПО [41]. Он состоит из четырех ценностей и двенадцати принципов. Обратите внимание на то, что обычно упускают из вида:
Agile — описание культурного кода. Работать по Agile означает, что компания и бизнес-заказчики разделяют ценности и принципы, описанные в манифесте. При этом не важно какой управленческий фреймворк выбран, не важно используется доска со стикерами или нет.
Крупные компании в России и по всему миру пытаются внедрить у себя Agile, но мало у кого получается. Причина в том, что Agile это не набор инструментов, а культура, которая меняется тяжело [43]. Моя практика внедрений Agile в компаниях и практика коллег показывает, что только 3-10% сотрудников готовы менять свою культуру. Остальные либо не хотят, либо не способны к изменениям. Поэтому, если вы решили внедрить Agile, то проще всего начинать с чистого листа. Если такой вариант не возможен, то ищите и нанимайте как можно больше новых людей, которые уже разделяют ценности и принципы гибкой разработки.
Частая проблема при гибком подходе связана с накоплением технического долга [44] из-за постоянных изменений в коде и низкого уровня разработчиков. Тревожный знак, если во время разработки скорость поставки новых функций замедляется, ломается то, что уже работало, а разработчики уверяют, что это обычное дело. В этом случае прочитайте статью Определения провала IT-проекта [45] пока не поздно.
Материалы, с которых можно начать изучение Agile:
Прежде чем создавать IT-продукт, выберите цель и подход для вложения денег:
Если вы дошли до п.3 и поняли, во что конкретно хотите вложить деньги, то теперь надо дёшево проверить идею и посчитать экономику.
У каждого из нас много хороших идей для нового IT-продукта. Создается ощущение, что мир будет счастлив получить IT-продукт, который нарисовался в нашей голове.
Возможно так и случится. А возможно мы ошибаемся, и никто не заплатит за будущий продукт. Чтобы быстро проверить идею и не потерять деньги на галлюцинациях, рекомендую изучить книгу Бизнес с нуля. Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели [53]. Коротко опишу шаги, которые надо пройти:
Есть еще один вариант, как распорядится своими деньгами и временем. Называется «Прыжок веры», как в Assassin's Creed. Вы ничего не проверяете, а доверяетесь своему чутью и вкладываете в идею без проверки. Такой вариант имеет права на жизнь, но риски выше, чем у варианта с проверкой рынка и расчетом экономики.
Прежде чем вкладывать деньги в рост аудитории и организовывать продажи, стоит посчитать экономику. Идея в том, что если экономика сходится и есть подтвержденные источники кратного роста, то скорее вкладывайте деньги. Если же каждая продажа дает минус, то кратный рост обернется кратными убытками.
Илья Красинский из ФРИИ один из немногих в нашей стране, кто рассказывает доступным языком как правильно считать экономику. Рекомендую начать с видео HSE{sun}: Экономика стартапа и метрики: как помочь проекту найти цель и эффективно к ней идти [55] и пройтись по его выступлениям.
Чтобы IT-продукт выжил, скорее всего он должен быстро вырасти. Growth hacking [56] — процесс быстрого экспериментирования через маркетинговые каналы и короткие итерации при разработке продукта для определения наиболее эффективных способов роста бизнеса. Вам надо подобрать «ключик» к умам широкой аудитории, чтобы продукт стал популярен.
Для вдохновения рекомендую прочитать историю о том, как вырос проект Airbnb. У них не было базы данных по недвижимости. Поэтому Airbnb решили позаимствовать базу с другого популярного сайта. Подробнее читайте в статье Airbnb: The Growth Story You Didn't Know [57].
На русском языке о Growth hacking пишут, например, на VC.ru [58].
Я рекомендую начать процесс создания продукта с изучения его ценности и точек взаимодействия с конечным пользователем. В нашей компании этот процесс состоит из трех этапов [37]:
Эти три инструмента — визуальные средства коммуникации внутри продуктовой команды. Я не рекомендую писать технические задания. Более подробно об этом в статьях Техническое задание как база знаний о проекте [60] и Откровенное общение с заказчиком [61].
Желательно поставку новых фич сделать через короткие итерации длиной в одну неделю или в один день или один час. Чем выше уровень компетенций в команде, тем выше скорость поставки.
При таком подходе процесс разработки превращается в непрерывную проверку гипотез:
Подробное описание процесса в статье с видео и слайдами Пять самых важных составляющих процесса выпуска проектов, Agile Days 2016 [62].
В данный момент развивается идея об экономике экосистем. Поэтому прежде, чем стартовать продукт, не будет лишним изучить эту тему. Начать можно с лекции Германа Грефа Новые технологические тренды и модели эффективного менеджмента [63]. Основная идея — убирать посредников-дистрибьюторов из взаимодействия между поставщиком продуктов/услуг и потребителем, а вместо него поставить «дирижера»:
Не факт, что вам надо становится «дирижерами» в какой-то экосистеме. Но если вы будете в курсе этой темы, то, возможно, подкорректируете идею своего продукта под правильный тренд и заработаете больше денег. А задуматься есть о чем, вот несколько фактов о крупнейших IT-компаниях мира:
Чтобы понять какая архитектура в моде и почему так произошло, стоит увидеть, как развивались требования бизнеса и предложение со стороны IT:
Почему стоит присмотреться к микросервисной архитектуре:
Более подробно о микросервисах, когда их стоит использовать и когда не стоит, какие сложности возникают при внедрении, посмотрите в видео Microsoft Dev School — Микросервисы, чистый PaaS и конкурс мисс Россия [65] и в презентации Бизнес-гибкость через микросервисную архитектуру, Agile Days 2017 [66].
IT быстро растет. Развиваются подходы к машинному обучению и искусственному интеллекту. Я перечислю несколько проектов, которые меня вдохновляют:
Подобные проекты вдохновляют разработчиков. Если вы замахнетесь на такие высоты, то точно сможете привлечь нужных людей в проект.
Автор: AlexanderByndyu
Источник [73]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/agile/263366
Ссылки в тексте:
[1] CNews100 крупнейших ИТ-компаний России: http://www.cnews.ru/news/top/2017-05-15_opublikovan_rejting_krupnejshih_itkompanij_cnews100
[2] CNews100: Рубеж в триллион пройден – спасибо падению рубля: http://www.cnews.ru/reviews/2015/articles/cnews100_rubezh_v_trillion_projden_spasibo_padeniyu_rublya
[3] Тринадцатое ежегодное исследование российской индустрии экспортной разработки программного обеспечения: http://www.russoft.ru/report/3523
[4] Минкомсвязи хочет увеличить количество программистов в России с 350 тыс до 1 млн: http://habrahabr.ru/post/233687
[5] преподаватель с шестилетним стажем в двух ВУЗах на IT-специальностях: http://blog.byndyu.ru/search/label/%D0%9E%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
[6] Герман Клименко: «Нам всего-навсего осталась одна большая история — это деанонимизация»: https://geektimes.ru/post/290457/
[7] Немного о миграции ИТ-специалистов: https://geektimes.ru/post/274763/
[8] Luxoft перевез 536 инженеров из России и с Украины: https://www.vedomosti.ru/technology/articles/2015/07/03/599117-luxoft-perevez-536-inzhenerov-iz-rossii-i-s-ukraini
[9] Глава компании JetBrains: у программистов неудачный имидж: https://www.dp.ru/a/2015/09/06/Kodovoe_slovo__schaste
[10] Моя компания: https://byndyusoft.com
[11] создают комфортные офисы: https://theoryandpractice.ru/posts/9705-best-space
[12] обезьяны разработчики среднего уровня не напишут сложный проект: https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%BE_%D0%B1%D0%B5%D1%81%D0%BA%D0%BE%D0%BD%D0%B5%D1%87%D0%BD%D1%8B%D1%85_%D0%BE%D0%B1%D0%B5%D0%B7%D1%8C%D1%8F%D0%BD%D0%B0%D1%85
[13] «Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения»: http://maxkir.com/sd/people_as_nonlinearRUS.htm
[14] инженерные практики: https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D1%82%D1%80%D0%B5%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5
[15] Встреча с CIO банка «Открытие» Кириллом Меньшовым: https://bank-otkritie-events.timepad.ru/event/547535/
[16] IT-компаний с банковской лицензией: http://www.rbc.ru/interview/finances/23/06/2015/55780ea19a7947012cada5fe
[17] Современные возможности IT с примерами: #it-trends
[18] Выбор платформы и языка для разработки: #it-platform-language
[19] Хабр: https://habrahabr.ru
[20] VC.ru: https://vc.ru/
[21] Culture is a rubber band around your organization: https://blog.byndyusoft.com/culture-is-rubber-band-around-your-organization-92a9f8e4385
[22] Integration Patterns: актуальные инструменты: http://blog.byndyu.ru/2013/10/integration-patterns.html
[23] Clouds, iPaaS, Citizen Integrator and Why India’s Outsourcing Is Losing Money: https://blog.byndyusoft.com/clouds-ipaas-citizen-integrator-and-why-indias-outsourcing-is-loosing-money-924eeafb1b97
[24] хостинг: https://www.reg.ru/?rlink=reflink-717
[25] hh.ru: https://hh.ru
[26] JavaScript: https://hh.ru/search/resume?text=javascript&logic=normal&pos=full_text&exp_period=all_time&order_by=publication_time&clusters=true
[27] Kotlin: https://hh.ru/search/resume?pos=full_text&exp_period=all_time&order_by=publication_time&text=kotlin&logic=normal&clusters=true
[28] stackoverflow в раздел тэгов: https://stackoverflow.com/tags
[29] TIOBE: https://www.tiobe.com/tiobe-index/
[30] https://madnight.github.io/githut.: https://madnight.github.io/githut/
[31] GOTO: https://blog.gotocon.com/conferences/
[32] AgileDays: http://agiledays.ru/
[33] Архитектура ПО: https://www.facebook.com/groups/software.architecture/
[34] Agile Russia: https://www.facebook.com/groups/agilerussia
[35] так находили не один раз: https://www.linkedin.com/in/alexanderbyndyu/
[36] Как пасти котов. Наставление для программистов, руководящих другими программистами: https://www.ozon.ru/context/detail/id/2409500/
[37] по этому процессу: https://byndyusoft.com/productanalysis
[38] Balancing Agility and Discipline: A Guide for the Perplexed: https://www.amazon.com/Balancing-Agility-Discipline-Guide-Perplexed/dp/0321186125
[39] Как сохранить гибкость бизнеса, Agile Days 2017: https://www.youtube.com/watch?v=wAH92qJqvQQ
[40] Греф про судьбу России и Agile подходах из IT — нефтяной век закончился: https://www.youtube.com/watch?v=jJyfQlU19wo
[41] манифесте гибкой разработки ПО: http://agilemanifesto.org/iso/ru/manifesto.html
[42] Основополагающие принципы Agile-манифеста: http://agilemanifesto.org/iso/ru/principles.html
[43] меняется тяжело: #change-culture
[44] технического долга: http://blog.byndyu.ru/2008/12/blog-post.html
[45] Определения провала IT-проекта: http://blog.byndyu.ru/2013/12/it.html
[46] Гибкое управление продуктом в двух словах: https://www.youtube.com/watch?v=mIVRFYjIZ5A
[47] часть 1: https://www.youtube.com/watch?v=dtzPtFi8jiQ
[48] часть 2: https://www.youtube.com/watch?v=ZMR0uWWtG1Y
[49] Подборка манифестов из мира IT: http://blog.byndyu.ru/2013/09/it.html
[50] The Scrum Guide: http://www.scrumguides.org/scrum-guide.html
[51] Scrum: The Art of Doing Twice the Work in Half the Time: https://www.amazon.com/Scrum-Doing-Twice-Work-Half/dp/038534645X
[52] 11-й ежегодный отчет State of Agile: https://scrumtrek.ru/blog/11-j-ezhegodnyj-otchet-state-of-agile/
[53] Бизнес с нуля. Метод Lean Startup для быстрого тестирования идей и выбора бизнес-модели: https://www.ozon.ru/context/detail/id/18322266/
[54] как запускался Dropbox: https://techcrunch.com/2011/10/19/dropbox-minimal-viable-product/
[55] HSE{sun}: Экономика стартапа и метрики: как помочь проекту найти цель и эффективно к ней идти: https://www.youtube.com/watch?v=RSpjSPsD8IA
[56] Growth hacking: https://en.wikipedia.org/wiki/Growth_hacking
[57] Airbnb: The Growth Story You Didn't Know: https://growthhackers.com/growth-studies/airbnb
[58] VC.ru: https://vc.ru/tag/growth-hacking
[59] Impact Mapping: http://blog.byndyu.ru/2014/12/impact-mapping.html
[60] Техническое задание как база знаний о проекте: http://blog.byndyu.ru/2013/07/blog-post.html
[61] Откровенное общение с заказчиком: http://blog.byndyu.ru/2017/05/blog-post.html
[62] Пять самых важных составляющих процесса выпуска проектов, Agile Days 2016: http://blog.byndyu.ru/2015/12/blog-post.html
[63] Новые технологические тренды и модели эффективного менеджмента: http://www.sberbanktv.ru/?video=1994
[64] bus factor: https://en.wikipedia.org/wiki/Bus_factor
[65] Microsoft Dev School — Микросервисы, чистый PaaS и конкурс мисс Россия: http://blog.byndyu.ru/2017/07/microsoft-dev-school-paas.html
[66] Бизнес-гибкость через микросервисную архитектуру, Agile Days 2017: https://www.slideshare.net/AlexanderByndyu/ss-73574376
[67] Why Amazon's Anticipatory Shipping Is Pure Genius: https://www.forbes.com/sites/onmarketing/2014/01/28/why-amazons-anticipatory-shipping-is-pure-genius/#1dc0de4d4605
[68] Microsoft Cognitive Services: https://azure.microsoft.com/en-us/services/cognitive-services
[69] Uber boosts platform security with the Face API, part of Microsoft Cognitive Services: http://customers.microsoft.com/en-us/story/uber
[70] Открытая лекция о взаимодействии человека и искусственного интеллекта: http://sberbanktv.ru/?video=2049
[71] Siemens заменила менеджеров компьютерной программой: https://geektimes.ru/post/291915/
[72] AI научился предсказывать преступные наклонности по фото.: https://life.ru/t/%D0%BD%D0%B0%D1%83%D0%BA%D0%B0/935291/iskusstviennyi_intielliekt_nauchilsia_priedskazyvat_priestupnyie_naklonnosti_po_foto
[73] Источник: https://habrahabr.ru/post/337238/
Нажмите здесь для печати.