Рубрика:
Безопасность /
Особое мнение
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
АНТОН КАРЕВ, ведущий эксперт Алтайского края по кибербезопасности, с 20-летним стажем. Окончил физтех АлтГУ. Занимается технологической разведкой и подготовкой аналитических обзоров для красной команды правительственных хакеров, anton.barnaul.1984@mail.ru
Инженерный менеджмент: MBA в стиле DevOps
Авторские размышления на тему того, кто такие DevOps, как ими становятся и почему DevOps добиваются успеха не только в инженерном деле, но также и в менеджменте
Как становятся DevOps: рыбацкие байки автобиографического характера
«Да здравствуют отечественные микросхемы! С четырнадцатью ножками и четырьмя ручками!»
Мои дядя и отец были рыбаками, а потом также и меня к рыбалке приобщили. Мой дядя – виртуозный рыбак со стажем, окончивший ТУСУР. Он начинал рыбачить на военном приборостроительном заводе РОТОР (Алтайский край, Барнаул), участвуя в разработке подводных ракет спирального наведения на «объекты-невидимки» (не помню, как это по-умному называется). А желание пойти в ТУСУР у дяди возникло, когда он, в очередной раз отправляясь копать червей в специально приготовленную для этого консервную банку, наткнулся на своего гения-знакомого, который не долго думая сделал из этой консервной банки радио. Это так впечатлило дядю, что он захотел стать электронщиком.
После рыбалки на РОТОРе мой дядя что-то околоЭВМное инженерил, у него был доступ к соответствующей технике: к тем самым многокомнатным ЭВМ прошлого тысячелетия. У меня до сих пор на веранде еще какие-то запчасти этих динозавров остались, хотя я и прореживаю регулярно эти завалы. В прошлом году наконец-то выкинул ведро давно протухшего винегрета из микросхем (ЛА3, триггеры, мультиплексоры, таймеры, буфера и т.д.).
После работы с ЭВМ мой дядя переквалифицировался в обычного рыбака. Просто стал ходить на рыбалку. Вот на этих рыбалках он меня и начал приобщать к полезным делам за компьютером. Потому как на тот момент (то были 90-е годы прошлого тысячелетия), я к нему на работу ходил «как на работу», но не работать,– DOOMать, и т.п.: «Башня», «Dune II», «Wolfenstein 3D», «WarCraft». Этими игрушками я убивали все свое свободное время. В свое время мой дядя даже компьютер ZX Spectrum спаял «на коленках». Его обломки до сих пор иногда попадаются мне на глаза.
А сейчас мой дядя – самым крутой специалист в Казахстане по ремонту торгового оборудования. Один из магических трюков в его арсенале – перепрошивка PROM-микросхем, которые по определению не перепрошиваемые. В числе прочего занимается исследованием уязвимостей защиты торгового оборудования. Для этих исследований дядя меня в свое время как-то даже попросил написать подпрограммы для быстрой работы со сверхбольшими числами (400 000шестнадцатеричных знаков и больше). Под впечатлением от разговоров об этих исследованиях, – уже в контексте нейросетей, – я выступал на одной из научно-практических конференций с докладом о своем «Хэш-анализаторе намногослойном персептроне» (ломалка пин-кодов, по-русски говоря). За этот доклад меня чуть не выгнали с университета.
Мой папа – электронщик-самоучка, который одно время работал на Радиозаводе (Алтайский край, Барнаул), и, будучи самоучкой, воспитал другого такого же, который под его началом изучил Хорвица Хилла и ряд другой схожей литературы. В результате этот его «студент» собрал торсионный генератор, после включения которого у него вся электроника дома сгорела, даже та, которая не была к сети подключена. Но, так или иначе, генератор заработал, и он иногда сним игрался. «Например, – он сам мне по секрету от отца рассказывал, – захочу, чтобы твой отец в гости приехал, завожу свою шарманку. Он приезжает и говорит: что-то вот я ни с того ни с сего к тебе приехать захотел». Вот так ученик моего отца рыбачил на самого же отца. Нетрудно догадаться, что при такой родословной я образование получал в сфере DevOps (причем не только в софтовом смысле этого слова, но также и в железном) и в профессиональном плане нашел себя в этой же сфере.
Пометки на полях
Одна из самых запоминающихся рыбалок для меня – это разработка программно-аппаратного комплекса для невидимой рыбалки в онлайн-покер-румах (бот для покера, в простонародий). А в покер-румах, как известно, самый чуткий рыбнадзор, поэтому просто программная эмуляция, даже на уровне драйверов, может быть отслежена – со всеми вытекающими. Поэтому невидимый покер-бот – это довольно-таки дорогая игрушка, но с помощью неё в покер-румах очень много рыбы наловить можно. Наиболее интересная часть этого комплекса заключается в обеспечении невидимости: 1) принтскрина экрана и 2) эмуляции мыши и клавиатуры. Невидимость первого пункта достигается путём снятия изображения через аналоговый TV-выход видеокарты (посредством TV-тюнера другой машины).
А невидимость второго – путём подключения к разъёмам мыши и клавиатуры программно-аппаратной примочки, которая на входе получает эмулируемые команды клавиатуры и мыши, а на выходе – выдаёт соответствующий этим данным поток сигналов. Чуть ранее этого покерного монстра, я рыбачил на живца в шахматных просторах Маил.ру, запустив туда «Немецкую Рыбку» посредством программы XChessBot – широко известного в узких кругах моего творения. С этой программой-ботом можно легко всплыть в ТОП100 звёздно-шахматного рейтинга «маил.ру». И хотя практической пользы от этого конечно никакой, но когда тебя считают гроссмейстером – это приятно.
В чем секрет лаконичных решений и виртуозного программирования
«Любая достаточно развитая технология – неотличима от магии»
Артур Кларк
В чем секрет виртуозного программирования? Почему одни решения не теряют своей актуальности и остаются непревзойденными даже спустя много лет (gif-формат кодирования рисунков, например), а другие отправляются в корзину, неуспев родиться? И если есть четкие критерии отличия одного от другого, то как научиться находить именно такие решения, лаконичность которых будет неподвластна времени? Это очень интересные вопросы, ответы на которые не такочевидны, как хотелось бы. Обосновать эффективность уже готового решения довольно-таки просто – математический анализ далеко продвинулся в этом направлении. С другой стороны, универсальной методологии поиска виртуозных решений, увы, нет. Это задача синтеза, в котором наука продвинулась не так далеко, как хотелось бы. Да, есть разные отрасли научного знания, помогающие писать программы лучше, но действительно выдающиеся решения, как правило, приходят в качестве озарения, а не в качестве последовательных шагов. Мне, автору этой статьи, данный вопрос знаком не понаслышке, т.к. я отдал глубокому изучению различных аспектов программирования восемь лет своей жизни (находясь под руководством опытных преподавателей лицея и университета).
По сути дела, гениальные изобретения и лаконичные решения приходят откуда-то извне нас. Это не наше достижение – нам их попросту дарят. Например, возьмем следующую задачу: «Пусть имеется 12 шаров (пронумерованных от 1 до 12), среди которых 11 шаров имеют одинаковые веса, а один шар – легче или тяжелее остальных. Определите этот отличающийся по весу шар, применяя не более трех взвешиваний на коромысловых весах». У меня на решение этой задачи ушло 5 часов, у моего учителя, который на много голов выше меня в программировании, – 24 часа. Кто-то не справился с этой задачей и за месяц. Почему? Просто везение: кому-то повезло быстро, кому-то повезло медленно, а кому-товообще не повезло. Это именно везение и ничего больше, потому что все мы, даже имея на руках решение этой задачи, не можем сформулировать универсальный алгоритм поиска решения подобных задач. Мне даже кажется, что такого алгоритма попросту не существует.
Конечно, можно сказать, что все задачи программирования, которые только можно придумать, уже решены, и поэтому, воспользовавшись услугами святой троицы (интернет, интернет-браузер, поисковая машина), можно найти необходимое решение. Например, сейчас в интернете можно легко найти решение этой задачи про 12 шаров, но ведь есть много подобных задач, решение которых пока не найдено; и намного больше красивых задач, которые еще не сформулированы. Асколько недоказанных теорем сейчас существует?! Кроме того, предела совершенству нет, и более лаконичные решения старых задач однозначно существуют, вопрос только, как их найти. Сколь бы ни была лаконична программа, ее можно сделать еще оптимальней. Это как игра в шахматы: сколь бы ни была красивой партия, всегда можно сыграть еще лучше.
Практический пример. Есть простая задача инвертирования строки. С этой задачей справится любой школьник. Чье-то решение будет занимать два экрана кода, чье-то – три строки. Учась в университете, я нашел решение, которое на тот момент мне казалось оптимальным (см. рис. 1). Впоследствии мне захотелось оптимизировать алгоритм. Так получился еще более оптимальный код (см. рис. 2), на фоне которого предыдущее решение просто ужасно. Опять же, я не могу представить универсального алгоритма такой оптимизации. Мысль избавиться от промежуточных переменных и воспользоваться XOR’ом возникла спонтанно. Уже намного позже я вспомнил, что когда-то давным-давно читал, как спомощью операции вычитания можно менять значения переменных без использования дополнительной. То есть решение всплыло из подсознания. Из этого следует, что один из способов находить лаконичные решения – это уделять много времени анализу успешных алгоритмов, которые уже придуманы до нас; и также, поступив в университет, осваивать широкий спектр инженерных дисциплин.
Рисунок 1. Первый вариант решения задачи инвертирования строки
Рисунок 2. Второй вариант решения задачи инвертирования строки
Статью целиком читайте в журнале «Системный администратор», №12 за 2017 г. на страницах 40-45.
PDF-версию данного номера можно приобрести в нашем магазине.
- Michael Mankins, Chris Brahm, Greg Caimi. Your Scarcest Resource // Harvard Business Review. 92(4), 2014. pp. 74-80.
- Scott Donaldson. CTOs at Work. Apress. 2012. 330 p.
Ключевые слова: инженерный менеджмент, MBA, DevOps.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|