Файл: Руководство по стилю программирования и конструированию по.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 801
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ГЛАВА 33 Личность
811
задач, желая отсрочить решение относительно неважной задачи, избежать кото- рой тем не менее вы не могли. Я ненавижу ввод данных, и многие программы требуют ввода небольшого объема данных. Я иногда откладываю работу над про- граммой на несколько дней только затем, чтобы отсрочить неизбежный ввод не- скольких страниц чисел вручную. Это «истинная лень». Она проявляется и в ком- пиляции класса с целью проверки его работоспособности и избавления от про- верки класса в уме.
Небольшие задачи никогда не бывают такими плохими, какими кажутся. Вы смо- жете избавиться от первого типа лени, если выработаете привычку выполнять эти задачи сразу. Эта привычка соответствует второму типу лени — «просвещенному».
Вы все так же ленитесь, но решаете неприятные проблемы, тратя на них как можно меньше времени.
Третий вариант лени предполагает написание инструмента для выполнения не- приятной задачи. Это «долговременная лень». Несомненно, это самый продуктив- ный вид лени (если, конечно, инструмент позволяет в итоге сэкономить время).
В этом контексте определенная лень даже выгодна.
Однако лень имеет и обратную сторону. «Спешка» и «усилия» ценятся в програм- мировании совсем не так высоко, как на уроках физкультуры. Спешка — это до- полнительные, ненужные усилия. Она указывает на активность, но не на выпол- нение работы. Движение нетрудно спутать с прогрессом, а занятость с продуктив- ностью. Главную роль в эффективном программировании играет мышление, а размышляющие люди обычно не кажутся занятыми. Если бы я видел, что какой- то программист постоянно занят, я подумал бы, что он — неважный программист,
потому что он не использует свой наиболее ценный инструмент, которым, как известно, является голова.
33.8. Свойства, которые менее важны,
чем кажется
Помимо спешки есть и другие свойства, уместные в других областях жизни, но не особо эффективные при разработке ПО.
Настойчивость
Как и большинство подобных субъективных понятий, настойчивость в зависимости от обстоятельств может быть и достоинством, и недостатком и обозначается раз- ными словами. Если вы хотите считаете ее плохим качеством, вы называете ее
«упрямством», а то и «ослиным упрямством». Если вы желаете придать ей хоро- ший оттенок, можете назвать ее «упорством».
Как правило, при разработке ПО настойчивость принимает форму ослиного уп- рямства, т. е. пользы не приносит. Настойчивое стремление довести код до ума с использованием одного подхода трудно признать достоинством. Попробуйте перепроектировать класс, перепишите код или вернитесь к проблеме позже. Если один подход не работает, самое время испытать другой (Pirsig, 1974).
812
ЧАСТЬ VII Мастерство программирования
Во время отладки иногда очень увлекательно отслеживать надоедливую ошибку четыре часа, но, если в течение како- го-то времени (скажем, 15 минут) вы не добиваетесь про- гресса, обычно лучше отложить поиск ошибки. Позвольте своему подсознанию немного поработать над проблемой.
Попробуйте подумать об альтернативном подходе, который вообще устранил бы проблему. Перепишите проблемный фрагмент кода с нуля. Вернитесь к нему со свежей головой. В борьбе с компьютерными проблемами нет ничего благород- ного. Лучше их избегать.
Трудно сказать, когда отложить работу, но очень важно, чтобы вы спрашивали себя об этом. Если вы чувствуете замешательство, задайте себе этот вопрос. Это не всегда означает, что пришло время сдаться, однако скорее всего это значит, что пора установить некоторые временные параметры: «Если я не решу эту проблему с использованием этого подхода в следующие полчаса, я проведу 10-минутный
„мозговой штурм“ в поиске других подходов и попробую в течение следующего часа самый лучший из них».
Опыт
По ряду причин важность практического опыта в сравнении с книжным образо- ванием в области разработки ПО не столь велика, как во многих других областях.
В других областях базовые положения изменяются довольно медленно, вследствие чего люди, закончившие вуз с интервалом в 10 лет, обладают по сути одинаковы- ми знаниями. В отрасли разработки ПО даже основы претерпевают быстрые из- менения. Человек, закончивший вуз через 10 лет после вас, вероятно, будет знать вдвое больше об эффективных методиках программирования. К программистам старшего возраста относятся с подозрением не только потому, что они якобы не имеют представления об отдельных технологиях, а потому, что они, возможно,
никогда и не сталкивались с базовыми концепциями программирования, распро- странившимися после того, как они закончили вуз.
В других областях текущие знания человека о работе будут служить ему и завтра.
Что до разработки ПО, то, если программист неспособен пересматривать привыч- ные способы мышления, приобретенные им при использовании предыдущего языка программирования, или методики оптимизации кода, работавшие на старом ком- пьютере, наличие опыта окажется худшим вариантом, чем его полное отсутствие.
Многие программисты тратят время на подготовку к завершившейся битве, а не предстоящей. Если вы не изменяетесь вместе со временем, опыт скорее вредит,
чем помогает.
Кроме того, опираясь на собственный опыт, люди часто делают неверные выво- ды. Трудно объективно оценить свою жизнь. Вы можете упустить из виду ключе- вые элементы своего опыта, которые подтолкнули бы вас к другим выводам, если бы вы их учли. В этом смысле могут помочь книги о работе других программис- тов, потому что так вы узнаете опыт других людей, достаточно очищенный, что- бы его можно было изучить объективно.
Стоит упомянуть также абсурдное внимание к
объему опыта программистов. «Нам нужен программист, обладающий 5-летним опытом программирования на C» —
Перекрестная ссылка О настой- чивости при отладке см. подраз- дел «Советы по поиску причин дефектов» раздела 23.2.
1 ... 92 93 94 95 96 97 98 99 ... 104
ГЛАВА 33 Личность
813
глупое высказывание. Если программист не изучил C за год или два, еще три года не сыграют особой роли. Подобный вид «опыта» очень слабо связан с произво- дительностью труда.
Быстрые изменения информации в сфере программирования создают странную динамику в области «опыта». Во многих отраслях специалист, имеющий за пле- чами массу успехов и достижений, может расслабиться и наслаждаться заслужен- ным уважением. В то же время знания расслабившегося программиста очень бы- стро устаревают. Чтобы поддерживать компетентность, вы должны идти в ногу со временем. Для молодых и энергичных программистов это преимущество. Более пожилые программисты иногда чувствуют, что они уже заслужили свои эполеты,
и возмущаются, когда их год за годом принуждают подтверждать квалификацию.
Главное то, что опыт может иметь разное качество. Если вы работаете 10 лет,
получаете ли вы 10 лет опыта или 1 год опыта 10 раз? Чтобы приобрести истин- ный опыт, вы должны действовать с умом. Если вы постоянно учитесь, вы приоб- ретаете опыт. Если вы не учитесь, о приобретении опыта не может быть и речи,
как бы долго вы ни работали.
Страсть к программированию
Если вы не проводили хотя бы месяц, работая над одной программой — рабо-
тая по 16 часов в день, грезя о ней в остальные 8 часов беспокойного сна, ра-
ботая несколько ночей подряд над устранением из программы «одной после-
дней ошибки», — вы не писали сложную компьютерную программу. Тогда вам
трудно понять, что в программировании есть что-то захватывающее.
Эдвард Йордон (Edward Yourdon)
Настолько щедрая дань богам программирования — едва ли не самый верный путь к неудаче. Ночные бдения позволят вам на какое-то время почувствовать себя самым великим программистом в мире, но потом вам придется потратить несколько недель на исправление дефектов, внесенных в код в безудержном порыве. Во что бы то ни стало вызовите у себя увлечение программированием, но помните, что увлечение никогда не заменит компетентности.
33.9. Привычки
Следовательно, нравственные добродетели существуют в нас не от приро-
ды и не вопреки природе… а благодаря приучению мы в них совершенствуем-
ся… Ибо если нечто следует делать, пройдя обучение, то учимся мы, делая это…
Хорошо строя дома, люди станут добрыми зодчими, а строя худо — худыми…
Так что вовсе не мало, а очень много, пожалуй, даже все зависит от того, к
чему именно приучаться с самого детства.
Аристотель
Выработать хорошие привычки крайне важно, потому что очень многое из того,
что вы делаете как программист, вы делаете не задумываясь. Например, когда-то вы могли думать о форматировании циклов, но вы не думаете об этом при напи- сании каждого нового цикла. Вы пишете их как привыкли. Это относится почти ко всем аспектам форматирования кода. Когда вы в последний раз всерьез заду-
814
ЧАСТЬ VII Мастерство программирования мывались о своем стиле форматирования? Если вы программируете около пяти лет, скорее всего четыре с половиной года назад. Позднее вы просто следовали привычке.
Привычки связаны со многими областями. Так, программисты обычно тщатель- но проверяют индексы циклов и не проверяют операторы присваивания, из-за чего ошибки в операторах присваивания гораздо сложнее искать, чем ошибки индек- сов циклов (Gould, 1975). Вы отвечаете на критику дружелюбно или недружелюбно.
Вы всегда стремитесь сделать код удобочитаемым или быстрым или не обращае- те на это никакого внимания. Если при выборе между написанием быстрого или удобочитаемого кода вы каждый раз делаете один и тот же выбор, вы на самом деле не выбираете — вами движет привычка.
Взгляните на изречение Аристотеля еще раз и замените слова «нравственные добродетели» на «программистские добродетели». Аристотель утверждает, что вы не предрасположены ни к хорошему, ни к плохому поведению, поэтому вы мо- жете стать как хорошим, так и плохим программистом. Главным способом ста- новления хорошим или плохим в своей области является сама деятельность: стро- ительство в случае строителей и программирование в случае программистов. То,
что вы делаете, становится привычкой, и со временем именно привычки начина- ют определять, хороший вы программист или плохой.
Билл Гейтс говорит, что любой программист, который впоследствии станет хо- рошим, хорош уже в первые несколько лет. После этого измениться практически невозможно (Lammers, 1986). Если вы программируете уже много лет, вряд ли вы внезапно зададитесь вопросом: «Как я делаю этот цикл быстрее?» или «Как я де- лаю этот код более удобочитаемым?» Это привычки, которые хорошие програм- мисты вырабатывают на самых ранних стадиях обучения.
Обучаясь делать что-то, сразу учитесь делать это правильно. В первый раз вы ак- тивно обдумываете свои действия и все еще можете с легкостью изменить свой подход. Выполнив что-то несколько раз, вы начинаете уделять меньше внимания своим действиям, и «сила привычки» берет свое. Проверяйте, что вы приобретае- те именно те привычки, какие хотите.
Что, если вы еще не выработали самые эффективные привычки? Как изменить плохую привычку? Будь у меня окончательный ответ на этот вопрос, я бы прода- вал видеокассеты с записями курсов самопомощи!.. Но один стоящий совет я дам.
Вы не можете заменить плохую привычку на отсутствие привычки. Именно по- этому люди, пытающиеся бросить курить, сквернословить или переедать, испы- тывают огромные затруднения, пока не заменят старую привычку на какую-то другую, например, жевание жевательной резинки. Легче заменить старую привычку на новую, чем полностью избавиться от привычки. Таким образом, попробуйте выработать новые, эффективные привычки. Например, выработайте привычку писать класс на псевдокоде перед кодированием или тщательно читать код перед его компиляцией. Тогда вам не придется беспокоиться об избавлении от плохих привычек — они естественным путем будут вытеснены новыми привычками.