Про копи-паст
Jul. 18th, 2007 07:55 pmМда, тема преследовала меня уже давно, но сегодня, похоже, дошёл до очередного уровня дзен.
Вы все видели как происходит Это. Каокй-нибудь человек со специальностью программист (обычно студент) нажимает два заветных сочетания клавиш 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. Пользы точно больше будет.
Вы все видели как происходит Это. Каокй-нибудь человек со специальностью программист (обычно студент) нажимает два заветных сочетания клавиш 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. Пользы точно больше будет.
no subject
Date: 2007-07-19 08:38 am (UTC)Слава богу, сейчас я работаю в нормальной команде.
no subject
Date: 2007-07-19 10:10 am (UTC)Про массивы
Date: 2007-07-21 03:24 pm (UTC)Массивы, заполняющиеся как
{
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)Re: Про массивы
Date: 2007-07-21 03:56 pm (UTC)Плохо когда кусок кода строк в 10 закопипастен 8 раз. Причём если даже не писать на все 8 жутко вариативного метода, в 2-3 атомарных уложиться можно.
no subject
Date: 2007-07-21 04:15 pm (UTC)открыла референс стала тупо считать описание всех функций и т.д.)) вообщем всё понятно но как использовать на практике хз)))
ну вообщем да, я пользовалась чужим кодом из разных источников чтобы сделать _это_ )))))
с миру по нитке, но зато сделала что хотела
думаю копипаст эт для тех кто ещё ничо не умеет вроде меня)) дальше - надо расти))
no subject
Date: 2007-07-21 05:17 pm (UTC)1) не трогаешь его и пользуешься как "чёрным ящиком",
Или
2) начинаешь править, но разбираешься как он работает.
Плохо, когда студенты (которые как бы учиться должны) копируют весь код для своего курсовика, а потом "хаками" доводят его до состояния рабочего. И плохо, когда они привыкают делать ето и дальше копи-пастят по привычке.
А отсюда растёт другая весёлая проблема: если скопи-пастить код в десяток строчек из одного модуля в другой, то при изменении требований или исправлении багов, то в одном из кусков кода возникает ошибка. Работает это правило надёжно - проверял не раз.
no subject
Date: 2007-07-23 05:21 am (UTC)1) google search по слову simian; download
2) запуск simian включается в build process
3) чтобы ложные срабатывания не доставали, пишется маленькая утилитка, позволяющая быстро фильтровать выход simian'а (и заодно представлять его в более удобном для навигации виде)
Дальнейшие шаги понятны.
Ну статью я писал как вдохновление для новичков, скоре
Date: 2007-07-23 06:19 am (UTC)1) к звену lead/managment я не отношусь, а последние смотрят на копи-паст не с сильной, но с симпатией.
2) Simian язык проекта не поддерживает.
За совет спасибо.
Re: Ну статью я писал как вдохновление для новичков, ско
Date: 2007-07-23 06:56 am (UTC)На самом деле simian даже в plain text дубликаты находит. Поддержка языка позволяет ему замечать некоторые copy-paste'ы с небольшими изменениями типа переименований переменных; в принципе, это не суперважно, можно жить и без этого.
Re: Ну статью я писал как вдохновление для новичков, ско
Date: 2007-07-23 07:02 am (UTC)Моя личная статистика (оттуда же) - 0,7 дефекта на каждый copy-paste более чем 6 строк, возникающих именно в силу фактора "поправил в одном месте, забыл поправить в другом". Учитывая среднюю стоимость исправления такого дефекта в 2 человеко-часа, можно посчитать, во сколько обходится такой стиль.
Re: Ну статью я писал как вдохновление для новичков, ско
Date: 2007-07-23 07:08 am (UTC)Будешь смеятся - 1С script.
simian скачал дистрибутив, сейчас посмотрю - благо даже лицензия позволяет.
Re: Ну статью я писал как вдохновление для новичков, ско
Date: 2007-07-23 07:11 am (UTC)Re: Ну статью я писал как вдохновление для новичков, ско
Date: 2007-07-23 07:21 am (UTC)Наверно, это даже хорошо, что я их нашёл когда они ещё багами объявленны не были. ;)
BTW
Date: 2007-07-23 08:02 am (UTC)Брали версию с неисправленным багам, прогоняли через анализатор дублирования, а потом сравнивали со списком изменённых строчек?
Re: BTW
Date: 2007-07-23 08:14 am (UTC)no subject
Date: 2008-04-11 06:54 pm (UTC)В инсте при куче немаленьких и однообразных заданий, без копи-паста, можно сойти с ума.