Начнем, пожалуй, издалека: если рассматривать процесс программирования чуть более глобально, чем просто как дальний синоним слова coding, то нетрудно прийти к выводу, что реализация хоть сколько-нибудь большого проекта невозможна просто с помощью следования банальному алгоритму: сесть за компьютер, бросить взгляд на ТЗ, открыть любимый текстовый редактор, взять в зубы клавиатуру и написать. Если говорить о проектах уровня "Hello, world!" такой алгоритм вполне пригоден для реального использования, но как только речь заходит о чем-либо более серьезном и полномасштабным, такой подход сразу начинает порождать несметное количество проблем.

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

Временным спасением от подобного рода проблем может послужить привычка грамотно оформлять код:

  • Размещение строго по одному выражению на строке в комбинации с поддающимся хоть какой-либо логике расставления отступов в начале строки позволяет избежать потерянных выражений и четко понимать: а где же заканчивает вон то-о-от цикл?
  • Осмысленные названия переменных резко сокращают время, необходимое для осознавания ответа на вопрос "а что же она значила?" Мне доводилось не раз сталкивался с кодом, написанным с использованием в качестве абсолютно всех переменных разнообразных букв латинского алфавита - мало того что изменить их на что-либо другое как автозаменой, так и RegExp'ами проблематично, так и на разобраться что к чему ушло очень продолжительный период времени. Существует большое количество более адекватных способов названия переменных и функций, перечислять их все смысла не вижу, по-этому кратенько расскажу о том, которым предпочитаю пользоваться сам: алгоритм прост как три копейки - название соответствует переведенному на английский смыслу (переменную, содержащую чье-либо имя называем name), в случае если слов требуется более одного слова - пишем их слитно, начиная все кроме первого с заглавной буквы (например: veryLongName), и по старинной традиции делаем исключение для индексов циклов, которые называем буквами латинского алфавита начиная с i и далее по списку. Вот собственно говоря банальный способ, позволяющий в очень сжатые сроки вспомнить как называлась переменная, содержащее имя :)
  • Подавляющее большинство языков программирования поддерживает разбавление кода комментариями, что существенно упрощает ориентирование в объемистых листингах как самим автором, так и всеми остальными персонами, которым по тем или иным причинам доведется в последствии читать произведение. Особенно этот способ актуален для низкоуровневых языков программирования, так как с первого взгляда на код даже его автору порой проблематично определить его значение.

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

03 января 2008 |  Иван Блинков  |  Теория