18 января 2014 в 14:13

Абстрактно ориентированный программист перевод

Начну с истории о программистах, которую мне приходилось слышать неоднократно.

Я попросил Джо написать простенькую программу, которая делает <xyz>. Работы там было на несколько часов, в худшем случае на день. Ему понадобилось несколько дней, за который он написал гораздо более сложный фреймворк, чем требовалось. Почему он снова так намудрил?

Возможно, дело в том, что Джо – Абстрактно ориентированный программист (АОП) .
Вот несколько шаблонных фраз (snowclones)

Если вы часто усложняете (over-engineer) свои программы, возможно вы АОП.

Если вы проводите больше времени, размышляя о завтрашних проблемах, чем о текущих, возможно, вы АОП>.

Если вам нравится искать глубинные взаимосвязи, ощущать приятную дрожь от бессознательных озарений или рассуждать аналогиями, возможно, вы АОП.

Необходимость абстракций

Разработка программного обеспечения – одно из немногих занятий в котором постоянно приходится иметь дело с абстракциями. Языки программирования, типы данных, графические представления, потоки управления и т.д. являются абстракциями реального мира, абстракциями аппаратного обеспечения и часто абстракциями абстракций.

Резкий рост производительности процессоров (в соответствии с законом Мура) рождает потребность в абстракциях. Я начинал программировать на компьютерах с процессорами, счет транзисторов в которых шел на сотни. У Motorolla 6800 было 4100 транзисторов и тактовая частота 1-2 мегагерца. Zilog Z80 имел 8500 транзисторов и частоту 2-8 МГц. Понимание работы регистров процессора, прерываний и других в каком-то смысле физических процессов очень сильно помогало, когда требовалось заставить эти компьютеры делать что-нибудь действительно полезное.

Сейчас в массовое производство запущены процессоры с миллиардом или около того транзисторов. Например Intel Core i7 содержит около миллиарда транзисторов, и имеет тактовую частоту 2-3.5 ГГц.

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

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

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

Абстрактное мышление

Для начала рассмотрим определения
Абстрактный (прилагательное)
  • отвлеченный, не связанный с непосредственным восприятием реального мира (т.е. фактами)
  • не прикладной или практический, теоретический

Абстракция (существительное)
  • процесс формулирования обобщенных идей или концепций посредством извлечения общих свойств или закономерностей из определенного набора примеров

Абстракции – это по определению упрощение информации, которое достигается рассмотрением большого количества примеров и сжатием их в общий шаблон.

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

Рассмотрим индикатор типов личности Майерс-Бриггс, который широко используется в бизнесе. Индикатор позволяет определить четыре типа личности, которые подразделяются на основанные на интуиции и здравом смысле (N и S, если использовать обозначения типологии) – соответственно на абстрактное и конкретное мышление. (Существуют другие психологические исследования с похожим разделением типов личности)

Перечислим некоторые особенности, проявляющиеся при абстрактном и конкретном мышлении.

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

Признаки абстрактного/интуитивного мышления

  • Мысли и идеи
  • Чтение между строк
  • Жизнь будущим – бо́льшая заинтересованность проявляется по отношению к будущим возможностям
  • Лучше запоминаются шаблоны, контекст и взаимосвязи
  • Комфортно себя чувствуешь, работая с неопределенными размытыми данными, когда приходится угадывать их смысл
  • Большее доверие проявляется к абстрактной или теоретической информации, взаимосвязям и шаблонам

Признаки конкретного мышления

  • Реальные объекты и вещи
  • Чтение самих строк
  • Фокусировка на «здесь и сейчас»
  • В памяти хранится большое количество деталей и фактов
  • Предпочтение отдается четкой и точной информации, не нравится выдвигать догадки, когда нет четких фактов
  • Предпочтение отдается информации в настоящем времени, которую можно ощутить одним из пяти чувств
  • Недоверие к догадкам, которые, кажется, появились из неоткуда.

Вернемся к Джо

Вернемся к истории о Джо, с которой начиналась данная статья, где он усложнял (over-engineer) код. Для абстрактно ориентированного программиста тут все логично
  • Сегодня мы имеем проблему X
  • X – это отдельный пример более общего класса задач, который также включает Y и Z
  • Чтобы проблемы Y и Z не случились в будущем, я должен написать код, который решает X, Y и Z


Однако, когда во время общения с Джо мы попросили его решить только задачу X, в то время как он знал, что в будущем Y и Z неминуемы, мы обрекли его на расстройство из-за некачественно выполненной работы или даже уверенность, что в будущем его сделают крайним.

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

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

