LINUX.ORG.RU
ФорумTalks

Золотая середина: Производительность vs Стабильность. Костыли vs Ынтерпрайз. Си vs Ява.

 , , ,


0

4

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

А именно: где золотая середина при разработке ПО?

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

Типичный вариант: Си/плюсы сегфолтятся и текут на больших объёмах памяти, вечные проблемы с указателями, переполнениями и полным отсутствием встроенных проверок, что отрицательно сказывается на стабильности и безопасности. Также могут быть случаи, когда программа после переполнения или неправильного преобразования типов (например, когда типы связывают через указатели: типичный пример: попытка работать с битами int'а на big и little endian) продолжит работать, запорет всю базу (или что-нибудь ещё), причём проблема всплывёт только через несколько месяцев, поэтому откатиться не получится. Бывали подобные случае с базами данных, которые могли скрытно повреждаться.
VS
Ява выжирает тонны памяти и тормозит, зато всё работает стабильно, почти все преобразования и вычисления проверяются, нет проблем с переносом на другие архитектуры и ОС, нет указателей, кодить проще, очень любима бизнесом за предсказуемость.


Или вот ещё:
Поставим много серверов, наймём макак, будем использовать микросервисы на php, размазанные по огромному кластеру, всё будет тормозить, зато очень быстро выкатим продукт, обойдём конкурентов, а сотрудников можно менять хоть каждый день из-за разбиения на «модули». Первенство окупит издержки на железо.
vs
Будем писать сразу на плюсах, пару раз запорем продакшен из-за каких-нибудь неочевидных моментов, будем делать долго, зато на выходе всё будет кондомно и оооочень бысто (хватит буквально одного-двух серверов). Ну и всё приковано к конкретным людям: если они уйдут, то бизнесу конец.

Есть ли какая-нибудь золотая середина в этих вечных спорах? Или её нет и быть не может как в споре либералов и исламистов?

Перемещено tailgunner из development



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

Не знаю, как для других, но для меня выглядит так:

  • Си/Си «с классами» стоит использовать только для чего-то высоко нагруженного, быстрого расчёта, для доступа к железу.
  • Полноценные плюсы (Си с классам + RAII + виртуальные фунции + шаблоны), Java — клиентский код, сервера и собственно то, что не требует жестко высокой производительности.
  • PHP — только вебня. Так как ей стараюсь не заниматься (долго въезжать да и тупо лень), то ничего конкретного не могу сказать.

Многое упустил, но не очень хочу вдаваться в подробности.

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

Где золотая средина между котлетами и тортом «Наполеон»

Пирожок с мясом? Или пирожные с кремом на животных жирах? :) Ну ли какой-нибудь бигтейсти из макдака, где сахара и вкусовых добавок как пирожном.

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

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

Т.е. срач будет пока не выпустят что-нибудь типа языка Rust?

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

А именно: где золотая середина при разработке ПО?

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

У каждого инструмента - свой спектр применений.

Главное отличие С/С++ от Java - порог вхождения новичков. Остальное - мелочи либо производные.

Си/плюсы сегфолтятся и текут на больших объёмах памяти, вечные проблемы с указателями, переполнениями

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

По остальному - аналогично.

/thread
Хватит уже

Kroz ★★★★★
()

Вполне же очевидно, что сейчас имеем легаси из 20 века. Когда только-только начинало формироваться понимание как нужно делать софт и какие для этого нужны инструменты и подходы. Достаточно посмотреть на переусложенный ООП в С++ или Java.

В итоге имеем С++ без модулей с кучей кривого синтаксиса. Из-за чего даже IDE не может толком помочь с рефакторингом. И Java, которую через-чур обезопасили и упростили из-за отсутствия опыта и понимания где золотая середина этого упрощения. Сейчас тенденция в Java эти упрощения усложнять, но делая это через костыли для обратной совместимости.

Т.е. срач будет пока не выпустят что-нибудь типа языка Rust?

Да, пока Rust не доведут до ума или пока современное поколение программистов не дорастет до нового видения как нужно делать ЯП. Всякие Go, клоны питонов, джавы и подобная сахорно-синтаксическая улучшательная хренотень не считается.

foror ★★★★★
()

В разных задачах разные цели. ИМХО золотая середина это писать быстрый и масштабирующийся код на удобном языке вроде Java. C++ для предельных случаев вроде поискового движка Google (сотни тысяч серверов, экономия 1% это экономия на тысячах серверов) или когда нужен реалтайм (например торговля на бирже, где 1 миллисекунда решит, будет робот торговать в плюс или минус). Ты противопоставляешь Java и C++, но это неправильно. Есть множество более медленных языков вроде JavaScript, Python, Ruby, а Java это и есть золотая середина.

PS в реальном мире потребление памяти на сервере это вообще не проблема, потому что память реально дёшева и ограничений на память почти нет. Вот на процессоры есть, два процессора это максимум на стандартный сервер. И если программе не хватает процессора, единственный реалистичный способ работать дальше это кластер. А оперативную память наращивать можно гораздо дольше. При этом на большинстве задач Java если и жрёт, то память, а не процессор (в сравнение с C++).

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

C#/.Net

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

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

кондомно

Презервативно?

Zhbert ★★★★★
()

