Имя пользователя:

Пароль:


Список форумов ПРАКТИЧЕСКИЕ ВОПРОСЫ Работа Программирование и IT Просмотров: 5493

Для программистов only: Elegant Code Club!


Давим клаву за бабло
  #1
Сообщение 28 Feb 2013, 11:13
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 12 лет 1 месяц 15 дней
Постов: 10707
Лайкнули: 3448 раз
Карма: 33%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 12 Sep 2024, 06:51

Запись из моего блога за 2 ноября 2008:

Как я побывал в шкуре Павлика Морозова

Обычно приходя в новый проект я нахожу, что его создатели (а также контракторы, работавшие до меня) по какой-то причине не были знакомы с некоторыми довольно простыми, но важными принципами программирования. Возможно, они болели когда в колледже, университете или на курсах программирования учитель объяснял эту тему, или сидящая рядом и пышущая молодостью студентка пагубно влияла на процесс усвоения дидактического материала - не знаю, но расхлёбывать этот ужас приходится мне... Иногда создаётся впечатление, что их зарплата была пропорциональна количеству написанных строк кода, а зачастую прослеживается склонность к мазохизму и хочется отправить их в фетиш-отель, где имеетсят прекрасный выбор кожаных плёток- ладно, заботиться о других - это уже альтруизм, но вам ведь, мать вашу, самим потом копаться в вами-же высраннынх шедеврах программирования! Как же вы так не заботитесь о себе, любимых? Моё правило в таких случаях - не высказывать своё "фэ": всё равно никто ничего не изменит, только подумают, что я умничаю - лучше тихонько, без излишней критики закончить проект и чтоб все были счастливы. Так вот, на прошлой неделе я нарушил это правило - уж не знаю какая нелёгкая меня понесла. Правда, нельзя не сказать, что меня не тянули за язык, что во многом оправдывает мой неблаговидный поступок. А было всё так: во время собрания, на котором присутствовали как девелоперы, так и бизнес-пёрсоны, руководительница проекта стала выпытывать у нас что бы мы могли предложить чтоб улучшить проект. Ну, кое-кто высказался с точки зрения проджект-менеджмента, а потом она переключилась на нас, девелоперов - типа, есть ли какие-то пути улучшить нашу и без того совершенную аппликацию? Сначала пристала к сидевшему рядом со мной индейцу по имени Джо Покоритель Информационных Систем, то тот отбрехался - всё хорошо, прекрасная маркиза; затем переключилась на меня, сверля взглядом следователя НКВД, ну я и начал что-то мямлить, даже выдавил несколько капель неприглядной правды, потом опомнился и сказал - ну, это всё наверное не интересно бизнес-пёрсонам, а она говорит: ок, тогда настучи на своих коллег изложи свои концепции письменно. Ну, мне ничего не оставалось - пришлось писАть кляузу...


Кляуза получилась такой пространной, что стало жалко чтоб она пропала. Так или иначе, но этот документ составил основу сайта "Elegant Code Club":

PowerBuilder.us

Каждая идея оформлена в виде форумной ветки, так что если кто-то захочет прокомментировать сказанное или опровергнуть крамольную мысль - это можно сделать с удобством (только по-английски, пжалуста; если по-русски, то здесь!). Материал собран в две кучи: первая - только для разработчиков PowerBuider, вторая - для всех программеров независимо от языка программирования.

  #2     Для программистов only: Elegant Code Club!
Сообщение 27 Sep 2015, 05:30
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
Зашел на ваш сайт элегантного кода.
Мне кажется, вы слишком категоричны в своих правилах. Я понимаю, что зеленому студенту может и нужно усвоить эти правила, но только что бы понять, когда их нужно нарушить. Вы как-то уж очень ориентированны на отступы (не скажу, что посмотрел все пункты, но те что видел, почти все сводятся к минимизации отступов).
По моему ваш первый начальник в детстве начале карьеры как-то сольно вас напугал этими отступами. _<_16_>_ _<_19_>_
Я согласен, что многие из примеров вами приведенных, весьма обоснованны и скорее всего верны в большинстве случаев, но не всегда!
Возможно я более толерантен к отступам (читай вложенности блоков), из-за специфики C++ где многое строится на области видимости ресурса жестко привязанного к времени его жизни или из-за того, что иногда приходится имплементировать алгоритмы и чем исходник больше похож на псевдо код (в котором обычно до-фига вложенности) тем лучше (на мой взгляд).

