Абстрактно-Ориентированный Программист

Начну с рассказа о программистах, который я слышал не раз.

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

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

Почему он снова проделал такой трюк?

Возможно, это потому, что Джо — абстрактно-ориентированный программист ( АОП ) .

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

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

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



Потребность в абстракциях
Разработка программного обеспечения — одно из немногих занятий, в котором постоянно приходится сталкиваться с абстракциями.

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

Резкий прирост производительности процессора (по данным Закон Мура ) порождает потребность в абстракциях.

Я начал программировать на компьютерах с процессорами, количество транзисторов которых исчислялось сотнями.

Motorolla 6800 имела 4100 транзисторов и тактовую частоту 1-2 мегагерца.

Zilog Z80 имел 8500 транзисторов и частоту 2-8 МГц.

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

Процессоры с миллиардом или около того транзисторов сейчас находятся в массовом производстве.

Например, Intel Core i7 содержит около миллиарда транзисторов и имеет тактовую частоту 2–3,5 ГГц.

Это примерно в миллиард раз превышает вычислительную мощность компьютеров тридцать лет назад. Человеку не удалось так заметно эволюционировать.

Возникла необходимость эффективно использовать увеличение мощности процессора.

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

Между аппаратным обеспечением и современным программным обеспечением лежит множество уровней абстракции.

И они, конечно, необходимы.

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

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

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

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

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

    фактов)

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

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

Говоря абстрактно, мы говорим о том, как люди обрабатывать информацию .

Рассмотрим показатель типов личности Майерс-Бриггс , который широко используется в бизнесе.

Показатель позволяет выявить четыре типа личности, которые делятся на основанные на интуиции и здравом смысле (N и S, если использовать типологические обозначения) - соответственно абстрактное и конкретное мышление.

(Есть и другие психологические исследования с похожим разделением типов личности.

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

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

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

  • Мысли и идеи
  • Чтение между строк
  • Жизнь в будущем – больший интерес проявляется в отношении будущих возможностей.

  • Шаблоны, контекст и отношения запоминаются лучше.

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

  • Большее доверие проявляется к абстрактной или теоретической информации, отношениям и закономерностям.

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

  • Предпочтение отдаю четкой и точной информации, не люблю строить догадки, когда нет четких фактов.

  • Предпочтение отдается информации в настоящем времени, которую можно воспринимать одним из пяти чувств.

  • Недоверие к догадкам, которые появляются словно из ниоткуда.



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

Здесь на первый план выходит нынешняя ситуация.

Думая о будущем, вы можете стать героем.

Кроме того, способность думать наперед может легко превратить вас в обузу.

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

или обузой.

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

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

Вот некоторые комментарии, которые я слышал об абстрактно-ориентированных программистах.

Позитивный

  • Берется за плохо поставленные задачи и хорошо с ними справляется.

  • Он глубоко размышляет над проблемой и находит элегантные решения.

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

  • Это часто сильно усложняет (перепроектирует) свой код. Иногда мне просто нужен быстрый хак.

  • Он постоянно пытается переписать всю нашу кодовую базу.

    Устаревший код работает — просто оставьте его в покое.

  • Почему она не следует общему плану работы?
  • Наши командные встречи ( АОП ) постоянно избегать насущных проблем.

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

.

и то же самое про специально ориентированных программистов( КОП ) Позитивный

  • Он долго не разговаривает. Он просто берет проблему и решает ее.

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

Отрицательный
  • Его код решает узкий круг задач.

    Этого достаточно для прохождения тестов, но недостаточно для реального использования.

  • Его код негибкий и его сложно поддерживать.

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

  • Он не видит ничего, кроме текущей задачи.

    Его код долго не продержится.



Мини тест
Список А.

Какие пункты в нем лучше всего описывают вас? (Ответ без колебаний)

  1. Вас больше интересует идея в целом, чем тонкости ее реализации
  2. Часто ли вы думаете о судьбе человечества?
  3. Вы можете легко выявить общие закономерности на конкретных примерах.

  4. Вы часто говорите о сложности жизни
  5. Вы верите, что почти все можно проанализировать
  6. Вы легко понимаете новые теоретические принципы
  7. Вы часто проводите время, думая о том, как сделать что-то лучше.

  8. Вы можете легко просчитать различные варианты развития ситуации.

Список Б: Какие пункты в этом списке лучше всего описывают вас?
  1. Вам скучно читать теоретические книги?
  2. Вы предпочитаете полагаться на свой опыт, а не на теоретические альтернативы.

  3. Вам важно попробовать сделать что-то своими руками.

  4. Анализируя ситуацию, вы фокусируетесь на ее текущем состоянии, а не на возможных последствиях.

  5. Обычно ваша текущая деятельность беспокоит вас больше, чем планы на будущее.

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

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

[Я хочу сделать оговорку сразу.

Прежде всего, тип личности – это не судьба.

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

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

]

Адаптация мышления
Несколько лет назад я услышал хорошую аналогию.

Вы можете быть правшой или левшой.

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

Но то, что кто-то чаще использует правую руку, не означает, что левая ему вообще не нужна.

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

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

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

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

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

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

  • Масштабируемые системы и архитектуры с длительным жизненным циклом требуют абстракций.

  • Объектно-ориентированное программирование фокусируется на абстракциях.

  • Коллеги и клиенты, не являющиеся программистами, могут оказаться с особым типом мышления.

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

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

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

Вместо этого я выступаю за самосознание и обучение гибкости мышления и общения.

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

Все обобщения ложны.

Включая это.

Марк Твен

А Марк Твен был писателем абстрактно-ориентированной направленности.

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

Войти , Пожалуйста.

Желающие могут указать свою преобладающую ориентацию 48,37% Абстрактные 651 9,73% Конкретные 131 29,27% Би 394 11,66% Не могу определиться 157 0,97% Остальные проголосовали 13 1346 пользователей.

279 пользователей воздержались.

Теги: #человеческие ресурсы #аннотация #психология #разработка сайтов #программирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.