Часть II

Это вторая часть (часть I) моих статей, посвященная тому, что делает программиста прагматичным. В этой статье мы сосредоточимся на этих двух характеристиках -

  1. Каменный суп и вареная лягушка. Обычно они служат катализатором перемен.
  2. Достаточно хорошее программное обеспечение: они понимают контекст, в котором они работают, поэтому они могут оценить качество программного обеспечения, которое они создают.

Каменный суп и вареные лягушки

Это одна из самых интересных историй, которые я когда-либо читал в области программирования.

Для начала позвольте мне быстро рассказать вам историю:

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

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

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

Солдаты объяснили сельчанам, что это «каменный суп». Один из жителей села спросил солдат: «Это все, что вы вложили?». Солдаты сказали: «Безусловно, но некоторые говорят, что вкус даже лучше, если мы добавим в него немного моркови». Услышав это, сельский житель убежал, вернувшись с корзиной моркови.

Через пару минут сельский житель снова спросил: «Это все?»

Солдаты сказали: «Ну, пара картошек может еще больше усилить вкус». И снова крестьянин бросился возвращаться с картошкой, которую нужно добавить в суп.

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

Наконец солдаты вынули из супа камни и сели вместе с сельскими жителями, чтобы полакомиться супом.

История о каменном супе -

  • Будьте как солдаты, действуйте как катализатор, объединяйте людей, чтобы совместно производить то, чего не могли бы достичь вы в одиночку.
  • Постарайтесь вызвать в своей команде любопытство, чтобы добиться определенного результата, как солдаты поступают с сельскими жителями.
  • В конце концов, выигрывают все. (Беспроигрышная ситуация)

Будьте катализатором перемен

Но всегда помните общую картину - Вареные лягушки

Это метафора неспособности людей реагировать на существенные изменения / события, которые происходят постепенно. У Вареной лягушки есть 2 сценария -

  1. Бросьте лягушку в кипящую воду, она тут же прыгнет.
  2. Положите лягушку в кастрюлю с холодной водой, затем постепенно нагревайте, лягушка не заметит изменения температуры и останется там до готовности.

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

Достаточно хорошее программное обеспечение

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

Обычно при написании программного обеспечения для других людей нужно помнить о том, чтобы получать от них требования. Мы должны помнить, что мы должны поставлять программное обеспечение, которое удовлетворяет потребности всех участников системы (от начала до конца). Мы не призываем к панике: так же непрофессионально обещать невозможные временные рамки и сокращать основные инженерные углы, чтобы уложиться в срок. Скорее, объем и качество создаваемой системы должны быть указаны как часть требований к этой системе.

Сделать качество проблемой требований

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

Есть еще несколько ключевых аспектов прагматичного программиста, которые я обсуждал в следующих статьях:

- Кот съел мой исходный код (Часть I)
- Программная энтропия (Часть I)
- Портфолио знаний (Часть III)
- Общение (Часть III)

На основе: Прагматичный программист - Эндрю Хант, Дэвид Томас