8 posts tagged

программирование

Если бы программисты были уборщиками

Картинка отсюда

Программист-юниор — умеет управляться только одним совком и одним веником, собирает мусор и окурки, оставленные тут программистами до него. Старается, но большая часть мусора летит мимо совка. Ещё не знает, как пользоваться ковриком на входе, поэтому приносит с улицы ещё больше мусора.

Программист-миддл — владеет совком побольше и уже умеет им работать. Знает как правильно заметать мусор в угол, чтобы на презентации его никто не заметил.

Программист-сеньор — вместо уборки сидит и настраивает своего кастомного робота-пылесоса, чтобы автоматически распознавал и убирал хоть какую-то часть мусора. Робота периодически глючит, и он выстреливает весь собранный мусор в потолок. Сеньор выключает пылесос, залазит на стол и начинает руками отскребать потолок. Команда стоит вокруг и восхищается способностью сеньора удерживать равновесие на столе, никто другой так не умеет.

Тимлидер — включает турбину, половина мусора улетает в окно. После этого припахивает всю команду расставлять мебель так, как было раньше. В процессе обнаруживается, что доска улетела вместе с мусором. Пишет на стене «Комната v2.0», обводит квадратной рамкой и называет это эмулятором доски, для демки сойдёт. Вся команда в это время носится по магазинам и ищет, где достать доску того же цвета и размера, ибо клиент уже к такой привык.

Архитектор — ничего не убирает, но постоянно поручает пробурить новые двери и окна «для коммуникации с внешними сервисами». Строительную пыль потом разгребает вся команда годами.

QA — заходит в комнату, ставит стул возле шкафа, залазит на него, проводит пальцем по крышке, идёт к разработчикам, показывает палец и говорит: «Ожидаемый результат — палец чист. Полученный результат — палец серый от пыли». Разработчики говорят, да мы знаем, но пока клиенты на это не напарывались, можно отложить.

QA Automation — отправляет в комнату робота и получает отчёт, через сколько шагов робот поскользнулся на кожуре от банана.

Проджект Менеджер — когда-то давно он увлекался уборкой, но потом понял, что это не его. Вечно недоволен, что комната грязная, но на предложение тимлидера «дайте нам полгода, мы закроем комнату ото всех, почистим, покрасим и наведём порядок» всегда отвечает, что «когда-нибудь потом, а пока наберите бесплатного мусора на улице, насыпьте горку на банановую кожуру, обнесите красной лентой и поставьте табличку, что это элитная инсталляция».

2016   мысли вслух   программирование

Про физмат, дизайн, подкасты и преподавателей

Во время недавних пробежек послушал два выпуска подкаста из серии «Откровенно про IT-карьеризм» на DOU.

187: с Дмитрием Ефименко и
189: с Максом Розенфельдом.

Обоих товарищей я видел лично, и оба вызвали у меня ощущение людей, которые разбираются в том, что говорят, увлечены своим делом и с удовольствием заражают этим фанатством окружающих.

1

Ефименко — директор продуктовой софтверной компании, то есть компании, которая выпускает собственный программный продукт и продаёт его, как Microsoft или Adobe. Для Украины раньше это было довольно необычно.

У Ефименко есть своя коллекция размышлизмов, которую он нерегулярно пополняет. Но архивные заметки там весёлые. Раз, два, три, а также загадка 1, загадка 2 и отгадки. Даже людям далёким от погромирования это будет интересно почитать, потому что говорит он не столько о программировании, сколько об управлении умными людьми, которым надо сделать общую крутую хрень.

Из интервью с ним:

Даже самый распоследний джуниор, девелопер, самый забитый, сидящий в дальнем углу, он менеджер своего маленького проекта. Чем больше он набирается скилов, тем больше он менеджер. У него, фактически, микрокопия проектной модели. Те же самые работы с требованиями, коммуникация с заказчиком, только заказчик у него уже внутренний. Те же самые вопросы, связанные с тестированием, и т. д., и т. д. Собственно, вопрос менеджмента — это больше вопрос умения масштабировать то, как ты сам работаешь, и как ты сам управляешь своим личным временем более, чем на одного человека, более, чем на себя.

