Re[9]: оцените код
От: Sharov Россия  
Дата: 23.12.21 14:44
Оценка:
Здравствуйте, kaa.python, Вы писали:

S>>Ну с другой стороны человек может на предупреждения IDE забить, а результаты CI видны всем.

S>>Скорее всего имеет смысл.
KP>Многие тесты довольно тяжело запускать локально и они жрут прорву вычислительного времени. Тот же SonarQube не очень удобно стартовать локально по моим ощущениям. Ну и как еще быть уверенным что они реально были запущены перед коммитом? Плюс некоторые специфичные линтеры будут иметь сложности с лицензиями если за пределами CI. Куча проблем которые быстро и универсально решаются если все эти проверки часть CI. Локально же хватает предупреждений от ClangTidy, после него довольно редко что-то еще находится уже во время сборки на CI, хотя и бывает.

Речь о предупреждения по итогу компиляции, зачем еще тесты запускать? Получил замечание от компилятора, линтеров,
исправил, и далее по кругу.
Кодом людям нужно помогать!
Re[10]: оцените код
От: StandAlone  
Дата: 23.12.21 14:47
Оценка: +1
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>Потому что в обычных компаниях переписыванием работающего кода не занимаются.


Только он не работает(за пределами трех с половиной изначальных тест-кейзов) и ежеспринтно приносит кучу новых багов... а так-то да. Написано-(спихнуто на поддержку какому-то лоху)-забыто. Чукча не читатель, однако!

SVZ>Надо бы. Но!

SVZ>Будешь переписывать — пользователи ждать не будут, уйдут к конкурентам и компания разорится

А пока эти самые пользователи генерят сотни багрепортов практически кажный божий день, они конечно страсть как довольны.
Re[11]: оцените код
От: Stanislav V. Zudin Россия  
Дата: 23.12.21 14:53
Оценка:
Здравствуйте, StandAlone, Вы писали:

SVZ>>Будешь переписывать — пользователи ждать не будут, уйдут к конкурентам и компания разорится


SA>А пока эти самые пользователи генерят сотни багрепортов практически кажный божий день, они конечно страсть как довольны.


Реакция на багрепорты не зависит от красоты кода. Это исключительно политика компании.
Одни кидаются сразу исправлять, другие прикидываются ветошью и не исправляют, пока не возбухнет какой-нибудь очень богатый корпоративный клиент.
_____________________
С уважением,
Stanislav V. Zudin
Re[2]: оцените код
От: StandAlone  
Дата: 23.12.21 15:00
Оценка: +2
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Ну и как ?


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

Ваш пример.


Работает? Работает! Ну, почти...если опрессовку не делать.

Как должно быть:


И то, и другое — сварочный шов, который выполняет функцию соединения деталей. Только первый делает это из рук вон плохо. Он не удерживает, а придерживает. И никакими размазываниями соплей по тарелке про высокие эмпиреи, алгоритмы и структуры зоны термического влияния и межкристаллитную коррозию, оправдать это дерьмо — невозможно. Поскольку это не работа профессионала, а чистый брак. Который впоследствии непременно приведет, и уже приводил, и приводит к материально-временным затратам неизвестного масштаба.
Это же, Рабинович, относится и к вашему вопросу(с).
Re[3]: оцените код
От: Pavel Dvorkin Россия  
Дата: 23.12.21 15:18
Оценка: +1 -1
Здравствуйте, StandAlone, Вы писали:

<skipped>

Я же не раз объяснял — разные требования применяются в разных ситуациях.

Если уж хочется наглядное сравнение, то пожалуйста

https://okru.ru/files/images/20210713/ibq586tkgqmr.jpg

https://zen.yandex.ru/media/eurowelder/kak-sdelat-hudojestvennye-shvy-ruchnoi-dugovoi-svarkoi-sekrety-talanlivogo-svarscika-aleksandra-zyrianova-5f6b620c108c12349df9fd7d

(Привел ссылку, а не картинку потому что она понятна только в контексте)

Второй вариант едва ли выдержит серьезные нагрузки. Вот только этого от него никто и не требует. И никакие "материально-временные затраты неизвестного масштаба" тут возникнуть не могут. Иная задача совсем.
With best regards
Pavel Dvorkin
Re[10]: оцените код
От: CreatorCray  
Дата: 23.12.21 22:12
Оценка: +1 :)
Здравствуйте, Stanislav V. Zudin, Вы писали:

SVZ>И где так делают?

Везде, где есть настоящие seniors, по полученному опыту а не жопочасам.
Которые говнокод в production просто не пускают изначально.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[10]: оцените код
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 23.12.21 23:58
Оценка: 5 (1)
Здравствуйте, Sharov, Вы писали:

S>Речь о предупреждения по итогу компиляции, зачем еще тесты запускать? Получил замечание от компилятора, линтеров,

S>исправил, и далее по кругу.

Оговорился, не тесты, а проверки статическими анализаторами. Локально ты правишь только то, что тебе говорят локально установленные анализаторы (ты волен ничего не устанавливать), а вот анализаторы как часть CI проверяют что код соответствует минимально допустимому уровню в компании. Короче, правильный CI должен быть
Re[11]: оцените код
От: Stanislav V. Zudin Россия  
Дата: 24.12.21 05:35
Оценка: 12 (1) +2
Здравствуйте, CreatorCray, Вы писали:

