Работаю в Очень Крупной Западной Компании, точнее, в ее русском филиале, в техподдержке.
Однажды пришла заявка: мол, странно ведёт себя комп, выделять мышкой толком не даёт, а если выделяет — то не то, что надо, не так, как надо, и вообще, и такое — во всех приложениях.
Звоню пользователю, расспрашиваю о ситуации. Выясняю, что проблеме уже год как минимум, в попытках решить её и с драйверами шаманили, и систему переставляли, и ноутбук заменили, и монитор (хотя при чём тут это?), и порт-репликатор, и на другое место сажали — всё без толку.
Подключаюсь к нему удалённо, начинаю смотреть, что у него да как. Провозился три часа с пользователем на телефоне, пока до меня не дошло.
Да, всё железо поменяли. Кроме мышки.
Сломалась мышка специфически: стала слать много-много сообщений о нажатиях, причём кликам мышки это не мешало, а вот когда начинались попытки выделить — тут-то это и вылезало.
Искренне посоветовал пользователю кинуть мышкой в стену или подарить врагу.
Как-то раз я в целях расширения кругозора год поработал в хостинге. Винду сменили линуксы, а «ничего не работает» из глючащих принтеров, отваливающихся RDP-соединений и банковских сертификатов превратилось в переполненный серверный диск, права «всё для всех» рекурсивно от корня и завирусованную Джумлу, что не обновляли уже пять лет. Я научился многим интересным трюкам, тому, что если есть какая-то рутинная работа, её лучше всего заскриптовать — и лучше всего тем скриптовым языком, что представлен в системе, и прочая, и прочая…
Я вернулся в компанию с довольно большим числом клиентов на абонентском обслуживании. И буквально через месяц мы нашли специалиста, который пока берет на себя почти все выезды. Он не знает пока некоторой специфики и потому часто звонит, советуется. И я, наученный опытом хостинга, завёл в привычку всегда первым делом делать одну проверку.
— Тут Эксель падает…
— Диски проверил?
— При чём тут диски?
— Проверь диски.
— Компьютер медленно загружается…
— Диски проверил?
— Отчётность не работает…
— Диски проверил?
— А какие у нас пароли в домене у %clientName%?
— Диски проверь. %password%.
Сначала коллегу вопрос, кажется, сердил. Потом, увидя, что диски действительно часто «при чём», он стал спрашивать, как это может быть связано с проблемой, и мне приходилось придумывать случаи, когда может возникнуть проблема именно из-за дисков. Теперь, увидев достаточное количество смертей дисков и сэкономив, возможно, уже десятки часов, не задаёт вопрос про диски, просто проверяет.
Эникейщик и сисадмин (должности повыше обычно уже изучили этот урок), помни: диск — это коробка, в которой хреновина крутится на скорости несколько тысяч оборотов в секунду. Это очень тонкая и хрупкая механика, и она всегда под подозрением. У диска истёк срок гарантии? Новый уже должен лежать на столе, а бэкапы должны проводиться минимум ежедневно. На диске появились бэды или (не приведи боги!) S.M.A.R.T. failed — диск вообще более не должен быть использован. Оперативка на моём опыте выходила из строя всего шесть раз, из них пять — при работе в хостинге, проц — один раз, проблемы с материнкой, видяхой или звуковухой практически не бывают аномальными почти никогда, сетевухи и модемы — да, соглашусь, но проблемы с ними мне встречались менее десяти раз, а вот мёртвых дисков я видел сотни, и, в отличие от других компонентов, именно на дисках лежит самое ценное — клиентская информация.
<code>#ifdef handsOutOfShoulders
/* нормальные реквизиты фирмы */
#else
#ifdef handsOutOfAss
message = std::wstring(L"У нас появился долборукий дятел, разваливший сборку,
и я не отвечаю за работоспособность программы");
#else
message = std::wstring(L"БЛ&$Ь!!! ПОКАЖИТЕ МНЕ, КАК ОНО РАБОТАЕТ!!!");
#endif
#endif
</code>
Я часто читаю: мол, нормальных женщин не осталось, а теперь хочу рассказать свой взгляд на ситуацию.
Так уж получилось, что я в принципе понимаю мужчин, не закатываю сцен ревности, не выношу мозг, умею готовить (в том числе мясо и борщи), секс я тоже люблю, при этом не уродина и регулярно хожу на тренировки, получаю второе высшее по смежной специальности, участник международной исследовательской группы. Но я одинока. Аргументы окружающих меня мужчин просто доставляют:
— Ты слишком идеальна, так не бывает.
— А в чём подвох?
— Если через пять лет я будет свободен — женюсь.
В итоге я одна, а мужчины гуляют с клубными барышнями.
Не так давно я решила провести эксперимент и делать всё, на что мужчины так жалуются: истерики, сцены ревности, пришёл на свидание без цветов — скандал… Ещё строю из себя непроходимую тупицу. Слыша «операционная система», я (девушка-линуксоид) истерично вопрошаю: «А что это такое?!», а термопасту называю «этой штучкой». Вокруг — сразу толпа.
Так вот, дорогие мужчины, если вам нравится, когда к вам относятся по-свински, тогда не нойте о том, что «идеальных женщин не осталось». Определитесь уже, что вам надо.
Я смотрю, последнее время популярны истории, в которых авторы ставят знак равенства между множествами «почти всегда это так» и «изредка это так», например, вольно сравнивая undo для IT и не IT. Что же, проблема эта известная и широко распространённая. Расскажу и я свою историю.
Коллеги-разработчики! Мы часто ноем, сталкиваясь с чужими багами и «особенностями дизайна», с проблемами, уходящими корнями вглубь. Порой, в настройке софта или в организации библиотеки/фреймворка нет никакой видимой логики или глубокой задумки — просто автору так захотелось, потом захотелось другому автору, потом третьему, и вот этот мутный франкенштейн коллективного творчества предстаёт перед нами с прилагающейся к нему шестисотстраничной документацией, забитой исключениями, отступлениями от POSIX и удивительно корявыми решениями. Их невозможно понять, их надо просто запомнить. И потом, через полгода, троллить новичков, решая «элементарные» проблемы. Но всё равно стресс копился, копилось раздражение, и тогда по совету коллеги я занялся микроэлектроникой в качестве хобби.
Карл, даже обычная кнопка оказалась проблемной. Вместо одного события нажатия прилетает десяток по прерываниям! Дебаунсинг, Карл! Хуже того — в простой кнопке нет состояния 0/1, там есть или что-то (например, 1, если цепь замыкается на +3,3 В) и floating, который определяется то как 0, то как 1. Это решается лишь чисто механически.
Разобрался с кнопкой? Призовая игра — rotary encoder (например, колёсико мышки), который шлёт несколько событий, позволяющих определить, в какую сторону он вращается. Из-за того же баунсинга зачастую приходят противоречивые сигналы. Типа, сперва +1 и тут же −1 (тут я понял, почему у меня так же глючит скролл на одной дешёвой мышке). Попытки дебаунсить приводят к тому, что «шаги» проглатываются или неверно определяется направление.
Универсального решения нет.
Ультразвуковой сенсор позволяет измерить расстояние до объекта с точностью до миллиметра… в теории. На практике из пяти измерений одно вернёт 0, одно — какое-то запредельное значение, ещё три выдадут результат с разбросом в пару сантиметров. Более-менее стабильной работы удалось добиться, проводя семь измерений и забирая медианное значение. А ведь ещё бывает эхо…
Когда я добрался до простых дисплеев (TFT, OLED) — это оказался просто праздник! Ни один не заработал сразу. Везде приходилось долго искать конкретную модель, драйверы-библиотеки под неё, а некоторые даже исправлять и дописывать.
Теперь обычные проблемы разработчика воспринимаются с улыбкой. Подумаешь, прочитать документацию — она хотя бы есть и даже не на китайском. Подумаешь, с первого раза не запустилось что-то — сейчас покурим маны и посмотрим логи… (О, как же приятно, когда есть логи!) Снова ошибка? Ничего страшного, по крайней мере, из-за неё чип ценой в десяток долларов не превратился в бесполезный кусок горячего пластика.
Волнующая связь, говорите? Расскажу свою историю, не совсем из IT, но принцип тот же: надо уметь работать с тем, что есть, и учить по ходу работы. Главное — на входе отсеять совсем уж неадекватных персонажей.
Итак, иду по Старому Арбату, захотелось съесть и выпить вредного. До банкомёта далеко, денег на карточке вроде должно хватить на небольшой перекус, а заведение умеет их принимать. Из наличности — 25 рублей в кармане. Захожу, заказываю еды и прошу «Мне ноль-пять кока-колы лайт». Расплачиваюсь карточкой. «Угу, — говорят, — подождите, сейчас всё принесём».
Приносят пять стаканов по 0,5. Вернуть могут только всю сумму, она попадёт в блокировку и станет доступна в лучшем случае только на следующий день. Наличности не хватит, оставшейся суммы на карточке — тоже. Дитя степей, естественно, не понимает, в чём проблема: он же явно услышал слово «пять», а то, что оно было «ноль-пять» — как-то опустил. Тогда-то мне и стало понятно, почему в фастфуде напитки бывают маленькие, средние и большие. «Ты бы ему ещё „500 миллилитров“ сказал», — добавил злой и голодный внутренний голос.
Прочитал истории про неспециалистов и вспомнил один случай. Скорее грустный, чем смешной. Зашёл по какому-то мелкому вопросу в салон сотовой связи — из крупных сетей. Передо мной пожилой человек расспрашивает продавца про телефон (который тот ему, скорее всего, и подсказал). При упоминании Bluetooth дедушка задаёт вопрос: «Что это такое?» Продавец начинает объяснять, что это для связи с внешними устройствами и тому подобного. Дед говорит: «Нет, это понятно, но какой физический принцип? Инфракрасное излучение используется или что-то ещё?»
И тут продавец выпадает в осадок и мямлит: «Э… Ну, это Bluetooth».
Я говорю: «Радиоволны». Дед меня понимает моментально.
А вот продавец сотовых телефонов, не знающий, какова природа этого самого Bluetooth, конечно, печалит. Bluetooth — и всё.
Студенческая общага, отдельно взятая комната. Все на разных специальностях, у каждого свой круг общения, свои вкусы и интересы. Игры в основном довольно свежие — один часами выносит мид, второй может до утра сидеть на сайте с флеш-играми, третий предпочитает отстреливать кровососов на Зоне, четвёртый в лице серба-уголовника терроризирует американский мегаполис… В общем, по вечерам комната превращалась в дурдом.
Захотелось мне на днях вспомнить детство. Добыл «Нереальный турнир» 1999 года, поставил, бегаю…
— Unreal?
— Угу…
— Дай установщик!
Спустя пятнадцать минут:
— А давай по сети?
— Давай!
Бегаем вдвоём, синхронно материмся. Один из соседей отрывается от монитора:
— Что это у вас? Unreal?
— Он самый.
— А дайте установщик!
Через двадцать минут синхронного мата становится больше. Выходит из мида третий:
— Народ, что здесь происходит? Вы по сетке рубитесь?
— Да, вот флешка с установщиком. Присоединяйся!
Сетевые бои быстро стали традицией.
А сегодня к нам аккурат во время очередного заруба пришли соседи — ярые поклонники танковых боев:
— Народ, ну что за дела?! Вы каждый вечер материтесь! Вы уже зае… (Пауза.) Unreal?
— (Хором.) Да!
— А дайте… (В сторону просителей летят сразу две флешки.) Эмм, спасибо.
Через двадцать минут из-за гипсокартонной перегородки, которую здесь почему-то называют стеной, начинают доноситься подозрительно знакомые звуки.
Вот скажите, вы умеете обращаться со своим телефоном? Умеете. А ведь современный телефон — это маленький компьютер, только с модулем связи.
А автомобиль у вас есть? Тогда там вполне может быть установлен бортовой компьютер. И со всем этим хозяйством вы умеете управляться.
Банкомат. Тоже компьютер.
Платёжный терминал. Тоже.
Игры. Ничему учить не надо, сами во всём разбираетесь. Даже ухитряетесь как-то ставить их на рабочие компьютеры и играть в них, даже если игра не по-русски. Сам лично видел, как вы резались в добуцу сёги на корейском.
Но вот дело касается рабочих программ. Большинство из того, чем вы пользуетесь, по функциональности не сложнее программы банкомата. Да, даже в пресловутой жёлтой программе большинство из вас только вводят данные или даже просто на них смотрят, всю сложную обработку делают особо доверенные лица, которые как раз не жалуются. Но почему вы сразу забываете все свои умения по работе со сложной техникой? Почему не можете прочитать сообщения даже на русском? Почему с испугом смотрите на единственную кнопку? Почему в игре вы прекрасно знаете, что такое «OK», но мгновенно забываете, что это, если это вам выдаст рабочий компьютер? Впрочем, если там будет «Да», «Расчёт окончен», «Завершить», эффект будет тот же самый — барановоротный.
Нет, мы не жалуемся. Благодаря вашему нежеланию работать у начальства никогда не возникнет идеи о том, что отдел ИТ тоже можно сократить наполовину.
Некоторые полагают, что цифровая техника несколько непедагогична, поскольку позволяет исправлять сделанные ошибки, приучая к мысли о наличии такой же возможности и в жизни. Проиграв компьютерную игру, можно начать её сначала, неправильно набранный символ — стереть, и так далее.
На самом деле цифровая техника от этой мысли может и отучать. После
format С:
или
rm -rf /
обратной дороги нет (или она тернистая/дорогая), высланное «мыло» — не воробей, а попавшись на взломе, уже не «распопадёшься».
Традиционная же аналоговая техника в некоторых случаях позволяет исправлять ошибки не хуже цифровой. Магнитную фонограмму можно стирать, ловко редактировать кнопкой «трюк», ошибки в карандашных записях, чертежах и рисунках — исправлять ластиком, в масляной живописи — закрашивать неудачные фрагменты и писать поверх них. Впрочем, о непедагогичности карандаша тоже иногда говорят.
Недавно я расширил круг своих интересов эмуляцией Atari ST. Отдельная кнопка Help (хотя F1 уже есть) меня удивила не сильно. Но отдельная кнопка Undo! Вот уж действительно — пессимист разгадывает кроссворды карандашом. Может быть, потому-то и линейка машин, всю свою историю шедшая вровень с ещё не «Маками», а «Макинтошами», что по характеристикам, что по дружественности интерфейса к гуманитариям, а по дружественности к музыкантам — даже превосходящая, в начале девяностых сошла с дистанции.
Урок нам всем на будущее: не будем пессимистами! Последствия пессимизма с трудом поддаются исправлению. Хотя в данном случае поддались. Архитектура снова жива: под неё пишут опенсорс, выпускают современные аппаратные клоны и эмуляторы с лицензионно чистыми прошивками. Оптимизм победил!