:: Не фоксом единым
Классификация кода
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
В теме "Хранение разного набора атрибутов в виде битовой маски" сказано:

Igor Korolyov
Если я говорю что пишу г*нокод потому что за него платят, но продолжаю называть это г*нокодом - это одно.

Возникает вопрос - а что же такое "идеальный код"? И, всякий ли не идеальный код называется Г-кодом?
Ratings: 0 negative/0 positive
Re: Классификация кода
Vedmak

Сообщений: 5949
Откуда: CiTY
Дата регистрации: 30.10.2003
Зависит от шкалы оценки.

В качестве бреда процитирую классику: "кому и кобыла невеста".


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Классификация кода
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
1) Всякий написанный код неидеален.
2) "Идеальный код" - это цель, она, как горизонт, недостижима - но стремиться к этому надо
3) Г*нокод это тоже в принципе абстрактный термин - нет "абсолютно г*венного" кода. Это просто обратная сторона шкалы качества. Любой реальный код находится где-то между этими понятиями.
4) Если в коде есть серьёзные проблемы, и это очевидно. Или если можно не долго думая предложить гораздо лучший вариант, то я считаю вполне логичным назвать соответствующий код г*ном


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Классификация кода
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Igor Korolyov
4) Если в коде есть серьёзные проблемы, и это очевидно. Или если можно не долго думая предложить гораздо лучший вариант, то я считаю вполне логичным назвать соответствующий код г*ном
А что значить "есть серьёзные проблемы"? Какие проблемы можно считать несерьёзными? Опять таки, лучший вариант всегда можно предложить, но всегда есть затраты на его реализацию.
Ratings: 0 negative/0 positive
Re: Классификация кода
S-type
Автор

