LINUX.ORG.RU

Код как лапша.


0

2

Я работаю в большой компании над старым и большим проектом.

Код - миллионы строк. Почти весь код который я вижу - макароны ;)

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

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

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

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

Некоторые «системные» вещи которые десятилетиями делаются в unix проверенным способом велосипедятся не лучшим образом.

И это не все проблемы кода на самом деле.

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

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

Неужели все проекты со временем становятся такими?

★★★★

Обычно это ощущение (неправильности кода) проходит вместе со сменой работы на более выгодную (денежно).

pacify ★★★★★
()

Неужели все проекты со временем становятся такими?

Нет, конечно, не все. Только те, в которых нет нормального управления.

Ну, например, поглядите исходники ядра linux.

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

Я был лучшего мнения о ядре. Ты открыл мне глаза.

а кого волнует мнение школьника с промытым мозгом на счет goto ?

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

Я, кажется, привел пример. Почему никто не понимает, что goto ЗЛО?

Мсье никогда не писал конечных автоматов?

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

Мсье никогда не писал конечных автоматов?

У мсье для конечных автоматов есть идиома

while (true)
{
  switch (state)
  {
  case STATE_1:
    /* ... */
    break;
  case STATE_2:
    /* ... */
    break;
  /* ... */
  }
}

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

Да просто стоит мне написать пост, так найдется кто-то, кто отвесит шутку по поводу языка моего ;)

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

Обычно это ощущение (неправильности кода) проходит вместе со сменой работы на более выгодную (денежно).

вот уж с размером компенсации качество кода связано чуть более чем никак, проверено электрониками (с)

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

Может имелась в виду доплата за вредность? ;)

тогда тем более исходное положение неверно ;)

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

Смена работы обычно приводит к повышению зарплаты, это тоже проверено :)

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

// но таки общий градиент положительный, да :)

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

Кстати, косвенно зарплата также зависит от качества кода: последующие изменения и CR делаются быстрее и с меньшим кол-вом ошибок, что соответствующе оценивается руководством и выливается в звонкую монету ;)

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

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

shty ★★★★★
()
Ответ на: комментарий от pseudo-cat

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

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

Дональд, перелогинься.

Советую открыть исходный код ядра, посмотреть когда и где там юзаются goto. И уже после продолжать строить из себя Кнута :)

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

нуишто?

у меня есть 30 клиентов, в коде приложений которых только GOTO/GOSUB

а другого выбора нет.

такие дела.

зы. всех, кто ругает GOTO/GOSUB - к стенке. MVC, MVT, OOA, OOD, ООП и структурное программирование - это инструменты, а не цель.

djenterprise
()
Ответ на: комментарий от OxiD

это Basic для железяки.

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

Зы. А ты что, думал, что 80-е уже прошли? Тогда тоже стоял выбор - или дешевый распространенный Бейсик, но с Goto/GoSub.

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

А вот Си....

Такие дела.

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

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

Тут какой-то диалект упрощенный?

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

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

Где-то в мире можно по пальцам пересчитать фирмы, которые этим профессионально занимаются.

Ну и цена часа у них соответствующая. И это все с GOTO/GOSUB.

Это рынок, детка.

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

А что за железки? Интересно стало просто.

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

угу, про такие вещи как паттерны или в частности reduce не слышал? или такие обобщения лучше не использовать?

pseudo-cat ★★★
()
Ответ на: комментарий от vahtu

Goto в сишке иногда очень полезен и не надо тут гнать. Он даже в CL есть, что еще раз подтверждает его практичность.

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

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

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

annulen ★★★★★
()
Ответ на: комментарий от pseudo-cat

Слышал, тоже сразу на них подумал, согласен, что именно паттерны и reduce спасут вышеописанный миллион строк. Немного смущает что этот код никто в глаза не видел, но это несущественно. Да именно так, паттерны и reduce.

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

но думаю большинство тут пользовались плодами его труда..

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

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

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

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

Может быть, это к счастью, что не пользуются.

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

программирование терминалов сборов данных с проприетарной ОС.

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

Зы. Ну про то, что встанет работа 65% складов мира И ПОТОМ ПРИЙДЕТ АМРАГЕДЕЦ, мы конечно умолчим...

djenterprise
()
Ответ на: комментарий от OxiD

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

А много у тебя в коде глобальных переменных? Если да, то это может стать головной болью.

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