Идею я очень поддерживаю. Да, разумеется, кандидатская в менеджменте или чтение PMBoK или получение MBA или лычки Scrum-мастера или исследование TQM поможет. Проблема в том, что это добавляет уверенности в своих силах, но не делает человека автоматически хорошим менеджером. Вопрос часто в том, чтобы понять самому, каких качеств тебе не хватает и их докачать. Может, в реальности ты уже всё, что нужно по технологиям, знаешь, но тебе тупо не хватает ораторских скилов, и надо пойти полечить косноязычие.

2

Розенфельд — человек-измена :-). Начал учиться в 27-м физматлицее Харькова, но пошёл на художника, успешно стал им, потом сменил профессию и стал успешным экскурсоводом.

Надо сказать, что 27-й — действительно уникальное место, которое я раньше не ценил. Мне лицей показал, что фанатирование своего дела — вещь заразительная и от учителей успешно передаётся ученикам. Забавно, что со мной в параллели учился парень, который после школы тоже пошёл учиться на художника и сейчас стал успешным дизайнером.

В интервью с Розенфельдом есть история про его импровизированную экскурсию в музее Пикассо. То, что он сделал в итоге — это признак чисто инженерного ума — увидеть проблему других людей и придумать решение этой проблемы.

Кстати, как Розенфельд, так и Ефименко упоминают влияние преподавателей институтских. В случае Макса цепочка выстраивается прекрасная: послушал совет харизматичного преподавателя → потратил деньги на путешествие → случайно провёл экскурсию в Барселоне → осознал, что может проводить экскурсии → ... → занимается любимым делом и зарабатывает на нём деньги.

Когда слушаешь такие истории, понимаешь, насколько это адово важно как можно раньше попасть на увлечённого преподавателя.

Side note 1: Илья Бирман (движок этого блога — его творение) также говорил в одной из своих заметок про существенное влияние преподавателя на него.

Side note 2: Слушаю подкасты через Podcast Addict — из популярных приложений на ведроиде только у него была возможность добавлять подкасты из RSS. Через него же слушаю подкасты Всеяредакции. Хорошее приложение, достойно покупки премиума.

2015   преподавание   программирование   слушаю   Харьков

Уборка по-программерски

Когда-то ещё в лицее один мой друг изложил следующий простой алгоритм уборки стола:

while ( лажа_на_столе ) do { лажа_на_полу; }

Отличная штука — до сих пор пользуюсь.

2015   алгоритмы   Лайфхак   программирование   уборка   цикл

Заметки на полях

— Поколение старше нас на несколько лет поняло, что людям нужны компы — стало успешными продаванами компов.
— Поколение нас получило компы и поняло, что людям нужны услуги — стало программерами.
— Поколение некст получило хорошие услуги и поняло, что людям нужны игры — стало игроделами ( + рост популярности спорта, настолок, квестов и прочих лазертагов)

Что дальше? Что поймут и начнут производить те, кто получит качественные компы, услуги и игры? Возможно такие проекты, которые мы видим на кикстартере и индигого? Или круг замкнётся и пора восстанавливать свой скил в Fallout?

И ещё вопрос: когда меня отпустит?

2015   геймификация   Каганов   программирование   трава   философия

Почему программистам так трудно общаться с людьми

Все имена в данном произведении вымышлены, а события — выдуманы. Или нет?


Сегодня Настя рассказала мне интересную историю из своей работы. Настя репетирует по скайпу три иностранных языка (испанский, английский и немецкий) и даже преподаёт одному чуваку из Канады Español using English. Я ей не перестаю говорить, насколько она талантливый и уникальный человек, Стейси мне всё не верит )))

В последнее время у неё среди учеников всё больше программистов, и сегодня один из них сам спонтанно рассказал ей, почему программистам так трудно общаться с людьми.

