Возможно, тема для КСВ, если да прошу перенести.
Для начала создам здесь.
Недавно возникло некоторое недопонимание во взаимодействии на проекте. Код естественно под НДА, поэтому показываю очень близкий по стилю и смыслу.
Описание задачи:
Scales are a convenient abstraction for a fundamental task in visualization: mapping a dimension of abstract data to a visual representation. Although most often used for position-encoding quantitative data, such as mapping a measurement in meters to a position in pixels for dots in a scatterplot, scales can represent virtually any visual encoding, such as diverging colors, stroke widths, or symbol size. Scales can also be used with virtually any type of data, such as named categorical data or discrete data that requires sensible breaks.
For continuous quantitative data, you typically want a linear scale. (For time series data, a time scale.) If the distribution calls for it, consider transforming data using a power or log scale. A quantize scale may aid differentiation by rounding continuous data to a fixed set of discrete values; similarly, a quantile scale computes quantiles from a sample population, and a threshold scale allows you to specify arbitrary breaks in continuous data.
For discrete ordinal (ordered) or categorical (unordered) data, an ordinal scale specifies an explicit mapping from a set of data values to a corresponding set of visual attributes (such as colors). The related band and point scales are useful for position-encoding ordinal data, such as bars in a bar chart or dots in an categorical scatterplot.
Код достался мне на поддержку. Автор доступен, но по поводу своего творения не может сказать ни слова, кроме общих предположений.
Я попытался выяснить, как такое вообще попало в мастер, в ответ услышал — "Этот человек выше чем сеньор, в подробном ревью не нуждается".
"Сеньор всех сеньоров"(с)habr.
Моя точка зрения — написать в одну строку с кучей побочных эффектов способен любой не острый стажер, а вот решить сложное просто, понятно и поддерживаемо как раз способен только опытный разработчик. Встретил полное непонимание.
От людей, которые модифицировали внешние переменные в теле Array.some(), игнорируя результат, и меняли элементы массива в Array.forEach(). Они же в условном button1Click лезли в базу(диспатчили редаксовские экшены) или на сервак прямым Http запросом, в результате код презентационных компонент содержит по 3-4-5-10 тысяч строк кода в попытке охватить треть логики всего UI одним компонентом.
Попытки объяснить, что это нежелательно, про LSP, трехзвенку или SOLID также встречаются полным непониманием.
Люди эти все, конечно, тимлиды и сеньоры, или даже сеньоры всех сеньоров. По происхождению, конечно, из html-программистов, тестировщиков и прочих активных пользователей хабра типа войтивайти. Возможно эти все части паззла как-то связаны.
Что скажет общество?
Как по вашему мнению, такая ситуация в сфере разработки ПО теперь нормальна?
Или это только во фронтенде?
Вай какой дурдом!!!
SA>Автор доступен, но по поводу своего творения не может сказать ни слова, кроме общих предположений.
Не удивительно.
SA>Я попытался выяснить, как такое вообще попало в мастер, в ответ услышал — "Этот человек выше чем сеньор, в подробном ревью не нуждается". SA>"Сеньор всех сеньоров"(с)habr.
Не, гнать нахрен на мороз таких пейсак. Это не senior, это скорее mumbling elderly.
SA>Моя точка зрения — написать в одну строку с кучей побочных эффектов способен любой не острый стажер, а вот решить сложное просто, понятно и поддерживаемо как раз способен только опытный разработчик.
Совершенно верно.
SA>Как по вашему мнению, такая ситуация в сфере разработки ПО теперь нормальна? SA>Или это только во фронтенде?
SA>Попытки объяснить, что это нежелательно, про LSP, трехзвенку или SOLID также встречаются полным непониманием.
У тебя недостаточный ранг в стае, чтобы спорить с самим Сеньором. Поэтому все твои наукообразные слова — наглые необоснованные претензии на более высокий ранг, чем тебе разрешили, и ничего более. SA>Люди эти все, конечно, тимлиды и сеньоры, или даже сеньоры всех сеньоров. По происхождению, конечно, из html-программистов, тестировщиков и прочих активных пользователей хабра типа войтивайти. Возможно эти все части паззла как-то связаны. SA>Что скажет общество? SA>Как по вашему мнению, такая ситуация в сфере разработки ПО теперь нормальна? SA>Или это только во фронтенде?
Это в любой кастовой системе. "Сначала поделай как у сеньоров 'принято', и заслужи". (Если засчитают )
Когда-то жил мастер-программист, который писал неструктурированные программы. Ученик, пытаясь подражать ему, тоже стал писать неструктурированные программы. Когда ученик просил мастера оценить его труд, тот раскритиковал его за написание неструктурированных программ: "Что подходит мастеру, не подходит ученику. Ты должен постичь Дао, прежде чем переступить через структуру"
а вообще это же джаваскрипт, там так и надо
Как много веселых ребят, и все делают велосипед...
И все же, это код вроде как от создателя небезызвестной D3 и кучи других известных штук?
IMHO такое не подходит для работы в команде, а если он его один видит, почему нет, если у него мозг так устроен
А может если ты привык к такому стилю, такое даже нормально читается и понимается.
Здравствуйте, StandAlone, Вы писали:
SA>Как по вашему мнению, такая ситуация в сфере разработки ПО теперь нормальна?
Обычный код написанный без код-ревью, если пишешь скрипт который решит проблему тут и сейчас какая разница как он написан.
На проекте где налажено код-ревью такой код не пропустят.
Підтримати Україну у боротьбі з країною-терористом.
Здравствуйте, bnk, Вы писали:
bnk>И все же, это код вроде как от создателя небезызвестной D3 и кучи других известных штук?
Да пофигу от кого на самом деле.
bnk>IMHO такое не подходит для работы в команде
Не подходит, да.
bnk>А может если ты привык к такому стилю, такое даже нормально читается и понимается.
Ну как бы уже было сказано что даже аффтар сего гм... кода не может внятно сказать "Щито это за хня?!" (tm)
Неудивительно что остальные смотрят на сие как Адептус Механикус на вооружение орков.
Здравствуйте, CreatorCray, Вы писали:
CC>Вай какой дурдом!!!
Причем на ровном месте. Это не дистанция Левенштайна, не корреляционный анализ двумерного энергоспектра сигнала для определения частоты дыхания через детектирование желудочкового комплекса, не решение обратной задачи в гравиполе при 3D-сейсморазведке.
Это тривиальное аффинное преобразование.
Но тут использованы почти все способы выстрелить себе, и особенно отлаживающим этот самообфусцированный код, в ногу, предоставляемые современным JS.
Код в моей рабочей ситуации был не про это, конечно, но тоже достаточно близко. Скользящее окно в виртуальном скролле, отягощенное распространением реактивных стримов через закольцованные вторичные экшены в эффектах... слишком много, чтобы излагать. Суть — в том же.
Возведение гигантских фавел из копролитов.
CC>Идиоты нынче лезут везде, увы.
Цель создания топика именно здесь была попытка выяснить обстановку по миру. У меня была идея, дескать все это может быть связано с оттоком специалистов, в итоге бизнес призвал под знамена всех способных держать клавиатуру хоть как-то выполнить хотелки кастомера.
Но вот смотрю медиум, стековерфлоу, реддит... Там в посвященных фронтенду разделах прослеживается подобное. В крупных FE OS репозиториях от крупнейших вендоров тоже.
Что происходит? Специалисты не пишут ни статей, ни заметок на SO, ни в репы опенсорс?
Или базовые принципы инженерного дизайна уже девальвировались и устарели?
Здравствуйте, StandAlone, Вы писали:
SA>Код достался мне на поддержку. Автор доступен, но по поводу своего творения не может сказать ни слова, кроме общих предположений.
Говницо, да...
SA>Я попытался выяснить, как такое вообще попало в мастер, в ответ услышал — "Этот человек выше чем сеньор, в подробном ревью не нуждается". SA>"Сеньор всех сеньоров"(с)habr.
Если зайти в профайл автора на GitHub, там, собственно ответ на все вопросы:
Building a better computational medium. Founder @observablehq. Creator @d3. Former @nytgraphics. Pronounced BOSS-tock.
SA>Попытки объяснить, что это нежелательно, про LSP, трехзвенку или SOLID также встречаются полным непониманием. SA>Люди эти все, конечно, тимлиды и сеньоры, или даже сеньоры всех сеньоров. По происхождению, конечно, из html-программистов, тестировщиков и прочих активных пользователей хабра типа войтивайти. Возможно эти все части паззла как-то связаны. SA>Что скажет общество?
Почему ты сам до сих пор там?
SA>Как по вашему мнению, такая ситуация в сфере разработки ПО теперь нормальна?
Нет, это не нормальная ситуация. Нормальная ситуация это когда никто не может залить изменения в мастер, пока код не будет одобрен 2-3 другими разработчиками.
SA>Или это только во фронтенде?
Мне кажется, это часть проблемы. Фронтэнд штука довольно специфичная тем, что за ней не стоит каких-то базовых знаний (теория баз данных, теория криптографии, теория распределенных систем, там даже теория алгоритмов особо и не нужна) и каждый год очередной "прорыв" который всем срочно надо внедрить.
Именно этот код — да, крутого сеньора или даже выше. Для этого надо пойти посмотреть на весь файл целиком, а также понять контекст проекта. А суть там такая: это специальная узкоспециализированная либа-числодробилка (с поправкой на JS). Да, есть ряд областей, где важен именно такой "суровый" код. Человеку со стороны покажется какой-то херней, но человеку в теме все будет понятно. Ну или, при необходимости, новый человек, взявший на поддержку, сможет через какое-то время разобраться.
Тут надо вот что отметить:
— код всего файла выполнен в одном стиле; аккуратный, небольшой по размеру; есть комментарии
— при этом важно: код изменялся буквально 4 раза за 5 лет (https://github.com/d3/d3-scale/commits/9fe496e6d708bf30435c15f03ab9e5ae994ea7be/src/continuous.js); то еть это как раз код из разряда "кака-то базовая хрень, которую написал один раз и крайне редко туда лезешь"
— ко всем проекту есть развернутое ридми с комментариями, туториалами, примерами. Крайне все понятно. НЕ каждый сеньор сможет такое оформить. К вопросу о сеньорстве
— если взглянуть на профиль чувака — он, блин, создал d3 и куча либ вокруг. Думаю многие фронтендеры встречались с этой либой. Крайне популярная и известная штука. То есть он не только код может писать, но и: сопровождать его описанием, документацией, настраивать CI, всю инфраструктуру обвязку, а также находить и координировать людей вокруг этого.
В коде по перекладыванию JSON в базу и обратно, там да — такой код плохо бы смотрелся. Но важен контекст проекта. Для примера: есть еще ряд областей, где код пишут в стиле, чтобы было быстрее или короче текст. Кому надо — поймет. И ничего в этом страшного нет. Пишут такой код вполне себе крутые спецы. Вот например:
Вполне аккуратный хороший код. Да, человеку, который впервые его видит и ваще не в теме, будет ничего непонятно. Но ему и не править этот код. А при необходимости — разберется.
Тоже пишут, поддерживают и работают с ним весьма неглупые люди. Просто тут контекст другой: числодробительный код, для поддержки которого надо глубже понимать тематику.
Здравствуйте, kaa.python, Вы писали:
KP>Если зайти в профайл автора на GitHub, там, собственно ответ на все вопросы: KP>Pronounced BOSS-tock.[/q]
Это он объясняет как произносится его фамилия, зовут его Mike Bostock
Здравствуйте, DiPaolo, Вы писали:
DP>Именно этот код — да, крутого сеньора или даже выше.
Люди с опытом стараются писать просто, тут же местами налеплено в кучу.
Если приходится писать сложно то пишут коммент, что за нафиг и почему так.
По коммитам кстати видно что написано было изначально более просто и наглядно, это потом уже автор "улучшил".
Впрочем да, на фоне другого js что я видел этот довольно таки чистый.
DP>- код всего файла выполнен в одном стиле;
Да? А почему функция bimap в одном стиле, под ней polymap — в другом?
DP>есть комментарии
Ровно один
В других файлах вообще никаких нету.
DP> при этом важно: код изменялся буквально 4 раза за 5 лет
Да вроде как больше раз менялся: https://github.com/d3/d3-scale/commits/main/src/continuous.js
DP>Пишут такой код вполне себе крутые спецы. Вот например:
Круглые скобки странновато расставляет но в целом ок.
DP>Более того, бывает вообще вот такой код:
А вот этому не помешает нормальное оформление
DP>Просто тут контекст другой: числодробительный код, для поддержки которого надо глубже понимать тематику.
Это всё лирика.
Но вот для куска, который привёл ТС, было бы неплохо хотя бы написать комментарий WTF там и зачем.
Ну или разбить это всё на несколько строк, ибо много сущностей в одной строке ухудшают читаемость кода.
Здравствуйте, CreatorCray, Вы писали:
DP>>Именно этот код — да, крутого сеньора или даже выше.
CC>Люди с опытом стараются писать просто, тут же местами налеплено в кучу. CC>Если приходится писать сложно то пишут коммент, что за нафиг и почему так. CC>По коммитам кстати видно что написано было изначально более просто и наглядно, это потом уже автор "улучшил". CC>Впрочем да, на фоне другого js что я видел этот довольно таки чистый.
Здесь просто печать индустрии жаваскрипта как мне кажется. Трудное детство, деревянные игрушки.
Чувак сделал работу за компилятор.
DP>>Просто тут контекст другой: числодробительный код, для поддержки которого надо глубже понимать тематику. CC>Это всё лирика. CC>Но вот для куска, который привёл ТС, было бы неплохо хотя бы написать комментарий WTF там и зачем. CC>Ну или разбить это всё на несколько строк, ибо много сущностей в одной строке ухудшают читаемость кода.
Да чего тушеваться, код конкретно нечитаемый, невзирая на лица.
Если автор просидел на этой либе последние 10 лет, это его все равно не оправдывает, IMHO можно было более человечный код написать.
Впрочем, вся D3 в стиле юниксовых команд 80-х, с дурацкими сокращениями типа x.classed() ака "class edit".
Такой уж склад мышления у некоторых.
Здравствуйте, Osaka, Вы писали:
O>Это в любой кастовой системе. "Сначала поделай как у сеньоров 'принято', и заслужи". (Если засчитают
Или смени "стаю"
Здравствуйте, kaa.python, Вы писали:
KP>Мне кажется, это часть проблемы. Фронтэнд штука довольно специфичная тем, что за ней не стоит каких-то базовых знаний (теория баз данных, теория криптографии, теория распределенных систем, там даже теория алгоритмов особо и не нужна) и каждый год очередной "прорыв" который всем срочно надо внедрить.
Есть свежий местный пример: Артемка недавно восхищался реализацией обычной state machine в какм-то веб фреймворке и утверждал что это мега-вау прорыв.
Здравствуйте, bnk, Вы писали:
CC>>Но вот для куска, который привёл ТС, было бы неплохо хотя бы написать комментарий WTF там и зачем. CC>>Ну или разбить это всё на несколько строк, ибо много сущностей в одной строке ухудшают читаемость кода.
bnk>Да чего тушеваться, код конкретно нечитаемый, невзирая на лица.
Сейчас уже обсуждаем что можно сделать чтобы стало лучше.
bnk>Если автор просидел на этой либе последние 10 лет, это его все равно не оправдывает
Ну там в истории коммитов он один, так что наверное писал под себя.
bnk> IMHO можно было более человечный код написать.
Можно. Там даже уже было раньше почище написано.
Здравствуйте, DiPaolo, Вы писали:
DP>Именно этот код — да, крутого сеньора или даже выше. Для этого надо пойти посмотреть на весь файл целиком, а также понять контекст проекта. А суть там такая: это специальная узкоспециализированная либа-числодробилка (с поправкой на JS). Да, есть ряд областей, где важен именно такой "суровый" код. Человеку со стороны покажется какой-то херней, но человеку в теме все будет понятно. Ну или, при необходимости, новый человек, взявший на поддержку, сможет через какое-то время разобраться.
Совершенно согласен. Просто этот код не для тех, кто привык писать бизнес-приложения, и не им о нем судить. Там другие правила и требования.
The following code is the fast inverse square root implementation from Quake III Arena, stripped of C preprocessor directives, but including the exact original comment text
float Q_rsqrt( float number )
{
long i;
float x2, y;
const float threehalfs = 1.5F;
x2 = number * 0.5F;
y = number;
i = * ( long * ) &y; // evil floating point bit level hacking i = 0x5f3759df - ( i >> 1 ); // what the fuck? y = * ( float * ) &i;
y = y * ( threehalfs - ( x2 * y * y ) ); // 1st iteration
// y = y * ( threehalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removedreturn y;
}
The algorithm was approximately four times faster than computing the square root with another method and calculating the reciprocal via floating-point division
Если честно, лень разбираться в кишках D3, но есть предположение, что автор занимается своего рода "битовыжиманием" на javascript (для которого язык совсем не предназначен), возможно у него ранее были более очевидные для восприятия реализации, но уступающие по производительности.