Также очень важно согласовывать выбранную стратегию с коллегами, другими словами, общайтесь.

Приведу некоторые отзывы, которые я слышал об абстрактно ориентированных программистах…

Позитив

  • Она берется за плохо поставленные задачи и прекрасно с ними справляется
  • Он глубоко продумывает проблему, в результате предлагая элегантные решения
  • Она постоянно пробует разные приемы в поисках лучшего подхода
  • Команда (АОП) неожиданно выдвинула ряд прекрасных идей

Негатив

  • Он постоянно сражается с будущими проблемами, я не могу заставить его сделать быструю правку, когда это необходимо
  • Она часто сильно усложняет (over-engineer) свой код. Иногда мне нужен просто быстрый хак.
  • Он постоянно пытается переписать всю нашу кодовую базу. Унаследованный код работает – просто оставь его в покое.
  • Почему она не следует общему плану работ
  • Совещания нашей команды (АОП) постоянно уходят от насущных проблем. Конечно, обсуждения получаются интересными, но нам нужно сконцентрироваться на решаемой задаче.


… и то же самое про конкретно ориентированных программистов (КОП)

Позитив

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

Негатив

  • Его код решает узкий круг задач. Этого достаточно, чтобы пройти тесты, но мало для реального использования
  • Ее код негибок и труден в сопровождении. Каждый раз при добавлении новой функции мы вынуждены все переписывать заново.
  • Он ничего не видит за пределами текущей задачи. Его код не протянет долго.


Мини тест

Список А. Сколько из приведенных в нем пунктов описывают вас наилучшим образом? (Отвечайте не задумываясь)

  1. Вас больше интересует идея в общем, чем тонкости ее реализации
  2. Вы часто задумываетесь о судьбе человечества
  3. Вы с легкостью выделяете общие закономерности из конкретных примеров
  4. Вы часто рассуждаете о сложности жизни
  5. Вы считаете, что практически все поддается анализу
  6. Вы с легкостью понимаете новые теоретические принципы
  7. Вы часто проводите время за размышлениями, как сделать что-либо лучше
  8. Вы с легкостью просчитываете разные пути, по которым может пойти развитие ситуации

Список Б. Сколько из приведенных в нем пунктов описывают вас наилучшим образом?

  1. Вам скучно читать теоретические книги
  2. Вы предпочитаете опираться на свой опыт, а не на теоретические альтернативы
  3. Для вас важно пробовать сделать что-то своими руками
  4. Анализируя ситуацию, вы основное внимание уделяете текущему ее состоянию, а не возможным последствиям
  5. Как правило, текущие занятия волнуют вас больше, чем планы на будущее

Если вы согласились с бо́льшим числом пунктов из списка А, чем Б, вы, должно быть, абстрактно ориентированы. И наоборот, если преобладали утверждения из списка Б, вы относитесь к конкретному типу личности.

[Сразу хочу оговориться. Во-первых, тип личности – это не судьба. Очень часто жизнь требует от нас адаптировать свое поведение ради семьи, работы, друзей и т.п. Во-вторых, вполне может оказаться, что в зависимости от вашей текущей ситуации вы можете отвечать на одни и те же вопросы по-разному. В-третьих, речь идет об описании вашего доминирующего стиля мышления – не нужно воспринимать это как призыв к действию.]

Адаптируем мышление

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

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

Вот несколько примеров задач, в которых отдается предпочтение определенным типам мышления (все они являются обобщениями)

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


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

Будучи стопроцентным абстракционистом, хочу закончить прекрасным примером абстрактного мышления

Все обобщения ложны. Включая это. Марк Твен

А Марк Твен был абстрактно ориентированным писателем…
Желающие могут сообщить о своей преобладающей ориентации

Проголосовало 1310 человек. Воздержалось 278 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Автор оригинала: Andrew Hunt
Андросов Вадим @vadim_ig
карма
53,2
рейтинг 0,1
Похожие публикации
Самое читаемое Разработка

