LINUX.ORG.RU
ФорумTalks

Почему некоторые китайцы пишут дикий говнокод?

 


0

4

Я заметил, что среди китайских вендоров железа есть тенденция сливать исходники преоктов. И это замечательно: всегда интересно что-то замоддить в существующем железе или просто посмотреть как она работает «под капотом».

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

https://github.com/goodtft/LCD-show/tree/1cd5ea1b5357d30ca40c80df6a9d11b9172f2e0a/usr/rpi-fbcp

Драйвер 8080 дисплея дл малинки, говнокод лютый, еще и сервис запилили, который копирует картинку с одного фреймбуфера в другой (весьма серьезная нагрузка на шину).



Последнее исправление: monobogdan1337 (всего исправлений: 1)

Потому что такова система образования в их стране.
Это не только в китае происходит.

Goury ★★★★★
()

Когда-то давно, когда мы запрограммировали i8051, чтобы он работал с клавиатурой, препод нам сказал что-то типа «фактически, вы написали драйвер для клавиатуры. И поверьте, он качественно лучше, чем то, что обычно пишут индусы».

seiken ★★★★★
()
Ответ на: комментарий от Goury

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

seiken ★★★★★
()
Ответ на: комментарий от seiken

У индусов книги Кнута и Камасутра на одной полке стоят, вот они иногда путаются. Ну или классическое объяснение: платят за число строк, а не за качество.

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

Kolins ★★★★★
()

Вполне типичный код для руста или го, в первом еще было бы полно бестолковых анврапов, а во втором err != nil в каждой третьей строчке кода. С чего вы взяли, что такое бывает только у индусов и китайцев?

Syncro ★★★★★
()
Ответ на: комментарий от Kolins

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

monobogdan1337
() автор топика
Ответ на: комментарий от Kolins

А китайцев просто много,

Сейчас индусов больше. А в айти в Европе их всегда было больше, чем китайцев.

seiken ★★★★★
()

Потому что это как с олимпиадным программированием - к этому коду автор никогда не вернётся. Поэтому это write-only лапша.

fluorite ★★★★★
()
Ответ на: комментарий от Syncro

а во втором err != nil в каждой третьей строчке кода

И чем это хуже лапши их try…catch с обработкой экстеншенов? Наоборот выглядит логичнее местами — получил ошибку, сразу обработал, если она не пуста.

Zhbert ★★★★★
()

не соблюдают культуру кода

Не главная, но ещё причина: для разных архитектур – разная культура,
например, даже для наипростейших 8080 и 8051 «культуры кода» несовместимы.

quickquest ★★★★★
()
Ответ на: комментарий от seiken

Они не мыслят, у них каша в головах.

их код как-то работал, и даже по спецификации

TDD

Goury ★★★★★
()

Если вы хотите писать не говнокод - вам в искусство, а не в бизнес.

vaddd ★☆
()

какую-то сранную кашу

Странную или сраную? Вот в чем вопрос

utanho ★★★★★
()
Ответ на: комментарий от Zhbert

В том, что от кодов возврата отказались ещё в Си, потому что они уродуют интерфейсы и сам код делая его процеДУРным, а обрабатывать бывает надо не сразу, а где-нибудь уровнем выше

Syncro ★★★★★
()

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

и да, национальность, ессно, не при чём

caryoscelus
()

Высокая конкуренция на рынке труда. Напишешь код, который поймёт твой коллега, завтра тебя уволят, а у коллеги будет в два раза больше работы.

Плюс переработки и маленький отпуск негативно влияют на психику.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)

Хватит это терпеть!!давайте всё перепишем на ... эээээ...

Neresar ★★
()
Ответ на: комментарий от foror

график 9-9-6

Наговариваете на товарищей. Такое может быть только у паганых копеталистах.

ox55ff ★★★★★
()
Ответ на: комментарий от monobogdan1337

База. Иначе Линус Торвальдс не запустил бы rust в ядро. Сишку сдают в музей.

ox55ff ★★★★★
()