«Понимаете», сказал программист, «машины детерминированы и работают по шаблону, а люди НеПрЕдСкАзУеМы. Нам трудно общаться с людьми, потому что вы не вписываетесь в шаблоны. А мы привыкли, что компьютер работает всё время одинаково».

На нас, людей, действует гугель факторов. Вспышки на Солнце, плохая погода, сегодня с утра в метро наступил кто-то на ногу, и так далее. 24 часа в сутки семь дней в неделю мы имеем дело со случайностями. И только в одном маленьком мирке компьютеры работают детерминированно.

Или, может, не работают?

Проведите простой эксперимент: отключите сегодня будильник и запишите завтра, во сколько вы встанете? Завтра день отдыха, воскресение (в которое в моей распрекрасной Австрии ничерта не пашет ), поэтому вы встанете, например, в 10:05, послезавтра — в 8:36, потом в 7:50, потом в 9:11. С самой первой и до самой последней секунды дня ваша жизнь — это рандом, подчиняющийся совершенно нормальному закону распределения. И вы на полном серьёзе считаете, что компьютеры как-то обошли это? Вы думаете, они как-то обманули Вселенную и начали работать по шаблону? У меня для вас плохие новости ))) Вселенная — это Техасский холдем. Вы не знаете карт соперника, но вы можете посчитать вероятность того, какие у противника карты в зависимости от того, какие у вас карты, и какие карты на столе. Это всё давно умеют делать компьютерные программы-подсказчики, игроки в покер в курсе и приведут примеры. Там всё очень детерминировано. Но что они не могут предсказать, так это вероятность блефа других игроков, потому что эта штука произвольная, находящаяся внутри компьютера биологического. Именно поэтому машинам почти невозможно состязаться на равных в покер с крутыми игроками. Да и не только в покер. Starcraft 2, Heroes of Might and Magic III. Дико популярные до сих пор игры, в которых компьютер проигрывает человеку по всем фронтам даже если ему снять «туман войны». Ну не угадает комп, какой именно билд выберет игрок. А вот человек человека может «прочесть».

Кстати, хоть компы и победили людей в шахматах, но вот в шахматах Фишера, в которых начальное положение произвольно, пока что с ними только начали воевать. Как я и ожидал, современные алгоритмы там на начальном этапе свалятся. Одно дело — придумать хороший алгоритм для одной стартовой позиции и потом добить его шаблонными решениями, другое дело — потягаться с детищем шутника Бобби, где стартовых позиций 960. Это вам не квантовая физика, тут думать надо!

Так что вот вам и отгадка, почему именно программирование — отстой. Потому что почти всегда это попытка шаблонными решениями решить нешаблонные проблемы. Именно поэтому на своих собеседованиях я даю каждый раз немного разные задачи и хвалю за нестандартный, пусть и не совсем правильный подход. Зачем мне в команде человек-шаблон? Я понятия не имею, что завтра взбредёт клиенту! Мне нужно, чтобы программист был готов, что завтра клиент попадёт в автокатастрофу, и наш проект закроют, или что у клиента родится дочка и он на радостях перенесёт дедлайн на три месяца вперёд и выдаст бонусы. Или что фича, которую клиент так хотел месяц назад, теперь ему нафиг не упёрлась, потому что он наконец-то посмотрел на неё на стейдже, и понял, что она ему нафиг не упёрлась. И даже соизволил прислать об этом мейл! Человек-шаблон этого не поймёт и будет упорото педалить никому не нужный код, за который никто не заплатит килограмм хрустящих евро. Well, fuck that!

Так, и ещё, следующее поколение, которое будет зашибать большущие бабки — это геймеры, точнее геймеры, играющие сейчас в онлайн-игрушки. Trust me. Они и есть квантовые компьютеры, они и есть настоящие программисты. Программисты людей.

Рекурсия

Если моя гипотеза про фракталы верна, то нет ничего удивительного в том, что на собеседовании я очень люблю задавать задачу на рекурсию. Идея не нова, я её нагло украл у Джоэля. Джоэль предлагал задавать вопросы на указатели и рекурсию, я пока ограничился второй, потому что в PHP указателей нет, у нас есть ссылки, но они используются не так часто, поэтому насиловать ими мозг кандидату смысла особо нет.

