LINUX.ORG.RU

Enterprise vs. non-enterprise

 , nfr


0

5

Всем привет. Как поживаешь, /development/ ЛОРа? Давно не писал, но мое внимание привлекла одна проблема (присущая, вообще говоря, не только ЛОРу, но на ЛОРе проявляющаяся ярче всего). Речь пойдет о пресловутом «enterprise» (иногда в юмористическом написании «enterpriZe», «ынтырпрайз» и так далее).

В том, что «enterprise» стал на ЛОРе эдаким жупелом, смоляным чучелом — ничего странного и страшного нет. У неспециалистов это слово в первую очередь ассоциируется с корпоративным, капиталистическим, пиджачно-галстучно-кофеварочным. А отрицание корпоративного — очень в духе современной молодежи, чей природный нонконформизм требует реализации. Но это не есть предмет сегодняшней беседы; оставим юношеский нонконформизм социологам и психологам.

Проблема в том, что сам технический термин «enterprise-технологии» часто трактуется неверно. Распространено множество дилетантских интерпретаций (например, «ынтерпрайз ≡ copy-paste» и так далее). Как человеку, не один десяток лет проведшему в пресловутом «enteprise», мне хотелось бы расставить точки над «i».

Итак, ПО и технологии уровня предприятия («enterprise software») характеризуются в первую очередь повышенными нефункциональными требованиями (non-functional requirements, NFR). Что это означает? NFR относятся к работе системы, а не к её специфическому поведению (которое описывается функциональными требованиями). Рассмотрим типичные NFR:

  • производительность (performance);
  • масштабируемость (scalability);
  • доступность (availability);
  • надежность (reliability);
  • безопасность (security);
  • расширяемость (extensibility);
  • управляемость кода (maintainability);
  • управляемость системы (manageability)

и так далее. По этим признакам определенные технологии и языки программирования могут быть отнесены к «enterprise» или «non-enterprise». Например:

  • Java-технологии специально разрабатывались как enterprise и максимально удовлетворяют перечисленным NFR;
  • у языка Си отличная производительность, но отсутствует ООП, отсюда проблемы с абстракциями, управляемостью и расширяемостью. Плюс прямая работа с памятью и проблемы безопасности;
  • C++ предоставляет ООП, но не решает проблем с безопасностью;
  • Python и Ruby обладают хорошим ООП, но, не имея качественных JIT-компиляторов, сильно проигрывают по производительности. См. историю с Твиттером и Ruby vs. Scala;
  • Haskell имеет немасштабирующийся GC; функциональный подход не дает таких возможностей для decoupling'а и модуляризации, как ООП. Следствие — неуправляемый и плохо расширяемый код;
  • Лиспы имеют целый букет проблем, начиная от производительности, проходя через масштабируемость и заканчивая управляемостью.

Разумеется, такое деление «enterprise / non-enterprise» в известной степени условно. Например, можно и на Java нагородить неуправляемой, немасштабируемой и дырявой лапши. С другой стороны, наверное, можно и в рамках лиспа придерживаться строгой модуляризации, а коммерческие реализации дадут хорошую производительность и масштабируемость. Однако, такой подход не принят в лисп-среде (там приняты шестиуровневые квазицитирования), и подобный код будет считаться «non-lispy crap».

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

С пламенным приветом,
ваш Кукинштейн

★★

Ответ на: комментарий от mv

скорость разработки из-за REPL и, в целом, очень мощного языка была просто ошеломляюще быстрая

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

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

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

Я здесь на правах таджика (H1-b) и выбор работы сильно ограничен. К тому же, у мну семья с дитём, есть ещё и социальные ограничения (наличие хорошего садика/школы для форка, работы для жены).

Работа на CL немножко есть, на Clojure вообще много.

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

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

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

Ты когда случайно поле из структуры данных выкосишь, то как будешь искать где оно используется чтобы заменить? Поле называется «name». Ах, ну да, я забыл, ты весь код на память помнишь вдоль и впоперек

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

Все хорошо пока пишем привет миры. Потом начинем строить большой проект и понимаем что баг на баге, код не читаемый, не поддерживаемый. И только потом доходит причина, лисп - динамический. Одно это слово равносильно «на помойку». Ладно, погорячился - «маленькие програмки писать»

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

Просто ты ничего большого на CL в жизни не писал, а ошибочное мнение имеешь.

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

clojure становится *весьма* популярной даже среди вашего брата

Ну так трендово же. Стильно, модно, хипстерски. И потом, серьёзных проектов на Clojure нет — только фибоначчи, факториалы и хелловорлды. Для больших проектов лишпы не годятся — код быстро теряет управляемость и превращается в скобчатую лапшу.

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

Ты когда случайно поле из структуры данных выкосишь

Случайно это как по пьяни?

то как будешь искать где оно используется чтобы заменить?

Я буду смотреть, где используется структура, которой данное поле принадлежит, а что?

Поле называется «name»

Какая разница?

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