Чем больше работаю, тем больше склоняюсь к мысли что ничем Жабка или иной инструмент не спасает от проблем, которые возникают при программировании на С, то есть обычных проблем у низкоквалифицированного рабочего. Просто вместо проблем с указателями и повреждением данных появляются иные проблемы и другими способами повреждения. Говорят мол меньше банальных ошибок получается на управляемых языках. Брехня, потому что меньше порог вхождения, а значит ниже средняя квалификация разработчиков и как следствие ниже качество продукта. Получается на выходе количество ошибок превышающее количество таковых в среднем сишном коде.

Вместо одного модуля, который используется разными частями системы делается 10ть примерно одной функциональности, но как следствие каждый в 10 и более раз менее стабильный, чем если бы это был один. Отсюда имеем кучу всяких побочных эффектов и повреждений данных. И это да, жаба. Но да, такое встречается вообще везде. То есть проблема квалификации.

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

В общем думаю ничего лучше С так и не изобрели, ну разве что lua хорош.

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

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

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

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

Ты много знаешь настолько высококвалифицированных сишников, что у них никогда не бывает сегфолтов? Я вот ни одного что-то не видел.

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

C++ для предельных случаев вроде поискового движка Google (сотни тысяч серверов, экономия 1% это экономия на тысячах серверов) или когда нужен реалтайм (например торговля на бирже, где 1 миллисекунда решит, будет робот торговать в плюс или минус).

Внезапно, большая часть десктопного софта. А много у тебя его на java?

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

Справедливости ради, основная проблема жабы для десктопных приложений — невменяемый гуй. На шарпе под винду софта много, и никто особо не страдает.

Gvidon ★★★★
()

Давно наблюдаю за срачами в этом разделе

Дата регистрации: 17.02.2016 2:09:07

Ну вы понели.

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

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

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

Простые решения надёжнее, чем быстрее это поймут оверинженеры тем быстрее мы вступим в светлое будущее.

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

Жабка или иной инструмент не спасает от проблем, которые возникают при программировании на С

На главной посмотри про очередную дырку и переполнение буффера в glibc. Подчеркиваю - очередную.

invy ★★★★★
()

Ява выжирает тонны памяти и тормозит, зато всё работает стабильно, почти все преобразования и вычисления проверяются, нет проблем с переносом на другие архитектуры и ОС

да ты юморист сегодня

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

За C++ больше платят ;)

Твои бы слова, да богу в уши

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

Ты много знаешь настолько высококвалифицированных сишников, что у них никогда не бывает сегфолтов?

А ты знаешь много жабщиков, у которых не бывает NullPointerException?

Другое дело, что сегфолты - не самая серьезная проблема Си.

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

Вот браузер занимает у среднего пользователя 70% времени, он хоть один на Нет есть? Ведь даже Edge не на Нет. А офис? Только местами и только мелгомягкий. Часть софта действительно использует .NET, но написана при этом либо на 95% на С++ либо на некоторой смеси и то в основном потому что народ не хочет связываться с родным winapi, уж сильно оно сложнее того же Qt.

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

При чём тут я? 90% моего софта на Objective C. Но я пользуюсь такой мизерной долей от всего десктопного софта, что эта цифра не значит вообще ничего. Сходи на какой-нибудь hh.ru, почитай вакансии.

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

У меня тоже на ТС детектор сработал.

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

В большинстве вакансий php и 1С, и? Как это относится к десктопному софту?

CatsCantFly
()

Этот тред - какая то жесть. Спецолимпиада по нахваливанию своего болота. Инженеры блжад. Надеюсь вам стыдно

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

Этот тред - какая то жесть. Спецолимпиада по нахваливанию своего болота. Инженеры блжад. Надеюсь вам стыдно

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

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

За C++ больше платят ;)

ЛПиП. Я уже 20 раз пожалел что не жабку учил(и 10 лет опыта поимел), а плюсы. Жабосиньер получает в наших обоих ДС обычно раза в 2-3-4 больше чем плюсовик и тем более шарпист.

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

Ну давай тогда в числах, сколько платят за одно и сколько за другое

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

Пишешь такой на жабе с паттернами и геттерами... Потом узкие места переписываешь на плюсах Потом. Узкие места. На плюсах Ц. Переписываешь. Угу. Обычно что «потом» — это уже проблемы других чуваков или умирает в бэклоге :) Интересно посмотреть кто так реально делал. Но советы такие из бложеков в местных чятиках по С++ встречаются (на тему почему ненужен).

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

Да, пока Rust не доведут до ума или пока современное поколение программистов не дорастет до нового видения как нужно делать ЯП. Всякие Go, клоны питонов, джавы и подобная сахорно-синтаксическая улучшательная хренотень не считается.

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

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

При этом на большинстве задач Java если и жрёт, то память, а не процессор (в сравнение с C++).

Т.е. С++ жрёт проц? Я что-то не понял.

два процессора это максимум на стандартный сервер

С облаками и арендой уже не проблема и 16 процессоров (не ядер) на один инстанс. Я согласен про кластер, но если задача не параллелится (везде блокировки и синхронизация) нормально, то кластер только хуже сделает из-за задержек сети. Плюс есть legacy, которое нужно с нуля переписывать, что в кластер вогнать это старьё. Тогда проще арендовать особый сервер.

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