Традиционно для тестирования понимания рекурсии дают задачу на факториал. Я решил, что факториал — это не модно и придумал задачу в рамках традиционной для похапешников предметной области — вывести дерево категорий онлайн-магазина.

Задача не самая лучшая, но на её примере забавно посмотреть, как люди с ней мучаются. Например, один кандидат в первой версии забыл передать $depth, и ему пришлось дописывать его в решение на листике. Что ещё классно, что у этой задачи нет одного чёткого решения, и каждый изобретает свой велосипед (типичная фигня в программировании). Это видно даже по комментариям к задаче на квизфуле. Так что таким образом заодно можно увидеть, как человек мыслит и какими шаблонами решает задачу. Например, решение через регекспы меня очень позабавило, я бы такого человека взял просто за то, что он пошёл нестандартным путём и нашёл не правильное, но неплохое решение.

Возвращаясь на уровень вверх к фракталам. Задачка на рекурсию тренирует ту самую способность спуститься на уровень вниз и увидеть не только верхний слой, а ещё и то, как он был составлен. То есть увидеть мозгом этот фрактал и в следующий раз подойти к задаче с «двухуровневым» сознанием))

Aktualisierung (22.01.2015): Гриша на яваскрипте написал кошерный вариант — http://jsfiddle.net/cu20x6p8/4/

ПС: Вспомнил, что PHP содержит рекурсию в самом имени. То-то я удивляюсь, чего меня штырит так-то?

2015   Joel Spolsky   PHP   алгоритмы   программирование   рекурсия   собеседования   фракталы

Тест на ПМа

Если мне когда-нибудь поручат отобрать хорошего проджект-менеджера, я собираюсь в числе прочего сделать следующее: дать человеку игру «Волк и яйца» и не расматривать его резюме до тех пор, пока он её не пройдёт, либо не наиграет какой-то определённый уровень.

Дело в том, что Волк — это ПМ, а курицы — клиенты. А яйца — это багреквесты и фичереквесты, иногда и целые проекты. Какие-то баги эскалируют быстрее, какие-то медленнее. Одна из основных задач ПМа — организовать процесс таким образом, чтобы минимальное количество яиц разбилось.

Другая похожая игра — там где бармен должен пиво клиентам вовремя отправлять:

До тех пор пока эта мысль про разбитые яйца и разгневанных клиентов у человека не закрепится на уровне рефлексов, говорить об управлении задачами с ним бесполезно.

2014   геймификация   программирование   разработка   управление

[Перевод] Программирование — отстой

Перевод делался для инвайта на хабр, но они там не очень любят переводы, поэтому выкладываю сюда. Оригинал статьи — Programming Sucks. Питер Уэлч (автор) разрешил мне опубликовать перевод только если я укажу ссылку на его книгу: And Then I Thought I Was a Fish, но я сказал, что я не собираюсь указывать ссылки ни на какие книги и опубликую так, как я хочу

Программирование — отстой

Написано 27-го числа месяца апреля в году 2014. Было воскресение.

Те из моих друзей, кому по работе приходится поднимать вещи тяжелее, чем ноутбук и чаще, чем два раза в неделю, однажды пользовались случаем и вставляли в разговор что-то типа: «Бро (это обязательно начиналось с „Бро“), ты не напрягаешься на работе. Вот я только что отработал 4700 часов в неделю, копая отвёрткой туннель под Мордором»

В чём-то они правы. Мордор — отстой, а чтобы копать туннель, требуется, очевидно, куда больше физических усилий, чем чтобы нажимать на клавиши. Конечно, если ты не муравей. Но, в интересах дискуссии, давайте сойдёмся на том, что стресс и безумие — не очень полезные вещи, окей? Отлично! Добро пожаловать в программирование.

Все команды программистов созданы психами и состоят из психов

