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

Но понемногу я пришёл к выводу, что это вредно.

Даже не тем, что тратится лишнее время. Функции могут однажды пригодиться, и потом, это мелочи, тут нечто гораздо более страшное.

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

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

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

Но мало того, когда вы захотите исправить ошибку, вам вдруг станет страшно. Вы подумаете: "А что, если?.."

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

Нет такого программиста, которому нравилось бы наугад портить свои проекты. И вы откатываете правки и оставляете функцию сломанной, а рядом пишете новую, functionName2(). На этот раз правильную.
И заодно ещё что-нибудь.

@темы: Компьютеры

Комментарии
27.12.2012 в 01:16

Я какой-то неправильный программист. Никогда не пишу таких функций, чтобы просто были. Не понимаю, какой видят в этом смысл пишущие такой код люди.
27.12.2012 в 01:40

Гость, ну например, вам понадобилось написать TCachedFileReader, и для непосредственной задачи нужно читать файл по строкам. ReadLine(). В реализации ReadLine потребовался ещё ReadChar(). Так может, написать сразу IsEof(), Seek(), PeekChar(), и т.д., чтобы был весь базовый функционал? Или понадобилось читать UCS-2 и пропускать в начале файла BOM, так может, поддержать несколько разных форматов юникода? Всего-то запоминать кодировку, и переворачивать-перекодировать символ в ReadChar(). А на будущее будет готовый универсальный код!

Это та самая лень, которую принято ценить в программистах. Вместо того, чтобы каждый раз писать заново только нужное, программисты часто предпочитают иметь одну готовую покрывающую весь функционал какой-то области библиотеку. И так к этому привыкают, что само написание библиотеки становится приятным, связывается в голове с экономией времени и с выносом части смысловой нагрузки из текущего кода в "общие библиотеки", о подробностях реализации которых можно забыть.
27.12.2012 в 03:30

Не знаю как в этих ваших дельфях, но IsEof(), Seek(), PeekChar() обычно есть в стандартных библиотеках. Хотя да, в этом есть смысл. Но эти функции все-таки протестируются. А вот про юникод можно оставить просто задел на будущее, который потом просто дополнить. Хотя это просто мое мнение :)
27.12.2012 в 15:50

Удивительный вы народ, программисты. Вроде, на чужой планете живёте, а по родине совсем не скучаете. Кажется, что там, где есть программы, машинные языки, компьютеры - там и ваша родина.

Расширенная форма

Редактировать

Подписаться на новые комментарии
Получать уведомления о новых комментариях на E-mail