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 и делающие суждения на основе утверждений, сделанных двумя другими категориями;
  • тролли;
  • адепты маргинальных языков, мучимые баттхертом из-за нераспространенности собственного идола.

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

★★

Добавлю, что...

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


...именно это (невиданная универсальность платформы) и является, по моему скромному мнению, причиной заслуженной популярности Java.

А не Всемирный Заговор Маркетологов, или еще какие подобные городские легенды.

Kuka ★★ ()

Ммм... Это разве не в Talks'ы?

KblCb ★★★★★ ()

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

archimag ★★★ ()

Ну и чем эта ваша J2EE лучше VisualWorks или GemStone/S?

yoghurt ★★★★★ ()

Ждем: [мифы и легенды] перспективность быдлокондинга и обучение в Стенфорде.

anonymous ()

Вы, товарищ, передергиваете.

Как будто тысячи классов всяких разных API не надо изучать при использовании любого другого языка. У Java действительно очень низкий порог вхождения (подчеркну - вхождения, а не «достижения уровня гуру»). Сам язык очень простой и маленький, и можно не сильно много времени на него тратить, занявшись сразу изучением их самых, API.

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

Так у кого порог вхождения ниже, уважаемый тролль?

anonymous ()

невероятно, но джава джаве - рознь...
ваш К.О.

зы JavaFX забыли

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

> Хм, любопытная манера самому себе придумывать мифы и начинать их опровергать ;) К доктору...

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

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

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

> Ну и чем эта ваша J2EE лучше VisualWorks или GemStone/S?

«Ъ не читают даже заголовка» (С)

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

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

> невероятно, но джава джаве - рознь...

Об этом я и написал: порог вхождения в Java уровня «Hello, World!» - низок, и быстро растет с приближением задач к реальному миру.

зы JavaFX забыли


Не забыл, но в сообщении и так «многабукф», с JavaFX его бы вообще «ниасилили», надо уважать читателя.

Хотя JavaFX здесь - очень неплохой аргумент, так как технология включает в себя не только дополнительные API, но и собственный язык: FXScript.

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

Заблуждение - это ты. Потому как ты не видишь разницы между порогом вхождения и сложностью освоения. Что с дурака взять?

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

> Сам язык очень простой и маленький, и можно не сильно много времени на него тратить, занявшись сразу изучением их самых, API.

...и в результате получить Бейсик с прикрученными к нему Java API?

Таким же макаром можно «изучить» и С++.

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

>Об этом я и написал: порог вхождения в Java уровня «Hello, World!» - низок, и быстро растет с приближением задач к реальному миру.

в реальном мире J2EE и, скажем, тот же JavaFX или J2ME практически не пересекаются

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

>Таким же макаром можно «изучить» и С++

C++ - едва ли, какой-нибудь Qt - ещё куда ни шло...

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

javafx пзционируется как морда-клиент к javaee приложениям

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

> в реальном мире J2EE и, скажем, тот же JavaFX или J2ME практически не пересекаются

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

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

> ...и в результате получить Бейсик с прикрученными к нему Java API?

Как языка Java проще чем Бейсик.

Таким же макаром можно «изучить» и С++.

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

Только идиот станет отрицать, что как язык Java на порядок проще чем C++.

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

> Как языка Java проще чем Бейсик.

Лолчто?

Только идиот станет отрицать, что как язык Java на порядок проще чем C++.


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

Речь идет о пороге вхождения в _платформу_ Java.

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

Только идиот станет отрицать

Бугага, ваша аргментация феерична.

wfrr ★★☆ ()

>Сперва давайте полистаем спецификацию языка Java, третье издание. В книжке 684 страницы. Шестьсот восемьдесят четыре.

Я полистал какую-то книжку по Java около 12 лет назад. Где-то в 1997-м или 1998-м. Слепил Java-applet, рисующий синусоиду. И больше к теме Java не возвращался.

Где-то в 2004-м мне перестал нравиться один жирный проект на Java. За вечер разобрался в нём и начал лепить патчи. Через несколько месяцев сделал очень популярный форк, а через год руководил большой командой и наш форк считался одним из лучших, если не лучшим :)

Ни к каким книжкам с упомянутого конца 1990-х не обращался.

Java, действительно, был очень прост для меня. Сравним, где-то, с PHP. Скажем, Perl или Python - однозначно заметно сложнее.

После Java также очень просто C#. Я по нему вообще ничего не читал, но несколько несложных решений сделал сразу.

Хотя, безусловно, тут сказывается то, что они оба - наследники Си++. Если бы я не знал Си++, возможно, всё было бы хуже.

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

> Лолчто?

Ну точно, не просто дурак, но еще и тролль. Я так и думал.

Вы, товарищ тролль, Бейсик вообще видели, или как?

Речь идет о пороге вхождения в _платформу_ Java.

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

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

> Бугага, ваша аргментация феерична.

О, идиоты подтянулись. Расскажет нам идиот, в каком месте язык Java сложнее языка C++?

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

> Если бы я не знал Си++, возможно, всё было бы хуже.

А может и лучше. После C++ у людей мозг наизнанку вывернут, все норовят лезть с ранними оптимизациями и ручным memory management-ом. Java гораздо лучше идет как первый язык, чем по натертым от С++ мозолям.

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

>После C++ у людей мозг наизнанку вывернут

У меня к моменту плотного знакомства с Си++ мозг был вывернут программируемыми калькуляторами, тремя ассемблерами, Бейсиком, Фокалом и Фортом :) Так что хуже уже стать не могло :D