Просто ты ничего большого на CL в жизни не писал, а ошибочное мнение имеешь.

Да при чем тут CL... тыщи больших проектов на петоне, руби и даже джэйэс.

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

Бывают разные)) Просто у конкретного представителя давно уже баттхерт от динамических языков (я это наблюдаю тут еще со времен его треда про неудобство рефакторинга кода на динамических языках).

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

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

Плохому танцору яйца мешают.

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

превращается в скобчатую лапшу.

лиспа ты никогда не видел, не писал ни чего полезного — типичный визгливый пустозвон.

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

У тебя IntelliJ Idea головного мозга. Я не спорю, с отличной IDE рефакторить (и вообще писать) - это почти удовольствие, но не надо так истерить по поводу динамических языков.

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

А как же товарищи Genera'у написали с огромным количеством программного обеспечения

Ну, и где оно?

различных компиляторов кучи языков

Ога, которые просасывают у опенсорцного GCC, не говоря уже о коммерческих продуктах.

редактора, почтовика

Дооо, серьёзный challenge, ничего не скажешь. Впрочем, для лиспа да, серьёзный.

заканчивая издательской системой, кадами, и видео монтажом?

Лолчто? Пруфы или пиздобол. Особенно про видеомонтаж.

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

Ну вот просто нет еще лексеров и парсеров, способных работать без выделителей блоков. В си - {}, в питоне - табы, в руби - do|end/{}, в эрланге - -> ... end, в джаве - тоже {}, в лиспе - (). Какая разница?

cdshines ★★★★★
()

у языка Си отличная производительность

Смотря как писать, но да есть такое

но отсутствует ООП

А оно там и не надо, хотя если приспичит то можно и ОПП, man gtk.

отсюда проблемы с абстракциями

А нахрена 100500 слоёв? абстракции в голове должны быть. Короче с абстракциями всё прекрасно там.

управляемостью

Да ну! Пример можно где я не могу поуправлять кодом?

расширяемостью

Мда может я и не понял чего, но эта и предыдущая фраза меня упарывает.

Плюс прямая работа с памятью

Можно и не напрямую, а можно и не напрямую это просто возможность, а вообще прямой работы с памятью не существует уже давным давно в природе усё виртуальное.

проблемы безопасности

Смотря как писать, тут у всех проблемы могут быть.

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

Ну да, повышение производительности труда

Но ведь это миф, насаждаемый адептами на ЛОРе и нульчане. На практике подтверждений этому мифу нет. Ведь если бы ФП/лисп/whatever действительно повышали продуктивность разработчика в разы, ими бы давно заинтересовались в индустрии.

Но это не так, и ФП, лисп и прочая маргинальщина заслуженно занимают своё место у параши на обочине технологического прогресса.

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

clojure становится *весьма* популярной даже среди вашего брата

Ну так трендово же. Стильно, модно, хипстерски.

Это да, но в *данном* случае это прекрасно :)

И потом, серьёзных проектов на Clojure нет — только фибоначчи, факториалы и хелловорлды.

Он в ынтерпрайзе используется уже во всю, ты чо^W с какого срайона? Выползай из криокамеры, *вне* ынтерпрайза clojure никому на..й не нужна, осознай это.

Для больших проектов лишпы не годятся

Смешно читать... ITA, Maxima, emacs, genera, deep space... итд.

код быстро теряет управляемость и превращается в скобчатую лапшу.

Это наезд не на лисп, а на *все* динамически типизированные языки? Скобки-то тут вообще при чем?

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

Я буду смотреть, где используется структура, которой данное поле принадлежит, а что?

Ключевой момент.

Поле называется «name»

У тебя нет декларативного типа, к которому приклеен именно этот name. А таких name у тебя в коде в разных местах 800 штук. Но из этой структуры используется только в 3 местах. Где они? Ну да, напишешь мутатор наверное my-structure-set-name в лучшем случае и будешь искать его

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

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

И тут в тред врывается модульное тестирование! //я тут вляпался в питоновый код и только так и спасаюсь

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

И тут в тред врывается модульное тестирование

Считай что в статическом ЯП эти тесты типов написаны за тебя. Или ты их сам написал в виде типов - как хочешь воспринимай

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

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

Индустрия уже давно пользуется ограниченными вариантами всего вышеперечисленного - erlang и python, а теперь можешь обсыхать.

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

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

Люди опираются на свой собственный опыт, а ты на «верю/неверю».

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

иффективные манагеры опять просрали, как всегда. Историю нужно знать.

Ох, лол. Опять в фейле лиспа виноваты манагеры, онолитеги, орхетекторы, жидомасоны лично с Бернанке во главе, ZOG, иллюминаты, иезуиты, Антарктический Третий Рейх, межпланетные ящерики и индейцы майя.