SVZ>>И где так делают?

CC>Везде, где есть настоящие seniors, по полученному опыту а не жопочасам.
CC>Которые говнокод в production просто не пускают изначально.

Я бы с удовольствием взглянул на образцы промышленного кода настоящих seniors.
Желательно, что-нибудь вычислительное, а не чтение атрибутов из ORM
_____________________
С уважением,
Stanislav V. Zudin
Re[11]: оцените код
От: Sharov Россия  
Дата: 24.12.21 09:34
Оценка:
Здравствуйте, kaa.python, Вы писали:

S>>Речь о предупреждения по итогу компиляции, зачем еще тесты запускать? Получил замечание от компилятора, линтеров,

S>>исправил, и далее по кругу.
KP>Оговорился, не тесты, а проверки статическими анализаторами. Локально ты правишь только то, что тебе говорят локально установленные анализаторы (ты волен ничего не устанавливать), а вот анализаторы как часть CI проверяют что код соответствует минимально допустимому уровню в компании. Короче, правильный CI должен быть

А CI какой, Teamcity, например?
Кодом людям нужно помогать!
Re[12]: оцените код
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 24.12.21 10:10
Оценка: 4 (1) +1
Здравствуйте, Sharov, Вы писали:

S>А CI какой, Teamcity, например?


Jenkins поверх K9s кластера с кучей скриптов собственного производства. Выглядит довольно монструозно, особенно если для своего проекта надо что-то поменять при этом другим ничего не сломать, но пока держится
Re: Это сеньорский код?
От: yenik  
Дата: 24.12.21 10:50
Оценка:
Знал я одного человека, который и как архитектор, и как руководитель был очень хорош. Он давно ушёл на высокую должность.
А вот код он писал такой, что кровь из глаз. Строки по 500 знаков, функции по 200 строк и т.д.
Он просто настолько хорошо соображал, что ему любой говнокод было не в тягость читать. Ну и сам он писал соответственно.
Re[2]: Это сеньорский код?
От: CreatorCray  
Дата: 24.12.21 12:57
Оценка:
Здравствуйте, yenik, Вы писали:

Y>Он просто настолько хорошо соображал


Нет, говнокод пишут не поэтому.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: Это сеньорский код?
От: Sharov Россия  
Дата: 24.12.21 13:40
Оценка: +1
Здравствуйте, StandAlone, Вы писали:

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


S>>Судя по коду это отголоски до сих пор не прошедшей моды на ФП -- хаскель, монады и вот это вот все.


SA>Да ё-мое. Какое, аппликатив, ФП?

SA>
SA>export default function continuous(transform = identity) {
SA>  var domain = unit,
SA>      range = unit,
SA>      interpolate = interpolateValue,
SA>      clamp = identity,
SA>      piecewise,
SA>      output,
SA>      input;

SA>  function rescale() {
SA>    piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;
SA>    output = input = null;
SA>    return scale;
SA>  }
SA>

SA>Я зря, что ли, вот это вот все помечаю тегом php?

Тегов языка не видно, это мог быть как js, так и scala какая-нибудь.
Правда синтаксис (+transform(clamp(x))) несколько смущал. Но я за этими
языками не слежу, мож чего нового ввели.

А то, что выше я написал относилось к этом фрагменту:
function scale(x) {
    return (output || (output = piecewise(domain.map(transform), range, interpolate)))(+transform(clamp(x)));
  }

  scale.invert = function(y) {
    return clamp(+transform.invert((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));
  };



output = piecewise(domain.map(transform), range, interpolate)))(+transform(clamp(x)))

Типичный функциональный стиль -- ф-ия от ф-ии, через ф-ию прямо в ф-ию.
Кодом людям нужно помогать!
Re[5]: Это сеньорский код?
От: alzt  
Дата: 24.12.21 20:54
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Возьми любую реализацию серьезного математического алгоритма. Код, конечно, понятный, если это хорошая реализация, но обеспечить понятность кода — это не самая главная задача для автора.


Так математики обычно и программируют плохо. Сейчас кому только не программирует.
Но здесь же претензии именно к программисту, поэтому пусть потрудится, напишет лучше, а не по принципу — а всё равно никому не потребуется. ТС потребовалось же.
Re[8]: Это сеньорский код?
От: alzt  
Дата: 24.12.21 20:58
Оценка:
Здравствуйте, so5team, Вы писали:

S>А тут не нужно думать. Еще на стадии обучения программированию на подкорке должно были быть выбиты навыки выбора внятных идентификаторов и аккуратного написания кода.


S>Вы когда сильно голодны про вилку с ложкой забываете и все поглощаете исключительно с помощью рук? Или все-таки приобретенные в детстве навыки позволяют вам использовать столовые приборы?


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

Я как понял, что при этом человек комитит как есть и оправдывается тем, что всё равно "кому надо поймёт". Наверное, такой подход и оправдан где-то.
Re: Это сеньорский код?
От: alzt  
Дата: 24.12.21 21:11
Оценка:
Здравствуйте, StandAlone, Вы писали:

