Почему инструкторы по вождению не любят программистов
— А кем ты работаешь?
— Программистом.
— Ааа, понятно…
Вот такой диалог случился у меня с инструктором, когда я в очередной раз затупил на дороге. Собственно, я уже догадывался, что иногда ошибаюсь из-за профессиональной деформации. И то что так туплю не только я (по словам инструктора на программистов он часто жалуется), лишний раз подтвердило догадку.
Что именно вызывало мои ошибки (имхо) под катом.
PS Не буду пытаться экстраполировать. И расскажу лишь о том, что у меня вызывало проблемы из-за проф деформации, буду рад обмену опытом.
PPS Как всегда, я выкладываю статью сыроватой и постараюсь довести её если не до блеска, то хоть до безшершавности в процессе дискуссии и интерактивных вычиток.
Профессиональная паранойя или негативный поиск
Начиная работу над задачей, я сразу пытаюсь просчитать всё дерево ситуаций.
Я привык, что всё что может пройти неправильно пойдёт именно так. Пользователь нажмет кнопку с надписью не нажимать. Сервер мне вернёт пустую запись справочника, в котором «всегда есть данные», а яндекс браузер отработает стили немного не так как хром. Это моя паранойя и я ей наслаждаюсь. Там где джун потратит неделю на обкостыливание ошибки, я просто избегу проблемы на этапе проектирования.
И вот я на дороге. И тут громадное количество сущностей, которые могут выкинуть еxception, обязательно на моей траектории.
Да, инструктор говорит, что эта машина не поедет прямо, даже если не включила поворотник. Только потому, что ей неудобно это сделать из правого ряда. Реально? У меня пользователи с двумя вышними ухитряются на показе ооочень высокому руководству такое ткнуть… Если бы не моя паранойя…
Инструктор утверждает, что это опасный тип с сигаретой на краю тротуара, когда докурит не броситься перебегать дорогу перед нами. Тут же нет зебры. Да ладно?! Я бы не доверял никотиновым наркоманам, они самые опасные, их много (сам курил знаю).
И, главное, что нужно анализировать не только опасности, но и то что опасности не представляет. И быстро. А я так горжусь своей паранойей…
Самоё смешное, что по работе, я анализирую гораздо больше сущностей. Сущностей сложных, не формализованных, не синхронизированных… И делаю это чуть медленнее, чем мгновенно. Ещё не дочитал постановку, а прикидываю, что вот тут дополнительную проверку, тут жёстко задавить эксепшены (иногда и так надо), а вот тут, в некотором случае, мне будет не хватать данных, и надо докопаться до коллег, чтобы поменяли интерфейсы.
Я параноидален, поэтому эффективен. Я взял задачу, посчитал все риски и смело запилил фичу.
И это даёт ещё одну проблему на дороге.
Доверие моделированию
Со временем я учусь категоризировать объекты дорожного движения. Я вовремя замечаю знаки приоритета. Вижу, что тётка не успевает на пешеходник, даже если ускориться. Что перестроится можно сразу после зебры, потому что перед ней сплошная. Что успеваю выехать на круг, до того как помешают машины слева, а те, кто справа уже будут пропускать меня. Что дальше небольшой затор и нужно будет переключиться на вторую и… Блин!!! Откуда здесь трамвай???
Это тоже профессионально фишка. Я посчитал все известные угрозы и теперь без тени сомнения… лезу под трамвай.
Да, это тоже моё конкурентное преимущество. Я пишу код очень быстро. Почти не думаю над текущими строками. Я их уже мысленно написал и уже впереди на несколько ненаписанных строк. Более того я уже думаю над рефакторингом для повышения читаемость ещё того, что только набирается… А тут, сцуко, трамвай.
Профессионально, я не должен сомневаться, когда пишу код. Даже если я что то делаю неправильно, лучше дописать фрагмент, а потом что то править. Я уже потратил (и порой до фига) оплаченного рабочего времени, для того, чтобы в голове сложилась картинка. И я обязан её зафиксировать на полях кодом. А любые сомнения приведут остановке и вероятному тупняку, возможно в паре мелких правок от решения. Потому пишу код не думая, это вредно… Если что, не так посмотрю-поправлю.
Но, как водитель, я не имею права игнорировать трамвай. Или маленький пешеходный светофор, который, гад такой, может внезапно переключиться, пока просчитываю как буду пролезать в заторе, что метрах в 40 впереди.
Пишу себе скрипты после таких ляпов. Выискивать трамвайные пути и железных слонопотамов на них. Или добавлять в маршрут глаз ещё обязательный взгляд вверх до/после перекрёстка/зебры (чтобы поймать недопроеханный светофор).
И это работает… Осталось не забыть, что есть ещё железнодорожные переезды.
Кстати об алгоритмах
Поспорил недавно с инструктором. Когда он попытался навтыкать мне за включенную повторно передачу.
На прошлом занятии мне справедливо подъели мозг за суету. «Не то страшно, что заглох, а то, что сразу не поехал». Я проникся и… накидал себе скрипт.
И вот я снова глохну, но готов: аварийка, сцепление, завести, первая передача, тронуться, — аварийка, вторая. Едем. Я молодец. А инструктор кипит будто я его маму на пешеходном не пропустил.
— Ты зачем 1 передачу включил?
— Чтобы ехать.
— А на какой был?
— На первой.
— И зачем первую включать???
Ну как объяснить ему, что это два разных скрипта, зависящих от внешнего фактора, который дешевле игнорировать, чем учитывать. А в идеале это 5 разных скриптов, на каждую передачу по одному. Ради исключения действия, на которое я трачу секунду-две? И которое нужно в половине случаев, так столько же глохну на второй/третьей сколько на первой. И в будущем (я надеюсь) этот алгоритм станет очень редким (особенно если сяду на автомат).
Он же не профессионал, он этого не поймёт, быстро…
Скриптование
Вообще я больше 30 лет общаюсь с компьютерами, более 20 лет мне за это платят деньги. Моя работа перевод бизнес процессов (и/или фантазий заказчиков) на язык «умных железок». Я привык думать как компьютер, И это сказывается.
Только я начал писать себе маленькие «скрипты по вождению», как обучение пошло на лад. Например, я забывал посмотреть налево при повороте направо даже видя знак «уступи дорогу». Но как только я включил поворот головы в алгоритм, у меня почти не осталось шансов не заметить какого-нибудь козла слева, который не боится учебной машины.
Я сразу очутился в привычной среде. Я набрасываю скрипты, ловлю в них баги, добавляю триггера, убираю излишнюю оптимизацию и деталировку (это опасно). За три занятия, после «великого открытия» скриптов, я продвинулся больше, чем за предыдущие семь. Другое дело, что и инструктор и даже правила дорожного движения предлагали мне заняться этим с самого начала. Подсказывая алгоритмы и рассказывая, что именно алгоритмами решаются многие задачи.
Но дело, не в том, что я такой умный, что не позволял другим подумать за себя. Просто представьте пользователя unix, который выучил только ls и cat, а ему предлагают пробросить тунель по ssh, попутно выкусив awk’ом динамические настройки из конфигурации.
Если бы я заранее выучил алгоритмы вождения, то это бы мне не помогло. Просто потому, что надо не только знать скрипт, но и в какой папке он лежит. А если ты ещё сам написал или хотя бы пошагово проверил скрипт, ему сложнее выскользнуть из памяти.
И самое главное, тут как в парашютном спорте, свой парашют ты должен сложить сам, чтобы сам проверил, нет ли где лишней складки или конденсата. А если есть, то поинтересовался у инструктора откуда оно, нужно ли и зачем. Потому что если ты что-то не понимаешь, то скорее всего глупо рискуешь.
Кстати, об ошибках.
Обратная глубокая ретроспектива
Знаете, что меня вгоняет в серьёзный ступор?
Когда инструктор спрашивает, что я не так сделал. Или, хуже того, почему.
Яжпрограммист, у меня рефлекс, что 70% ошибок появившихся в системе — это мои последние действия (а 20% последние действия коллег). Поэтому когда, что-то пошло не так, часто полезно отмотать сделанные изменения и представить, чем они могли сломать хорошую вещь.
И вот инструктор задаёт мой вопрос. И начинаю загоняться. Перестроился — норм, поворотник включил/выключил, передачу воткнул херовато, но это минор, повернул норм, поворотник включил — норм, к повороту держался близко, притормозил поздновато –, но это уже давно. Так, по новой перестроение, поворотник…
Да я понимаю, что ошибка в скорее всего самом последнем действии, но если не вижу косяка сразу, у меня уже начинает работать аналитический аппарат ретроспективы, хочу я этого или нет.
Но я заскриптовал эту ситуацию тоже. Если не могу за секунду-две найти косяк, нагло вру, что всё сделал вроде ок. И тогда инструктор перестаёт жрать мои ресурсы мозга и раскалывается, что я проехал по разметки стоянки. Вот блин, … интрига. Но вроде проехали ситуацию.
А инструктор добивает меня: И зачем ты это сделал? Оууууууууоооо, зачем ты это спросил???
Ну и последнее в списке, но не последнее по значимости, потому что я от этого буду изавляться долго.
Центр экрана
Да! Я переиграл в своё время в гонялки. Ещё та самая 4хцветная Формула-1, DeathTrack, первая IndyCar (до чего же там было адреналиновое управление, даже с клавиатуры чувствовалось, как с трудом удерживаешь машину) и куча более нового, но меньше потратившего моего времени.
И, как вы догадались, у всего этого руль был по центру машины. Либо был режим переключения на вид по центру. И проблемы габаритов и езды в полосе… проблемами не были.
И если габариты более менее удалось «прочувствовать», то вот в левую полосу разметки ряда меня сносит… мягко, постоянно и неожиданно. И ничего не сделаешь, только нарабатывать реальные, а не игрушечные навыки.
Удачи на дорогах (и поосторожнее, я ещё учусь и раздражаю вас).