Александр Краковецкий — CEO компании DevRain, соучредитель «ДонорUA», Microsoft Regional Director, Microsoft AI Most Valuable Professional, кандидат технических наук. Он уже некоторое время публикует на Facebook забавные зарисовки с объяснениями айти-терминов, а теперь собрал их в одну статью на DOU.UA. Представляем вам перевод этой статьи.
Значение термина «инкапсуляция» я понял только на третьем году работы разработчиком программного обеспечения, на техническом интервью в одной из компаний. Точнее, я знал, что такое инкапсуляция и даже ее использовал. Однако просто объяснить, что означает этот термин (так, чтобы понял шестилетний ребенок, как говорил Айнштайн), не мог. Обучение в аспирантуре помогло прокачать достаточно экзотический скилл — объяснять сложные вещи простыми словами. Так родилась идея серии шуточных публикаций, которые были собраны в единую статью, которой я делюсь с читателями ДОУ.
О разработке программного обеспечения
Допустим, есть задача — посадить на огороде картошку. Конечно, у вас есть много опций, как это сделать.
Вы можете найти человека с трактором, который приедет и посадит вам картошку, а также человека, который будет следить, чтобы человек с трактором правильно посадил картошку. Они приезжают со своей картошкой. Это аутсорсинг (outsourcing).
Вы можете найти человека, который на вашем тракторе посадит вам вашу картошку. Это аутстаффинг (outstaffing).
Вы можете найти человека, который придет и сделает замеры огорода, предложит несколько моделей тракторов и режима работы тракториста. В этом случае картошка посажена не будет, но вы будете знать самый лучший способ, как это сделать. Это R&D, или научно-исследовательский институт.
Вы можете позвать соседа Колю, чтобы он посадил вам картошку за бутылку самогона и две пачки сигарет. Это фриланс (freelance).
Вы можете позвать всех своих родственников, соседей, друзей и вместе посадить картошку. Это краудсорсинг (crowdsourcing).
Вы можете пройтись по друзьям, соседям, родственникам и рассказать о том, что вы — тот, кто лучше всех знает, как надо сажать картошку, но для этого нужны деньги. Но вы обещаете, что как только картошка вырастет, то обязательно угостите всех, кто дал деньги, первыми. Это краудфандинг (crowdfunding).
Вы можете взять плуг, несколько ведер, картошку, книгу «Посадка картофеля за 21 день» и самостоятельно посадить картошку. Правда, если вам нужно будет посадить другой сорт картошки, чем тот, о котором говорится в книге, то придется перекапывать весь город еще раз. Риск: может прийти сосед ночью и выкопать вашу закопанную картошку. Это разработка на WordPress.
Вы можете взять лопату и посадить картошку на огороде, где уже есть удобрение, выкопаны ямки и стоят стрелки, по которым понятно, в какой последовательности нужно сажать картошку. Это разработка на .NET / C#.
Вы можете сначала сделать лопату, сконструировать ведра, изучить состав грунта, после чего посчитать количество ямок и последовательно одну за другой заполнять картошкой. Не пропуская ни одной ямки. Это разработка на C++.
Вы можете прийти к председателю совхоза и сказать ему, что прекрасно знаете, как сажать картошку, однако в этом году вы ее сажать не будете, но 100% займетесь этим в следующем году. И это будет реально круто, а урожай будет в 10 раз больше урожая соседа. Поэтому вам нужны сейчас деньги, лопаты, трактор, тракторист (лучше два), пять копачей и секретарша. Это стартап.
Ваш прадед сажал картошку, ваш дед сажал картошку, ваш отец сажал картошку. И вы тоже продолжаете сажать картошку. Это поддержка продукта (support).
Копая картошку, вы время от времени выкапываете ту, которую сажал еще ваш отец и дед. Это legacy-код.
В восемь утра вы со своим другом, отцом и соседом собираетесь на огороде, чтобы обсудить прогресс посадки картошки. Вы рассказываете всем присутствующим о том, что вчера сажали картошку, сегодня тоже будете сажать картошку и у вас нет никаких проблем, которые мешают сажать картошку, кроме комаров, которые вас постоянно кусают. Но это не повлияет на качество и скорость посадки картошки и будущий урожай. После этого все берут лопаты и продолжают сажать картошку. Это scrum-митинг.
Вы посадили картошку. Через некоторое время она стала прорастать. И в вашей картошке появились колорадские жуки. Вы начинаете их травить, собирать вручную, давить и жечь. Большинство из них удается уничтожить, но скоро они кое-где появляются снова. Это отладка (debugging) кода и исправление ошибок (bug fixing).
Вы посадили картошку. На огород пришел ваш отец и сказал, что картошка посажена неправильно, потому что рядки кривые и вы забыли оставить место для свеклы. И поэтому вам надо пересадить часть картошки. Через два дня, когда вы заканчиваете работу, приходит ваш дед и говорит, что глубина, на которой вы закопали картошку, недостаточна, поэтому вам нужно переместить всю картошку в лунках на 5 см ниже. А сам идет пить пиво с соседом Колей и вашим отцом. Это руководитель команды (Team Lead), проджект-менеджер (Project Manager) и рефакторинг (refactoring).
Вы хотите немного подзаработать. Идете к соседу Коле и говорите, что хотите помочь ему сажать картошку. Сосед просит вас показать самую большую картошку, которую вы в прошлом году вырастили, а также назвать имена других соседей, которым вы уже сажали картошку. Сосед также спрашивает, почему вы пришли именно к нему сажать картошку, на что вы должны ответить, что всю жизнь мечтали сажать картошку только на его огороде. Затем вас попросят объяснить разницу между граблями и садовыми ножницами, рассказать о самых лучших граблях, с которыми приходилось работать, а также объяснить процесс заготовки сена и чистки колодца. И только после того, как мать соседа подтвердит, что «это же Олькин малый — той, у которой дом на краю села», вам выдадут наихудшую лопату и вы начнете сажать картошку. Это интервью в аутсорсинговую компанию.
Вы приходите к соседу Коле и набираете в его погребе картошку, чтобы посадить у себя на огороде. Обещаете, что когда ваша картошка вырастет, то часть вернете назад или поможете в следующем году ее посадить. Вы, конечно, ничего не делаете и через год опять идете к соседу, чтобы взять у него немного картошки. Это программное обеспечение с открытым исходным кодом (open source).
У вашего села есть большое поле, где люди из окрестных деревень выбрасывают свою картошку, а иногда и другие овощи. Кто-то выбрасывает гнилую картошку, а кто-то — хорошую. Поэтому вы принимаете решение не сажать свою картошку, а вместо этого периодически наведываетесь на поле собирать картошку там. Это Stack Overflow.
Вы просто хотите посадить картошку в одиночестве. Но на огороде то собралась сотня незнакомых вам людей. Они не помогают сажать картошку, но внимательно наблюдают за процессом. После того, как вы закапываете картошку в лунку, все начинают записывать в блокнот количество посаженных лунок, рядков и картошки, которая осталась в мире. Затем обмениваются своими блокнотами и бегут к вашему соседу, который тоже сажает картошку. Никто из наблюдателей не верит, что вы только что посадили картошку, пока все не перепишут информацию с других блокнотов. Это блокчейн (blockchain).
Вы печатаете на принтере 1000 фотографий с картошкой. Каждую продаете своему соседу за гривну, рассказывая, что сажать реальную картошку — это прошлый век и уже очень скоро эта реальная картошка никому не будет нужна, а все будут есть фотографии картошки. А поскольку напечатать новые фотографии в будущем будет невозможно, то эти фотографии будут расти в цене. Поскольку реальная картошка есть у всех, а фотографий нет ни у кого, то соседи с радостью покупают фотографии. Но на ужин все еще варят реальную картошку. В это время в соседнем селе другие люди продают другие фотографии картошки и рассказывают, что только эти фотки будут известны через 10 лет. Это биткоин (bitcoin).
У вас есть 10 га засаженной картошки. Вы начинаете ее выкапывать. Но вас интересует не вся картошка, а только квадратной формы, зеленого цвета и такая, которая похожа на Микки Мауса. После того, как выкопали всю картошку на всех 10 га, вы забираете десять найденных картофелин, соответствующих вашим критериям, и счастливые идете домой. Это Data Mining, или поиск знаний в больших массивах данных.
Вы живете в селе, где уже 20 лет никто не сажал картошку. Но вы уверены, что где-то она есть. Поэтому берете лопату и начинаете перекапывать все подряд — огороды, тропы, поля, лесопосадки и даже озера. Через некоторое время упорного труда вам таки везет и вы находите картофелину. Вскоре уже все село начинает искать картошку, перекапывая все подряд. Это майнинг криптовалют (cryptocoin mining).
Картошка многое может рассказать о том, кто ее вырастил. В частности, вырастил ли ее хороший и добросовестный хозяин, чем удобрял землю, какими инструментами пользовался, вырастил ли он ее сам, а может, просто украл у соседа, а еще хорошая ли у него хозяйка (жена).
На краю села есть место, куда все селяне должны отправлять образцы своей картошки, чтобы все желающие могли оценить их труд.
Но со временем это место превратилось в свалку. Кто-то вообще отказался нести картошку, кто-то принес гнилую, а кто-то начал рассказывать, что картошка у него есть, но показать он ее не может. Некоторые селяне поставили охрану и начали брать деньги со всех, кто хочет посмотреть на их картошку.
Со временем оказалось, что чтобы найти картошку конкретного селянина, нужно перебрать горы мусора. Это открытые данные (open data) и data.gov.ua.
Вы накопали много картошки. К вам приехал председатель колхоза и выдал документ, где написано, сколько картошки вы накопали. Но чтобы прочитать этот документ, вам нужно ехать к председателю колхоза, потому что только он единственный в селе умеет читать. Другие соседи могут видеть документ, но никто не понимает, что там написано. Это хеширование (hashing, hash function).
У вас есть инструкция, как правильно сажать картошку. В ней описано, как выкапывать лунку, какой глубины она должна быть, какой стороной класть туда картофелину. Вы начинаете сажать ее. После каждой закопанной картофелины ваш отец проверяет, выполнены ли все инструкции правильно. И если хотя бы одна инструкция нарушена, вам нужно выкопать картошку, засыпать лунку и начать процесс заново. Это test-driven development, или TDD.
Вы купили участок, вспахали и удобрили город, купили лопаты, ведра, картошку и в течение недели ее посадили. Дед с бабой ухаживают за огородом, борются с колорадскими жуками, уничтожают сорняки. А в конце лета самостоятельно выкапывают картошку и несут в погреб. Это on-prem, или наземная инфраструктура. А дед с бабой — системные администраторы.
Как-то к бабушке с дедом приехал внучок из города и предложил часть огорода засадить картошкой, а если не хватит, то купить и привезти из магазина. Это гибридная инфраструктура (hybryd).
Через несколько лет, когда стоимость топлива увеличилась, у деда нашли грыжу, а колорадские жуки съели треть урожая, внучок убедил бабушку с дедушкй отказаться от своего огорода, и всю картошку начать покупать в магазине. Это облачная инфраструктура (cloud). А внучок — DevOps.
Как-то сосед, живший через дорогу, предложил бабе с дедом, что будет сам покупать картошку в магазине и приносить им за бутылку самогона. Баба с дедом согласились. Это модель подписки (subscription model).
Идея понравилась и другим жителям, и сосед начал возить картошку всем желающим. Это системы доставки типа Zakaz.ua.
Приехал как-то к бабе с дедом их самый младшенький внучок, который только школу закончил и хотел научиться сажать картошку. О том, как растет картошка, внучок знал только по урокам биологии в 6 классе, чем очень гордился. Это вайтишник, а уроки биологии — онлайн-курсы типа Coursera или Prometeus.
Внучок взял лопату и начал копать ямки на огороде, не посоветовавшись с дедом и бабой. Шел декабрь. Это Junior Developer.
Дед взял лопату в внучка и начал показывать, где в следующем году будут сажать картошку, где — свеклу, а где — кукурузу, показал погреб, где лежит картошка, и даже нарисовал схему огорода. Это процесс создания архитектуры программного обеспечения.
Нарисовав схему огорода, дед сказал, что сажать будут не раньше первого мая, а закончить надо до пятого. И обвел эту дату в настенном календаре. Это планирование задач и создание диаграммы Ганта. 5 мая — это дедлайн.
— А можно, мы сначала посадим бурячки, а потом картошку, а если останется место, то арбузики? — спросил внучок деда. Это гибкая модель разработки программного обеспечения вроде Scrum.
— Нет, внучок. Надо все сажать по плану. Никакой самодеятельности! — прокричал дед. Это модель разработки «водопад», или «каскадная модель» (waterfall).
4 мая пол-огорода еще не было засажено. Поэтому дед позвал бабу, соседа, второго внучка, и все вместе активно начали сажать картошку. Это Kanban.
Об искусственном интеллекте и машинном обучении
Ваши соседи копают картошку. Кто-то занес выкопанную картошку в погреб, а кто-то выкопал, но еще не собрал. И она так и лежит на огороде. А кто-то еще даже не начинал, и его картошка еще в земле.
Ваша задача — собрать точную копию всей картошки в своем погребе, даже той, которая еще не выкопана. Кроме того, важно подписать каждую картофелину — кто ее вырастил, на каком конкретно городе ее собрали, какого она сорта.
К тому же вам надо это сделать так, чтобы никто из соседей не узнал, что вы создали точную копию их картошки и храните ее в своем погребе. Это скрапинг (data scraping) или парсинг данных (data parsing).
Вы приходите на огород, а там роботы сажают картошку. Оптимальный размер картофелин, глубина лунок и скорость посадки рассчитывается в реальном времени на базе таких показателей, как скорость ветра, влажность, температура, стоимость картошки на мировом рынке и акций Kartoplya Inc. на Нью-Йоркской бирже. Это искусственный интеллект (Artificial Intelligence).
Вам нужно посадить картошку, но никто в вашей семье не умеет это делать. Поэтому вы идете к соседу и смотрите, как он сажает картошку. Через некоторое время все сажают картошку, как ваш сосед. Это машинное обучение (Machine Learning).
Вы выкопали всю картошку и ссыпали ее в одну кучу. После чего начинаете ее сортировать на крупную, среднюю и мелкую. Это классификация.
В процессе сортировки оказалось, что мелкую картошку нужно дополнительно делить на мелкую и очень мелкую, а также отдельно раскладывать по сортам. Это кластеризация с неизвестным количеством кластеров.
Вы берете картошку и не знаете, большая она или средняя. Это нечеткая классификация (fuzzy classification).
Вы берете картошку и понимаете, что это картошка. Вы берете другую картошку и понимаете, что это картошка. Вы берете огурец и понимаете, что это огурец. Вы берете буряк и понимаете, что это буряк. Это распознавание образов (image recognition).
Вы берете картошку и понимаете, что это картошка. Вы берете другую картошку и понимаете, что это картошка. Вы берете огурец и понимаете, что это не картошка. Вы берете буряк и понимаете, что это не картошка. Это бинарная классификация.
У вас огромный огород, засаженный картошкой, но вы не помните, где какой сорт сажали. Поэтому начинаете выкапывать по несколько кустов картошки с разных сторон. Выкопав их, вы вспоминаете, где что посажено. Это summarization.
Вы сажаете картошку, и вдруг оказывается, что ее не хватает. Поэтому начинаете резать картошку пополам и бросать в лунки только половинки. Это разбалансированный набор данных (imbalanced dataset) и алгоритм SMOTE.
Вы сажаете картошку и видите, что много картофелин — гнилые. Поэтому выбрасываете их на помойку. Это процесс очистки данных.
Вы сажаете картошку, и вдруг оказывается, что ее не хватает. Папа говорит, что можно взять немного у родственников, живущих в соседнем селе. Но перед этим можно зайти к соседям и спросить, есть ли у них картошка, и если есть, то к родственникам в соседнее село бежать не надо. Ваш дед также просит по дороге купить ему сигарет. Вам нужно вернуться к обеду с картошкой и сигаретами. Это задача коммивояжера.
Вы сажаете картошку. Ваша бабушка говорит сажать реже. Ваш дед рекомендует делать наоборот. А мама вообще говорит, что надо посадить помидоры. Кроме того, мама говорит, что лунки следует делать глубже. Вы должны правильно выполнить все установки. Это распознавание и обработка естественного языка (natural language processing).
У вас есть целый погреб с картошкой разных сортов. Вам нужно выбрать сорт, который даст наилучший урожай. Сосед, который проходил мимо, говорит, что наилучший урожай даст сорт А. Это продвинутая аналитика (advanced analytics).
— В следующий раз мы засадим огород на два дня раньше! — сказал дед после того, как огород был засажен. Это модель прогнозирования (prediction model), построенная на исторических данных (historical data).
Чтобы быстрее посадить и выкопать картошку, вместо левой руки вы приделываете металлическую руку с моторчиком. Производительность ваша значительно возрастает. Это трансгуманизм (H+).
Вы постоянно сажали картошку под лопату. И все ваши соседи постоянно сажали картошку под лопату. А потом вы начали сажать картошку с помощью плуга. И все ваши соседи начали сажать картошку с помощью плуга. А потом вы начали сажать картошку с помощью трактора. И все ваши соседи начали сажать картошку с помощью трактора. Это машинное обучение.
А потом приехал Маск на гиперлупе и сказал, что больше сажать картошку не надо, потому что он ее будет сажать на Марсе. Это сингулярность.
Вы сажаете картошку. И тут приезжает ваш дальний родственник, который учился в Кембридже, и удивленно спрашивает вас, а для чего сажать картошку, если ее можно купить в магазине. Это суперинтеллект.
О лидерстве, бизнесе и стартапах
1. Неважно, кто ты в реальной жизни — бизнесмен, ІТ-специалист или менеджер в банке, но 1 мая ты должен быть в селе, чтобы помочь посадить картошку.
2. У тебя может быть свой бизнес, ты можешь много зарабатывать, а ближайший магазин с картошкой может быть в ста метрах от твоего дома. Ты даже можешь не любить картошку, но ты просто обязан взять хотя бы полмешка картошки после поездки к родителям.
3. Чтобы стать миллиардером, сначала нужно посадить несколько гектаров картошки или иметь друга-фермера, который поможет посадить картошку быстрее.
4. У каждого Джобса всегда был свой Возняк, который активно сажал картошку, пока условный Джобс занимался всякой херней.
5. В жизни каждой известной компании был такой момент, когда все зависело от одной мелочи — поедет ключевой сотрудник на картошку, или нет. В основном компании не имели влияния на эту мелочь.
6. Все лучшие копатели картошки были скромными, щепетильны людьми с 30+ летним стажем, которые почти никогда не шли на риск.
7. Большинство историй успеха, когда картошка была высажена до 1 мая — это ошибка выжившего.
8. Нет никакого способа определить, какой именно сорт картошки даст хороший урожай в этом году. Максимум, на что способны лучшие менеджеры — правильно определить момент, когда твоя картошка растет медленнее, чем картошка соседа.
9. Вся стартап-культура («давайте посадим меньше картошки в этом году» или «давайте посадим под плужок», или «давайте купим картошку в магазине») работает только в теории. А по факту полный бред.
10. Ежегодно ты обещаешь себе высаживать картошку точно в ряд согласно бизнес-плану, но каждый раз кто-то уже на третьем рядке начинает косить, чем херит весь бизнес-план.
11. Нет никакой корреляции между «корпоративной культурой» посадки картошки, желанием сажать картошку и будущим урожаем.
12. Ни одно поле с картошкой не было посажено без навоза, криков, родственников и кумовства, а также феноменального совпадения выходных дней.
13. Если ты стал всемирно известным, ты можешь писать книги, сниматься в фильмах и писать романы о том, как сажал картошку. Эти высеры будут разлетаться большими тиражами.
14. Предпринимательство невозможно в стране без культуры, где люди охотно продают и покупают картошку.
15. Не имеет значения, хорошую картошку ты вырастил или нет. Важно то, сможешь ли ты ее продать. Если научился продавать — качество картошки и ее сорт неважны. Люди постоянно в ней нуждаются. Они с радостью купят твою говняную картошку.
16. Все лгут и обманывают, что именно их картошка не брызгалась химикатами.
17. Вся экономика посадки картошки сводится к единой формуле: количество выкопанной картошки > количества посаженной картошки.
18. Все книги по мотивации и лидерству сводятся к тому, что чувак, который живет в Беверли-Хиллз и покупает картошку в магазине, советует чуваку, который живет в Тульчине и всю жизнь сажал картошку на огороде, как правильно сажать картошку.
Про роли на проекте и HR-процессы
Вся ваша семья сажает в селе картошку. А вы в это время ходите по базару и рассказываете всем, что у вас есть недорогие ресурсы, которые могут качественно и быстро посадить картошку, которую затем смогут дорого продать на этом же рынке. Это Sales-менеджер, продающий свою offshore-команду.
На огороде же всегда есть четкая иерархия. Есть бабушка, которая без калькулятора знает, сколько огорода нужно посадить, в какие сроки и что должно в итоге вырасти. Это Product Owner, который формирует технические требования к проекту (technical requirements) и определяет критерии успешности (definition of done).
Есть соседский Толик, который часто ходит через ваш город и спорит с бабкой относительно того, какой сорт картошки лучше посадить в этом году, а также относительно сроков созревания и общей необходимости сажать такой большой огород. Это независимый консультант (Consulter).
Толик и бабка также обсудили, что на каком огороде будет посажено и где будет проходить тропа между их огородами. Это интеграционные тесты (integration tests).
Дед заводит трактор, начинает нарезать рядки, в которые будет высажена картошка. Это архитектор программного обеспечения (Software Architect).
Кстати, некоторые рядки — ровные, а некоторые — кривые. Это все потому, что архитектор должен быть хороший, но используем то, что есть.
Далее выходит мама, которая руководит общим процессом посадки картошки. Она кричит на папу, чтобы тот быстрее подносил картошку, подгоняет внучат и шипит на кур и гусей, бегающих по огороду. А еще выбрасывает плохую картошку и постоянно ссорится с бабкой, которой постоянно кажется, что все идет не по плану и если все будут так работать, то картошка в этом году не вырастет. Мама — это руководитель команды (Team Lead), а папа — технический лед (Technical Lead).
Старший внучок, который приехал всего на три дня, работает очень ответственно, потому что знает: чем раньше посадят огород, тем быстрее можно будет побежать на ставок и к Лене, местной девушке. Старший внучок — это Senior Developer, а Ленка — QA в другой компании.
Средний внучок самый грустный. Он уже достаточно взрослый, чтобы выполнять все виды работ — и копать, и сажать, и колоть дрова, и кормить корову, но в сельский клуб его еще не отпускают по вечерам, а Ленка тусит с его старшим братом. Это Middle Developer.
Младшие внучки бегают по огороду, бросаются землей друг в друга и при первой же возможности сбегают в тенек или поиграть в футбол. На них кричит мама, сердится старший брат, но никто сильно не кричит, потому что понимают, что они еще дети. Это Junior Developers.
Тут мимо проходят тетя Клава и дядя Леша. Они останавливаются у вашего огорода, чтобы рассказать, что грядки у вас косо посаженные, у соседей уже все посажено, а они сами еще не начинали, потому что помогали вашим соседям все посадить. И спрашивают, не может ли бабка налить немного самогончику, чтобы они и дальше могли давать свои советы. Это аудиторы.
Вечером, когда все ушли в дом отдыхать, на огород выходят бабка с мамой, чтобы проверить, сколько огорода посажено, сколько осталось, а также обсудить причины, почему огород садится так медленно, когда все соседи вокруг уже все высадили. И что нужно сделать завтра, чтобы всех догнать. Это окончание спринта, ретроспектива и планирование нового спринта.
Но тут среднем внучку позвонила другая бабушка, живущая в другом селе. Она позвала его приехать к ней следующим летом. Обещала, что можно будет ходить на пруд купаться, играть с другими мальчишками в футбол, а еще в село приедут соседские девушки. И огород у нее вдвое меньше, не надо будет так много работать. Это рекрутинг.
В следующем году внучок поехал в другое село сажать картошку. Это принятие предложения (offer) и переход в другую компанию.
Следующим летом внучок приехал в другое село, а там девушки уже тусят с другими парнями, ставок высох, огород — больше, а сорняки по пояс. Это реальность.
Если вам понравилась статья, поддержите волонтерский проект DonorUA — автоматизированную систему рекрутинга и управления донорами крови в Украине.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]