Комментарии (84)

  • +1
    Улыбнуло. Почем в статье нет переходного типа (понятно, что об этом статья, и что надо «адаптироваться»), но всё же, какую аббревиатуру Вы бы придумали для такого типа?
    • +2
      НТНС — «ни то ни сё»
      Причем, мне кажется, это довольно многочисленная группа :)
      • 0
        Собственно вы рассматриваете АОП как крайность, а это абстрактная, крайность которой не существует в реальном мире. :)
    • 0
      Почем в статье нет переходного типа


      Много лет назад заметил, что стиль программистов сильно и полярно различается в зависимости от цвета логики по соционике. В контексте статьи почти 100% корреляция с тем, что я писал на эту тему у себя на форуме в 2005-м. АОП — это почти точное описание белологичных программистов, КОП — это чёрная логика. А вот серой логики, увы, не бывает :) Можно в процессе саморазвития наработать способность эффективно контролировать свои недостатки, но тенденция всё равно останется.

      Могу ещё добавить такие наблюдения (отчасти пересекаются с высказанном выше). БЛ-программисты (АОП) отлично прорабатывают каркас продукта, но затыкаются на его внешнем виде. Код красив, удобно организован, но продукт получается ужасно оформлен и часто неудобен в использовании. ЧЛ (КОП) — наоборот. Пишут ужасный код, часто переписывают всю систему с нуля (и им это не лениво!), внутри это кошмар из категории «ткни пальцем — развалится». Зато программы часто имеют качественный пользовательский интерфейс, удобны в использовании, даже нередко красивы…

      Сам я, если что, чистый незамутнённый АОП :) А главный лозунг, который сейчас (в другие периоды бывали и другие) позволяет бороться с недостатками — «преждевременная оптимизация — зло».
      • 0
        ну не знаю! я ни к тем ни к тем себя не отношу, т.к. каждый проект требует чего-то своего. Пример: если я пишу что-то под андройд, я не заморачиваюсь о коде, главное что бы работало так как я хотел, дебаггинг занимает минимум времени( я не ас в этой стезе) и конечно пользовательский интерфейс стараюсь делать презентабельным. А если под C++ скрипт для которого практически не нужен gui, то стараюсь написать код невероятно гибким, что бы в дальнейшем не переписывать его, а дополнять.
        • +1
          >я ни к тем ни к тем себя не отношу, т.к. каждый проект требует чего-то своего.

          Однако, общее предпочтение должно быть. Просто вопрос самопонимания :)
      • –1
        Интересно. Я — Робеспьер по тиму, т.е. черная логика должна превалировать, если я правильно понимаю, но не настолько АОП все же. :) Где-то посередине, ближе даже к КОП последнее время, когда стал замечать что перебарщиваю местами и стал с этим бороться. Хотя, возможно, я просто не видел код настоящих КОПов. :)
        А интерфейсы действительно качественные делаю. :)
        • –1
          >Я — Робеспьер по тиму, т.е. черная логика должна превалировать

          Робеспьер — это базовая БЛ.

          >А интерфейсы действительно качественные делаю

          Тогда Вы — первый роб, встреченный мной который это умеет :) (я сам не умею, например, как и множество других знакомых этого ТИМа).
          • –1
            Насчет логики — да, перепутал, действительно белая превалирует.
            От природы мне действительно свойственно АОП, но я, видимо, как раз из адаптировавшихся. Научился общаться с клиентами (я — фрилансер), увлекся юзабилити и интерфейсами и вообще старался разносторонне развиваться. :) Ну и на некоторых проектах научился тому что попытки решать еще не возникшие проблемы часто выходят боком. В итоге думаю что правильнее всего соблюдать баланс — т.к. и та и другая крайность плоха (хотя АОП популярнее и на первый взгляд выглядит лучше :) ).
            Кстати, и насчет примера с руками у меня тоже все нестандартно. Пишу я правой рукой, но в карты играю левой. Просто видимо так научился в свое время. Со сноубордом тоже долго не мог понять как же мне все-таки удобнее. :)
            • –1
              От природы мне действительно свойственно АОП, но я, видимо, как раз из адаптировавшихся


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

              В итоге думаю что правильнее всего соблюдать баланс — т.к. и та и другая крайность плоха


              Да, для ЛИИ привычное дело. Я, вон, ещё до знакомства с соционикой, 12 лет пробыв под ником-аббревиатурой, переименовался в Balancer'а, ибо оно лучше отражает сущность ;)
      • 0
        Доктор, я — этик, что делать?
        (для тех кто не в теме, этики — противоположность логикам)
        • 0
          Этику программировать несколько сложнее, чем логику. Но не невозможно. У меня друг был, этик (дост, ЭИИ), вполне приличный программист.

          Соционический тип указывает только на тип переработки информации, откуда можно делать определённые предположения о склонностях. Но он никак не говорит на возможность или невозможность заниматься тем или иным делом.
          • 0
            Это я к тому, что все сложнее, чем деление на цвета логики. Я применяю оба подхода в зависимости от текущей задачи и… общего настроя (к сожалению так)
            • 0
              Даже чистый БЛ будет, естественно, использовать ЧЛ там, где надо. Когда нужно поменять кран в ванной, я не сажусь теоретизировать на тему коррозионной стойкости материалов, а иду в хозяйственный магазин.

              Речь именно о предпочтениях. Вот они отличаться будут.
              • 0
                Есть ещё Интуиция/Сенсорика, которая влияет на ориентацию во времени и пространстве, следовательно тоже влияет на выбор подхода. А ещё есть Рационализм/Иррационализм, и это тоже влияет.
  • +21
    Почему-то различное число вопросов в минитесте создает впечатление что в нем есть подвох.
    • +6
      Ага! Читаете между строк. Так и запишем.
    • +2
      Взглянул на оба списка — мне каждый пункт подходит. Эффект Барнума в действии.
      • 0
        Взглянул на оба списка — мне каждый пункт подходит. Эффект Барнума в действии.


        С ним очень легко бороться. Достаточно оценивать не по шкале ДА/НЕТ, а хотя бы по пятибальной шкале. Потом складывать. И, конечно, оценивать все тезицы, а не только выборочные.

        Также важно (и это реально трудно!) отличать то, что тебе кажется правильным от того, как ты поступаешь реально. У большинства людей это разные категории.
        • 0
          > С ним очень легко бороться.
          и
          > Также важно (и это реально трудно!) отличать

          :)
          • 0
            Первое легко, но требует лишней работы через суммирование.

            Второе сложнее, но позволяет оценивать соответствие «на глаз».
  • +2
    Имхо есть разные типы усложнений, врятли их можно все в одну кучу пихать. Скорее оба типа людей обозначенные в статье усложняют по своему.
    Например код КОП может быть технически простым (длинная простыня без попыток выцепить повторяющиеся фрагменты, понять где еще в программе такое же происходит и так далее — такой код легко читать не вникая в контекст всего приложения), но изза того что над ним мало думали (зачем думать над простыми вещами?) он будет логически сложен (запутанные условия, много лишних состояний, условия которые не имеют смысла) в результате делая такой код сложнее для обобщения и соответственно поддержки.
    В свою очередь код АОП может быть логическим простым (состояний ровно столько сколько нужно, вылизанные условия, алгоритм реализован кристально чисто) но технически сложным (используются технические навороты аля дабл-диспатч, декомпозиция на многие классы) что для людей которые не хотят вникать в контекст проблемы будет выглядить чрезмерно сложным в плане начального понимания.
    В какой сложности истина я не знаю, но рутину не люблю, поэтому предпочитаю АОП ).
    • +2
      Хотя статья именно об этом, невнимательно читал ).
    • +3
      Как по мне, то использование декомпозиции только улучшает читаемость. Читая простыню нужно поневоле вникать в детали реализации, а декомпозированный на объекты или процедуры код (при условии отсутствия неожиданных побочных эффектов) позволяет не закопаться в деталях реализации.
  • +1
    У термина АОП есть волне нормальный используемый термин — «проектировщик». И программу программист не пишет а разрабатывает. В термин «разработка» входит аккурат проектирование и реализация.
    • 0
      В термин «разработка» входит аккурат проектирование и реализация.
      Не всегда входит всё полностью. На моём предыдущем месте работы я поначалу столкнулся с сильным сопротивлением менеджера проекта. Месяца через три из разговора с people manager'ом я понял что, фактически пытался играть вместо ведущего разработчика, положенного «по штату» но отсутствовавшего в реале (people manager даже назвал это отсутствие «родовой травмой» того проекта).
  • +5
    Мне кажется, что у человека, склонного к анализу своих прошлых успехов и неудач, по мере накопление практического опыта происходит оптимизация подходов между чисто абстрактным и чисто конкретным. В результате программист становится в меру и тем, и другим, ориентируясь на желаемый результат — выпуск качественного продукта в разумные сроки. Уже из статьи понятно, что оба подхода имеют достоинства и недостатки, так что для профессионала важно освободиться от догм и стараться быть честным с собой. И пробовать разные варианты. Попробовал абстрактный подход — проанализировал проблемы, возникшие при этом. В следующий раз попробовал конкретный подход — аналогично, проанализировал проблемы. Потом пробуешь некий компромиссный вариант. И так оттачиваешь мастерство.

    • +1
      Чувство меры между абстрактным и конкретным — и есть опыт.
  • +1
    Мне кажется, тут я перекрестился, чем выше вы забираетесь по «программисткой» лестнице, тем ближе становитесь к АОП,, причем, в начале пути все таки лучше быть КОП. (мое 70/30)
  • +1
    Однако, когда во время общения с Джо мы попросили его решить только задачу X, в то время как он знал, что в будущем Y и Z неминуемы, мы обрекли его на расстройство из-за некачественно выполненной работы или даже уверенность, что в будущем его сделают крайним.
    В итоге потом всплывает Y, виднеются ушки Z, примененное решение X в лоб требует глобального рефакторинга, а то и смены фреймворка/СУБД/etc, но статью мы об этом не напишем, нынче в моде agile…
    • +2
      Самое противное, что это верно и для обобщенного решения.
    • +3
      В итоге потом всплывает Y, виднеются ушки Z

      Более того…

      Тебя просят реализовать X, ты спрашиваешь, не потребуются ли впоследствии Y и Z, получаешь отрицательный ответ. Памятуя о прошлом аналогичном случае, описываешь, что, где, как и почему вылезло потом, и настоятельно предлагаешь хотя бы задуматься об Y и Z. На что снова получаешь отрицательный ответ, подкреплённый до боли знакомым «Чувак, мне просто нужно Х, просто сделай это, не парь мозга!». Начитавшись про «просто пиши код», просто реализуешь X, оно запускается, а через некоторое время… О-ба-на!:

      — Ну ты же всё уже сделал, теперь просто добавь туда же Y и Z, тебе же несложно!?..

      Т.е., ты точно знаешь, что оно обязательно вылезет, но тебе указывают твоё место, а потом опять больно всем. Во имя чего?..
      • +2
        В таких случаях просто сразу: «хорошо, сделать сразу X, Y и Z — N рублей, просто сделать X — N/2 рублей, после этого к просто X добавить Y и Z — ещё N рублей». На вопрос, почему N а не оставшиеся N/2 объяснять — всё переделывать с нуля, как будто просто X и не разрабатывался.
      • +1
        А ещё бывает, что ты точно знаешь, делаешь, тратишь лишние недели работы, а оно не всплывает и через год, и через два.
        А ещё бывает, что ты точно знаешь, что без этого проект не запустить, тратишь лишние месяцы, проект закрывается / иные изменения ситуации происходят, и проект не запускается никогда.
        А ещё бывает, что ты точно знаешь, что без этой фичи проект на рынок не выпустить. А потом всплывает ещё одна фича. И ещё одна… и проект никогда не взлетает. Потому что всегда есть необходимая фича, без которой не запустить.

        «Ты», естественно, абстрактный.

        С предсказанием будущего у людей вообще беда, как мне кажется, на основе наблюдений, конечно…
  • +2
    В данной статье описана глупость. Самая правильная классификация — у Сергея Морозова — деление на логиков и рефлексоидов. Абстракция как способ мышления идет где-то сбоку.

    А тут абстракция описана как летание в облаках. Хорошо еще, что это перевод.

    Скажите, например, как можно делать обобщения, не замечая деталей и фактов и не запоминая их? То же самое с догадками. Если и сам всё можешь вывести из первичного материала, к манипуляциям и подмене понятий относишься с недоверием.

    У автора статьи попросту нарушено причинно-следственное мышление, он теоретизирует о том, в чем не разбирается.
    • +1
      «Прораб, ну ты же уже построил коттедж, встрой между 2 и 3 этажами гараж»
    • 0
      Самая правильная классификация — у Сергея Морозова — деление на логиков и рефлексоидов.
      Извините, у какого Сергея Морозова — у этого?
      • 0
        Да.
    • 0
      Зря вы так. Во-первых, у Сергея описаны гораздо более общие вопросы, чем тут. Во-вторых, «самой правильной классификации» безотносительно контекста быть не может в принцие (все относительно). В-третьих, как не крути, но в статье описаны правильные вещи, только способ описания и екоторые выводы и акценты вызывают егативное восприятие.
      • 0
        В статье сделана классификация в том, в чем ее не может быть в принципе. Программисты делятся на тех, кто умеет решать задачи, по необходимости прибегая к абстракциям и компромиссам; и на тех, кто потребляет техники и технологии, делая из них нечто вроде культа карго.

        Это вроде как сказать, что шофера делятся на любителей газа и любителей тормоза. Нормальные водители лежат за пределами этой классификации, поскольку не делают из газа и тормоза фетиша, а применяют их по необходимости.
        • 0
          Я бы вам тоже мог ответить, что пишите глупости. Например потому, что делятся амебы и черви, а программистов делят. Делят их по разному опять таки относительно чего-то, какого-то фактора. В вашем первом утверждении не учтен как минимум факторы опыта, контекста. В статье программистов разделили по подходу к решению задач. И сделали это очень удачно (так хотелось написать тут «правильно»). На практике такое разделение не просто заметно, но и хорошо прослеживается по конкретным людям. А умение выбирать путь решения (конкретный или абстрактный) по задаче приходит только с опытом, вне зависимоти от типа мышления и принадлежности к рефлексоидам или логикам.
    • 0
      del
  • +6
    Согласен, что в статье описана глупость.
    Абстрактный подход будет практиковать тот, что больше обжигался на частных решениях, которые всё равно потом приходилось дорабатывать, и это (естественно!) было неприятно.
    Конкретный подход возьмет на вооружение новичок и тот, кто однажды попытался реализовать слишком сложную абстракцию (и потерял кучу времени и нервов).
    Потом оба найдут для себя среднюю стратегию.

    Это не какая-то хитрая психология, оба типа лежат в сфере рационального. И главное, оба типа не получают выигрыша от иррациональной приверженности своей стратегии — наоборот, в каждом конкретном случае выгоден компромисс. Так что и неравновесия/индетерминизма в предмете нет.
    • НЛО прилетело и опубликовало эту надпись здесь
      • +2
        Что же вас утомило?
      • +1
        С тех были прорывы в разработке?
      • +1
        Мифический человеко-месяц вообще написан в 1975. И? Он до сих пор актуален.
        • НЛО прилетело и опубликовало эту надпись здесь
        • +1
          Я его начал читать с полода назад. Прочитал процентов 25 % пока. Дочитать постараюсь до конца, но могу сказать однозначно: по большей части повествования книга морально устарела и читать ее почти неинтересно.
    • +1
      Спольски — тот еще тролль, умеет задеть за живое.
  • 0
    Ввиду того, что многие люди подстраивают свое поведение под обстоятельства, вы также можете трактовать приведенную информацию как абстрактное или конкретное текущее состояние сознания, хотя считается, что каждый человек имеет доминирующую склонность.


    Специально так абстрактно непонятно написано?
    • +1
      Стиль «в английском оригинале читается лучше»… Впервые встретился в 1994 на книжках по НЛП.
  • 0
    Если кого-то сильно заинтересовал собственный образ мышления — проще найти в Сети онлайн тест Майерс-Бриггс и пройти его. По моему опыту, качество программиста от его типа мышления по Майерс-Бриггс слабо зависит. Видимо, в реальности имеется более тонкая абстракция над результатами этого теста )
    • 0
      Сразу скажу, что я согласна с тем, что качество программиста на практике не связано с типом информационного метаболизма.

      Но на самом деле тесту нельзя верить, так как есть много факторов, из-за которых тесты выдают неверный результат. Остаётся только типирование у специалиста или самостоятельное изучение типологий.
    • 0
      По моему опыту, качество программиста от его типа мышления по Майерс-Бриггс слабо зависит


      — Майерс-Бриггс оперируют дихотомиями, а не аспектами. Поэтому корреляция с их типами не очевидна.

      — Качество программиста не зависит ни от типа, ни от ориентации в контексте статьи. Это индивидуальная особенность. От типа зависит метод, с помощью которого программист будет решать задачу и конкретика получающегося продукта. И АОП(БЛ), и КОП(ЧЛ) могут написать и отличную и отвратительную программу. Просто сделают они это по-разному.
  • +3
    Ого, на Хабре упоминают соционику! Да ещё и в топике-переводе
    • 0
      Забавно, что в статье АОП сопоставляется интуиции, а КОП — сенсорике. А на практике часто всё наоборот. Я сенсорик и стопроцентный АОП, а знакомая — интуит и настоящий КОП.
      На самом деле не только эту дихотомию следует учитывать. Полагаю, в моём случае абстрактно-ориентированным программистом меня делает творческая творческая БЛ.
    • +2
      Вы предпочли бы, чтоб на Хабре её упоминали в оригинальном посте?
  • –1
    Я довольно хорошо знакома с соционикой (той самой аналогией типологии МБ). Годами подтверждена моя сенсорика, которая соответствует конкретному мышлению в МБ (я ESTP, СЛЭ).
    Но при этом в программировании я стопроцентный АОП.

    А вот знакомая, бывшая коллега, — настоящий соционический интуит (ЛИИ) с абстрактным мышлением, но при этом в программировании она КОП со всеми их минусами и плюсами, описанными в статье.
    • 0
      А я — ENTJ. Приятно познакомиться! )))
      • 0
        Взаимно! )
    • 0
      СЛЭ будут АОП из-за БЛ, а не из-за сенсорики. Равно как, например, сенсорик ЛСЭ будет КОП (что я постоянно и в ассортименте наблюдаю :D)

      А вот на счёт ЛИИ в роли КОП — очень и очень сомнительно. Или в типировании ошибка, или неверная оценка подревизного (отношения ревизии одни из самых необъективных в плане оценок).
      • –2
        Абсолютно согласна про БЛ у Жука.

        Про ЛИИ вполне возможно, что ошибка типирования. Как такового типирования и не было, просто человек уж больно похож на описание ЛИИ. Ручаюсь только за логику и интуицию. Но и неверная оценка тоже не исключается конечно же.

        (Полагаю, нас минусуют те, кто и не подозревает, что айтишники могут интересоваться ещё чем-то, кроме собственно информационных технологий. Видимо, для них темы, отличные от IT, — табу, и о них нельзя беседовать в комментариях, даже в связке с IT.
        И неважно даже то, что тема беседы соответствует теме поста.)
        • +2
          Полагаю, нас минусуют те, кто и не подозревает, что айтишники могут интересоваться ещё чем-то, кроме собственно информационных технологий


          Всё хуже. В последние лет 6-8 соционику окучивает масса случайного народа, пытающегося срубить денег на дешёвой популярности. Создаются свои «школы», течения. Лезет масса «непризнанных гениев», неофитов с горящими глазами. И эта вся бодяга создаёт имидж какой-то не то астрологии, не то секты. Поэтому термин «соционика» у многих вызывает автоматическое отторжение. И это, кстати, одна из причин, по которой я уже почти 10 лет, как из соционической тусовки ушёл. Стало слишком много случайных людей, а мне что-то им доказывать просто не интересно (поначалу я занимался немного анализом и исследованиями по этой теме). Так что пользуюсь чисто практической частью для себя (и в семье — соционика очень хороший, краткий и точный язык для описания характеров знакомых/киногероев/etc).

          Так что фиг с ними, с минусами. На минусы, когда понимаешь мотивацию минусующих я не обижаюсь :)
      • 0
        Да вы сговорились что-ли такое количество аббревиатур на пост…
    • 0
      А можно ээээ… без такого количества аббревиатур в одном сообщении? Ничерта непонятно…
      • 0
        Это стандартные тематические аббревиатуры. Если вам непонятно, значит, либо вам не нужна эта информация, либо вы ей недостаточно владеете. Расшифровывать классические понятия всё равно, что в статье везде писать «National Aeronautics and Space Administration», вдруг кто не в курсе, что такое NASA.
        • +1
          Тематические они где-то в соционике, но не здесь.
          Откуда же мне знать нужна информация или нет если я её толком прочитать не могу, вдруг все же интересующее?
          • 0
            Если совсем коротко, то соционика определяет категории («аспекты», всего 8 штук, белые/чёрные логика/этика/интуиция/сенсорика — соответственно, аббревиатуры, от БЛ до ЧС) информации, участвующей в обмене между индивидами и описывает несколько (16) типов, по особенностям реакции на эту информацию. В отличие от массы типологий (от банальной астрологии до популярных на Западе Майерс-Бригс) базируется не на волюнтаристском делении на типы и подбором их описаний (или, как в случае астрологии, тупо «назначая» нужный тип), а на двух однозначно обратимых моделях — чёрных ящиках с выводом основных признаков поведения именно от модели. Наполнение по реальной практике тоже есть, но оно уже вторично.

            То, что моделей две создаёт избыточность/самопроверку и позволяет говорить уже о некоторой научности этого направления. Потому что результат при наличии полной информации становится фальсифицируемым, а при недостатке информации позволяет по имеющейся достраивать недостающую. Это и делает её особенно интересной. Можно типировать человека лишь по по некоторым ярким, однозначно определяемым критериям и делать выводы об особенностях/причинах других, скрытых критериев. Не требуется ни детально тестировать человека, ни сравнивать его соответствие с некоторыми типичными описаниями (описания типов — это, вообще, крайне ненадёжный метод определения соответствия, тут и влияние восприятия описывающего, и эффект Барнума мешают), для типирования в соционике достаточно часто именно несколько ярких штрихов.

            Главные проблемы сегодня — это чисто методическая. Если переходить от интуитивного типирования опытных социоников к строгой статистике, то соционические тесты получаются громоздкие. Более менее уверенные результаты получаются на тестах в 300..500 вопросов. При чём такой объём работы порождает у авторов желание получить профит, в результате чего тестов такого уровня нет в публичном общедоступном виде. Я знаю только две таких работы. Супруги Лытовы получали прекрасные результаты на самокоррелирующемся тесте в что-то около 300 вопросов, защитили на нём диссертацию, после чего тест пошёл куда-то в области профессиональной ориентации. Таланов сделал неплохой тест на что-то около 500 вопросов, даже какое-то время тест был доступен в онлайне. Потом его понесло в область самодеятельности в смысле собственных трактовок типологии, что случается часто. Проблема в том, что соционика в таких расширениях/интерпретациях, как правило, теряет сразу и фальсифицируемость, и способность к прогнозированию.

            Это вторая причина, социальная. Удачный первоначальный старт соционики в Интернете 10..12 лет тому назад привлёк к ней много как случайных людей, видящих в ней вторую наукообразную астрологию, так и всевозможных авантюристов, мошенников, непризнанных гениев и т.д. Её стали тащить в разные стороны, строить каких-то химер, организовывать дешёвые балаганы, типа «найди себе идеальную вторую половинку» и т.п.

            Теперь, очень сложно находить реальную и полезную информацию по теме под тоннами информационного мусора.
          • 0
            Позвольте напомнить: здесь тема, напрямую связанная с соционикой (mbti суть та же соционика в данном контексте).

            Вы предъявляете претензии к нашей с Bal беседе. Мы имеем право беседовать на знакомые нам обоим темы знакомыми нам обоим терминами. И не обязаны учитывать то, что кто-то может этих терминов не знать.

            Если вам интересно то, о чём мы пишем, гораздо результативнее было бы либо попросить у нас пояснений, либо поискать их в интернете. А встревать с чужую беседу с обвинениями в непонятности — это несколько нетактично.
      • 0
        Смысла нет разворачивать без объяснения:
        БЛ = белая логика, ЧЛ = чёрная логика
        ЛИИ = логико-интуитивный интраверт
        ЛСЭ = логико-сенсорный экстраверт
        КОП/АОП — это из данной статьи

        А если разворачивать эти обозначения, то получится обзор сути соционики на отдельную статью. Которую Хабр ещё и вряд ли примет, учитывая негативную семантику, которая приклеилась к этому направлению в последние годы :)
  • +1
    Хочу заметить, что с опытом, какая-либо четко выраженная ориентация стремится к балансу. Так что это динамическая характеристика, а не данная раз и на всегда.
    И абстрактники через набитые шишки овладевают навыками более конкретного мышления, и наоборот, у кого туго с абстракцией, учатся учитывать больше вариантов.

    Хотя те у кого туго с абстракцией в программисты и технари редко идут. Они предпочитают работать торгашами, оценщиками и т.д.
    • 0
      Это если не попал в компанию, где абстрактное мышление поощряется или, хотя бы, не наказывается.
      • +1
        Сама жизнь этому учить, в различных ее проявлениях.
  • +4
    Слишком много абстракций для описания абстракций абстрактно-ориентированного программиста
    • 0
      Слишком много абстракций для описания того, что слишком много абстракций для описания абстракций абстрактно-ориентированного программиста :)
      • 0
        Нужно глубже в абстракции!
  • 0
    Почему в стать предлагается сравнить количество подходящих пунктов из разных списков, и при этом количество пунктов в списках разное:-)?
  • +6
    В общем, читая хабра-переводы про «плохих» программистов, я понял:
    1. если вы хотите в чём-либо упрекнуть программиста, то всегда можно найти хабра-перевод с мнением авторитетного американца, которое подтверждало бы ваши слова;-)
    2. подтверждая свою позицию хабра-переводами, вы можете упрекнуть программиста одновременно в (как минимум) двух противоположных вещах;-)
    .
    • 0
      Почти по Платону:
      У меня есть теория, что любую фразу можно превратить во что-то кажущееся невероятно глубокомысленным, если в конце приписать имя какого-нибудь древнего философа.
  • +2
    Конкретный программист, сравнивая списки плюсов и минусов КОП и АОП, увидит там количественный выигрыш КОП. В то же время абстрактный программист знает, что важно не количество, а вес каждого пункта. В итоге новички сделают ошибочные выводы. Так получается почти со всеми статьяи, которые в той или иной мере критикуют абстракцию, широкий кругозор и глубокие познания.

    Если в этой статье профильтровать выводы и намеки, оставив только факты, то написано все верно. Уж точно не глупости. Но без фильтрации статья формирует негативное восприятие, и даже везапная развязка не спасает.
  • 0
    Интересно, чем руководствовался автор поста, разделяя списки позитивных и негативных черт по полу. Неужто политкорректные пятьдесят на пятьдесят?
  • 0
    Имеет смысл разбавить вашу абстрактную статью конкретными примерами :-) когда по действиям человека можно с большой точностью судить о его склонностях.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.