Да практически везде говнокод, независимо от национальности. Очень сложно отстоять перед менеджером время (деньги) на хороший код, обычно причесывать приходится «за свой счёт» (вечерами, выходными). А у китайцев считай нет выходных, они и так 996 работают.

snizovtsev ★★★★★
()

Хорошего кода повально не будет, пока справедливы две вещи: «ограничения железа решаются покупкой больше железа богу железа» и «чем быстрее решается задача, тем лучше». Сама идея о хорошем коде пришла к нам из времён, когда могли подгонять тайминг операций ввода-вывода к вращению пластины жёсткого диска, чтобы при IO головка сразу была «где надо», а все структуры данных для большого расчёта должны были уложиться в считанные килобайт. Там каждый кусок говнокода больно бил разработчика по жёппе и не давал решить задачу в имеющихся условиях, а надо было. Даже сраный денди (NES) требовал извращаться, выдумывать и оптимизировать, чтобы там вообще что-то заработало.

Посмотри кругом: люди лепят всякий кал на электроне, JS на фронтенде и бэкенде, браузеры по гигабайту сжирают на вкладку. Видеокарты стоят как полавтомобиля, у процессоров ядер и потоков как вшей на бомже, люди говрят про десятки гигабайт оперативки как про «удовлетворительное количество». Смотрел тут видео на канале LTT, там сетовали, что в яблочный комп новой версии больше не воткнуть 1.5 Тб оперативки, т.к. M2 процессор может адресовать только что-то под 400 штук, «для серьёзных задач может не хватить» — я аж фалломорфировал. С чего бы тут ценить виртуозность Кнута или гений Кармака? Тяп-ляп и в продакшен, после релиза пофиксим, что отвалится. Вот тебе и игры по 100 гигабайт, и обновления больше файлов релиза, и всё остальное.

Smacker ★★★★★
()
Последнее исправление: Smacker (всего исправлений: 2)
Ответ на: комментарий от buddhist

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

Suigintou ★★★★★
()
Ответ на: комментарий от buddhist

Отсутствие кодстайла, не особо эффективный (гонять из фреймбуфера в фреймбуфер с помощью еще одного сервиса, не проще было сразу общение с дисплеем реализовать в этом самом сервисе и гонять из готового фреймбуфера данные?).

monobogdan1337
() автор топика
Последнее исправление: monobogdan1337 (всего исправлений: 1)
Ответ на: комментарий от Suigintou

Не, ынтырпрайз стайл я тоже не люблю. Речь о банальной читаемости, см например:

https://github.com/goodtft/LCD-show/blob/1cd5ea1b5357d30ca40c80df6a9d11b9172f2e0a/usr/fbcp-ili9341/kernel/bcm2835_spi_display.c

Ну и ребята зачем-то протащили тесты в код основного драйвера, обмазались макросами и внезапно, действительно размазали самопальный драйвер SPI по десяти файлам. Причем взаимодействие с ним очень интересное - в системе появляется второй фреймбуфер на дисплей, ток вместо того, чтобы выпнуть первый из dts, они решили копировать из первого во второй со всеми сопутствующими преобразованиями цвета. Пустая трата процессорного времени.

monobogdan1337
() автор топика
Последнее исправление: monobogdan1337 (всего исправлений: 1)
Ответ на: комментарий от Smacker

люди лепят всякий кал на электроне

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

С чего бы тут ценить виртуозность Кнута или гений Кармака?

Дональда «Premature Optimization Considered Harmful» Кнута? %)

Низкоуровневой виртуозности место на низком уровне, на уровне библиотек и инструментов. Не надо виртуозно двигать байтики в условном сайте на PHP или SPA на JS, лучше сделайте код понятным и читаемым.

Если всё-таки виртуозность нестерпимо чешется, почешите её о какую-нибудь библиотеку, и профит будет для всех, кто этой библиотекой пользуется.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Не надо виртуозно двигать байтики в условном сайте на PHP или SPA на JS, лучше сделайте код понятным и читаемым.

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

