LINUX.ORG.RU

[мифы и легенды] Java и «низкий уровень вхождения».


1

1

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

Сперва давайте полистаем спецификацию языка Java, третье издание. В книжке 684 страницы. Шестьсот восемьдесят четыре. (Если в этот момент у вас при словах «низкий уровень вхождения» начинается истерический хохот - не пугайтесь, это как раз свидетельствует о вашей нормальности; остальным же рекомендуется продолжить чтение.) Разумеется, многие могут парировать, что, мол, совершенно не обязательно читать всю книгу для того, чтобы начать программировать. Чтобы начать быдлокодить - возможно. Но чтобы начать эффективно решать задачи, используя для этого всю мощь языка - книжечку придется все-таки как следует полистать.

Ну, что же, спецификацию языка мы изучили. Что мы можем написать на Java? Да ровным счетом ничего, потому что мы еще не освоили работу со стандартной библиотекой или (иными словами, Java API). Стандартная библиотека Java версии 1.6 состоит чуть более чем из семи тысяч классов и интерфейсов и десятков тысяч методов. Предвосхищая повторное «и зачем надо въезжать во все 7000 сразу?» - отвечу, что таки да, пишущему десктопное приложение может не понадобиться какая-нибудь CORBA, а разработчику сетевых сервисов - Swing и так далее. Но если решаемая задача все же сложнее «Hello, World!», то ее предметной области будет соответствовать некое довольно объемное подмножество Java API, которое придется освоить в полной мере.

Вот мы и научились создавать desktop-приложения, несложные сетевые службы и middleware, работать с файлами и обрабатывать XML. Что же дальше? Давайте обратим наш взор на встраиваемые приложения, где Java давно прописалась, и с большим комфортом. Мобильные телефоны, PDA, set-top boxes, автомобильные компьютеры, диски Blu-ray - это все так называемая Java Microedition. Поскольку спектр устройств (и их возможностей) невообразимо широк, настолько же широк и спектр спецификаций («профайлов») JavaME, покрывающий их: CDC (Connected Device Configuration), CLDC (Connected Limited Device Configuration), MIDP (Mobile Information Device Profile), FP (Foundation Profile), PBP (Personal Basis Profile), PP (Personal Profile). Пусть каждый из «профайлов» и является подмножеством «старшего брата» (JavaSE), но каким именно подмножеством - потребуется изучить.

Наконец предположим, мы позволили себе замахнуться на Вильяма нашего Шекспира Корпоративную Информационную Систему. Что нас ждет в этом случае? А ждет нас изучение Java Enterprise Edition. В этом дивном новом мире нас ждут сервлеты и фильтры, JSP и JSF, Tomcat и GlassFish, JDBC и JPA, JCDI и JNDI, EJB, JTA, JMS, JAAS, JCE, JSSE, и много всяких прочих интересностей. Пытливый ум задаст вопрос: «А нафига мне весь этот блоат, если я хочу автоматизацию бизнеса? SQL в руки, и вперед!» - на что я отвечу ему следующее. Построение эффективной, производительной, масштабируемой, надежной и безопасной системы потребует задействования определенных, вполне известных техник. Техника «SQL в руки, и вперед» к ним не относится. Но вам повезло: большинство подобных техник уже реализовано для платформы Java, реализации имеют высокое качество и публикуются под свободными лицензиями. Большинство вышеприведенных аббревиатур имеют к ним прямое отношение. Это и реализации ORM/Persistence (Hibernate, EclipseLink), и контейнеры для трехзвенных приложений (GlassFish, JBoss), и веб-контейнеры (Tomcat), и кластерные коммуникации, и JMS message broker'ы, и так далее, и тому подобное. Поэтому для трезвомыслящего разработчика, который заботится о качестве продукта и о своем времени, путь один: изучать технологии, чтобы потом экономить время и повышать качество продукта. И да, это требует интеллектуальных и временнЫх вложений.

Резюмируя, скажу, что уровень вхождения, необходимый для написания хелловорлда, примерно одинаков для всех языков - от примитивного Visual Basic до зубодробительного Haskell. Для решения реальных задач потребуется поработать мозгами в любом случае. Для эффективного и продуктивного решения задач - придется поработать мозгами очень конкретно. В этом смысле Java дает некоторую поблажку разработчикам (по отношению к другим языкам), за счет огромного количества технологий, решающих подчас очень сложные инфраструктурные задачи (кластеризация, persistence, remoting и т.п.). Но это не отменяет необходимости их глубокого изучения (что, как правило, воздается сторицей).

