Пятница. Бредни программиста
Привет, Хабр! Иногда в голове начинают бродить разные мысли. Кое-что записал. Получилось что-то вроде рассказа. Не судите строго — ведь это всего лишь фантазии.
Странные танцы
Пятница после работы. Я в ночном клубе. Пригласил девушку с приятным именем Алла, и мы танцуем под довольно приятную композицию.
— Так кем же Вы работайте, Михаил?
Этот вопрос возникает всегда по ходу общения, иногда раньше, иногда позже. И всегда я сомневаюсь, что сказать. Потому что если я скажу, что я программист, отношения быстро завершатся.
И дело не в том, что девушки плохо относятся к программистам. Все как раз наоборот, особенно в последнее время. Финансовые гайки стали закручивать и легкие деньги понемногу стали исчезать из экономики. Девушкам стало понятно, что в ИТ остроумные, надежные, не сильно скованные материальными проблемами и поэтому не жадные парни.
Дело не вообще в программистах, а конкретно во мне.
Вот как это происходит.
— Я программист.
— Программист?! — глаза Аллы широко распахиваются. — Расскажите, это наверное так интересно. Я в компьютерах ничего не понимаю.
Старый, как мир прием, о котором писал еще Карнеги — искренне заинтересоваться и разговорить собеседника. Девушки им охотно пользуются. Конечно, же он срабатывает, и я против своей воли делаю еще один шаг к одинокому вечеру.
— Как вы думайте Алла, сколько в этом зале сейчас работает компьютеров?
Алла оглядывается, ее взгляд останавливается на ноутбуке диджея.
— Ну вот, один у диджея.
— Вы кое-что не учли. Давайте посчитаем. В этом зале сейчас примерно сотня людей. У каждого сотовый телефон. В современном телефоне как правило 4–8 основных вычислительных ядер, 2–3 вспомогательных, еще по процессору на блютуф и вайфай, еще один процессор обслуживает модуль сотовой связи, два криптопроцессора в двух сим-картах, скорей всего есть сопроцессор для музыки, ну еще один-два для каких-нибудь неведомых функций. Итого — в среднем около 15 процессоров на один телефон. А у человека еще есть несколько банковских карт — на каждую еще по криптопроцессору, фитнес-браслет или часы, а там еще пара-тройка ядер, опять тот-же блютуф, беспроводные наушники… Ну в общем 25 процессоров на человека — вполне честное число. Итого получаем 25×100 — 2500 процессоров.
— Ух-ты.
Алла заинтригована. Здесь бы мне остановится и перевести разговор в другое русло. Но меня уже понесло.
— Но это еще не все. Все эти разноцветные огни вокруг делаются осветительной аппаратурой. В каждом умном светоустройстве как минимум по процессору плюс два-три процессора на светопульте — еще 20 процессоров в плюс. Звук тоже не обходится без цифровой обработки — эквалайзеры, усилители еще плюс 10. На стене висит пара телевизоров — еще десяток ядер. Ну и не забываем про навороченный ноутбук диджея — думаю плюс 15 ядер еще можем прибавить…
И дальше в таком же духе… Знакомство с Аллой движется к неизбежному финалу. Как правило я еще успеваю сказать про то, что программы для этих процессоров содержат миллионы строк кода. Что каждый из этих процессоров исполняет эти программы со средней скоростью в среднем от миллиона до миллиарда операций в секунду. Что все процессоры связаны между собой скоростными каналами и за мгновение каждый с каждым обмениваются информацией, равной хорошей библиотеке.
Потом я говорю, что микропроцессоры это единственные друзья и помощники человека, за исключением, возможно, собаки и лошади. Алла окончательно делает для себя вывод, что я псих и под благовидным предлогом исчезает из моей жизни.
Я не псих. Я программист, который пытается быть искренним.
Почему же я программист
Мне это нравилось с детства. И я даже не задумывался, что можно стать кем-то еще. Не было мучительных переживаний о призвании, профессиональных предпочтениях, будущей карьере и возможных заработках. Меня как будто мягко подхватил невидимый поток и в нем было уютно. Этот поток был настолько широк, что движения почти не ощущалось, хотя сейчас ясно, что благодаря ему я преодолел огромное академическое расстояние, которое самому по себе не осилить.
Только теперь начинаешь примерно понимать происхождение этого странного течения. Как раз в это время цивилизация делала Большой Поворот. Возможно самый важный в своей истории.
Еще совсем недавно человечество бредило космосом. Мой отец стал авиационным инженером. Все взгляды были устремлены в небо. Все ловили сигналы со спутников и улыбки космонавтов. Луноходы, полеты зондов к Венере и Марсу. Туманность Андромеды Ефремова. Магелланово облака Лема.
А потом вдруг что-то случилось. Тот же Лем пишет Кибериаду. Все говорят об искусственном интеллекте, роботах. Человек вдруг перестал смотреть в небо и стал сам себя с собой соединять гигабитными каналами. Ниоткуда стал возникать новый внутренний космос, поглощающий человеческие ресурсы, а главное, захватывающий умы и сердца. Этот космос оказался ничуть ни меньше. А главное он был гораздо доступнее. Это был личный космос для каждого.
Есть еще одна причина. Все подростки инстинктивно тянутся к силе. У каждого свое понимание силы, поэтому кто-то идет в секцию карате, кто-то в уличные банды, кто-то покупает мотоцикл.
Я же чувствовал, что настоящая сила скрыта в ИТ. Что нажимая кнопки в правильном порядке и вдумчиво всматриваясь в пятна на мониторе можно изменить ВСЕ.
Про силу
Обычно я чувствовал силу ИТ подсознательно, но был момент, когда я почувствовал это явно, ясно и недвусмысленно. Это случилось, когда я приобрел первый MP3-плеер.
В юности мы слушали Цоя. Мы слушали его взахлеб, всегда и везде. По большей части это были магнитофонные записи. Советские магнитофоны нещадно жевали и стирали магнитную ленту. Мы переписывали друг у друга, с катушек, с других кассет, откуда только могли. Другого пути не было. Как ты бережно не сохраняй пленку, с каждым воспроизведением голос Цоя был все хуже и хуже.
И вот теперь много лет спустя я скачал файл на MP3-плеер и Цой зазвучал в качестве, о котором раньше мы могли только мечтать. И что самое главное — со временем эта цифровая запись ПРИНЦИПИАЛЬНО не могла стать хуже НИКОГДА. Эта мысль пронеслась у меня в голове с первых услышанных аккордов. Повеяло чем-то вечным.
Идеям цифрового бессмертия уже не один день. И проблемы стоящие перед наукой на этом пути, тоже вполне обозначены. Нужно иметь дикую даже по нынешним меркам вычислительную мощность. Нужно разрешить проблемы самосознания, эроса, мотивации, свободы воли. Нужно не споткнуться о парадоксы клонирования и китайской комнаты. Все это безумно трудно, почти невозможно. Но и ставки безумно, невозможно высоки.
Пока ИТ еще заигрывает с медициной и биологией. Идет бутафорское соревнование, кто сделает жизнь человека более долгой и счастливой. Пока лидирует медицина. Импланты, протезы, стволовые клетки, гормоны, фармакология. На все это тратятся миллиарды. ИТ охотно подставляет плечо и прислуживает. Но после успешной оцифровки разума все эти нелепые леса для хрустального замка сознания исчезнут в одно мгновение. Исчезнут аптеки, больницы, санатории и лаборатории. Так же, как после появления MP3-плееров массово исчезли магнитофонные ленты и винил.
И Цой больше никогда не умрет.
Про фундамент
У ИТ есть сила, но сама ИТ не висит в воздухе. ИТ опирается на фундамент науки. Думаю единственные люди перед которыми программисты должны смиренно преклонить колени — это математики и физики. Вот это действительно реальные ребята. Они взламывают реальность и бьются за тайны природы не на жизнь, а на смерть.
:) Мы же, надежно защищенные от опасностей этой битвы стеной собственного колоссального невежества, можем только догадываться, какое там идет рубилово. Мы догадываемся по боевым сооружениям вроде многокилометровых кольцевых тоннелей и тысячетонных подземных резервуаров. По странным окровавленным формулам, иногда вылетающим из-за забора, и похожим на древние заклятия. И по научно-популярным книгам, написанным явно под кайфом в минуты краткого перемирия.
Так, в одной из этих книг я прочитал, что оказывается все больше физиков отходит от Копенгагенской трактовки квантовой механики, использующей понятие коллапса волновой функции. И принимает так называемую трактовку Эверетта, подразумевающую возникновение параллельных вселенных. Для обычного человека это означает следующее.
Например, Вам нравится и Галя и Зина. И Вы не в силах сделать выбор с кем прожить жизнь. Согласно последним физическим веяниям Вам не надо отчаиваться. А надо тайком пробраться в ближайшую лабораторию и в абсолютной тайне под покровом ночи проделать там классический опыт по прохождению электрона через две щели. При этом, встав перед портретом Шредингера, дать себе страшную клятву, что если электрон пройдет через щель А, то Вы сделайте предложение Гале, а если через щель Б, то Зине. Согласно последним научным предположениям произойдет вот что. В момент проведения эксперимента Вселенная раздвоится и в одной из них Вы зарегистрируйте прохождение электрона через щель А, и соответственно проживете жизнь с Галей. В другой вселенной Вы зарегистрируйте прохождение электрона через щель Б, и проживете жизнь с Зиной.
Причем за многоженство Вас не посадят, так как полиция, суд и прокуратура тоже раздвоятся и ничего не заметят.
От всего этого может поехать крыша у кого угодно. Но только не у программистов. Потому что программист видит в этом принцип действия обычной системной функции fork (), которая выполняется на его компьютере по 10000 раз за сутки. Мало того, сейчас стало модным форкать все что угодно от исходников, до кластеров. Не нравится тебе что-то. Ты сказал крекс-пекс-ФОРК. И живешь уже в собственной персональной вселенной. И делаешь там все что хочешь.
Дорогие математики и физики. Не смотрите на нас совсем уж свысока. Возможно мы одни из тех немногих, кто по настоящему может Вас понять. Пусть немного по-своему, но так же глубоко. И с таким же преклонением перед великой тайной.
Про понимание
Программисты вообще понятливые люди. И могут понять практически все. Даже самые странные дела.
Природа людей непостижима. Они сначала от скуки выдумывают несуществующие вещи. Потом гигантским, неимоверным усилием ума заставляет себя поверить в реальность этих несуществующих вещей. Затем проявляя чудеса героизма живут по законам этих странных миров.
Почти всегда эти галлюцинации носят коллективный характер. Чтобы поддержать иллюзию, люди сообща собираются на фестивали, реконструкции, конференции, ролевые игры и другие сходки. В этих условиях разум окончательно сдается, принимает правила игры, и ловит кайф от новых логических загадок и парадоксов.
Программисты в общем то те же люди и поэтому ведут себя точно также, за одним небольшим исключением. Нам не нужно делать этих титанических усилий для воображения, визуализации и веры в происходящее. Вся нечисть, которая только может появится в воображении людей, реально существует в программных системах. И причем не только существует, но и выполняет общественно-полезную работу. Трудно придумать какое либо понятие, которое программисты бы не использовали в качестве метафоры для создания программного кода.
Ангелы, демоны, атомы, цели, хозяева, рабы, мастера, визарды, очереди, списки, феи, писатели, читатели, семафоры, хранители, строители, разрушители, конструкторы, деструкторы, фабрики, миры, генераторы, итераторы, массивы структур, структуры массивов, умные указатели, глупые указатели, сборщики мусора, делатели этого мусора, порты, точки подключения, потоки, нити, родители, дети, события, подписчики на эти события, каталоги, оформители, контроллеры, модели, парсеры, формы, пауки, слушатели, шаблоны, кодеры, декодеры, шифровщики, дешифровщики, замки, ключи, открытые, закрытые, разделенные, сигналы, шумы, заглушки, отглушки, заменители, подменители, …
Это называется Объектно-Ориентировнное-Программирование.
Про хороший софт
Вообще я поклонник ООП. Как-то так сложилось, что когда я начинал программировать это был самый передовой подход. Сейчас меня постоянно уверяют, что гораздо лучше свалить все состояние программы в один большой иммутабельный труп и потом глумится над ним с помощью чистых функций. Что-то мне пока мешает поверить, что это наилучший подход. По крайней мере, для достаточно сложных систем. Хотя возможно я просто старею, и эти люди правы. Потому что у них получаются действительно красивые вещи.
Когда рассуждаешь про качество в ИТ, приходишь к мысли, что дело не в платформах, технологиях и языках программирования. Дело в людях. И в том, что все великие и красивые вещи делаются в одиночку и в тишине, а все уродливое и гнилое получается в результате голосований и консенсусов.
Когда я вижу хороший и надежный продукт, то за ним мне всегда представляется образ всего одного человека, но болеющего за дело всей душой. Это может быть программист, инженер, ученый, менеджер или даже руководитель и владелец фирмы. Вечером он никак не может уснуть, думая о наиболее эффективном и красивом решении проблемы. Потом, устав от мыслей, тревожно засыпает, но через какое-то время вскакивает с кровати и чего то пишет на клочке бумаги. И так появляется идея, меняющая мир.
Так возник язык Паскаль, когда Вирт со своим ассистентом написали компилятор Паскаля НА САМОМ ЖЕ ПАСКАЛЕ и ВРУЧНУЮ применили исходник компилятора к самому себе. Вот уж поистине мистическая история, как у Мюнхаузена, который вытащил сам себя за волосы из болота.
Или история языка Java, который навсегда изменил ландшафт программирования, потом принял на себя весь ужас Enterprise разработки и до сих пор с честью все это несет. А началось с того, что нескольких инженеров Sun довели до ручки бестолковыми техническими и организационными решениями.
Хорошие примеры можно найти и в прикладном софте и в гаджетах, которые дарят тебе ощущение красоты и надежности. У меня какое-то время была Nokia-E51. Больше не буду ничего говорить, кто знает, тот поймет. Снимаю шляпу перед теми, кто недосыпал по ночам и сделал эту хорошую вещь.
Про плохой софт
Когда я вижу плохой, глючный и неуклюжий продукт, иногда мне представляется Junior, делающий первые шаги в реальном программировании, и возможно не проникшийся идеей, что все нужно тестировать. Иногда — начинающий менеджер продукта, у которого из-за недостатка опыта первый блин выходит комом. Это все нормальные ситуации. Но гораздо чаще внутреннему взору предстает совсем другая картина.
Представляется еще не старый, но уставший от жизни финансовый деятель, которому за какие-нибудь долги в собственность досталась ИТ-фирма. Дела у этой фирмы так-сяк, ни шатко ни валко. И вот он сидит в элитном ресторане, ковыряет зубочисткой в имплантах и неспешно думает — можно ли выжать из этой хромой кобылки еще пару сотен тысяч долларов или все же обменять ее на долю в сети гипермаркетов. Он решает еще повладеть и посылает со смартфона письмо, с приказом увеличить прибыль, уменьшить издержки и все-такое.
Представляются менеджеры этой фирмы, героически и одновременно прозаически делящие дырявый бюджет, попутно спихивая друг на друга уже случившуюся или еще только предполагаемую ответственность.
Представляются в общем-то хорошие и талантливые инженеры, но дико уставшие от никому не нужных дедлайнов и бессмысленных поручений.
Этих всех людей так много, что они сливаются в безликую серую массу, проносящуюся мимо со скоростью самолета. Но при желании, я могу остановить этот безумный кинофильм на любом кадре, заглянуть каждому в глаза и спросить… Что спросить, я не знаю. Да и кто я такой, чтобы спрашивать.
Ведь я один из них.
Бросить программирование?
Но даже иногда оказавшись в очень некомфортных условиях, программисты не бросают программирование. Потому кроме корпоративного депресняка есть еще КОЕ-ЧТО. И это КОЕ-ЧТО они не променяют ни на что.
Мои друзья часто предлагают развеяться на природе и приглашают на охоту или рыбалку. Я как могу отшучиваюсь, но они продолжают настаивать.
— Давай, Михаил, это круто. После того, как ты поймаешь первые несколько щук, тебя будет не оттащить от удочки. Ты просто не понимаешь, что такое охотничий азарт!
Я то как раз понимаю. Это они НЕ ПОНИМАЮТ, что происходит почти каждый день на экране моего компьютера.
Поиск ошибки в программе по ощущениям похож на охоту за зверем. Но только гораздо интересней. Отличие в том, что погоня за электронным зверем идет в пространстве состояний, а оно гораздо больше обычного леса. Даже один килобайт памяти, может породить пространство большее, чем количество атомов во вселенной. А в программе может содержаться до нескольких миллионов строк. Спасает только то, что мозг человека обладает примерно таким же пространством состояний. Они сходятся в битве — мозг и программный код, и кто победит — никогда не известно.
Но мозг не один — у него есть союзники. Первый союзник — это инструменты. Программы, помогающие исследовать, отлаживать и взламывать другие программы. В арсенале электронного охотника есть все. И капканы, куда может забрести неосторожная дичь. И радары, которые прочесывают пространство состояний в поисках добычи. И мелкое сито, сквозь которое можно просеять каждую песчинку в электронном лесу. И секундомер, отмеряющий сколько времени и на что тратит выбивающийся из силы зверь. И следопыт, который увидит даже самые слабые следы в полях электронной памяти. И стая виртуальных борзых, загоняющая ошибку в угол.
Второй союзник — это правила, которым обязаны следовать все программисты, даже самые злостные хакеры. Можно создать мину, работающую не по правилам, которая введет в заблуждение даже самого опытного сапера, но тогда есть большая вероятность взорваться на ней самому. Правилам следуют все и всегда — иначе тебе не выжить в этом сложном мире. Это смешно, но есть даже правила шифрования информации, и не просто правила, а стандарты — и все им следуют!
Стоит ли говорить, что в крови охотника появляется море адреналина и не электронного, а самого настоящего. Ты настигаешь ошибку и загоняешь ее в угол. Затем исправляешь пару символов и программа работает правильно. Вредоносный код уничтожен. Ошибка, так долго досаждавшая людям, исправлена. Это ни с чем не сравнимое чувство победы… Это настоящая, чистая, бесконечная радость…
Вечер без Аллы
Мечтая и улыбаясь в пустоту я спотыкаюсь о ступеньки подъезда. За бредовыми мыслями дорога от ночного клуба показалась очень короткой. В подъезде пахнет сыростью. Прохожу в квартиру и сажусь на тумбу в прихожей. Жаль, что с Аллой ничего не вышло. Она мне понравилась. Но может мы с ней еще встретимся.
Почему то вдруг стало грустно. Маразм на работе в своем закономерном развитии взял очередную высоту, о существовании которой многие даже не подозревали. И с деньгами последнее время как-то не очень. Может бросить все, начать продавать пластиковые окна и жить без этих забот?
Взгляд падает на компьютер, который немного видно через дверной проем. Он не ожидает такого предательства. Черт возьми!!! Пока мне хватает денег на кусок хлеба и глоток вина, а моему компьютеру на электричество и апгрейд, это волшебство будет продолжаться.
Сажусь в кресло и делаю пару глотков из бутылки. Нажимаю на кнопку питания. По моим венам распространяется тепло, а по компьютерным шинам — импульсы. Теперь мы с компьютером — одно целое. В чуть расширенных зрачках отражаются сообщения от системного загрузчика. Поехали!!!
И я проваливаюсь в бесконечный персональный космос…
(продолжение следует)