Smacker ★★★★★
()
Ответ на: комментарий от Smacker

там жабоскрипа в сто раз больше, чем собственно контента

Потому что виртуозы нахреначили там несколько слоёв «оптимизированного» добра, которое никто не понимает, как работает, и поэтому единственное, что можно с этим сделать — это добавить ещё один слой? %)

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Правильно. А почему так? А потому что работает, а у кого не работает, тот ненужен пусть идёт апгрейдиться. Вот и всё так. Корпоративная логика в худшем смысле слова. Это не только программ касается — все стали гоняться за краткосрочной прибылью, побыстрее сделать, побыстрей продать, после нас хоть потоп. Бренд, репутация, лояльность потребителей? Нет, не слышали.

Smacker ★★★★★
()

По ссылке не такой уж говнокод. Разве что повторяющиеся действия типа *close я бы вынес под метку с goto.

Meyer ★★★★★
()
Ответ на: комментарий от Meyer

Там в репо со стайлингом небольшие проблемы, goto нинужон и сервис копирующий фреймбуферы зачем-то сделали.

monobogdan1337
() автор топика

Когда на одной тех. защите я спросил:«Зачем вы так делаете?».
Меня зашикали и сказали, что так любой хороший проект можно завалить.

TomBOY ★★
()

Прошел по ссылке, никакого говнокода не увидел.

Ну сишечка, ну несколько дефайнов, выделены логические блоки что есть Ъ. Все написано по делу, логика в коде прослеживается, смотришь на него и понимаешь что код делает. Хороший и понятный нейминг функций и переменных. Чего еще желать?

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

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

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

monobogdan1337
() автор топика
Последнее исправление: monobogdan1337 (всего исправлений: 1)

вендоров железа

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

ya-betmen ★★★★★
()

вообще не соблюдают культуру кода

может они формируют новую

flant ★★★★
()
Ответ на: комментарий от Zhbert

Зачастую обрабатывать ошибку надо очень далеко от места, где она возникла.

По банальной причине - нельзя её как-то специфично обработать. Можно только выйти, перезапустить всю операцию или отобразить пользователю красивое сообщение об ошибке.

Представь вот загрузку файла по HTTPS. Оно может быть реализовано в десятках функций и даже в нескольких модулях. TCP, TLS, HTTP, работа с файлами. Но по факту ошибка на любом уровне имеет одни и те же последствия - закрыть все файлы/сокеты, которые успели открыть, и либо вывести сообщение об ошибке, либо попытаться заново с нуля.

Специфичеая локальная обработка ошибок нужна и в принципе возможна в меньшем числе случаев.

Поэтому 90% кодов ошибок прокидывается в вызываемую функцию. И неплохо иметь для этого какой-то сахар, чтобы программист видел реальный алгоритм работы программы, а не гору if err != nil, в которых теряется основной смысл.

Впрочем, в Rust эта проблема по сути решена оператором вопроса (когда ошибка ожидаема) и unwrap (когда ошибки не должно быть принципиально, например, при парсинге константной строки или если в коде выше уже есть проверка условия).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от caryoscelus

Эти люди - эмбедед-разработчики например, просто ложат на «сахар» или «то как принято у нас в фронтенде» всяких вебмакак. Поэтому делают как считают нужным.

nionio35
()
Ответ на: комментарий от Xintrea

Это весьма типично.
Sorry, у меня нет музыкального слуха и «бесполезно» (ну вы поняли).
У многих «слуха» нет в разработке (и «бесполезно»).

"И вот вам результат"

Когда «танцор» руководит группой «танцоров», то «жить становится веселей».

Шутка

Эльбрус - карлик в сравнении с этими горами «xxx кода».

Кстати, архитектура многих популярных проектов «не очень» (но некоторые разработаны весьма добротно).

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 10)
Ответ на: комментарий от Smacker

все стали гоняться за краткосрочной прибылью, побыстрее сделать, побыстрей продать…

Это закон каритализма. «Капитал» Маркса не читал…

andytux ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)