Представьте, что вы присоединились к команде инженеров. Вас переполняют новые идеи, вы только что окончили колледж, и мир для вас составлен из чистых прекрасных вещей, совершенных в своей гармонии цели, экономии и силы. Вы начинаете с того, что встречаетесь с Мэри, руководителем проекта по строительству моста в одном мегаполисе. Мэри знакомит вас с Фрэдом, но только после того, как вы пройдёте пятнадцать проверок безопасности, которые установил Дэйв, потому что у Дэйва однажды стащили свитер со стола, и поэтому «Больше Никогда». Фрэд работает только с деревом, так что вы сразу интересуетесь, что именно делает Фрэд на проекте. Ведь в час пик по этому мосту через 70-метровую пропасть над бурлящей рекой будет нестись трафик, набитый машинами, набитыми смертными людьми.
— Не беспокойся, — говорит Мэри, — Фрэд будет работать над пешеходными дорожками.
— Какими дорожками?
— Ну, просто Фрэд сделал хорошую презентацию на тему, зачем нужны дорожки. И, кроме того, они добавят эстетики внешнему виду. Само собой, они будут сделаны без перил, ибо у нас действует строгое правило «никаких перил», которое ввёл Фил, причём Фил даже не инженер. Никто вообще не уверен, что делает Фил, но его деятельность явно наполнена синергией и как-то связана с высшим руководством, с которым никто из инженеров не хочет связываться. Так что пусть уж Фил делает, что хочет. Сара, тем временем, нашла несколько инновационных технологий дорожных покрытий и уже глубоко внедрила их в проект моста, поэтому тебе придётся учитывать каждую из них, ведь они все имеют различные требования к поддержке и безопасности. Том и Гарри работают вместе уже много лет, правда у них не прекращается спор о том, какая система мер лучше — метрическая или британская. Спор разрешается по принципу «кто до чего доберётся первым». Это уже настолько достало всех тех, кто в реальности собирает конструкцию, что они плюнули на всё и с помощью кувалды, напильника и сварочного аппарата подгоняют те детали, которые хоть как-то подходят. Кроме того, по проекту это должен быть вантовый мост, но никто до конца не понимает, как строить вантовые мосты, поэтому мы сделали его наполовину, а потом подпёрли колоннами, чтобы он не упал. Но кабели подвески всё же оставили, потому что они поддерживают какие-то части моста. Никто точно не знает, какие именно, но все точно уверены, что они очень важные.

После того, как вы со всеми познакомились, вам предлагают внести ваши собственные идеи. Но у вас их нет, потому что вы аэрокосмический инженер и понятия не имеете, как строить мосты.

Поедете ли вы по такому мосту? Нет. Если его как-то построят, то всех, кто имел к нему отношение, публично казнят. Тем не менее, какая-то вариация этого хаоса создала все до единой программы, с которыми вы когда-либо работали — банковский софт, вебсайты, и даже ту, повсеместно используемую программу, которая должна была защищать информацию в интернете, но не защитила.

Любой код — плохой

Когда никого нет дома, все программисты выключают свет, наливают себе стакан виски, включают в колонках лёгкую немецкую электронную музыку и открывают файл на своём компьютере. У каждого программиста это свой файл. Кто-то писал его сам, кто-то нашёл его и понял, что его нужно сохранить. Они пробегаются взглядом по строкам кода, и от их безупречной красоты у них наворачиваются слёзы на глаза. А потом они рыдают горькими слезами, вспоминая все остальные файлы и понимая тот неизбежный крах, который ждёт всё хорошее и правильное в этом мире.

Этот файл — это Хороший Код. Он содержит осмысленные и единообразные имена переменных и функций. Он лаконичен. Он не делает ничего очевидно глупого. Ему никогда не приходилось жить в дикой природе или отвечать перед отделом продаж. Он выполняет одну простую чёткую задачу. И он делает её хорошо. Он был написан одним человеком, и его никогда не трогал никто другой. Он читается, словно поэзия кого-то, кому за тридцать.