Самому-то не смешно? Я расскажу тебе, как всё было на самом деле. Просто идея лисп-машин оказалась тупиковой ветвью. Во время бурного развития вычислительной техники эта идея потерпела фиаско, не будучи конкурентоспособной как технологически, так и экономически. Вследствие этого лисп-машины и ОС Genera занимают сегодня заслуженное место — на помойке в музее истории вычислительной техники.

С табличкой: «Так делать не надо.»

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

Ну пришел человек с миссией на ЛОР защищать лисп. У него даже что-то получалось. Он даже научился есть кактус с типами. Ну вот и говорит «проблем нет»

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

Я согласен на все 100. Строгая статическая типизация - суть дополнительный контракт к коду и он упрощает дело. Это не только тест, но и некий вид неявной документации. Я к тому что проблема решаема.

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

Ты когда случайно поле из структуры данных выкосишь, то как будешь искать где оно используется чтобы заменить? Поле называется «name». Ах, ну да, я забыл, ты весь код на память помнишь вдоль и впоперек

1. При компиляции будет warning.

2. Лисп-образ поддерживает дерево связываний (who-binds/binds-who, who-calls/calls-who).

3. Тесты падать начнут.

4. Поле с именем name написать невозможно, т.к. у такого «разработчика» пальцы давно переломаны.

mv ★★★★★
()
Ответ на: комментарий от quantum-troll

golang

сопоставление типов методов по строке.
Пример:


type ITest interface {
Init(...interface{}) ITest
}

type TTest struct {
a int
}
func(tt *TTest) Init(...interface{}) *TTest {
return tt
}

Тип TTest не реализует интерфейс ITest (из-за возвращаемого типа), хотя лучше бы если бы оно понималось, как реализующее — Раз.
Два — где мой параметрический полиморфизм(удобный, а не через костыли и не нагружающий рантайм).

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

Я буду смотреть, где используется структура, которой данное поле принадлежит, а что?

Ключевой момент.

Раскрой.

Поле называется «name»

У тебя нет декларативного типа
декларативного типа

Штыо?

к которому приклеен именно этот name.

Изменяя name - ты изменяешь *контракт*, контрактом в данном случае является множество полей некой структуры. Ну, соответственно, ты смотришь, кто работает с твоей структурой данных и все правишь. По новому контракту, все точно так же как в джаве или на чем ты там пишешь.

А таких name у тебя в коде в разных местах 800 штук.

К полям структур обращается не непосредственно, а через структуры, то есть уже не 800, а все связи определенная-структура/name. Или у тебя там в жабе метапогромирование? :)

Но из этой структуры используется только в 3 местах.

?

Ну да, напишешь мутатор наверное my-structure-set-name в лучшем случае и будешь искать его

Нафейхоа?

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

Ну пришел человек с миссией на ЛОР защищать лисп.

При чём тут лисп? Я о твоей неадекватности по отношению к динамической типизации.

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

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

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

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

И тут в тред врывается модульное тестирование

Считай что в статическом ЯП эти тесты типов написаны за тебя.

Для статики мы обойдемся без юнит-тестов? Че, серьезно что ли? :)

Или ты их сам написал в виде типов - как хочешь воспринимай

На какой ты говоришь кафедре учился?..

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

Он в ынтерпрайзе используется уже во всю, ты чо^W с какого срайона?

Пруфы или пиздобол.

Смешно читать... ITA

500KLOC лапши, которую гугл перепишет в 50K на Scala?

Maxima

Ынтерпрайз, ага.

emacs

Ещё ынтерпрайзнее, лол.

genera

Не взлетело и зафейлилось.

deep space

Прошивочка для кораблика? Лютый enterpriZe!

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

man Concordia, ICAD, Mirai

Пруфы, пруфы-то где? А то я тоже могу насочинить красивых словечек.

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

Индустрия уже давно пользуется ограниченными вариантами всего вышеперечисленного - erlang и python

Erlang и Python — варианты лишпа? Жги ещё!

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

Но ведь это миф, насаждаемый адептами на ЛОРе и нульчане. На практике подтверждений этому мифу нет.

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

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

Люди опираются на свой собственный опыт, а ты на «верю/неверю».

Но ведь опыт с динамикой/ФП/метапрограммированием в enterpriZe исключительно негативный.

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

Для статики мы обойдемся без юнит-тестов? Че, серьезно что ли? :)

Без юнит-тестов, которые проверяют типы

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

Erlang и Python — варианты лишпа? Жги ещё!

Питон это вариант лиспа без макросов, M^2-нотация можешь считать. Erlang - функциональное программирование в продакшене и ынтерпрайзе. Может, перестанешь уже позориться и свалишь отсюда нахер? Комментировать бред об неинтерпрайзности ITA и Deep Space особого желания нет.

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

Но стартап практически с 99% вероятностью напишут на Python, Ruby, JavaScript, Java, C#, Groovy, Scala.
Если Java, то какой-то легковесный Guice/Jersey/MongoDB + single page html

Лол, а ты из тех клоунов, которые думают, что стартап - это говносайт? Тебе сколько лет? 14?

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