LINUX.ORG.RU

Хороший код и говнокод

 , , ,


3

3

Привет.

Есть какой-нибудь крупный опенсорц-проект с хорошим кодом для образца? Питон или С++. Мне хотелось бы узнать.

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

Но опытный программист сразу распознает мой код как код новичка. Как на самом деле пишут опытные прогеры?

Можно еще накидать сюда примеры хорошего (эффективного) и плохого (неэффективного, дублирующегося и т.д.) кода.



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

Но опытный программист сразу распознает мой код как код новичка

распознай код новичка как код опытного программиста.

промышленный код как уже тут отметили часто грязен.

см 500 line or less https://github.com/aosabook/500lines - там чутка красиво.

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

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

Так как не дано определение «хорошести», то …

«Хороший» код - это код, который однозначно кодируется и декодируется.

Применительно к некоторым конкретным языкам - на языке с неопределенным поведением нельзя написать «хороший» код.

anonymous
()

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

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

Да(р)ю определение «хорошести» кода бесплатно и без смс:

Хороший код, это код

1) во время выполнения транслирующий входные данные в выходные с минимальными объёмами потребления вычислительных ресурсов (памяти, процессорных таков, и т.д.)
2) модифицируемый минимальными затратами при незначительных изменениях в контрактах на входные / выходные данные

LamerOk ★★★★★
()

Есть какой-нибудь крупный опенсорц-проект с хорошим кодом для образца?

Плохо продуманный проект не может быть воплощён в жизнь иначе чем говнокодом. Всё начинается с проектирования. Это как строить дом. Проект. Этапы. Материалы. Строители. Программист здесь – обычный строитель. И от него как правило ничего не зависит. Он может криво класть свою кладку. Может хорошо. Но если проект никуда не годиться, то всё равно получится отстой. Лучше учись, братан, не красиво кодить, а красиво проектировать.

kostyarin_ ★★
()

Опытные прогеры пишут код в командах.
Присоединяйся к хорошей команде в роли юниора и тебя всему научат.

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

Лучше учись, братан, не красиво кодить, а красиво проектировать.

А как мне научиться красиво проектировать игру? Например, начиная от иерархии каталогов проекта и заканчивая модульностью/структурой. Какие есть опенсорсные игры с продуманной архитектурой, чтобы можно было изучить? Мне было бы интересно взглянуть на исходники The Witcher 3, но это проприетарная игра и их мне никто не даст. Разве что квейкоклоны изучать придется либо повторить древовидную структуру самого движка, которым я пользуюсь для своей игры.

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

Присоединяйся к хорошей команде в роли юниора и тебя всему научат.

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

Мне предлагали влиться в разработку квейкоклонов, но я не рискнул. Кто меня там обучать будет? Разрабы и сами пилят свое детище в перерывах между работой и сном.

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

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

Что скорее будет означать что ты как был говнарем так и остался.

ilinsky ★★★★★
()

Гугл намекает, что игры не тот вид ПО, которому обязательно нужна хорошая архитектура. Возможно потому что это не движок (но используется его API), не библиотека и не фреймворк. Это скрипты + ассеты.

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

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

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

А как мне научиться красиво проектировать игру?

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

kostyarin_ ★★
()

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

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

Вон, Нотч как ни говнокодил, а по словам смотрящих, всё время в стримах у него получался minecraft2, minecraft3 только более упопотые/дебильные, это всё профессиональная деформация, когда мозг уже воспринимает всё через призму стереотипов и т.п.

Поэтому, важна продуктивность и конечная цель, а не дрочево на язык и правильную архитектуру

menangen ★★★★★
()

Неговнокода не существует.

Nervous ★★★★★
()

читай энторнет вокруг «Объектно–ориентированный метод проектирования» вокруг этого немеряно материалов наворочано. научишься правильно проектировать… может и игрушки писать расхочется.

alysnix ★★★
()

Есть какой-нибудь крупный опенсорц-проект с хорошим кодом для образца? Питон или С++. Мне хотелось бы узнать.

FreeOrion, и питон, и С++.

O02eg ★★★★★
()

Хороший код - не написанный код. Реально в проде говнокод. Чем более передовая прода, тем более знатный говнокод.

ЗЫ

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

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

Прочитай книгу John Ousterhout «A Philosophy of Software Design». Это вообще лучшее, что есть по дизайну софта. Там все детально написано, ясно, доказательно и по делу. И совершенно без воды.

hotpil ★★★★
()

