среда, 23 марта 2016 г.

О метафорах

Когда читаешь компьютерные или околокомпьютерные книги и издания иного рода, иногда, более-менее часто, сталкиваешься с метафорами.

Метафоры по своему назначению есть проведение параллели между разработкой и чем-то иным. Считается что упрощенное описание иной предметной области помогает понять компьютерную проблему. Может быть.

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

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

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

В некоторых источниках разработка программ сравнивается со строительством дома. Я не строитель. Могу выполнять работы по столярке или электрике. Но понимать строительство, его особенности и взаимосвязи внутри процесса строительства в целом еще ни разу не пришлось. Что мне может дать строительная метафора? Разве что запутать непонятным для меня сопоставлением.

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

В некоторых книгах разработку программ сравнивают с вождением автомобиля. Такое впечатление, что автор считает что все на свете должны понимать что такое автомобиль. Я не вожу автомобиль, абсолютно к ним равнодушен, у меня нет авто и прав на вождение. Я водил мотоциклы, танки, каноэ, шлюпки и моторные лодки. Но никогда не водил автомобили. Если я нахожусь внутри автомобиля - то на пассажирском сидении, и внимательно слежу за присутствием бензина в воздухе, иначе поездка прервется и мне будет плохо часа три. Мне все равно, внутри какого именно автомобиля я еду, для меня это лишь транспорт. И мне все равно кто и как им управляет. Меня больше заботит наличие паров бензина. Сравнение разработки программ с вождением автомобиля для меня выглядит как издевательство над мозгом. Очень неудачная метафора.

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

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

Практическое большинство метафор опирается на сравнение с явлениями или процессами, которые известны большинству людей. Но для разработки программ это неверно. Если, например, водитель автобуса выходит на работу, то он точно знает, что он будет делать и как именно. У него есть несколько скоростей, руль, газ, тормоз, дороги, другие машины и светофоры. Это было вчера, есть сегодня и будет завтра. Если у него автобус развалится пополам, то он точно знает, что ему не придется его собирать по частям. Он не будет делать ничего, что ему неизвестно. Дороги не изменяются каждый день. И даже каждый год. Правила вождения неизменны годами. Если водитель автобуса попадет в затруднение, он может обратитсья к кому угодно. Что из этого подходит программисту? Ничего.

Программист не повторяет того, что делал вчера. Потому что есть копирование. И завтра не будет делать то, что делал сегодня. Сегодня программист может делать программу, которой он сам же будет пользоваться завтра и его возможности изменятся. По некоторым темам программисту не сможет помочь кто угодно. Через год или два "дороги" и "правила" для программиста могут поменяться кардинально. Если водитель автобуса может сказать, как он будет работать завтра, через месяц и через год, то программист зачастую не знает, что именно он будет делать через неделю. Что дает метафора, сравнивающая водителя автобуса с программистом? Очень неудачная метафора.

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

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

В строительстве штукатуры не изобретают решение проблемы для каждого квадратного метра. Они все одинаковые. А в программировании программисты не занимаются повторением уже сделанного. Если две части одинаковые, то программист сделает только одну. Функция будет вызываться из двух мест. В программировании стоимость получения копии - копеечная. И метафоры с повторением сделанного ранее для программирования очень неудачны.

Метафора сравнения с литературой тоже очень неудачная. Во всяком случае я не видел выхода книг альфа, бета и релизной версии, которые потом модернизируются с изменением нескольких абзацев с требованием к читателям обязательно перечитать всю книгу следующей версии полностью. Книга если выходит, то для читателей она остается именно в таком варианте. Литературная метафора очень неудачна.

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

Может быть, когда-нибудь, в руководствах для непрограммистов будут метафоры из области разработки программ? Представляете себе метафору, например, для милиционера-регулировщика, которому поясняют ситуацию на примере дедлоков в СУБД? Смешно? Как знать, будущее приближается...

Постскрипт (не язык разметки документов от компании Adobe):
  • Ни разу не видел выполнение одного проекта двумя разными методами, чтобы сравнить именно методы. Ни разу не видел, чтобы собачьи будки строили по той же методике что и небоскребы. Интересно, почему у строителей хватает ума, а у программистов его быть не должно?
  • На моем рабочем столе нет иконок. На моем рабочем столе есть компьютер, телефон, стойка с CD, колонки, пепельница, сигареты, зажигалка, кружка, флешка, два сувенира, бумажки и карандаш.
  • Ни разу не видел чтобы на рабочий стол наклеивались обои для стен. В Microsoft столы обклеены?
  • Ни разу не видел, чтобы в одну папку вкладывали другую, а в нее третью. Зачем каталоги называть папками?
  • Забавно, но до сих пор полоса прокрутки прокручивает все экраны в противоположном направлении. Если взять за край листа и потянуть вниз, то лист будет двигаться вниз. В компьютерах двигаешь скролл вниз - изображение двигается вверх.
  • Если у кого-то и стоят на рабочем столе иконки - то они как раз наименее функциональные предметы. При их трогании ничего не происходит. И их обычно немного. И они в красивых рамочках.
  • У меня нет корзины для бумаг. Я вообще работаю с безбумажными технологиями, а пара бумажек с каракулями примерно раз в полгода отправляются туда же куда и содержимое пепельницы, но пепельница моется и намного чаще. Кстати, часть мелкого мусора попадает сначала в пепельницу. Я не восстанавливаю и не храню выброшенное в мусор.
  • Я очень редко пользуюсь заведениями общественного питания и слово "меню" для меня много лет является не метафорой, а самостоятельным техническим термином, не имеющим к пунктам общественного питания никакого отношения, но по какой-то странной случайности совпадающим по звучанию.
  • Проводников видел только в поездах. В самолете их называют стюардами или стюардессами. В течении поездки проводников я в основном не вижу, или они занимаются своими делами. Но никак не моими. Если мне надо что-то сделать, я делаю сам.
  • Если мне надо куда-то попасть, то я открываю двери, а не окна.

Комментариев нет:

Отправить комментарий