Даже улыбнувший вас пример с if(n>N){ b=true; }else{ b=false; } не всегда имеет под собой не компетентность. Хочу заметить, что я отношусь к этому примеру не как к конкретному коду, а как к шаблону.

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

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

Мне кажется интереснее было вы обсудить, когда имеет смысл их нарушать? :)

  #3     Для программистов only: Elegant Code Club!
Сообщение 27 Sep 2015, 20:32
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 12 лет 1 месяц 15 дней
Постов: 10707
Лайкнули: 3448 раз
Карма: 33%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 12 Sep 2024, 06:51

daner написал(а) здесь:
Мне кажется, вы слишком категоричны в своих правилах.
А моих-то там и нет.

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

Если честно, я в последнее время отдалился отдалился от этой тематики, так что для интересной дискуссии у меня маловато задора. Год назад я бы сделал подробный "разбор полётов" этого поста (ого-го какой! :_vsadnik_: ), а сейчас не хватает огонька Изображение. Так что пишите if(n>N){ b=true; }else{ b=false; } на здоровье, дяде Мише пох. :mrgreen:

  #4     Для программистов only: Elegant Code Club!
Сообщение 28 Sep 2015, 03:04
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
На нет,к говориться,и суда нет.

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

  #5     Для программистов only: Elegant Code Club!
Сообщение 28 Sep 2015, 05:18
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 12 лет 1 месяц 15 дней
Постов: 10707
Лайкнули: 3448 раз
Карма: 33%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 12 Sep 2024, 06:51

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

  #6     Для программистов only: Elegant Code Club!
Сообщение 28 Sep 2015, 08:57
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
ну учитывая что львиная доля этих постулатов покоится на страхе перед лишним отступом, то элемент веры присутствует.

  #7     Для программистов only: Elegant Code Club!
Сообщение 28 Sep 2015, 20:35
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 12 лет 1 месяц 15 дней
Постов: 10707
Лайкнули: 3448 раз
Карма: 33%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 12 Sep 2024, 06:51

Что ещё за страх? :_pozhimanie_plechami_: Большое количество отступов чаще всего свидетельствует, что код организован неправильно - вот и всё. Никаких страхов, суеверий, святых мощей и общения с потусторонним миром. _<_11_>_ _<_11_>_ _<_11_>_

  #8     Для программистов only: Elegant Code Club!
Сообщение 28 Sep 2015, 23:22
Canada, Ontario
Город: Toronto
Стаж: 11 лет 7 месяцев 27 дней
Постов: 4502
Лайкнули: 1104 раз
Карма: 25%
СССР: Кишлак "Кызыл пиез"
Пол: М
Лучше обращаться на: ты
Заход: 11 Sep 2024, 07:43

Эээх бедолаги. Виндусятники (Windows) с кофем(java) . Терзающие свои писюки(pc) . Ну в крайнем случае андроидо подобные коробочки. Не видали настоящей компьютерной мощи. Облачные решения почитаете за супер современные технологии. А они в мире реальных компьютеров уже как несколько десятков лет.... Хе хе.
Корпоративное и персональное налогообложение. Бухгалтерия. (Канада, Израиль). Открытие/закрытие, оценка бизнеса. www.MyTaxAdviser.ca
Веб-дизайн, Онлайн маркетинг, Программирование, Компьютерное оборудование и хостинг. www.SysComData.ca

  #9     Для программистов only: Elegant Code Club!
Сообщение 29 Sep 2015, 00:22
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
Ursego написал(а) здесь:
Что ещё за страх? :_pozhimanie_plechami_: Большое количество отступов чаще всего свидетельствует, что код организован неправильно - вот и всё. Никаких страхов, суеверий, святых мощей и общения с потусторонним миром. _<_11_>_ _<_11_>_ _<_11_>_

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

  #10     Для программистов only: Elegant Code Club!
Сообщение 29 Sep 2015, 00:23
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
as400 написал(а) здесь:
Эээх бедолаги. Виндусятники (Windows) с кофем(java) . Терзающие свои писюки(pc) . Ну в крайнем случае андроидо подобные коробочки. Не видали настоящей компьютерной мощи. Облачные решения почитаете за супер современные технологии. А они в мире реальных компьютеров уже как несколько десятков лет.... Хе хе.

не поясните, это то тут причем?

  #11     Для программистов only: Elegant Code Club!