Сообщений: 2969
Дата регистрации: 24.04.2004
Порассуждаем в слух. Программа пишется одними людьми (программистами) для других людей. Другие люди это пользователи, которые будут программу использовать, и другие программисты, которые будут программу "допиливать". Чем может не нравиться программа пользователям (исключая интерфейс)?

  • медленная программа.
  • глючная программа.

    Медленная программа (на нормальном железе) - это когда выбран неправильный алгоритм. Примеры: программа тянет все данные с сервера, а потом в клиенте в цикле из обрабатывает (вместо того, что бы добавить в запрос where). Или, программа делает сто запросов к серверу, вместо одного. Предположим, внутри программы всё красиво. Этот случай к Г-коду относится?

    Глючная программа - периодически вылет. Например, из за утечки памяти, длинной строки в каком то поле, встреченного "некорректного символа" (в иной кодировке) и пр. А этот случай к Г-коду относится?



    Исправлено 1 раз(а). Последнее : S-type, 03.09.17 20:44
    Ratings: 0 negative/0 positive
  • Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    Или, фраза "в коде есть серьёзные проблемы" это только про программистов? Как говорил мой преподаватель - что бы программа работала, код должен быть красивым. Конечно, это не означает, что красивый код всегда работает правильно. А какой код можно считать красивым? Красота - вещь субъективная.

    Для начала - правильно отформатировано. Например, правильные отступы. IDE уже давно эту проблему решили. Даже на этом этапе возможны расхождения во взглядах (количество пробелов отступа). Можно поставить какую нибудь плагин для рефакторинга, и он будет подсказывать:

  • вот тут можно переменную не объявлять, а вынести её в OUT.
  • вот тут можно сократить объявление переменной - указать var.
  • вот тут можно указать область видимости (private).
  • и т.д.

    Да, после внесения этих изменений код вроде как приблизится к идеальному. Вот только будет ли он надёжнее? Сомневаюсь.

    Как глядя на код увидеть, что "есть серьёзные проблемы"?
    Ratings: 0 negative/0 positive
  • Re: Классификация кода
    Igor Korolyov

    Сообщений: 34580
    Дата регистрации: 28.05.2002
    S-type
    А что значить "есть серьёзные проблемы"?
    Значит что сам разработчик знает в каком ШТАТНОМ случае работы его программы будет косяк, или коллега ему явно на это указывает. На форуме 100500 раз это встречается.
    S-type
    Какие проблемы можно считать несерьёзными?
    Ну, например, неуникальность генерации GUID, если дополнительно соответствующий ключ защищён констрейном уникальности. Т.е. мы знаем что проблема имеется, но во-первых вероятность её встретить ничтожно мала, а во-вторых мы даже на этот случай предусмотрели хоть какую-то "защиту".

    S-type
    Опять таки, лучший вариант всегда можно предложить, но всегда есть затраты на его реализацию.
    Если его МОЖНО предложить (т.е. по сути ты ЗНАЕШЬ как написать лучше), то, наверное, он не так уж и затратен в реализации. Вот если ты лишь ПРЕДПОЛАГАЕШЬ что лучший вариант есть, но для его поиска тебе надо думать 33 года и 3 месяца не слазя с печи - вот это уже совершенно точно будут неприемлемые затраты.
    Повторюсь в сотый раз - из всего времени работы программиста, "набивание текста программы" занимает ничтожную часть времени - я, конечно, не занимался такими измерениями, но вот так "с потолка" предположу что для "крепкого среднего" программиста это будет порядка 5% времени, а для высококлассного менее 1%.
    Потому делать упор на то что "тут надо с час подумать, а там можно сразу тыкать кнопки" будет некорректно. Вспомни народную мудрость - "Семь раз отмерь, один - отрежь". "Поспешишь - людей насмешишь".

    S-type
    Медленная программа ... Глючная программа
    Да, эти внешне заметные проявления - явный признак г*нокода. Естественно это не единственные признаки.

    S-type
    Как глядя на код увидеть, что "есть серьёзные проблемы"?

    Даже тупая машина в лице всяких решарперов или утилит подсчёта "метрик кода" может сказать когда код явно плохой (и даже порой подсказывает как его улучшить). Специалист-человек в принципе лишь взглянув на код (не углубляясь особо в его логику/семантику) тоже может вынести свой вердикт. "Форматирование" к этому не относится по большому счёту, т.к. это процесс "механический" (к сожалению для фоксового редактора автоформатировщик очень слаб, те же здоровенные SQL запросы он "красиво" отформатировать не сможет, увы).
    А вот то же использование public/private переменных в фоксе, или "километровые" размеры процедур/методов, или безумная смесь совершенно разных по смыслу методов в одном классе, или copy-paste подход к написанию кода... В общем есть масса таких "меточек", увидев которые можно сказать - "с этим кодом что-то не так". Или, если их число зашкаливает, прямо заявить о том что код - г*но.

    S-type
    Вот только будет ли он надёжнее?
    Конечно будет. Во-первых он скорее всего упростится (основная "цель" программных кодоулучшателей - сокращение числа взаимосвязей, прежде всего неявных, между разными кусками кода. Меньше "точек пересечения" - меньше потенциальных ошибок - лучше общее "качество кода"), во-вторых он станет понятнее потенциальному "наследнику" - тому кому придётся потом этот код дописывать - а значит шанс того что тот бедолага "не просечёт фишку и накосячит" сильно сократится.


    ------------------
    WBR, Igor
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Foxtrot

    Сообщений: 3408
    Откуда: Куда:
    Дата регистрации: 25.04.2003
    развели тут... курилку


    ------------------
    Мойте ноги, моя ноги вы моете и руки
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    Ну, почему же курилку? Тут вопрос о программировании, а не о море/отдыхе/водке/бабах представительницах прекрасной половины человечества... О качестве кода. Как субъективное отличить от объективного. Есть даже книги. Например: www.ozon.ru



    Исправлено 1 раз(а). Последнее : S-type, 04.09.17 12:40
    Ratings: 0 negative/1 positive
    Re: Классификация кода
    Аспид

    Сообщений: 3475
    Откуда: Москва
    Дата регистрации: 01.04.2005
    «Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете». Steven C. McConnell


    ------------------
    Ratings: 0 negative/2 positive
    Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    Или, вот ещё книжка: www.ozon.ru

    Полез читать...
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    В книжке "Чистый код" Роберта Мартина сказано:

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

    Определение понятное, но к точным его не отнесёшь.
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    На docs.microsoft.com есть пример:

    // Retrieves a connection string by name.
    // Returns null if the name is not found.
    static string GetConnectionStringByName(string name)
    {
    // Assume failure.
    string returnValue = null;
    // Look for the name in the connectionStrings section.
    ConnectionStringSettings settings =
    ConfigurationManager.ConnectionStrings[name];
    // If found, return the connection string.
    if (settings != null)
    returnValue = settings.ConnectionString;
    return returnValue;
    }

    Можно ведь так записать:

    static string GetConnectionStringByName(string name)
    {
    return ConfigurationManager.ConnectionStrings[name]?.ConnectionString;
    }

    Вопрос - можно ли верхний пример назвать г-кодом?
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Igor Korolyov

    Сообщений: 34580
    Дата регистрации: 28.05.2002
    Вероятно этот код писался ДО того как в стандарт языка был введен null-conditional оператор ?.
    И на то время он был вполне адекватен.
    Впрочем, по логике он НЕ является г*нокодом и сейчас, просто немного более избыточен (по сути оператор ?. именно такую проверку и делает). Но его несомненный плюс в том, что он совместим со старыми версиями компилятора, в отличие от "нового синтаксиса". Думаю что не открою большого секрета, но БОЛЬШИНСТВО проектов в мире пишутся не на "вчера выпущенном", и даже не на "прошлогоднем" компиляторе/IDE/стандарте языке. Хорошо если они хотя-бы на 4-м фреймворке будут основаны, а тебе не запретят явно использовать VS 2017 (со всеми её е***ыми апдейтами) т.к. "корпоративный стандарт" основан на 2015 или вообще на 2008 версии студии


    ------------------
    WBR, Igor
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Vedmak

    Сообщений: 5949
    Откуда: CiTY
    Дата регистрации: 30.10.2003
    S-type
    Вопрос - можно ли верхний пример назвать г-кодом?

    Со всем уважением к Igor Korolyov я добавлю и свои "5 копеек".

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

    Поясню акОдемическое: "самоуверенность" присуща человеку, программеры наследуют этот "ген" от предков которые "ЭВМ поднимали...", т.е. их учили в ВУЗ-ах и т.д.

    ..... тут я написал много слов.. и потом подумал, кому этот текст?...


    ------------------
    Говорить стоит лишь для тех, кто слушает.
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    S-type
    Автор

    Сообщений: 2969
    Дата регистрации: 24.04.2004
    Vedmak
    В примере разница не техническая, а концептуальная. Первый пример "для людей", а второй "для себя".

    Почему второй написан "для себя"? Разве глядя на него не понятно - что он делает?

    Опять таки, даже если подумать, что "?." ещё не изобрели, я бы переписал код так:

    // Retrieves a connection string by name.
    // Returns null if the name is not found.
    static string GetConnectionStringByName(string name)
    {
    // Look for the name in the connectionStrings section.
    ConnectionStringSettings settings =
    ConfigurationManager.ConnectionStrings[name];
    // If found, return the connection string.
    if (settings != null)
    return settings.ConnectionString;
    return null;
    }

    Так и короче, и смысл не теряется.
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Igor Korolyov

    Сообщений: 34580
    Дата регистрации: 28.05.2002
    S-type
    Так и короче, и смысл не теряется.
    Есть такой шаблон/приём/подход - минимизация "точек выхода" из метода. У тебя 2 точки, в их примере - только одна. Да, для кода на 3 строки это не существенно (т.к. всегда видно и один и второй return) но если строк побольше, то у такого шаблона есть свои плюсы...
    Можно и по поводу комментариев придраться - они тут малополезны, т.к. и так вполне очевидно что делает код. Ещё бы и к return прописали коммент

    Vedmak
    Первый пример "для людей", а второй "для себя".
    Ну, если подразумевать под "людьми" малограмотных "индусов/китайцев" то да, соглашусь. Только им и так понятнее не станет, и этак не хуже будет В общем я бы не стал (писать код "как для даунов"). Разве что это принятый в компании "стандарт", и я его вынужден соблюдать. Многобуквие в коде так же плохо как и в жизни


    ------------------
    WBR, Igor
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Божья_коровка

    Сообщений: 25720
    Дата регистрации: 23.08.2001
    Igor Korolyov
    Можно и по поводу комментариев придраться - они тут малополезны, т.к. и так вполне очевидно что делает код. Ещё бы и к return прописали коммент
    Ты улыбаешься, а я встречала код в котором к каждой его строчке был написан комментарий. Я и целые сочинения читала...Но видела и такие, где вообще не строчки комментария не было. Как найти оптимальный вариант?

    Igor Korolyov
    Многобуквие в коде так же плохо как и в жизни
    Ага, а краткость, сестра таланта?


    ------------------
    Жись, она как зёбра, полоса белая, полоса черная, а мне всегда задница достается...
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Simple777

    Сообщений: 33855
    Дата регистрации: 05.11.2006
    Божья_коровка
    краткость, сестра таланта?

    И мачеха гонорара. [sm128]
    Ratings: 0 negative/0 positive
    Re: Классификация кода
    Igor Korolyov

    Сообщений: 34580
    Дата регистрации: 28.05.2002
    Simple777
    И мачеха гонорара.
    Потому прибалтийский коллега и против однострочного решения

    Божья_коровка
    Как найти оптимальный вариант?
    Есть такое мнение, что если код нуждается в комментариях, то он плохой.
    Код должен быть настолько очевидным, чтобы быть понятным и безо всяких комментариев. Конечно же это идеал, к которому стоит стремиться, но вряд ли можно достичь...


    ------------------
    WBR, Igor
    Ratings: 0 negative/1 positive


    Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

    On-line: 2 MikhsR Guest

    © 2000-2024 Fox Club 
    Яндекс.Метрика