Все программисты начинают с идеальной снежинки наподобие этой. Потом в пятницу им говорят, что нужно сделать шестьсот снежинок к следующему вторнику, поэтому они сокращают чуть-чуть тут и, может быть, копируют несколько снежинок там, пытаясь соединить их вместе, или просят коллегу проработать над той, что почему-то тает. И потом снежинки всех программистов собирают вместе и впихивают в какую-то необъяснимую форму, и кто-то кладёт на это всё картину Пикассо, потому что снежинки пропитаны кошачьей мочой, и никто не хочет видеть, как они тают при свете дня. А через неделю каждый берёт в руки лопату и набрасывает побольше снега, чтобы Пикассо окончательно не свалился.

Есть одна теория, которая утверждает, что это всё можно излечить, если следовать стандартам. Проблема в том, что «стандартов» куда больше, чем вещей, которые умеет делать компьютер. При этом каждый стандарт по-разному совершенствуют и подгоняют под персональные потребности те люди, которые его пишут. Так что нет ни единой программы, которая попала бы в реальный мир, не делая одни и те же вещи с помощью нескольких десятков разных, даже близко не похожих между собой, способов.

Первые несколько недель любой работы уходят на то, чтобы понять, как эта программа работает, даже если вы знакомы абсолютно с каждым языком, фреймворком и стандартом, который там используется. Потому что стандарты — это единороги.

Темнота будет всегда

В детстве в моей спальне был чулан. Он имел какую-то странную форму. С первого взгляда всё казалось нормальным, но когда ты заходил в него по своим делам, ты замечал, что в стене справа есть альков, который можно использовать как маленькую полку. Потом ты всматривался вглубь и замечал, что от задней стенки алькова уходит ответвление, создавая проход в абсолютную пустоту, куда не проникал ни один луч света. Ты моментально узнавал её — это то место, куда отступают все те голодные монстры, которых ты каждую ночь отгоняешь фонариками и плюшевыми игрушками.

Вот это и есть изучение программирования. Ты изучаешь полезные инструменты, потом смотришь вокруг и видишь рядом какие-то новые полезные инструменты, и они показывают тебе ту бездонную пропасть ужаса, которая всегда будет рядом с твоей кроватью.

Скажем, вы обычный веб-разработчик. Вы знаете десяток языков программирования, кучу полезных библиотек, стандартов, протоколов, чего там ещё. Вам всё равно минимум раз в неделю нужно изучать что-то новое. При этом вам надо не забывать проверять всю ту сотню вещей, что вы уже знаете. Вдруг там что-то обновилось или сломалось. И убедиться, что они всё ещё работают вместе, и что никто не починил тот баг в одной из них, который вы использовали, чтобы сделать что-то, что вы считали клёвым однажды на выходных, будучи пьяными вдрызг. Всё обновили? Отлично! И тут внезапно всё ломается.

— Что за нафиг? — произносите вы вслух, и начинаете искать проблему. Вы обнаруживаете, что когда-то давно какой-то идиот решил, что, так как другой идиот решил, что 1/0 должно равняться бесконечности, то он может использовать это как сокращение для термина «Бесконечность» и упростить свой код. Потом пришёл не-идиот и справедливо решил, что это как-то по-идиотски, — о чём должен был подумать изначальный идиот, — но, так как тот не подумал, не-идиот решил стать козлом и поменял поведение на критическую ошибку в своём новом компиляторе. Потом он решил, что никому не расскажет, что это была ошибка (он же козёл), и теперь все ваши снежинки пахнут мочой, а вы даже не можете найти кота.

Вы эксперт во всех этих технологиях, и это прекрасно. Благодаря этому профессионализму вам нужно потратить всего лишь шесть часов, чтобы разобраться, что пошло не так, а не потерять работу вообще. У вас теперь есть ещё один маленький факт, и вы сплетёте его с миллионами других маленьких фактов. И все их вам нужно помнить, ибо почти все программы, от которых вы зависите, были написаны идиотами и козлами.

