pigmeich: (Default)
[personal profile] pigmeich
Мда, тема преследовала меня уже давно, но сегодня, похоже, дошёл до очередного уровня дзен.

Вы все видели как происходит Это. Каокй-нибудь человек со специальностью программист (обычно студент) нажимает два заветных сочетания клавиш ctrl+C и ctrl+V. Наука ещё не выснила, что он при этом испытывает, но ему хочется нажимать эти комбинации снова и снова. Снова и снова.

...Встретился со старым знакомым. Он перешёл на 4-ый курс программисткого факультета престижного ВУЗа нашей страны. Вдруг разговор зашёл о стиле. Я произнёс дежурную фразу: "стиль не в конкретных правилах для себя, а в том что ты можешь под чужие правила подстроиться и писать удобочитаемый код", ну и отметил, что копи-пастить код, вообще-то, нельзя. В ответ мне сказали, что я - дурак, а без копипаста невозможно писать курсовые.
Вот я сейчас думаю: а ведь без копипаста, действительно, курсовые писать невозможно. Им...

...Друзья кинули ссылку: http://skazka.spbu.ru/dtfiles/ctrlcctrlv/index.php. Голосов уже много. Жаль там не ведётся статистика сколько из них были программистами...

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

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

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

...В таблице есть поле явялющеся ссылкой на другую таблицу. Требется по каждому значению ссылки посчитать количество вхождений в таблицу. Конечно, достаём всё таблицу и обходим её в цикле. А в цикле конструкция "Если занчение равно тому-то, то прибавить к счётчику того-то единицу". Размножается всё копи-пастом. Ну так писать, конечно, проще, да и сразу видно что ты много кода написал...

...Мы растём, мы приобретаем опыт. Мы узнаём что значат умные слова вроде STL и code review. И в какой-то момент начинаем думать перед каждым нажатием на ctrl+V. Или не начинаем...

...Всякие жутко природоохранные организации вроде Гринписа пытаются остановить глобальное потепление. Вопрос насколько опасен для мира копи-паст не рассматривается. а зря. Возможно мир не успеет умереть от глобального потепления с похолоданием, потому что умрёт от копи-паста. В какой-нибудь медецинско-военной софтине...

Поэтому предлагаю перебиндить сочетания ctrl+C и ctrl+V на сочетание ctrl+F1. Пользы точно больше будет.

Date: 2007-07-19 08:38 am (UTC)
From: [identity profile] zamotivator.livejournal.com
КОпипаст - зло, но зло уже привычное.
Слава богу, сейчас я работаю в нормальной команде.

Date: 2007-07-19 10:10 am (UTC)
From: [identity profile] pigmeich.livejournal.com
Тут главный пойнт - перебиндить ctrl+V на ctrl+F1

Про массивы

Date: 2007-07-21 03:24 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/

Массивы, заполняющиеся как

{
ItemInfo(7, "seven", SOME_PREFIX_FOR_ENUM_FOX),
ItemInfo(3, "three", SOME_PREFIX_FOR_ENUM_DOG),
ItemInfo(88, "eighty eight", SOME_PREFIX_FOR_ENUM_CAT),
ItemInfo(1, "one", SOME_PREFIX_FOR_ENUM_DUCK),
ItemInfo(4, "four", SOME_PREFIX_FOR_ENUM_RAT),
}

всё равно заполняются копипастом. Разница с if:
1) невозможно обратить таблицу без параллельного if
2) эффективней

если 1 и 2 не нужно, а if оказался почему-то удобней, стоит ли идти на принцип?..

Re: Про массивы

Date: 2007-07-21 03:25 pm (UTC)
From: [identity profile] http://users.livejournal.com/_winnie/
попутал 1/2 преимущества способов, я думаю поняно как(таблицы эффективней, можно автоматически обратить в runtime).

Re: Про массивы

Date: 2007-07-21 03:56 pm (UTC)
From: [identity profile] pigmeich.livejournal.com
Нет с массивами как раз всё хорошо. Хотя особые ревнители кода могут попросить вытащить их в отдельный исходный файлик или, вообще, извне грузить.

Плохо когда кусок кода строк в 10 закопипастен 8 раз. Причём если даже не писать на все 8 жутко вариативного метода, в 2-3 атомарных уложиться можно.

Date: 2007-07-21 04:15 pm (UTC)
From: [identity profile] clbq.livejournal.com
ну я сама не программист не разу, но как-то дошло дело, чтобы написать одну штуку для своих нужд
открыла референс стала тупо считать описание всех функций и т.д.)) вообщем всё понятно но как использовать на практике хз)))
ну вообщем да, я пользовалась чужим кодом из разных источников чтобы сделать _это_ )))))
с миру по нитке, но зато сделала что хотела
думаю копипаст эт для тех кто ещё ничо не умеет вроде меня)) дальше - надо расти))

