что нельзя делать никогда
От: stronk2  
Дата: 18.12.13 05:24
Оценка: -7
Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?

По моей версии:
1. магические константы
2. копи-паста

Ваши варианты?
Re: что нельзя делать никогда
От: 0x7be СССР  
Дата: 18.12.13 05:30
Оценка: +9
Здравствуйте, stronk2, Вы писали:

S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?

Никакие.
Всегда есть кейс одноразовой программки, которая будет тут же выброшена, там можно ВСЕ )
Re: что нельзя делать никогда
От: мыщъх США http://nezumi-lab.org
Дата: 18.12.13 05:54
Оценка: 4 (2) +4 -3
Здравствуйте, stronk2, Вы писали:

S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?


выделенного нет и не может быть ни при каких условиях.

S>По моей версии:

S>1. магические константы
контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.

S>2. копи-паста

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

S>Ваши варианты?

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

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

магические константы и копи-паста -- это тактика, которая вообще очень спорный и субъективный момент.

ЗЫ. пояснения не помешают. что такое магические константы? если это гравитационная постоянная, то и хрен с ней. она, действительно, константа. а вот ширина экрана в 80 символов в текстовом режиме -- это переменная и тут, действительно, использование констант привязывает программу к одному единственному разрешению, однако, использование переменных само по себе не дает гибкости, ибо чтобы программа работала на экранах разных размеров заставляет намного глубже продумывать интерфейс, особенно с учетом того, что там может быть скролл (скажем, высота экрана 1000 строк, но отображаются только 100 из них, а потому выводить что-либо в центр -- очень плохая идея, намного худшая нежили работать с фиксированным разрешением 80х25).

ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[2]: что нельзя делать никогда
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 18.12.13 06:18
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>ЗЫ.ЗЫ. если и есть что-то, что _никогда_ не следует делать, так это исходить из предпосылки, что все юзеры работают с том же окружении, что и разработчик по.


Это у тебя случай "коробочного ПО" по Спольскому. Там — да, эта ошибка фатальна.
Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet
The God is real, unless declared integer.
Re: что нельзя делать никогда
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 18.12.13 06:22
Оценка: +1
Здравствуйте, stronk2, Вы писали:

S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?