Сообщение 29 Sep 2015, 06:30
Canada, Ontario
Город: Toronto
Стаж: 11 лет 7 месяцев 27 дней
Постов: 4502
Лайкнули: 1104 раз
Карма: 25%
СССР: Кишлак "Кызыл пиез"
Пол: М
Лучше обращаться на: ты
Заход: 11 Sep 2024, 07:43

О ничего особенного. Так просто, "крик души" или "оголтелый троллинг".
Корпоративное и персональное налогообложение. Бухгалтерия. (Канада, Израиль). Открытие/закрытие, оценка бизнеса. www.MyTaxAdviser.ca
Веб-дизайн, Онлайн маркетинг, Программирование, Компьютерное оборудование и хостинг. www.SysComData.ca

  #12     Для программистов only: Elegant Code Club!
Сообщение 09 Mar 2016, 16:46
Cth Аватара пользователя
Canada, British Columbia
Город: Vancouver
Стаж: 10 лет 9 месяцев 15 дней
Постов: 1550
Лайкнули: 312 раз
Карма: 21%
Пол: М
Заход: 09 Aug 2022, 19:36

я думал тему создать сначала, но потом передумал.

Ursego, я понимаю, что программирование для тебя уже не очень актуально, но на вопросик ответить, думаю, не сложно будет. Дело в том, что мне искренне кажутся весьма элегантными тернарные операции (даже пускай когда они вложены) и регулярные выражения. Ну, если сравнивать их с полной разверткой кода.

Мы тут дискуссию в ирц подняли. Большинство высокоуровневых программистов не любят ни тернарные операции ни регулярные выражения. А ты что думаешь по их поводу?

  #13     Для программистов only: Elegant Code Club!
Сообщение 09 Mar 2016, 18:12
Canada, Ontario
Город: Waterloo
Стаж: 9 лет 24 дня
Постов: 68
Лайкнули: 6 раз
Пол: М
Заход: 30 Sep 2020, 13:39
Вопрос конечно не комне был, но вставлю свои 10 копеек. _<_22_>_

Мне кажется, что понятие элегантности того или иного инструмента, зависит от места его применения.
А то, как любит мой быв. профессор говорить : "Если у тебя есть молоток, то в какой-то момент начинает казатся, что все остальное гвозьди".

тернарные операции могут вполне читабельно выглядеть, если их в одну строчку не писать
var = cond1 ? value1 :
      cond2 ? value2 :
      cond3 ? value3 :
              default_value;

минус только один вижу, не расширяемо. Скажем, нужно какое-то действие на условие навешать (ну там распечатку добавить и т.д.) и все => переписывай всю структуру.

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

  #14     Для программистов only: Elegant Code Club!
Сообщение 09 Mar 2016, 18:19
Ursego Аватара пользователя
СОЗДАТЕЛЬ ТЕМЫ
Canada, Ontario
Город: Toronto
Стаж: 12 лет 1 месяц 15 дней
Постов: 10707
Лайкнули: 3448 раз
Карма: 33%
СССР: Днепропетровск
Пол: М
Лучше обращаться на: ты
Заход: 12 Sep 2024, 06:51

Я отношу к элегантности всё, что делает код более читаемым (или более коротким, но не за счёт читаемости). Тернарная операция (или аналогичная функция Iif() / IIF() в некоторых языках) может уложить в 1 строку то, что без неё потребовало бы 4-5 строк - тут и дискутировать не о чём. Но, как и всякая вещь в мире, тернарная операция может быть злом - например, когда её элементы (или как оно там называется по-умному?) сами по себе представляют собой длинные экспрешены - так, что разделители (т.е. знак вопроса и двоеточие) проходится искать со свечой. В таком случае эти экспрешены надо эвальюировать в переменные (с нормальными именами!), а уже эти переменные использовать в тернарной операции. Строк в результате выйдет больше, но, как я уже неоднократно писАл, краткость и элегантность кода - не всегда синонимы. Одно из самых больших зол - nested expressions. Пусть вместо 10 строк выйдет 20, но, ради Аллаха, помещайте промежуточные результаты в переменные - это и читаемость улучшит, и дебагирование упростит (если overall result вышел неправильный, то в дебаггере будет видно какой именно этап ляпнулся), и взрослые дяди не будут считать тебя юнцом, который (вот ведь гений!) овладел синтаксисом и херачит такие экспрешены, в который без пол-литра не разобраться, думая, что это признак хорошего кодера (хотя на самом деле наоборот).

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

Вам есть что сказать по этой теме? Зарегистрируйтесь, и сможете оставлять комментарии
cron