...

Другое дело, что после Си++ перед Java мозг был заполирован Perl'ом и PHP. Да ещё всякие JavaScript и т.п. :)

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

далеко не обязательно к EE, и уж тем более не факт, что оба компонента пишет один человек

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

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

Плюс язык и JavaSE, пускай частично.

вы не поверите, но как язык EE от SE не отличается.

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

> Бугага, ваша аргментация феерична.

Пациент действует четко в соответствии с Сводом Правил Демагога:

Правило демагога №11

Другой хороший приём — апеллировать к уму оппонента. «Вы же умный человек и сами понимаете, что…» Если он всё-таки возразит, всем покажется, что он сам признал, что он идиот.

Kuka ★★ ()

Сами себе перечите «низкий уровень вхождения» и сразу переходите к количеству API.

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

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

> Сами себе перечите «низкий уровень вхождения» и сразу переходите к количеству API.

Похоже, вы-таки из категории №1.

Ответьте на вопрос: что можно написать на Java без использования стандартной библиотеки (JavaSE)? Когда речь идет о пороге вхождения для Java, по-умолчанию имеется в виду не язык, а целостная платформа. Это очевидно каждому, кто имеет с Java хотя бы поверхностное знакомство.

Kuka ★★ ()

И под всей этой чудесной _платформой_ Java, про которую вы говорите, рабоатет Clojure.

// кастирую в тред отта, он вам расскажет!

oh ()

Все языки делятся на два вида вхождения, где можно написать Print «Hello mor!» и сразу получить результат, и где для этого нужно ещё что-то наколдовать.

А jaba (точнее jabba) это вообще расово-негроидное название jabber-а.

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

>Ответьте на вопрос: что можно написать на Java без использования стандартной библиотеки (JavaSE)?

стандартной библиотеки или _всей_ стандартной библиотеки?

thevery ★★★★ ()

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

vertexua ★★★☆☆ ()

низкий порог вхождения - но это ведь наоборот хорошо

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

Что мой оппонент идиот понятно и без его признаний.

Повторяю - только идиот станет утверждать, что Java сложнее чем C++.

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

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

К API тоже. Сравним, например, Swing и MFC...

anonymous ()

Еще часто путают «проще» и «удобнее для большинства задач».

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

> Ответьте на вопрос: что можно написать на Java без использования стандартной библиотеки (JavaSE)?

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

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

Ну ну. За те десять лет, что пишу на Жабе, ни разу не посмотрел даже в сторону такой части этой «целостной» платформы, как Swing. Так же прошел мимо EJB. Я что, таки не вошел еще даже, да?

Это очевидно каждому, кто имеет с Java хотя бы поверхностное знакомство.

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

anonymous ()

Лето



Дни Кука на ЛОРе



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

>И под всей этой чудесной _платформой_ Java, про которую вы говорите, рабоатет Clojure.

Под или над?

yoghurt ★★★★★ ()

>Таким образом, утверждение

Таким образом Ява именно и имеет низкий порог вхождения. Именно потому что на ней + платформе JVM можно программировать высокоуровнево и сразу, прочитав любой туториал и не заморачиваться с пониманием тонкости работы подлежащих уровней.

Даже не нужно понимать тонкости ООП, в отличие от С++.

А теперь срвани с хаскелем, для программирования на котором требутеся изучать крайне нетривиальную «дискретку» (далеко за рамками многочисленных книг «дискретная математика для чайни^W программистов») и абстрактную алгебру. В противном случае написать на нем что-то длиннее хелловорда невозможно. И это все на фоне отсутствия тыщщи библиотек с удобным и стабильным интерфейсом.

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

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


Macil ★★★★★ ()

Да, кстати, часто выставляют ООП как фичу Жавы. Вы это поддерживайте?

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

> А теперь срвани с хаскелем, для программирования на котором требутеся изучать крайне нетривиальную «дискретку» (далеко за рамками многочисленных книг «дискретная математика для чайни^W программистов») и абстрактную алгебру. В противном случае написать на нем что-то длиннее хелловорда невозможно.

Гон?

И это все на фоне отсутствия тыщщи библиотек с удобным и стабильным интерфейсом.


А вот это да :(

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

Ну, я не тебя спросил, ну ладно ;)
Спорить не буду, хочу все-таки подождать ответа куки

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

> Да, кстати, часто выставляют ООП как фичу Жавы. Вы это поддерживайте?

Молодой человек, потрудитесь сформулировать вопрос поточнее. Что значит - «выставляют»? Кто выставляет?

То, что Java является объектно-ориентированным языком программирования - таки да, является. В чем суть вашего вопроса?

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

Таки извиняюсь,
считайте ли вы ООП киллер-фичёй Жавы? Возможно ли, что из-за ООП жава
набрала популярность?

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

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

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

А теперь срвани с хаскелем, для программирования на котором требутеся изучать крайне нетривиальную «дискретку» (далеко за рамками многочисленных книг «дискретная математика для чайни^W программистов») и абстрактную алгебру.


Это - расхожий миф, распространяемый адептами Хаскела ради нагнетания вокруг него элитного ореола; зачастую сюда еще приплетают пресловутую теорию категорий. Напомню, сам автор Haskell говорит, что «Haskell has nothing to do with no category theory». Общее у Haskell и теории категорий - пользование схожими терминами типа «монады» или «функтора».

В противном случае написать на нем что-то длиннее хелловорда невозможно.


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

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

Kuka ★★ ()

За что лисперы съели Куку?

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