SA>Код достался мне на поддержку. Автор доступен, но по поводу своего творения не может сказать ни слова, кроме общих предположений.

SA>Я попытался выяснить, как такое вообще попало в мастер, в ответ услышал — "Этот человек выше чем сеньор, в подробном ревью не нуждается".

Я думаю ты не прав. Тебе код достался на поддержку — теперь ты за него отвечаешь. А ты вместо этого решил археологией заняться и ещё обвиняешь других людей.

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

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

Ситуация была бы другой, если бы он это сейчас пытался закомитить, а ты бы ему не давал. Тогда да, никаких оправданий нет.
Re[2]: Это сеньорский код?
От: CreatorCray  
Дата: 24.12.21 22:40
Оценка:
Здравствуйте, alzt, Вы писали:

A>При этом ты не знаешь в каких условиях они писали. Тут может быть как требование сделать здесь и сейчас, так и банальная неопытность писавшего. Может он потом исправился, а может и нет, сразу пошёл в руководители.


Код от этого лучше не становится
Так что всё равно.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Это сеньорский код?
От: Pavel Dvorkin Россия  
Дата: 25.12.21 04:13
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Судя по коду это отголоски до сих пор не прошедшей моды на ФП -- хаскель, монады и вот это вот все.

S>Типа быть таким крутым замороченным спецом, которому ну никак нельзя сделать просто, а надо
S>сделать трушно, с множеством слов из мира ФП и теории типов.

Кстати, да.

Никого в Java не напрягает вот такой примерно код


List<String>  list = users.stream().filter(...).sorted(...).collect(...);


более того, это сейчас просто норма. Никто не предлагает разбить это на части.

Но так пишут потому, что есть класс Stream, а его методы возвращают опять же Stream.

А если бы его не было, то получилось бы нечто вроде


List<String>  list = makeStringList(sorted(filter(users)));
With best regards
Pavel Dvorkin
Re[11]: оцените код
От: no_ise  
Дата: 25.12.21 19:40
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Здравствуйте, Stanislav V. Zudin, Вы писали:


SVZ>>И где так делают?

SVZ>>В каких-нибудь сильно богатых Гуглах?

KP>Так делали во всех 3-х компаниях где я работал за последнии 7 лет. Две богатые, но сильно не Гугл — Autodesk и Motional, и один стартап (там CTO крайне продвинутый и понимает цену технического долга и последующие проблемы развития).


Это у Autodesk то внутри мамонтообразного кода нет?


SVZ>>Потому что в обычных компаниях переписыванием работающего кода не занимаются.


KP>Чувствую пришло время определиться с тем, что же такое "обычная компания"


Ага Да, у Хофштадтера, кажется, было: медианы не существует.
Re[10]: оцените код
От: no_ise  
Дата: 25.12.21 19:59
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:


PD>Здравствуйте, kaa.python, Вы писали:



KP>>Нет, так ни в коем случае делать не надо и в приличных компаниях так не делают. Тут есть только два приемлемых решения. 1) говнокодер-ученый учится писать код. Лучший вариант, у нас гора PhD в ML и robotics и они, внезапно, пишут отличный код промышленного качества. 2) если корона не позволяет ученому научиться программировать, то говнокод используется строго как концепт и выкидывается после окончания исследования.


PD>Ответил в ответе CreatorCray, не буду повторяться


PD>http://rsdn.org/forum/job/8160106.1
Автор: Pavel Dvorkin
Дата: 23.12.21


KP>>Надеюсь что своих студентов вы несколько иначе учите тому как надо писать код, потому что от "уважительных причин" для говнокодинья волосы дыбом встают. Им же потом работу работать, уволят с испытательного срока


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


PD>Что же касается их работы — пока вроде никто не жаловался и никого не уволили.

PD>https://xn----7sbb1bdckl3bc1dyd.xn--p1ai/#rec351063040

PD>А вот когда пару лет назад пришлось решать задачу, похожую на ту, что я описал — тут требования были те же. Найти алгоритм, который решает задачу. Увы, не нашли.



Phd Phd рознь. Вообще, (универсальность и сопровождаемость vs алгоритмическое превосходство) в условиях (ограниченного времени/ресурсов)
это тема настолько бородатая... И до сих пор кмк универсального решения толком не известно... Может ли оно вообще существовать в нашем пространстве?

Это как, например, можно представить, что реально хоть и сложно будет воспитать спортсмена мастерски играть в футбол и волейбол.
А вот одновременно мастерски играть в шахматы и поднимать штангу?

Наверно, в каком-то другом измерении все это легко выполнимо. Т.е. если будет в шахматы играть и штангу поднимать какой-нибудь
андроид на стероидах. Или алгоритмы изобретать и код хороший выдавать будет AI, ну или, хотя бы, чтоб AI одно из двух делал.
Отредактировано 26.12.2021 0:05 no_ise . Предыдущая версия . Еще …
Отредактировано 25.12.2021 20:16 no_ise . Предыдущая версия .
Отредактировано 25.12.2021 20:00 no_ise . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.