Мысли, навеянные рекламой косметики

Влад «Bill» Князев
12 марта 2004

Ну вот, так всегда! На самом интересном месте и — очередная РеПа! Ладно бы рекламировали что-нибудь стоящее, а то — косметика.... Опять одно и тоже: губная помада, тушь для ресниц, крема и т.д. Кому это нужно?!

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

Тут я невольно задумываюсь. Ведь мне, как программисту, тоже приходится пользоваться косметикой. Да и не только мне одному, но, возможно, многим другим программистам в мире. И не просто косметикой вообще, а именно профессиональной косметикой. И дальше мои размышления переходят к профессиональной, «программистской» косметике. Этими размышлениями я и хотел бы с вами поделиться.

Интересно, о чем Вы подумали в первую очередь, прочитав о «программистской» косметике? Могу уверенно предположить, что большинство из вас впервые слышит о таком термине. Я сам только что его придумал. Возможно, Вы уже догадались, о чем идет речь. Но обо всём по порядку.

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

Вполне возможно, что здесь может возникнуть закономерный вопрос: а стоит ли тратить столько времени на наложение «косметики» на программу? Ведь программа — не женщина. Стоп! А для чего женщина тратит столько времени на нанесение помады, туши, маникюр и т.д. и т.п.? Ведь это просто декоративная косметика (про лечебную я вообще не говорю). Давайте спросим об этом у знакомых нам женщин.

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

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

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

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

То же самое можно сказать и о программах. На стадии кодирования они содержат такой слой «пыли», что мелкие дефекты просто невозможно увидеть. Когда программа написана не очень красиво, а то и просто небрежно, очень легко пропустить скобки у составных операторов, или наоборот поставить лишние. Можно не долго думая написать числовые константы, не задумываясь над их логическим смыслом и не затрудняя себя подбором символических имен для их идентификаторов. Хорошо, когда подобные дефекты, выявляются в результате компиляции. А если нет? Тогда может случиться, что будет нарушена логика самой программы и это выяснится на этапе отладки программы. И чем хуже программа написана, тем дольше будет длиться сам процесс ее отладки. Да и полной уверенности в том, что все ошибки обнаружены уже не будет.

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

Когда наносишь на программу такую «косметику» волей неволей задумываешься над ней более внимательно, а это в свою очередь ведет к тому, что ты мысленно прогоняешь программу и обнаруживаешь ее незначительные, на первый взгляд, дефекты. Поэтому я всегда утверждаю, что отладка программы начинается у меня на этапе ее кодирования. И я думаю, что затраты времени на нанесение «косметики» с лихвой окупаются на стадии реальной отладки. Да и степень уверенности в такой программе возрастает, поскольку все Выявляемые при этом дефекты тут же устраняются. Как же тут не вспомнить уверенную в себе (благодаря косметике) женщину.

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

Буквально на днях мне пришлось этим заняться, с тем, чтобы в будущем разобраться более или менее детально в утилитах для компилятора GCC (у меня есть вполне определенные задумки). Поэтому мне пришлось и здесь нанести свою «косметику». В качестве иллюстрации к сказанному я приведу один маленький фрагмент текста.

Сначала я приведу фрагмент исходного текста в оригинале (как есть):

/* Tdata for sections in PE files.  */

struct pei_section_tdata
{
  /* The virtual size of the section.  */
  bfd_size_type virt_size;
  /* The PE section flags.  */
  long pe_flags;
}; 

А теперь тот же текст, после внесенных мной «косметических» изменений:

struct pei_section_tdata    // Tdata for sections in PE files
  {
  bfd_size_type   virt_size;  // The virtual size of the section
  long            pe_flags;   // The PE section flags
  }; 

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

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

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

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

Конечно, если заниматься приобретением этой «косметики» более целенаправленно, то можно сэкономить это время. Самое главное, осознать необходимость ее использования. А вот понимание этой необходимости приходит далеко не сразу. И возможно, мои размышления помогут Вам в этом. Но вот, Вы уже, хотя бы смутно, начинаете это понимать. И сразу возникает вопрос — где и как можно приобрести всю эту «косметику»?

Прежде всего, следует обратиться к книгам. Я помню, в свое время, находясь в командировке в Москве, я приобрел в книжном магазине на Калининском проспекте книгу ван Тассела в оригинале (в переводе она появилась у нас позже), она была посвящена как раз тому, о чем мы с Вами говорим. Все, я тут же забыл о том, что меня окружало. Настолько она показалась мне интересной и нужной для меня, что я читал ее и в гостинице, и в аэропорте, и в самолете. Ее перевод можно и сейчас найти в библиотеках или у знакомых Вам программистов.

Для тех, кто ею заинтересуется, привожу название этой книги полностью:

Ван Тассел Д. «Стиль, разработка, эффективность, отладка и испытание программ», М.:Мир, 1981.

Конечно, позже появились и другие книги, но эта книга была у меня первой. С другой стороны, чтения одних только книг (даже таких, о которой я только что сказал) на мой взгляд, недостаточно. Даже самые лучшие книги по сути своей являются букварями. А научится читать и, тем более писать, пользуясь только букварем просто невозможно. И если Вы действительно захотите узнать, как именно используется та «косметика», о которой Вы прочитали в «букварях», Вам будет необходимо почитать и «программные книги». Здесь я имею в виду реальные программы, точнее их исходные тексты.

Конечно, программы, как и книги, бывают разные: и хорошие и плохие. Есть такие, которые читаешь с удовольствием, настолько в них все просто и понятно. Но есть и такие, разбираться в которых просто не хочется. Я все-таки рекомендую по возможности читать и те, и другие. Тогда Вы лучше будете понимать как надо и как не надо писать программы.

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

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

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

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

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

На этом мои размышления о «программистской» косметике заканчиваются. Тем более что заканчивается и сама телевизионная реклама. Мысль человеческая причудлива, и кто знает, какие ассоциации придут мне в голову при просмотре очередного рекламного ролика. Так что до встречи в следующей РеПе (рекламной паузе).

Ссылки

  • Денни ван Тассел. «Стиль, разработка, эффективность, отладка и испытание программ», М.:Мир, 1981.
    Краткий конспект этой книги, выполненный Александром Малыгиным.
  • Алан Голуб. «Веревка достаточной длины, чтобы... выстрелить себе в ногу — Правила программирования на Си и Си++». М: 2001.
  • Утилита Header.awk для автоматизации создания условно-включаемых заголовочных файлов.