Date: 2007-07-21 05:17 pm (UTC)
From: [identity profile] pigmeich.livejournal.com
Нет, это как раз нормально, когда берёшь чужой работающий код и:
1) не трогаешь его и пользуешься как "чёрным ящиком",
Или
2) начинаешь править, но разбираешься как он работает.

Плохо, когда студенты (которые как бы учиться должны) копируют весь код для своего курсовика, а потом "хаками" доводят его до состояния рабочего. И плохо, когда они привыкают делать ето и дальше копи-пастят по привычке.

А отсюда растёт другая весёлая проблема: если скопи-пастить код в десяток строчек из одного модуля в другой, то при изменении требований или исправлении багов, то в одном из кусков кода возникает ошибка. Работает это правило надёжно - проверял не раз.

Date: 2007-07-23 05:21 am (UTC)
From: [identity profile] plakhov.livejournal.com
Ну собственно как я боролся, будучи лидом в "Нивале" на "Ночном Дозоре", писавшемся в основном новичками только-только из ВУЗ'а, которые пытались использовать Ctrl+C Ctrl+V довольно часто (на проекте, над которым сейчас работаю, программисты плюс минус элитные, и уже так не делают).

1) google search по слову simian; download
2) запуск simian включается в build process
3) чтобы ложные срабатывания не доставали, пишется маленькая утилитка, позволяющая быстро фильтровать выход simian'а (и заодно представлять его в более удобном для навигации виде)

Дальнейшие шаги понятны.
From: [identity profile] pigmeich.livejournal.com
Предложенный алгоритм на моём текущем проекте не подойдёт потому что:
1) к звену lead/managment я не отношусь, а последние смотрят на копи-паст не с сильной, но с симпатией.
2) Simian язык проекта не поддерживает.

За совет спасибо.
From: [identity profile] plakhov.livejournal.com
Прикольно, а что за язык?
На самом деле simian даже в plain text дубликаты находит. Поддержка языка позволяет ему замечать некоторые copy-paste'ы с небольшими изменениями типа переименований переменных; в принципе, это не суперважно, можно жить и без этого.
From: [identity profile] pigmeich.livejournal.com
> Прикольно, а что за язык?
Будешь смеятся - 1С script.

simian скачал дистрибутив, сейчас посмотрю - благо даже лицензия позволяет.
From: [identity profile] plakhov.livejournal.com
Аа. Я с ним не работал, даже и не знаю. Вдруг в нем копипейсты не настолько зло, т.к. он отражает эклектичную природу нашего законодательства =)
From: [identity profile] pigmeich.livejournal.com
Возможно, но баги в виде "в одном из скописатенных кусков сменили способ расчёта одной величины" уже полезли.
Наверно, это даже хорошо, что я их нашёл когда они ещё багами объявленны не были. ;)
From: [identity profile] plakhov.livejournal.com
Про пункт (1) - это, конечно, грустно :(

Моя личная статистика (оттуда же) - 0,7 дефекта на каждый copy-paste более чем 6 строк, возникающих именно в силу фактора "поправил в одном месте, забыл поправить в другом". Учитывая среднюю стоимость исправления такого дефекта в 2 человеко-часа, можно посчитать, во сколько обходится такой стиль.

BTW

Date: 2007-07-23 08:02 am (UTC)
From: [identity profile] pigmeich.livejournal.com
Кстати, как подсчитывали что баг находился в продублированном блоке кода?

Брали версию с неисправленным багам, прогоняли через анализатор дублирования, а потом сравнивали со списком изменённых строчек?

Re: BTW

Date: 2007-07-23 08:14 am (UTC)
From: [identity profile] plakhov.livejournal.com
Нет, там было примерно так. Я сколько-то copy-paste'ов из legacy кода исправлять не стал (по разным причинам, основная - времени на все не хватило); засунул output simian'а про них под фильтр. Фильтр был устроен так, что при изменении одного из двух дубликатов (если более точно - при пропадании соответствующего simian'овского сообщения, либо при изменения длины замеченного совпадения) выдавал сообщение. Любая такая штука на практике оказывалась дефектом (т.е. ровно 100%). Соответственно, примерно с 70% "контрольных" дубликатов к концу проекта это хотя бы раз произошло.

Date: 2008-04-11 06:54 pm (UTC)
From: [identity profile] demiuses.livejournal.com
Код более 5-8 строк, которые надо копипастить, мной уже рассматриваются как повод, остановится и подумать, как бы сделать покрасивше. Но это на работе.
В инсте при куче немаленьких и однообразных заданий, без копи-паста, можно сойти с ума.

Profile

pigmeich: (Default)
pigmeich

June 2017

S M T W T F S
    1 23
4 5678910
11121314151617
18192021222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 19th, 2026 09:32 am
Powered by Dreamwidth Studios