Таким образом, утверждение о том, что «Java имеет низкий порог вхождения», выдает в заявляющем представителя одной из следующих категорий:

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

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

★★

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

ты случайно не писал учебники по физике, где за словом очевидно обычно скрывается 2-3 листа сложных вычислений?

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

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

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

Ладо, все, не очевидно это, не очевидно! Только не бейте!

А если серьезно, то Скала может быть и альтернатива, но не полная. Вот.

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

> Очевидно, что земля плоская

Хм, Аристотель только просто смотря по сторонам смог понять, что она круглая и даже вычислить её радиус (правда, ошибся в два раза), так что, в буквальном понимании слова «очевидно», можно утверждать, что «очевидно» обратное ;)

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

> Кому?? Из чего следует?? Где те ОЧИ, которыми ВИДНО?

Как говорил мой преподаватель по дифф.урам: «очевидно, что ничего не очевидно». Кто изучал математику, тот поймет :)

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

Это уже не очевидно. Это головой надо думать:)

svu ★★★★★
()

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

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

> она уже давно подверглась формализации.

То, что для неё были разработаны различные формализмы ни сколько не меняет того факта, что классическая логика является гуманитарной дисциплиной. Кстати, на математических факультатах логику (не путать с мат. логикой) и не преподают то, зато преподают, например, на философских и исторических ;)

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

> Ты, кстати, в курсе, что логика это гуманитарная дисциплина?

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

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

> Ты еще назови философов гуманитариями

Хм, а кто же они?

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


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

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

> будто в ней содержится ключ к пониманию всего на свете.

Всем давно известно, что ключ к пониманию всего на свете содержится в лиспе ;)

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

Не надо так переживать - это вредно. Кто тогда cl-closure-template будет разрабатывать?

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

dave ★★★★★
()

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

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

Стандартная библиотека Java версии 1.6 состоит чуть более чем из семи тысяч классов и интерфейсов и десятков тысяч методов.

Ну, и что? Их помнить наизусть все совершенно не нужно. Нужна способность быстро находить требуемое, когда используешь стандартуню библиотеку и здесь, в случае таких языков как Java, C#, Delphi, e.t.c. найти требуемые класс/метод в документации достаточно просто.

А ждет нас изучение Java Enterprise Edition.

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

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

Какая ты бука! Сегодня я придумал изящное решение для одной сложной задачи. Не омрачай мне день!

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

>Это - расхожий миф, распространяемый адептами Хаскела ради нагнетания вокруг него элитного ореола

Ну, я ни разу не адепт, а вот пришлось. То-ли пробелы в образовании, то-ли инертность мышления. Но заметь, про теорию категорий и тем более монады я не говорил. Я говорил про дискретную математику и абстрактную алгебру.

которая вычислила ему необходимое количество шурупов для сборки одной хитрой конструкции


Не выпендривайся ;)

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

надо не только вкурить язык, API и принципы работы «подлежащих уровней»


Давай, например, возьмем задачу по организации TLS, с одной стороны на яве с ее богатейшим API на эту тему и хаскелем, CL или даже С с другой. У кого «порог вхождения» ниже? И у кого в какой степени требуется понимать работу подлежащих уровней?

API и принципы работы «подлежащих уровней», но и иметь понятия об алгоритмах, их сложности и прочем матане.


Знаешь. Я конечно буду стараться сдерживаться... Но я имею удовольствие работать с системой, которая хранит деньги во float'е, причем с точностью до четвертго знака. Какие на ..й алгоритмы и сложность? Зато к ней прикручен HASP. И свистоперделки в виде экселевского аутомейшена.

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

> Объектно-ориентированный подход наиболее натуральным образом моделирует предметную область, то есть тот мир, в котором мы живем.

О май мазефакин год. Ни один, повторю: ни один, из атцов ооп не сравнивал ООП с _реальностью_ а многие говорили что люди пытающиеся моделировать реальность в ООП - идъеты.

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


Иди читай тред про яичшицу.

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

>Объектно-ориентированный подход наиболее натуральным образом моделирует предметную область, то есть тот мир, в котором мы живем.

Не читай больше Буча на ночь. Хорошо?

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

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

