14 когнитивных измерений - мастхэв для современного программиста

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

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


Как развитие программирования отражается на приложениях и электронных девайсах?

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

Ранний Facebook (признан экстремистской организацией в РФ) был слишком медленным и сложным в использовании. Например, чтобы увидеть чьи-то посты или фото, нужно было зайти на страницу автора публикаций. Позже, чтобы расширить аудиторию пользователей, разработчики создали функцию “Лента новостей”, благодаря которой весь новый контент стал отображаться на одной странице. Стоит кому-то что-то опубликовать, и вы получаете уведомление, сопровождаемое звуковым сигналом. Из новостной ленты можно также добавлять в “Избранное” любимых артистов, группы, авторов и т. д. За несколько дней эта функция завоевала сердца многих людей, и аудитория соцсети стала увеличиваться. Затем разработчики создали дополнительные “Настройки конфиденциальности” для аккаунтов, чтобы обеспечить безопасность пользователей. Появились опции “лайкнуть”, “прокомментировать” и “поделиться”.

По тому же пути пошли Uber (сервис по вызову такси), Amazon (платформа электронной коммерции) и другие приложения.

Языки программирования вчера и сегодня

Несколько лет назад языков программирования было немного. Например, в 2010 году фаворитами программистов были Java и JavaScript. В 2015 году к ним добавились Python, C++ и другие языки, что значительно упростило процесс создания кода. К 2019 году Python возглавил список языков программирования, в котором также появились PHP, C, R и другие. Почему Python завоевал пальму первенства? Он стал так популярен благодаря удобству использования. Это высокоуровневый язык программирования, в котором особое внимание уделяется читаемости кода, обширным библиотекам и фреймворкам. К числу примечательных особенностей Python относятся:

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

Программисты и их влияние на современный мир

Почти у каждого программиста есть своя история о том, как он был заворожен магией кода. Для меня самыми магическими были, конечно, числа и визуализации  —  могу посвятить им целый день. Незабываемый момент для большинства программистов  —  первый вывод “Hello, World!” на языке Python. Это выглядит так: print(“Hello, World!”). Затем нажимаем “Enter”, и вывод готов.

Само стремление найти ошибку и разобраться в материалах доставляет программисту трудно объяснимые волнение и радость. Конечно, написание кода  —  это не просто. Приходится сидеть часами, чтобы найти решение проблемы или хотя бы ссылку на него. Но по мере развития языков программирования, современный мир все больше оказывается во власти программистов. Они находят новые решения, создают передовые технологии, такие как Smart TV и Alexa, и люди уже не представляют повседневную жизнь без программных продуктов.

Как стать высококлассным программистом?

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

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

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

Стремясь оказать содействие участникам дискуссий о средах программирования, Грин разработал концепцию “Cognitive Dimensions Framework” (“Базовый набор когнитивных измерений”). Она включает в себя 14 относительно независимых характеристик среды программирования.

Вязкость (viscosity), или сопротивление изменениям. Заложены ли в обозначении ограничения для изменений? Насколько сложно внести небольшие изменения в программу?

Скрытые зависимости (hidden dependencies), или неявные, но важные связи между объектами. Скрытая зависимость возникает, когда одна часть программы изменяет другую часть способом, который явно не виден в тексте программы.

Наглядность (visibility) и сопоставимость (juxtaposability)  —  характеристики, позволяющие легко просматривать компоненты. Доступен ли необходимый материал непосредственно без когнитивной работы?

Преждевременная фиксация решения (imposed look-ahead). Есть ли ограничения на порядок выполнения действий? Вынуждает ли среда программирования пользователя принимать решение до того, как информация станет доступной?

Вторичное обозначение (secondary notation)  —  дополнительная информация в средствах, отличных от синтаксиса программы. Могут ли операторы или примитивные элементы быть сгруппированы или иным образом обозначены, чтобы предоставить программисту дополнительную информацию? Например, пробелы вокруг блоков кода могут отображать связанные инструкции.

Точность соответствия отображения (closeness of mapping). Насколько точно соответствие между видимой конечному пользователю проблемной областью и областью программирования?

Поэтапное оценивание (progressive evaluation), или возможность оценить решение в незавершенном виде. Можно ли протестировать отдельные части программы до того, как будет написана вся программа целиком?

Трудность мыслительных операций (hard mental operations), нагружающих рабочую память. Вынужден ли пользователь мучительно распутывать комбинации примитивных операций, прибегая к дополнительным инструкциям?

Размытость  —  сжатость (diffuseness  —  terseness). Какое количество символов требуется, чтобы выразить смысл или выдать определенный результат с помощью данного обозначения?

Градиент абстракции (abstraction gradient). Какие уровни абстракции (минимальный и максимальный) приняты для данного обозначения? Учтены ли промежуточные уровни?

Выразительность ролей (role-expressiveness). Легко ли передано назначение каждого компонента обозначения для понимания решения в целом?

Подверженность ошибкам (error-proneness). Насколько синтаксис склонен к ошибкам? Легко ли допускать когнитивные промахи и допускать погрешности в коде?

Восприятие отображения (perceptual mapping). Насколько легко воспринимается отображение важных значений, передаваемых положением, размером, цветом и т. д.

Согласованность (consistency). Сходна ли семантика, выраженная в сходном синтаксисе? Можно ли вывести одну часть языка из другой?

Готовы ли вы стать одним из высококлассных программистов и постоянно развиваться?

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Nimishajalota: How Coding and Coders Developed Over a Period of Time

Предыдущая статьяМеханизм самовнимания в моделях интерпретации языка
Следующая статьяИзвлечение текста из PDF-файлов с помощью Python: исчерпывающее руководство