И это только ваша специфическая область работы, и она является столь малой частью всех фактов в компьютерных науках, что можно считать вы не знаете вообще ничего. Нет ни единого человека во всем мире, способного объяснить, как всё работает в вашем макбуке, купленном пять лет назад. Почему мы всё время просим вас выключить и включить его опять? Потому что мы понятия не имеем, что пошлó не так, и намного проще положить компьютер в кóму и дать бригаде встроенных автоматических врачей разобраться вместо нас. Единственная причина, почему компьютеры программистов работают лучше, чем компьютеры не-программистов — это потому, что программисты знают, что компьютеры — это психованные маленькие дети с недостатком иммунитета, и мы не бьём их, когда они плохо себя ведут.

Куча работы проделана в интернете, но интернет это тот ещё ад.

Помните тот фрагмент про людей и плохой код? Интернет — это то же самое, только в миллиард раз хуже. Вебсайты (которые по сути — расфуфыренные тележки для покупок с максимум тремя динамическими страницами) поддерживаются командами людей круглые сутки, потому что правда в том, что что-то ломается всегда, везде и для всех. Прямо сейчас некий работник Фейсбука получает десятки тысяч сообщений об ошибках и, высунув язык, пытается исправить проблему раньше, чем вся система улетит в тартарары. В офисе Гугла сидит команда, не спавшая три дня. Где-то ещё программистка баз данных сидит в окружении пустых банок Маунтин-Дью, а её муж думает, что она уже умерла. И если эти люди остановятся, мир сгорит в огне. Большинство людей понятия не имеют, чем заняты системные администраторы, но поверьте мне, если они все решат сделать перерыв на обед в одно и то же время, то они даже не успеют дойти до пиццерии, а у вас уже закончатся патроны, чтобы отстреливаться от банд бродячих мутантов, охотящихся за вашими консервами.

Нельзя перезагрузить интернет. Триллионы долларов зависят от хрупкой паутины негласных соглашений и «пока сойдёт»-кода с комментариями вроде «TODO: ПОЧИНИТЬ ЭТО, ЭТО ДИКО ОПАСНЫЙ КОСТЫЛЬ, НО Я НЕ ЗНАЮ В ЧЁМ ПРОБЛЕМА», написанными десять лет назад. Я даже не заикаюсь про все те армии людей, которые взламывают различные части интернета, чтобы за кем-то шпионить. Или получать деньги. Или просто потому, что им скучно. Слышали про форчан? Форчан в состоянии уничтожить вашу жизнь и бизнес лишь потому, что сегодня утром они решили, что вы им не нравитесь. Мы уже давно не переживаем по поводу форчана, потому что плюс-минус бомба не делает погоды, когда вокруг идёт ядерная зима.

В интернете обычное дело сказать: «Смотри, эта штука работает. Иногда. Если правильно применять технологию». Фигак! — теперь это часть интернета. Кто угодно с парой сотен баксов в кармане и компьютером может стащить кусочек интернета, запихнуть в него сколь угодно кошмарные фрагменты кода и потом прикрепить свой маленький кусочек к кучке больших кусков, и всё станет ещё чуточку хуже. Даже хорошие программисты забивают на чтение таинственных спецификаций, потому что люди, которые их написали, были наняты, чтобы создавать единорогов. Так что каждый проводит половину времени, борясь с фактом, что ничто ни с чем не совместимо или вообще не имеет смысла и может сломаться в любой момент, и мы просто пытаемся прикрыть это и надеемся, что никто не заметит.

Вот секретные правила интернета: через пять минут после того, как вы первый раз в жизни открыли веб-браузер, у школьника из России уже есть ваш номер социального страхования. Вы где-то зарегистрировались? Компьютер в NSA отныне отслеживает ваше физическое местоположение до конца вашей жизни. Отправили письмо? Ваш электронной адрес ушёл на доску объявлений в Нигерии.

Это происходит не из-за того, что нам пофиг, и мы не пытаемся это остановить, а из-за того, что всё уже давно сломалось, потому что хорошего кода нигде нет, и все просто пытаются поддерживать на плаву то, что есть. Если вы работаете в интернете, то в этом и заключается ваша работа: надеяться, что та последняя штука, которую вы написали, достаточно стабильна, чтобы выжить в течение нескольких часов, и вы успеете поужинать и немного поспать.