Хороший код и C++ это взаимоисключаемые параграфы. Стоит посмотреть на STL выше, убедиться, какой там адский сракотан, и вспомнить что это один из самых причесанных примеров кода на плюсах.

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

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

Гугл намекает, что игры не тот вид ПО, которому обязательно нужна хорошая архитектура.

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

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

И это не говоря об онлайнщине, которая вообще разрабатывается непрерывным процессом

annulen ★★★★★
()

Есть какой-нибудь крупный проект с хорошим кодом?

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

crutch_master ★★★★★
()

Можно еще накидать сюда примеры хорошего (эффективного) и плохого (неэффективного, дублирующегося и т.д.) кода.

Зачем? Просто скинь свой быдлокод сюда.

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

Хороший код

открываешь свой текущий код и смотришь…

говнокод

открываешь свой код написанный год назад и смотришь.

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

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

pon4ik ★★★★★
()

Почитай код stl, boost, Qt и других распростроненных библиотек. Почитай Мейерса, Джосаттиса и прочих светил.

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

Вот ставить boost и Qt в один ряд, это смело.

Но, для ТС. Если хочется посмотреть на код ынтырпрайс проектов, просто проектов где делают продукт а не олимпиадники шалят, то лучше глянуть код Qt, QtCreator, GTest/Gmock и Poco. А если хочется посмотреть на код, который пишут те, кто выступает на конфах по цыпыпы - надо смотреть boost(особливо boost phoenix и иже с ним), catch и даже сходу не скажу чего ещё, но скорее всего там будет в заголовках что-то в духе modern c++ и header only.

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

Stl помешан на шаблонах. Взять какой-нибудь OpenSceneGraph - уже минимум шаблонов. Qt - умеренная середина. MongoCXXDriver - чуть выше середины. Поэтому проект проекту рознь. C++ как раз позволяет работать в той парадигме, в которой комфортно.

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

Ну boost phoenix не так уж и плох (хотя конечно пример не самый лаконичный). Но взять тот же boost.asio - уже вполне себе человеческий.

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

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

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

Плохо это не правильное слово, он портабельный, идиоматичный, работающий и эффективный, притом эффективный портабельно. Выглядит правда как говно.

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

Притом, смею заметить, как обфусцированное говно. Сейчас [де]обфускаторы типа clang-format вышли на очень продвинутый уровень.

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

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

Есть какая то короткая книжка по этому поводу? Про антипаттерны я читал, в идеальном коде много букв:-(

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

открываешь свой код написанный год назад и смотришь.

И плюешься /в лучшем случае/.

anonymous
()
Ответ на: комментарий от annulen

А сейчас другие модели в тренде: релиз часто представляет собой демку, и предполагает последующее развитие через патчи и DLC.

Так что напишешь говно в начале - потом потеряешь кучу времени и денег.

Вавре как создателю Kingdom Come: Deliverance наверное виднее, сколько он потерял прибыли, выпуская дико забагованную игру. Нынешние игры выпускаются в спешке, а исправляются уже потом, после жалоб, патчами.

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

Так что напишешь говно в начале - потом потеряешь кучу времени и денег.

Времени - да, а «денег» - «вилами писано».

anonymous
()
Ответ на: комментарий от crutch_master

Затем, что я желал сравнить однозначный быдлокод с возможным своим.

Просто скинь свой быдлокод сюда.

Зачем мне скидывать то, что до становления игрой будет переписано n раз?)

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

Хороший код и говнокод

Поэтому нужны rapid системы /говнокода будет на порядок меньше/.
От «дурака» лекарства нет, а профессионалу - помощь /но и профессионалы «умеют»/.

PS: Впрочем может быть в многом и не прав /но пока так/.

Владимир

anonymous
()
Ответ на: комментарий от pon4ik

Это слишком очевидно. А еще через год когда-то «хороший» код станет говнокодом. И что?

Мне нужны были сэмплы качественного кода, написанного по правилам и легкочитаемого. Об этом я спрашивал, но вы ничего не поняли и превратили тему в фарс.

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

Мне нужны были сэмплы качественного кода, написанного по правилам и легкочитаемого.

Хороший код «не бросается в глаза».
Он прост и эффективен.

Владимир

anonymous
()
Ответ на: комментарий от RedEyedMan666

Хороший код для меня тот, который меньше взаимосвязан и меньше ломается, который можно изменить/поправить через много лет с меньшими усилиями.

RedEyedMan666
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.