Главная - Литература

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 [253] 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294

- Ты, должно быть, еще менее опытен, чем я думал, - отвечает Калликл. - Комментарии - это академическая панацея, и любому, кто писал реальные программы, известно, что комментарии затрудняют чтение кода, а не облегчают. Естественный язык менее точен, чем Java или Visual Basic, и страдает от избыточности, тогда как операторы языков программирования лаконичны и попадают в самое яблочко. Если кто-то не может написать ясный код, разве ему удастся написать ясные комментарии? Кроме того, комментарии устаревают при изменениях кода. Доверяя устаревшим комментариям, ты сам себе роешь яму.

- Полностью согласен, - вступает в разговор Главкон. - Щедро прокомментированный код читать труднее, потому что в этом случае читать приходится больше. Мало того, что я должен читать код, так мне нужно читать еще и кучу комментариев!

- Подождите минутку, - вставляет свои две драхмы Йемена, ставя чашку кофе.

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

- Если комментарии - пустая трата времени, почему все их используют, Калликл?

- спрашивает Сократ.

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

- Йемена считает, что они полезны. Она уже три года сопровождает твой код без комментариев и чужой код с комментариями. Ее мнение ты уже слышал. Что ты скажешь на это?

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

- Подожди, - прерывает Калликла Фрасимах. - Хорошие комментарии не повторяют код и не объясняют его. Они поясняют его цель. Комментарии должны объяснять намерения программиста на более высоком уровне абстракции, чем код.

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

Йемена наливает себе вторую чашку кофе.

- Мне кажется, что люди, отказывающиеся писать комментарии, (1) думают, что их код понятнее, чем мог бы быть, (2) считают, что другие программисты гораздо сильнее интересуются их кодом, чем есть на самом деле, (3) думают, что другие программисты умнее, чем есть на самом деле, (4) ленятся или (5) боятся, что кто-то другой узнает, как работает их код.



- В этом смысле очень помогли бы обзоры кода, Сократ, - продолжает Йемена.

- Если кто-то утверждает, что комментарии писать не нужно, и получает во время обзора кучу вопросов - если сразу несколько коллег спрашивают его: „Что происходит в этом фрагменте твоего кода?" - он начинает писать комментарии. Если программист не дойдет до этого сам, его руководитель сможет заставить его писать комментарии.

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

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

- Нет! - Фрасимах вскакивает со стула. - В коде и так уже есть все, что нужно знать компилятору! С таким же успехом можно было бы сказать, что все, что нужно знать другим программистам, уже есть в двоичном исполняемом файле! Если бы мы только были достаточно умны, чтобы уметь читать его! Информации о том, что программист собирался сделать, в коде нет.

Фрасимах замечает, что вскочил с места, и садится.

- Сократ, это немыслимо. Почему мы спорим о важности комментариев? Во всех книгах, которые я читал, говорится, что комментарии полезны и что на них не стоит экономить. Мы зря теряем время.

Йшо т ш йшторш уровне ~ Успокойся, Фрасимах. Спроси у Калликла, как давно он коишйтарии ттт быи. по-- программирует.

smm. Думать пиане означало Действительно, как давно, Калликл? Ы полагать, что ноиятность

программы не заемсит оттого, - Ну я начал с системы Акрополь IV где-то 15 лет назад, сколько информашй о ней уже Думаю, что я стал свидетелем рождения и гибели пример-известно тающему програм- но десятка крупных приложений. А еще в десятке проектов му человеку. работал над крупными компонентами. Две из этих систем

В. Швйп {В. А. ШИ) включали более полумиллиона строк кода, так что я знаю, о чем говорю. Комментарии совершенно бесполезны. Сократ бросает взгляд на более молодого программиста.

- Как говорит Калликл, с комментариями действительно связано много проблем, и ты не поймешь это, пока не приобретешь больше опыта. Если комментировать код неграмотно, комментарии не просто бесполезны - они вредны.

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

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

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

- Я с этим не согласен, - заявляет Главкон. - Нам следует концентрироваться не на комментариях, а на читабельности кода. При рефакторинге большинство



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

Главкон умолкает, удовлетворенный своим вкладом в беседу Калликл кивает.

- Похоже, вам никогда не приходилось изменять чужой код, - говорит Йемена. Калликл делает вид, что его очень заинтересовали плитки на потолке.

- Почему бы вам не попробовать прочитать собственный код через шесть месяцев или год после его написания? Вы можете развивать и навык чтения кода, и навык его комментирования. Никто не заставляет вас выбирать что-то одно. Если вы читаете роман, вам, может, и не нужны названия глав. Но при чтении технической книги вам, наверное, хотелось бы иметь возможность быстро найти то, что вы ищете. Тогда мне не пришлось бы переходить в режим сверхсосредоточенности и читать сотни строк кода для нахождения двух строк, которые я хочу изменить.

- Хорошо, я понимаю, что возможность быстрого просмотра кода была бы удобной, - говорит Главкон. Он видел некоторые из программ Исмены, и они не оставили его равнодушным. - Но как быть с другим утверждением Калликла - что комментарии устаревают по мере изменений кода? Я программирую лишь пару лет, но даже я знаю, что никто не обновляет свои комментарии.

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

Йемена выходит из комнаты.

- Мое главное возражение против комментариев, - заявляет Калликл, - в том, что они тратят ресурсы.

- Можете ли вы предложить способ минимизации времени написания комментариев? - спрашивает Сократ.

- Проектирование методов на псевдокоде, преобразование псевдокода в комментарии и написание соответствующего им кода, - говорит Главкон.

- ОК, это сработает, если комментарии не будут повторять код, - утверждает Калликл.

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

- Хорошо, - подводит итоги Сократ. - Не думаю, что у нас остались еще вопросы. Похоже, Йемена сегодня была самой убедительной. Мы будем поощрять комментирование, но не будем относиться к нему простодушно. Мы будем выполнять обзоры кода, чтобы все поняли, какие комментарии на самом деле полезны. Если у вас возникнут проблемы с пониманием кода другого программиста, подскажите ему, как он может его улучшить.



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 [253] 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294



0.0102