Мы не психи по природе, но мы сошли с ума в процессе

Ошибка: Попытка разобрать HTML с помощью регулярных выражений; система вернула Ктулху.

Смешно, да? А как насчёт такого диалога:

— Она называется arrayReverse?
— s/camel/_/
— Клёво, спасибо.

Ну что, тот парень помог? Ну, тот, который с «camel»? Это похоже на осмысленный ответ? Нет? Отлично. По крайней мере, вы ещё можете найти Господа. Вы ещё не провели настолько много времени, читая код, что начали на нём говорить. Мозг человека не особо предназначен даже для базовой логики, а тут вся карьера состоит из того, чтобы работать с очень, очень сложной логикой. Вам нужно разматывать огромные цепочки абстрактных событий и требований, чтобы обнаружить в конце пропущенную запятую. После целого рабочего дня вы приходите в состояние лёгкой афазии — это когда вы смотрите на лица разговаривающих людей и не понимаете, закончили они или нет, потому что не видите точки с запятой. Вы окунаетесь в мир абсолютной бессмысленности, где единственное, что имеет значение — это когда короткие наборы чисел входят в гигантский лабиринт символов, а с другого конца лабиринта выходят другие наборы чисел или фотография котёнка.

Деструктивное влияние на мозг можно наглядно проиллюстрировать компьютерными языками, которые придумывают люди. Вот программа:

#include <iostream>

int main( int argc, char** argv ) {
    std::cout << "Hello World!" << std::endl;
    return 0;
}

Она делает абсолютно то же самое, что и эта программа:

`r```````````.H.e.l.l.o. .w.o.r.l.di

И эта программа:

>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]
>++++++++[<++++>-] <.>+++++++++++[<++++++++>-]<-.--------.+++
.------.--------.[-]>++++++++[<++++>- ]<+.[-]++++++++++.

И эта:

Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook. Ook! Ook? Ook! Ook! Ook? Ook!
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook.

И когда-то давно кто-то написал язык программирования, чтобы теперь кто-то другой смог написать такое:

#:: ::-| ::-| .-. :||-:: 0-| .-| ::||-| .:|-. :||
open(Q,$0);while("){if(/^#(.*)$/){for(split('-',$1)){$q=0;for(split){s/|
/:.:/xg;s/:/../g;$Q=$_?length:$_;$q+=$q?$Q:$Q*20;}print chr($q);}}}print"n";
#.: ::||-| .||-| :|||-| ::||-| ||-:: :|||-| .:|

По словам автора, эта программа — это «две строчки кода, которые разбирают две строчки комментариев в коде, расшифровывают из них числа Майя, которые составляют ASCII-коды букв, и составляют из них название журнала, повёрнутое на 90 градусов в виде ASCII-арта».

Эта программа выиграла конкурс — потому что, естественно, она его выиграла. Хотите ли вы жить в таком мире? Нет. В этом мире вы можете выкуривать по пачке в день, и никто даже не удивится. «Да, он выкуривает по пачке в день, и что? Есть кто-то, кто не выкуривает?» Каждый программист просыпается однажды утром и перед тем, как полностью прийти в себя, видит весь мир и все связи внутри него в виде фрагментов кода. И они делятся этими рассказами друг с другом, как будто нет ничего странного в том, чтобы испытывать вместо снов кислотные приходы. В этом мире люди уклоняются от секса, чтобы написать язык программирования для орангутанов. Все программисты заставляют свой мозг делать вещи, для которых мозг никогда не был предназначен в ситуациях, где они не могут ничего улучшить. Десять-пятнадцать часов в день, пять-семь дней в неделю. И каждый из них медленно слетает с катушек.

</нытьё>

Так что — нет, от меня не требуют поднимать объекты весом двадцать кило. Я поменял это на возможность стричь волосы у Сатаны в паху, пока он обедает содержимым моего черепа. И всё это ради того, чтобы пару кусочков интернета проработали ещё несколько дней.

2014   Peter Welch   веб-разработка   отстой   перевод   программирование