Если исключить из рассмотрения 1) одноразовый код (уже сказали), 2) автогенерируемый код и 3) код после обфускации, и оставить только то, что люди пишут руками, то это:
  • Зависимые от языка грубейшие нарушения стиля, которые принципиально мешают читать код. Кроме названного Вами (но в заземлённом к реальности варианте) это не соответствующее вообще никаким правилам оформление кода (начиная с отступов).
  • Заведомые отступления от спецификаций, в диапазоне от неверных алгоритмов до троянских закладок.

    S>По моей версии:

    S>1. магические константы

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

    S>2. копи-паста


    Копипастинг плох, как минимум в пределах одного файла, но есть случаи, когда лучше его делать (с редактированием по месту), чем пытаться изобретать что-то обобщённое.
    У меня такое происходит в тестах.
  • The God is real, unless declared integer.
    Re[3]: что нельзя делать никогда
    От: Ziaw Россия  
    Дата: 18.12.13 06:26
    Оценка:
    Здравствуйте, netch80, Вы писали:

    N>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet


    Сколько он там будет стоять без обновлений?
    Re[4]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 06:30
    Оценка:
    Здравствуйте, Ziaw, Вы писали:

    N>>Но вот у меня сейчас обстановка, что я знаю на 100%, что на целевых системах будет RHEL 6.5 с теми пакетами, которые я скажу установить, а различие начнётся с кабеля, вставленного в ethernet


    Z>Сколько он там будет стоять без обновлений?


    Это неважно, потому что обновляться он будет вместе с моими целевыми пакетами.
    The God is real, unless declared integer.
    Re[2]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 06:38
    Оценка: -1
    Здравствуйте, мыщъх, Вы писали:

    М>контрпример -- коэффициенты в различных вычислениях. самые умные имена будут К1, К2, К3. "умность" тут в краткости, т.к. К1 короче чем 123456789.987654321, но за это приходится платить поиском мест, где они определены.


    Какие коэффициенты, откуда взялись?

    М>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.


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

    М>не следует путать стратегию и тактику. если сделать ставку на то, что код выполняется на определенной архитектуре и/или компилируется определенными компиляторами -- об этом можно сильно пожалеть.


    А нагадить посреди своей комнаты — это стратегия или тактика?

    М>ЗЫ. пояснения не помешают. что такое магические константы?


    Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?
    Re[3]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 06:46
    Оценка: +2 -1
    Здравствуйте, stronk2, Вы писали:

    М>>если код размножен в 100500 местах, то это очень плохо. если код размножен в двух местах, которые к тому же слегка отличаются друг от друга -- это вполне нормально и ничуть не смертельно.


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


    "Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp.

    М>>не следует путать стратегию и тактику. если сделать ставку на то, что код выполняется на определенной архитектуре и/или компилируется определенными компиляторами -- об этом можно сильно пожалеть.


    S>А нагадить посреди своей комнаты — это стратегия или тактика?


    Когда начинаются таки сравнения, ясно, что аргументы кончились.

    М>>ЗЫ. пояснения не помешают. что такое магические константы?


    S>Ну ладно, нельзя требовать, чтобы все знали терминологию. Но хотя бы гуглить ты умеешь?


    Я пошёл за попкорном.
    The God is real, unless declared integer.
    Re[4]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 06:56
    Оценка: -1
    Здравствуйте, netch80, Вы писали:

    N>"Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp.


    Код должен быть простым и понятным безо всяких диффов. Ваш Кэп.

    N>Когда начинаются таки сравнения, ясно, что аргументы кончились.


    Когда начинается важное надувание щек, аргументы точно кончились.
    Re[5]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 06:57
    Оценка: -2
    Здравствуйте, stronk2, Вы писали:

    N>>"Рубить руки" и навсегда изгонять из профессии — это надо применять к программисту, который не знает ни даже православного юниксового diff с несколькими режимами сравнения и вывода, ни даже простейшего виндового cmp.

    S>Код должен быть простым и понятным безо всяких диффов.

    Он простой и понятный.

    S> Ваш Кэп.


    Вы ошиблись кораблём, уважаемый.

    N>>Когда начинаются таки сравнения, ясно, что аргументы кончились.


    S>Когда начинается важное надувание щек, аргументы точно кончились.


    Верное замечание. Сдуйте щёки и вернитесь к теме треда.
    The God is real, unless declared integer.
    Re[2]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 06:59
    Оценка:
    Здравствуйте, 0x7be, Вы писали:

    0>Всегда есть кейс одноразовой программки, которая будет тут же выброшена, там можно ВСЕ )


    Даже в этом случае надо соблюдать минимальные правила гигиены. Чтобы не привыкать
    Re[6]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 07:00
    Оценка:
    Здравствуйте, netch80, Вы писали:

    N>Он простой и понятный.


    Если ты предлагаешь использовать для его анализа дифф — очевидно, что нет.
    Re[7]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 07:02
    Оценка:
    Здравствуйте, stronk2, Вы писали:

    N>>Он простой и понятный.


    S>Если ты предлагаешь использовать для его анализа дифф — очевидно, что нет.


    Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?
    The God is real, unless declared integer.
    Re[8]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 07:07
    Оценка:
    Здравствуйте, netch80, Вы писали:

    N>Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?


    Смешалось всё — кони, люди...
    Дифф в гите нужен для того, чтобы понять что изменилось в коде, а не что делает код. Искренне ваш, Генерал Очевидность.
    Re[9]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 07:11
    Оценка:
    Здравствуйте, stronk2, Вы писали:

    S>Здравствуйте, netch80, Вы писали:


    N>>Объясни тогда связь. Вот рассказ git'а (или почти любого аналога) об изменении, внесённом коммитом — это тоже дифф. Ты считаешь, что код должен быть настолько простым и понятным, чтобы не смотреть в этот дифф, а всё понимать по commit message?


    S>Смешалось всё — кони, люди...


    У тебя — да.

    S>Дифф в гите нужен для того, чтобы понять что изменилось в коде, а не что делает код.


    Цитирую твои слова:

    Попробуй определи с одного взгляда — чем отличаются два похожих куска текста, и отличаются ли вообще.


    Где тут хоть слово про "что делает код"? Вопрос был целиком и полностью про отличие текстов. Потому я и сказал про дифф. А понятность, очевидно (tm), определяется содержанием, а не различиями.

    S> Искренне ваш, Генерал Очевидность.


    Вообще-то Капитан Очевидность вырастает до Адмирала Ясен Хрен (я заменил последнее слово на похожее, но пригодное для открытых источников). Генералов тут в иерархии не встречается.
    The God is real, unless declared integer.
    Re[10]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 07:13
    Оценка:
    Здравствуйте, netch80, Вы писали:

    N>Где тут хоть слово про "что делает код"?


    А с какими целями люди читают код? Я не виноват, что ты не в состоянии сложить 2 и 2.
    Re: что нельзя делать никогда
    От: D. Mon Великобритания http://thedeemon.livejournal.com
    Дата: 18.12.13 07:13
    Оценка: :))) :))) :)))
    Здравствуйте, stronk2, Вы писали:

    S>Какие вещи в коде можно считать однозначно плохими и нельзя использовать никогда и ни при каких условиях?


    1. Динамическая типизация.
    2. С++

    Re[10]: что нельзя делать никогда
    От: stronk2  
    Дата: 18.12.13 07:19
    Оценка:
    Здравствуйте, netch80, Вы писали:

    N>Генералов тут в иерархии не встречается.


    Кроме капитана флота есть еще и капитан армии. Не позорился бы с такими безграмотными "разоблачениями".
    Re[11]: что нельзя делать никогда
    От: netch80 Украина http://netch80.dreamwidth.org/
    Дата: 18.12.13 07:21
    Оценка:
    Здравствуйте, stronk2, Вы писали:

    N>>Где тут хоть слово про "что делает код"?


    S>А с какими целями люди читают код?


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

    S> Я не виноват, что ты не в состоянии сложить 2 и 2.


    Да, получить в результате этой операции 9, как ты сделал, я не могу. Что-то мешает. Образование и опыт, наверно...
    The God is real, unless declared integer.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.