The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Атака Trojan Source для внедрения изменений в код, незаметны..."
Отправлено Ordu, 02-Ноя-21 12:09 
> А тебе не приходило в голову что это не из-за консоли, а из-за того что так просто удобнее читать код.

Приходило. Но как показывают исследования, программисты читают комментарии. eye-tracker'ом следили за программистом, изучающим код, и чётко показали, что программисты читают комментарии. Если бы комментарии только мешали, они бы не читали их.

Тут я могу встречный вопрос задать: а тебе не приходило в голову, что комментарии могут быть полезны? И если приходило, то какие действия ты предпринимал, чтобы найти ответ на этот вопрос?

Ты сам пишешь выше:
> Комментарии внутри функций как правило бесполезны, если там какой-нибудь WARNING/TODO/HACK не написан
> как правило

Да, как правило. Но это одно из тех правил, которые выполняются в 95% случаев, и всегда остаются неустранимые 5% других случаев, когда комментарии нужны.

> какой-нибудь WARNING/TODO/HACK

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

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

Хочешь ещё примеров, когда комменты внезапно оказываются нужны? Неочевидный edge-case, ради которого тут надо поставить проверку, и совершить пару дополнительных телодвижений, или наоборот прервать работу раньше времени. Иногда проверка на неочевидный edge-case делает edge-case очевидным, но не всегда. В некоторых случаях это выглядит бессмыслицей: "ну и что, что node->depth % 3 == 2"? Чем нам ноды с глубиной равной двум по модулю три не угодили? Тебе не приходилось сталкиваться с таким? Когда одна дурацкая непонятная проверка требовала остановиться, и десять минут сочинять такой случай, когда она сработает, и потом ещё полчаса думать, почему в этом случае надо досрочно завершать работу алгоритма с ошибкой? Гайды по работе с кодом, часто в таком случае рекомендуют, разобравшись в случае, проконсультироваться с другими о том, правильно ли ты понял, и дописать в код комментарий, изложив вкратце свои находки, с тем чтобы следующий, кто будет читать этот код, не тратил бы столько времени на понимание.

Или, скажем, коммент вида "здесь нет нужды проверять всю эту кучу указателей на NULL, а индексы на выход за границы, потому что..." и далее следует какое-то объяснение этому.

Или тебе всё это вышесказанное ни о чём не говорит? Твоё мышление догматично, и ты слепо веришь признанным авторитетам? Ок, давай зайдём с этой стороны. Для тебе Торвальдс авторитет? Открой CodingStyle linux и почитай там, что написано о комментах. И ты увидишь там что-то типа (я по памяти, сорри): комменты нужны на top-level'е, перед функцией, и они должны отвечать на вопрос "что?" -- что функция делает; комменты в теле функции нежелательны, но если они есть, они должны отвечать на вопрос "как?" -- как функция делает то, что она делает; комменты внутри нежелательны, потому что код должен быть самоописательным, но иногда это невозможно -- есть семантический разрыв между кодом и задумкой программиста, и его не всегда можно устранить переписав код иначе, и в таких случаях, комменты нужны. CodingStyle linux не запрещает комменты, более того явно разрешает, оговариваясь при этом, что по-возможности надо писать так, чтобы комменты были бы не нужны.

Но догматизм или нет, CodingStyle linux'а заточен под C и 80x25 окно текстового редактора. Первое просто не обсуждается, а второе -- технические ограничения из 90-х. (Если ты почитаешь внимательно этот CodingStyle, то увидишь прямые отсылки к этим самым техническим ограничениям). Сегодня эти технические ограничения неактульны (глянь на это[1], например), а C используется не во всех проектах. В C++, например, 80 строк -- это дурацкое ограничение которое не работает, потому что строчки длинее, там может быть что-нибудь типа for(auto iter = my_collection.begin(); iter != my_collection.end(); iter ++), и это что-то может оказаться на два-три уровня идентации сдвинуто. Отчасти это забарывают отказом от табов шириной в 8 пробелов, но даже этого часто недостаточно. И ежели ты сегодня начинаешь новый проект, я тебе очень серьёзно рекомендую подумать о том, чтобы ограничить ширину строки значением побольше -- чем-нибудь из диапазона 90..110.

[1] https://blog.immersed.team/working-from-orbit-39bf95a6d385?g... Если лень читать эту стену текста, то поиском по странице поищи "glance" и позырь на скриншот. 80x25? Хаха.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
  Введите код, изображенный на картинке: КОД
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру