- PVSM.RU - https://www.pvsm.ru -
Начну с истории о программистах, которую мне приходилось слышать неоднократно.
Я попросил Джо написать простенькую программу, которая делает <xyz>. Работы там было на несколько часов, в худшем случае на день. Ему понадобилось несколько дней, за который он написал гораздо более сложный фреймворк, чем требовалось. Почему он снова так намудрил?
Возможно, дело в том, что Джо – Абстрактно ориентированный программист (АОП) .
Вот несколько шаблонных фраз (snowclones [1])
Если вы часто усложняете свои программы, возможно вы АОП.
Если вы проводите больше времени, размышляя о завтрашних проблемах, чем о текущих, возможно, вы АОП>.
Если вам нравится искать глубинные взаимосвязи, ощущать приятную дрожь от бессознательных озарений или рассуждать аналогиями, возможно, вы АОП.
Разработка программного обеспечения – одно из немногих занятий в котором постоянно приходится иметь дело с абстракциями. Языки программирования, типы данных, графические представления, потоки управления и т.д. являются абстракциями реального мира, абстракциями аппаратного обеспечения и часто абстракциями абстракций.
Резкий рост производительности процессоров (в соответствии с законом Мура [2]) рождает потребность в абстракциях. Я начинал программировать на компьютерах с процессорами, счет транзисторов в которых шел на сотни. У Motorolla 6800 было 4100 транзисторов и тактовая частота 1-2 мегагерца. Zilog Z80 имел 8500 транзисторов и частоту 2-8 МГц. Понимание работы регистров процессора, прерываний и других в каком-то смысле физических процессов очень сильно помогало, когда требовалось заставить эти компьютеры делать что-нибудь действительно полезное.
Сейчас в массовое производство запущены процессоры с миллиардом или около того транзисторов. Например Intel Core i7 содержит около миллиарда транзисторов, и имеет тактовую частоту 2-3.5 ГГц.
Это, примерно, в миллиард раз превосходит вычислительную мощность компьютеров тридцатилетней давности. Человек же так заметно эволюционировать не сумел. Возникла необходимость эффективно использовать прирост мощности процессоров. Тут-то и появились компиляторы, виртуальные машины, сложные интерфейсы, всевозможные оптимизаторы, высокоуровневые языки программирования и другие инструменты. Между аппаратным обеспечением и современными программами лежит множество слоев абстракции. И, конечно же, они необходимы.
Таким образом, нет ничего удивительного в том, что программирование привлекает людей со склонностью к абстрактному мышлению… и, возможно, человек с абстрактным
Но, рассуждая подобным образом, очень легко забыть, что не всем людям свойственно абстрактное
Для начала рассмотрим определения
Абстрактный (прилагательное)
Абстракция (существительное)
Абстракции – это по определению упрощение информации, которое достигается рассмотрением большого количества примеров и сжатием их в общий шаблон.
Для некоторых людей естественно абстрактное
Рассмотрим индикатор типов личности Майерс-Бриггс [4], который широко используется в бизнесе. Индикатор позволяет определить четыре типа личности, которые подразделяются на основанные на интуиции и здравом смысле (N и S, если использовать обозначения типологии) – соответственно на абстрактное и конкретное
Перечислим некоторые особенности, проявляющиеся при абстрактном и конкретном
Ввиду того, что многие люди подстраивают свое поведение под обстоятельства, вы также можете трактовать приведенную информацию как абстрактное или конкретное текущее состояние сознания, хотя считается, что каждый человек имеет доминирующую склонность.
Вернемся к истории о Джо, с которой начиналась данная статья, где он усложнял код. Для абстрактно ориентированного программиста тут все логично
Однако, когда во время общения с Джо мы попросили его решить только задачу X, в то время как он знал, что в будущем Y и Z неминуемы, мы обрекли его на расстройство из-за некачественно выполненной работы или даже уверенность, что в будущем его сделают крайним.
Здесь на первый план выходит текущая ситуация. Умение думать наперед может сделать из вас героя. Также умение думать наперед с легкостью превратит вас в обузу. Концентрируясь же исключительно на сиюминутных проблемах, вы станете героем… или обузой.
Весь фокус в понимании, какой подход будет уместным в той или иной ситуации, проще говоря, адаптируйтесь.
Также очень важно согласовывать выбранную стратегию с коллегами, другими словами, общайтесь.
Приведу некоторые отзывы, которые я слышал об абстрактно ориентированных программистах…
… и то же самое про конкретно ориентированных программистов (КОП)
Список А. Сколько из приведенных в нем пунктов описывают вас наилучшим образом? (Отвечайте не задумываясь)
Список Б. Сколько из приведенных в нем пунктов описывают вас наилучшим образом?
Если вы согласились с бо́льшим числом пунктов из списка А, чем Б, вы, должно быть, абстрактно ориентированы. И наоборот, если преобладали утверждения из списка Б, вы относитесь к конкретному типу личности.
[Сразу хочу оговориться. Во-первых, тип личности – это не судьба. Очень часто жизнь требует от нас адаптировать свое поведение ради семьи, работы, друзей и т.п. Во-вторых, вполне может оказаться, что в зависимости от вашей текущей ситуации вы можете отвечать на одни и те же вопросы по-разному. В-третьих, речь идет об описании вашего доминирующего стиля
Несколько лет назад я услышал хорошую аналогию. Вы можете быть правшой или левшой. Большинство людей используют одну руку в качестве основной, некоторые свободно владеют обеими. Но только из того, что кто-то чаще пользуется правой рукой, не следует, что ему вообще не нужна левая. Кроме того, некоторые задачи требуют использования определенной руки – попробуйте воспользоваться ножницами для правшей левой рукой или вести машину, переключая скорости не той рукой, которая предполагалась производителем.
Мы все умеем обращаться как с фактами, так и с обобщенными шаблонами, но чаще имеем склонность к чему-то одному. Точно так же, существуют задачи, для решения которых больше подходит определенный тип
Вот несколько примеров задач, в которых отдается предпочтение определенным типам
Я не ставил перед собой цели показать, какой стиль
Будучи стопроцентным абстракционистом, хочу закончить прекрасным примером абстрактного
Все обобщения ложны. Включая это. Марк Твен
А Марк Твен был абстрактно ориентированным писателем…
Автор: vadim_ig
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/53032
Ссылки в тексте:
[1] snowclones: http://en.wikipedia.org/wiki/Snowclone
[2] законом Мура: http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9C%D1%83%D1%80%D0%B0
[3] мышлением: http://www.braintools.ru
[4] Майерс-Бриггс: http://www.myersbriggs.org/
[5] Источник: http://habrahabr.ru/post/209386/
Нажмите здесь для печати.