Самое смешное, что нет никакой пропасти между ООП и подходами в различных ML и лиспах. И Scala это очень хорошо доказывает. А вот пропасть между ООД и всем остальным, она таки имеется. Наверно, по причине тупиковости и по-настоящему маргинальности данной концепции.

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

«like countless other intellectual fads over the years („relevance“, communism, „modernism“, and so on—history is littered with them), OOP will be with us until eventually reality asserts itself. But considering how OOP currently pervades both universities and workplaces, OOP may well prove to be a durable delusion. Entire generations of indoctrinated programmers continue to march out of the academy, committed to OOP and nothing but OOP for the rest of their lives.»

-- Richard Mansfield, author and former editor of COMPUTE! magazine

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

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

Часто используемые библиотеки С++ состоят из множества классов.

Ну, и что? Их помнить наизусть все совершенно не нужно. Нужна способность быстро находить требуемое и здесь, в случае такого языка как С++ найти требуемые класс/метод в документации достаточно просто.

Много букв и названий. А на деле - обосраться как сложно понять, что такое STL, BOOST, QT, GTK. Лол. Помню, пришёл новый проект. Никогда до этого не касался ни gcc, ни QT ни прочего. Сел, почитал чё это, посмотрел примеры, написал. И не хэлловорлд, а прикрутил к сквиду логирование, учет траффика (побайтный, а не по факту скачки), квоты и проч и проч на мускуле. Не бог весть что, конечно, но и не примитив.

fixed

anonymous
()

Peter Seibel (aвтор Practical Common Lisp) как-то давал лекцию при Google TechTalks. Он сам опытный Java-разработчик и там приводит разные сравнения Java//CL, от которых Java не выглядит как «язык с низким порогом вхождения», а наоборот - выглядит как язык в котором для того чтобы сделать довольно очевидные вещи нужно совершать много лишних движений.

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

Где те ОЧИ, которыми ВИДНО?

«Самого главного глазами не увидеть», а если точнее, глаза вообще не видят. Есть мнение, что видит таки моск. Чтобы хотя бы договориться, что oh и svu смотрят на одно и то же, уже требуются определённые усилия. А то, что видят они разное, хотя бы в деталях - очевидно :)

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

«Более развитые средства ООП в CL» - миф. Возможно, CLOS более развит технически (что спорно - от мультиметодов и обобщенных функций подчас только вред), но значительно менее юзабелен. Посмотрите хотя бы на примеры использования CL-GTK, потом сравните с аналогичными примерами на Vala и прослезитесь, насколько в Vala все проще и изящнее.

Неправда ведь. Если начать разбираться, то окажется, что при написании на CL-GTK2 LOC получится гораздо меньше (и чем больше проект, тем значительнее будет разница) чем тот же LOC на Vala. Т.е. на Vala никак не «проще». Ну а что касается «изящнее», то это уже субъективный критерий - вот я считаю, что всё же на CL красивее - и кто прав?)

quasimoto ★★★★
()

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

Ни разу не слышал о Java и низком пороге вхождения. Наверное, потому что подобное говорят только на ЛОРе, который я давно не читал.

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

> Ни разу не слышал о Java и низком пороге вхождения. Наверное, потому что подобное говорят только на ЛОРе, который я давно не читал.

То есть, Гослинг и Стил только на ЛОРе обитают, да?

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

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

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

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

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

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

Много «лишних», но совершенно очевидных движений.

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

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

> Джава не позволяет оперировать слишком уж абстрактными сущностями

Да ну? Я то думал, что столько сферических коней, как в типичном коде не Java (которого я видел достаточно много), больше нигде встретить нельзя.

archimag ★★★
()

PureFabricationAbstractFactorySingletonProxyVisitor

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

Без рекурсии, со стеком на хипе, в виде односвязного списка. Глобально и надежно, масштабируемо, и никакого дерьма в стек трейсах.

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

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

Не, не баран. У баранов stack overflow на каждый чих. А у меня дерево на много гигабайт обходится без проблем.

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

Очевидно можно, не спорю, но как проще и где меньше «матана»? Если эмуляция стэка проще рекурсии...

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

Интересно почему ещё такие небараны не написали ЯП, где стэк эмулируется, чтобы писать в пару строк то, что небараны пишут в десятки. А да, рекурсия же матан.

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

stackless python, дурилко картонное

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

> Без рекурсии, со стеком на хипе, в виде односвязного списка.

Чтобы сымитировать продолжения? Молодец! Хотя в яве для нет TCO, но то ява.

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