Почему Java не используется для разработки современных веб-приложений? [закрыто]

393

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

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

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

В результате я потратил время на работу по подбору Ruby / Rails, в основном, чтобы выяснить, чего мне не хватает. Но я не могу не думать о себе: «Я мог бы сделать это намного быстрее, если бы использовал Java», в основном из-за моего относительного уровня опыта.

Но также потому, что я не видел ничего критически «отсутствующего» в Java, мешающего мне создавать одно и то же приложение.

Что подводит меня к моему вопросу (ам) :

Почему Java не используется в современных веб-приложениях?

  • Это слабость языка?

  • Является ли это несправедливым стереотипом Java, потому что он существует так долго (он был несправедливо связан с его старыми технологиями и не получил признания за его "современные" возможности)?

  • Является ли негативный стереотип разработчиков Java слишком сильным? (Java просто больше не «крут»)

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

  • Используется ли Java только крупными компаниями, которые слишком медленно адаптируются к новому языку?

Cliff
источник
142
Я думаю, что вы не правы: он все еще используется, он просто потерял крутой фактор.
41
@Graham Lee: Java когда-либо была крутой? Должно быть, я что-то пропустил. Ну, я думаю, это холодный кофе, но круто? Я думаю, что основная причина заключается в том, что Java, особенно корпоративные Java-фреймворки, были и остаются в значительной степени перегруженными. Вы не можете считать их легковесными, вы просто используете их, потому что вам нужны функции распределения / балансировки / масштабируемости платформы и вы хотите использовать инфраструктуру для внешнего интерфейса, которая также выполняется с помощью Java, для обеспечения однородности.
Сокол
20
Может быть, потому что это не современно ? : P И Java никогда не был крутым, просто потому что он отбросил хакерскую часть из программирования.
back2dos
28
@Falcon Java была крутой назад, когда она была впервые представлена, Sun проделала большую работу, раскручивая Java, независимо от того, была ли эта реклама оправданной или нет, не имеет ничего общего с тем, является ли она классной или нет, многие классные вещи раскручиваются без причины.
Махмуд Хоссам
11
@Falcon, вы должны взглянуть на создание веб-приложений с помощью JSF 2.0 в Java EE 6 и сравнить их с вашим опытом. Ты будешь приятно удивлен.

Ответы:

174

Современные дневные стартапы должны появиться на рынке как можно скорее. Им не нужно тратить около шести месяцев, чтобы выпустить свое веб-приложение на Java.

Например, Twitter был построен с использованием Rails / Ruby, но как только он стал масштабируемым, они перешли на JVM.

Не говоря уже о том, что процесс разработки не продуктивен: code -> compile -> deploy, пока он находится в таких средах, как (Rails / Django / Grails): запустите тестовый сервер -> code -> измените вещи и посмотрите, что произойдет

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

Chiron
источник
81
Play Framework также похож на Ruby on Rails, но для Java. Код -> обновить браузер.
Джонас
34
Просто попытайтесь избавиться от некоторых заблуждений. Java EE - не единственная вещь на стороне сервера Java, как многие думают.
Джонас
22
Facebook также делает нечто подобное. Их кодовая база находится на PHP, но из-за проблем со скоростью и масштабируемостью им пришлось написать компилятор (HipHop), который компилировал PHP в C ++, который затем компилировался с использованием g ++. Забавно, что все говорят о том, насколько хороши ruby ​​и PHP и что все сайты построены вокруг них, но когда вы посмотрите на их неэффективность, большинству крупных организаций придется переключиться на что-то другое. Если я правильно помню, по этой причине в Craigs List много бэкэнд-кода, написанного на C / C ++.
Кибби
28
1) Используя Eclipse, компиляция происходит по мере ввода текста, и вы будете редко замечать. Кроме того, запустив Tomcat в Eclipse, я могу перезапустить приложение менее чем за секунду. Мне редко мешает перезапускать мои приложения. 2) Серебряной пули нет, ребята. Ruby или любой другой язык не делает вас в 10 раз быстрее. Проблема с Java-разработчиком часто заключается в увеличении времени, но если вы знаете, что делаете, вы можете приступить к работе в проекте менее чем за 10 минут.
Алекс
5
У Java и любого другого статического языка есть два огромных преимущества: практически не беспокоиться о рефакторинге и обнаружении API без документации.
Эран Медан
136

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

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

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

FrustratedWithFormsDesigner
источник
5
Для «небольших» приложений это еще более верно, если вам нужно (потому что это «стандарт» и компания его использует) работать с огромными серверами приложений, такими как Websphere, тогда как чаще всего, например, Tomcat достаточно хорош. .. Почему я должен работать с этой испорченной консолью администрирования? Вздох ...
Джалайн
7
@Jalayn: По моему опыту, это потому, что они хотят поддерживать только одну программу сервера приложений для всего, а не администратора WebSphere для команды A, Tomcat для команды B, Glassfish (или что-то еще) для команды C ... и я могу понять, что чувствую тоже, но да, это также расстраивает меня.
FrustratedWithFormsDesigner
3
Это верно для Java EE, но теперь есть Play Framework , который сделает ваши веб-приложения на Java такими же легкими и продуктивными, как Ruby on Rails.
Джонас
9
Новый Java 6 EE, особенно веб-профиль, позволяет создавать довольно простые веб-приложения.
4
@ ThorbjørnRavnAndersen Приложение может быть простым, но понимание структуры не так же, как и понимание основных инструментов, таких как Ant или Maven. Кривая обучения новичка огромна и полна вложенных слоев акронимового супа, путаницы между спецификациями (например, JAX-RS) и имплсами (например, Джексон) и многим другим. Чрезвычайно сложно делать что-то простое, если вы действительно хотите понять, что вы делаете.
Крейг Рингер
135

Я программировал Java-приложения в течение 10 лет, прежде чем перейти на python, 4+ года назад. Я чувствую, что я гораздо более продуктивно использую Python и могу сделать гораздо больше за более короткий промежуток времени, и, честно говоря, я намного счастливее, когда я развиваюсь в Python. Вот некоторые из причин, по которым я думаю, что Python лучше, чем Java, исходя из моего личного опыта, ваш успех может быть очень.

Веб-фреймворки:

Когда я впервые начал программировать веб-приложения на Java, Struts только что вышел, и это было не здорово, но это было лучшее, что было доступно. По пути я создал несколько приложений для Struts и несколько других. Всякий раз, когда выходил новый фреймворк (Tapestry, Wicket, GWT, полоса, Grails, AppFuse, Play, RichFaces, Spring и т. Д.), Я пробовал его и смотрел, был ли он немного лучше, и в большинстве случаев это было только немного лучше и иногда не лучше вообще. Я должен сказать, что игровые рамки - это шаг в правильном направлении.

Аккумуляторы не включены:

Одной из самых раздражающих частей Java было то, что большинство библиотек, которые вы используете, не были включены в саму java, вам приходилось включать тонну сторонних библиотек из таких мест, как Apache Commons. Если вы используете что-то вроде hibernate с любой другой большой библиотекой, вы попадаете в ад зависимости Jar, где hibernate требуется одна версия jar, а что-то еще - другая версия. Если вы загружаете файлы JAR в неправильном порядке, вам не повезло. Вы должны зависеть от таких инструментов, как maven и ivy, чтобы управлять своими зависимостями, и это просто добавляет больше зависимостей в ваш проект, что приводит к огромным проектам. У меня было несколько военных файлов размером более 100 МБ для самых простых веб-приложений.

Слишком много вариантов:

По какой-то причине кажется, что в Java слишком много разных способов сделать то же самое. Существует более 38 различных веб-фреймворков для Java в соответствии с Википедией ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) и 23 различных ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#). Ява ) просто назвать пару примеров. Если вы посмотрите на другие языки, у них есть более разумное число. Некоторые люди считают, что наличие большого количества вариантов - это хорошо, но это не приводит к огромным потерям усилий в сообществе разработчиков, все заново изобретают одно и то же колесо, и если вы новичок в своем языке, который у вас есть слишком много вариантов для выбора.

Серверы приложений:

Веб-приложения Java действительно тяжелые и требуют много ресурсов для запуска. Они особенно жаждут памяти. Как и любое другое программное обеспечение, они могут быть настроены так, чтобы уменьшить объем ресурсов, но по сравнению с другими языками их стандартная настройка ужасна. В прошлом я использовал weblogic, websphere, Jboss, tomcat и jetty. Я использовал первые три, когда меня заставляли использовать EJB, но даже если вы не используете EJB, они были большими серверами приложений, а иногда их было сложно настроить и запустить правильно. Tomcat и Jetty намного лучше и проще в настройке, но по-прежнему занимают много места.

Хостинг приложений:

Если у вас нет собственного сервера, очень сложно найти общий хостинг для ваших java-приложений по разумной цене. Основная причина заключается в том, что java-приложениям требуется намного больше памяти по сравнению с другими языками, поэтому провайдеру общего хостинга не имеет смысла тратить свою ценную оперативную память на java-сайт, когда они могут запустить 5 php-сайтов в одном месте. Это означает, что есть меньше провайдеров, предлагающих хостинг на Java, что, в свою очередь, означает более высокие затраты на запуск вашего сайта.

Время разработки:

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

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

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

IDE:

Когда я разрабатывал на Java, я чувствовал себя застрявшим в IDE, без него я потерялся. IntelliJ - лучшая IDE на рынке, и было сложно перейти на python, потому что не было ничего подобного для python. Поэтому вместо IDE я просто использовал textmate, который является обычным текстовым редактором. Сначала это было сложно, но поскольку это был просто текстовый редактор, это было действительно быстрое и быстро реагирующее приложение. Я мог бы открыть весь свой проект за несколько секунд, тогда как, когда я хочу открыть проект в IDE, это может занять минуту или больше с машиной с тонной оперативной памяти. Создатели IntelliJ выпустили редактор python под названием pycharm, я купил его, когда он только вышел, и это здорово. Но я понял, что мне не нужна IDE для Python, я в порядке с текстовым редактором. Когда я возвращаюсь к работе над веб-приложениями на Java, что мне приходится делать время от времени, я пытаюсь использовать текстовый редактор, но я еще не совсем освоил это. Лично мне больше нужна среда IDE для Java, потому что если я что-то испорчу, перекомпиляция и повторное развертывание займет больше времени, что замедляет меня.

ORM:

Когда я впервые начал использовать Hibernate в качестве ORM, я думал, что это было здорово, у него были свои проблемы, и он не был идеальным, но это было лучше, чем то, что я делал раньше. Я был доволен этим, пока не подал заявку с ORM Джанго на проект Python, и это открыло мне глаза, именно так должна работать ORM. После этого проекта я вернулся в спящий режим, и я просто почувствовал разочарование и жаждал вернуться в ORM Джанго. Еще один замечательный Python ORM - это sqlalchemy, который похож на ORM Джанго, но немного отличается. У меня ограниченный опыт работы с ORM ROR, но, насколько я помню, это было довольно хорошо.

Шаблоны:

Системы веб-шаблонов в Java не так хороши, и я думаю, что попробовал их все (тайлы, freemarker, скорость и т. Д.). Большинство из них предлагают только базовую функциональность и с ними трудно работать. Со стороны Python мои два фаворита - это шаблоны Django и Jinja2, в них есть все, что мне может понадобиться в шаблонизаторе, и они действительно просты в использовании.

Ken Cochrane
источник
10
Я с вами по многим вопросам, но с некоторыми не согласен. Цикл компиляции / тестирования : используйте динамический веб-модуль Eclipse и / или JRebel, и его больше нет; здорово. Тяжесть : JBoss AS 7 довольно легкий и быстрый. и если вы не хотите EE, вы можете использовать Tomcat или Jetty, которые даже там нет. Тестирование : Arquillian - лучший инструмент для тестирования, который я использовал на ЛЮБОМ языке, хотя он только достаточно зрелый, чтобы его можно было использовать. Ад зависимости : Просто используйте Maven; это должна быть стандартная и обязательная часть JAva.
Крейг Рингер
Обратите внимание, что все вышеперечисленное добавляет к проблеме «батареи не включены», которая является огромной. Похоже, Java EE - это подфреймворк, на котором вы должны создать свой собственный фреймворк, а затем создать свое приложение. Очень неэффективно. Каждый инструмент также ужасно глючит, а JSF2 - просто инструмент снижения производительности труда разработчиков.
Крейг Рингер
2
Я также думаю, что вы упустили критическую точку: кривая обучения и ошибки действительно замедляют процесс.
Крейг Рингер
@CraigRinger Я не использовал динамический веб-модуль eclipse или JRebel, так что, вы правы, это может быть уже не так.
Кен Кокрейн
2
Если вам понравился IntelliJ, попробуйте PyCharm - он основан на том же ядре.
Тамлин
94

Стартапы хотят блестящие. Что бы ни было блестящим: RoR, Groovy, Grails, ООП с PHP, Foobar, Wibble, Narf и т. Д.

Предприятие хочет стабильного, надежного и масштабируемого: Java и .NET отвечают всем требованиям (если все сделано правильно).

Текущий концерт: Финансовые услуги. Платформа: ColdFusion (по сути, библиотека тегов Java) и Java.

Предыдущие концерты:

  1. Услуги по тестированию образования - ColdFusion
  2. Страхование от высокого риска - ColdFusion и Java
  3. 401k - ColdFusion и Java
  4. Travel - Java с внутренними приложениями ColdFusion
  5. Securities - ColdFusion (версия до Java)

Это все сайты с высоким уровнем безопасности. Никто из этих компаний никогда не рассматривал PHP, некоторые смотрели на RoR и видели слишком много проблем. У компании 401k была дочерняя компания, управляющая приложением .NET с компетентными разработчиками, приложение продолжало падать каждую неделю. Наконец они преобразовали его в Java и получили стабильность.

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

Адриан Дж. Морено
источник
23
«У компании 401k была дочерняя компания, управляющая приложением .NET с компетентными разработчиками, приложение просто продолжало падать каждую неделю. Они наконец преобразовали его в Java и получили стабильность». Lol :), слышал об обратном случае.
День
12
Ну, конечно, у вас есть. Веб-приложения - это больше, чем написание кода, вы должны знать, как настроить свои серверы, написать оптимальный SQL и так далее. В этой компании было 2 разработчика .NET и никаких реальных администраторов серверов. Компания, которая купила компанию, с которой я был, также включила это приложение в сделку. Они были огромным магазином Java и поэтому имели больше ресурсов, чтобы гарантировать стабильность.
Адриан Дж. Морено
48
Мне кажется неискренним, что вы написали это предложение как причину и следствие. Преобразовать в Java = повышение стабильности? Мы все знаем, что это не почему. Кроме того, извините за весь этот опыт ColdFusion;)
Джордан
3
Честно говоря, инвесторы, как правило, хотят увидеть вкус года. Но я все еще лично не могу придумать худшего выбора для быстрой разработки прототипа, за исключением очень высококачественных разработчиков Java, которые нелегко найти.
Эрик Реппен
9
очень качественные Java-разработчики, которых нелегко найти - действительно.
luis.espinal
73

Дополнение к ответу FrustratedWithFormsDesigner : так как я полагаю, что ваш вопрос больше ориентирован на небольшие сайты, есть важный аспект, который вам нужно учитывать для многих людей: хостинг повсеместен для PHP, но сложнее для сайтов Java или ASP. Это, однако, не является дефектом этих языков.

Себастьянгеигер
источник
Я думаю, что все изменилось, теперь вы можете бесплатно размещать веб-приложения на Java в GAE.
Махмуд Хоссам
+1 за хостинг Java. Хотя ASP.Net не сложно найти, и это дешево. Я плачу 8 долларов в месяц за свой общий хостинг ASP.Net. С другой стороны, я хотел попробовать создать сайт на Java и не смог найти общий хост, на котором работает Java, и необходимость использования VPS меня не интересует для учебного проекта.
Джетти
9
+1 за это. Гораздо проще разместить множество сайтов на сервере для PHP, чем для Java, и к тому же гораздо проще найти дешевые решения для веб-хостинга для PHP, чем для Java.
Джонас
Вы правы @Mark, исправлено.
Себастьян
1
@Kibbee - Arvixe Вот кто я использую. У меня есть личный план ASP Pro.
Джетти
70

Java абсолютно будет использоваться для современной разработки веб - приложений. Особенно когда вы доберетесь до чуть большего / более сложного / масштабируемого конца спектра веб-приложений.

Если вы заинтересованы в современных, продуктивных инструментах и ​​средах, взгляните на:

Но я думаю, что наиболее по-настоящему современная веб-разработка на платформе JVM, вероятно, будет выполняться на одном из новых языков JVM, а не с использованием Java напрямую, поскольку Java просто обеспечивает основу с точки зрения базовых библиотек и серверной инфраструктуры. Существует много веб-разработок в Groovy ( Grails ), Scala ( Lift and Play ), JRuby ( JRuby on Rails ) и Clojure ( Noir , Ring / Enlive + множество пользовательских фреймворков), и это лишь некоторые из них.

Со всеми нововведениями, происходящими в новом языковом пространстве JVM, я лично подозреваю, что Java в конечном итоге станет «сборщиком серверного программирования».

mikera
источник
Vaadin - отличный инструмент для создания интранет-приложений и приложений для крупных предприятий. Думаю, это не очень хорошо подходит для стартапа. Это если вы не понимаете, как это выглядит, потому что это слишком сложно изменить.
naugtur
7
Согласовано; Java EE 6 хороша, как только вы бросаете JSF2 и используете что-то вменяемое и продуктивное. Кривая обучения все еще огромна, хотя.
Крейг Рингер
1
Вы можете добавить Tapestry5 ( tapestry.apache.org ) в свой список современных веб-фреймворков Java.
Neeme Praks
@CraigRinger JSF это просто. Ваш комментарий читается как сам вопрос: религиозный декламация
jwenting
@jwenting Ну, прошло уже три года , и с тех пор он немного улучшился с точки зрения документации и внешних инструментов. На стеке EE 6, когда я работал с ним, было чертовски ужасно, особенно если поддерживать Glassfish 3 и AS 7.
Крейг Рингер,
41

Google, Amazon или LinkedIn считаются современными?

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

Тем не менее, Java прошла через период, когда ее стандарты веб-разработки пытались быть всем для всех (возможно, до сих пор). «Не повторяйся» было ответом на адский XML и долгие циклы сборки веб-разработки на Java. В результате Java (EJB, Struts, JSF и т. Д.) Стала рассматриваться как вещь, которую все новые парадигмы пытались преодолеть.

Ява, язык многословен. Это за и против (отлично подходит для обслуживания, отстой для разработчиков). Существует ряд современных языковых функций, которые еще не вошли в Java, которые могут существенно сократить время кодирования (свойства, события, замыкания, генераторы, понимание списков и т. Д.). Таким образом, это может быть неприятно, если вы переходите с более современного языка. Тем не менее, их трудно добавить к зрелому языку, не становясь гнездом крыс, которое становится C #.

Многие языки, используемые в современной веб-разработке, динамически типизированы. Это позволяет использовать инструменты, которые могут динамически перезагружать код при его написании (это сложнее сделать на статическом языке - jrebel). Поскольку веб-разработка допускает быстрые итерации, динамическая перезагрузка - огромный выигрыш. Это значительно сокращает цикл разработки в новых проектах и ​​упрощает правильную настройку пользовательского интерфейса и UX (методом проб и ошибок по своей природе).

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

Кроме того, по мере роста числа разработчиков и оборачиваемости продуктов вероятность благих намерений людей, делающих ошибки, возрастает. Строгость и дисциплина, которой придерживается хорошо разработанный Java-проект (интерфейсы, шаблоны и святая вода для этих php-вампиров :)), помогает снизить долгосрочный риск. Хотя это также может быть достигнуто с помощью модульного тестирования, сеть безопасности, полученная из статической проверки (и статических анализаторов, таких как findbugs и clang), обеспечивает встроенный уровень покрытия кода, который трудно воспроизвести с помощью рукописных тестов. Не поймите меня неправильно, должны быть модульные и функциональные тесты, но реальные организации никогда не достигают 100% покрытия. Для того, что они проверяют, делают статические анализаторы.

Таким образом, в больших проектах (определяемых в большей степени размером команды, чем размером кода), где существует сложное взаимодействие между независимо разработанными частями кода, языки, подобные Java, все еще предпочтительны. Примеры включают в себя большие / сложные веб-приложения, такие как приложения у финансовых брокеров (ameritrade), финансовые биржи (nasdaq, nyse, возможно, Лондон после сбоя .net), онлайн-банкинг (почти все), электронная почта (google), аукцион (ebay) , и т.д.

С точки зрения производительности и масштабирования, ничто не превосходит платформу Java, поскольку она сочетает в себе масштабируемость и производительность для веб-приложений (в зависимости от того, как вы считаете разбиение приложений на Facebook). Twitter, например, должен был переписать большую часть своей инфраструктуры Ruby в Scala на Java VM, чтобы вывести китов-неудачников обратно в море. Я слышал о других крупных примерах, но они ускользают от меня прямо сейчас.

Также стоит подумать о безопасности. В то время как плагины Java-браузера пострадали по большей части от уязвимостей в безопасности, сама платформа Java является одной из наиболее безопасных платформ. Веб-приложения Java имеют репутацию очень безопасных. Практика кодирования, библиотеки и архитектура давно препятствуют ошибкам, которые делают возможными такие атаки, как внедрение SQL или переполнение буфера. Хотя другие веб-платформы (рельсы) имеют хорошую репутацию в области безопасности, ни одна из них не превосходит Java.

В итоге, большинство веб-приложений технически просты. Проще говоря, Java часто бывает излишним (как в старые времена, когда мы писали их на C :)). Если, однако, веб-приложение является сложным (бэкэнд или иным образом) или ожидается, что в нем будет более 100 разработчиков, Java будет сложно победить.

-

Что касается меня, я часто использую Grails, потому что он дает мне лучшее из обоих миров (то же самое можно сказать и о JRuby, который, как я слышал, становится все более и более популярным в мире Ruby).

Кстати, я считаю, что рост PHP действительно сбивает с толку. PHP как язык является грубым эквивалентом perl в удобочитаемости и VB в качестве результатов. Он поощряет ужасные практики, почти невозможен в обслуживании, сторонние библиотеки редко работают так, как ожидалось, и у него есть синтаксис, который заставит Ларри Уолла ... ну ... стену. Единственное объяснение, которое я могу придумать, - это то, что оно поддается инкрементальному обучению (например, VB). Другими словами, вы можете сделать что-то полезное, зная очень мало о программировании / администрировании, и вы можете расширять свои знания небольшими порциями за раз. Для этого многое можно сказать с точки зрения усыновления. Тем не менее, для тех, у кого есть все, пришлось поддерживать или заменять одно из миллиардов приложений VB, написанных «программистами» в мире корпоративных / mfg, Вы, вероятно, качаете головой и планируете выход на пенсию. :)

user56365
источник
3
Хотите прояснить вопрос о «крысином гнезде, в котором становится C #»?
XåpplI'-I0llwlg'I -
1
Я не совсем уверен, почему вы говорите: «Не повторяйте себя» - это ответ на ад XML и долгие циклы сборки веб-разработки на Java ». DRY появилась как концепция в Agile сообществе, большинство из которых в то время использовали языки, отличные от Java.
Жюль
38

Ну, я недавно встретился с парнем из Java, который был действительно взволнован новым проектом Spring Data из-за того, как мало кода требуется, чтобы получить базовый CRUD-доступ к вашей БД.

Я могу создать приложение CRUD , используя Rails (не только доступ к базе данных, но и представления и контроллеры) с помощью нескольких команд.

(Не в моей голове: новый проект, 1 команда scaffold на объект, 1 команда для переноса базы данных, 1 команда для запуска сервера.)

Это не имеет ничего общего с языком, все дело в инструментах. И кажется, что динамические языки имеют тенденцию иметь инструменты и структуры, которые удаляют много стандартного кода. (Чтобы восполнить недостаток мощных IDE, которые создают для нас шаблон).

Также я чувствую, что динамические языки значительно облегчают написание таких инструментов и сред. Я могу получить код для, скажем, Padrino или Rails (веб-фреймворков ruby) гораздо проще, чем код для Spring Roo. Это может быть связано с тем, что я знаю Ruby намного лучше, чем Java.

Робби
источник
24
Лично я не люблю динамические языки. Статические языки делают меня более продуктивным, когда я могу быстро увидеть все ошибки типов в моей IDE и использовать инструменты рефакторинга. Вы должны взглянуть на Play Framework - это веб-фреймворк Java, созданный на основе Ruby on Rails и позволяющий вам работать с Java.
Джонас
4
Мощный фреймворк, такой как rails, также означает, что если что-то плохо реализовано, то большинство людей не могут заменить это чем-то другим, потому что этот компонент слишком тесно связан с фреймворком. Что касается Java, если мне не нравится Hibernate, я могу использовать что-то еще, например, Cayenne или JPA.
Coyote21
2
Как кто-то борется с Джанго, позвольте мне сказать: Coyote21 абсолютно прав. Вы можете запустить базовый CRUD и запустить его через пять минут, но как только вы начнете добавлять бизнес-логику (когда эта запись обновляется, запись должна быть вставлена ​​в эту таблицу и ...) в CRUD, у вас возникают проблемы ,
Asthasr
Если вы в Rails, но нуждаетесь в Java, посмотрите на Seam Forge. Осторожно, он использует JSF2, с которым ужасно работать, но сам Forge довольно хорош.
Крейг Рингер
Вы можете создавать CRUD-приложения на Java, используя Roo за считанные минуты, то же самое с Grails (не совсем Java, но все еще JVM). В Play 1.0 были генераторы / строительные леса, интересно, куда они делись ...
Эран Медан
24

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

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

Кроме того, Java - очень нездоровый язык для кодирования. Он получил революционную возможность использовать строку в выражении switch только вчера. А javascript - это очень хакерский язык, поэтому после разработки интерфейса вы чувствуете себя очень стесненным, когда возвращаетесь в java.

Так что я полагаю, что это причины, по которым веб-стартапы избегают Java.

Даниэль Янков
источник
12
безболезненный доступ к БД? Spring JDBC или Hibernate отлично работают. Великие манипуляции со струнами? Не думайте, что в любом проекте манипулирование строками - это более 5%. Синтаксис сахар? Что ты имеешь в виду под этим? Быстрый итеративный процесс? У Java это есть (Tomcat внутри Eclipse безболезненен). Ява несобранная? Единственное, чего не хватает - это кратких анонимных классов / лямбд / и т. «Веселые» функции в других языках, как правило, запутывают и делают вещи менее понятными. Строки в switch ... да, я должен признать, что это отстой (однако, в большинстве случаев вы должны использовать enums).
Алекс
4
@alex: Syntax sugarJava практически не может использоваться для DSL, например, файл конфигурации и маршрутов Play не является файлом Java, он имеет внешний синтаксис, который меньше, чем, например, у django settings.py и urls.py; нет списка понимания; важные типы данных (например, карты, списки) не импортируются по умолчанию; идиотский «один класс на файл» действительно мешает; и API Java имеют тенденцию быть излишне многословными. Кроме того, вы не можете использовать перечисления при переключении между строками, полученными из параметра GET / POST.
Ли Райан
4
@alex Интересно. Я склонен использовать дженерики повсюду в C # - хотя, глядя на это со стороны, это, вероятно, связано с расширенной функциональностью lamdas - так что я могу иметь IRepository<T>с IQueryable<T> Where(Expression<Func<T, Boolean> Expression). Интересно, станут ли они более популярными в Java, когда она получит лямбды? Вероятно, это зона комфорта, но Java чувствует себя многословно - и очень похоже на то, что мне вручили достаточно частей, чтобы собрать 50 различных типов автомобилей без гарантии того, что две части совместимы друг с другом.
Basic
3
Я не могу поверить, что два человека утверждали, что Tomat внутри Eclipse безболезненен и делает разработку Java эффективной. Я считаю, что это делает каждый цикл разработки намного быстрее, но требует ежедневного обслуживания, включая многократное обновление, сборку, очистку Tomcat, повторное развертывание, перезапуск и иногда перезапуск Eclipse и повторение предыдущих шагов. Если бы моя машина нуждалась в таком уходе, я бы никогда не взялся за работу.
Брэндон
1
@ Брэндон, я буду вторым. Я никогда, ни разу не боролся с проблемой конфигурации в Node или Python / Django. Я теряю терпение с RoR. Наша кодовая база Java, основанная на зависимостях Ant / Mvn / Spring / Hibernate / eclipse, - это бодрствующий кошмар, прежде чем вы даже доберетесь до кода.
Эрик Реппен
18

В настоящее время я работаю в компании, в которой довольно много разработчиков «Я ненавижу Java». Это меня раньше тоже оглушало. Я, конечно, ненавижу все запасы технологий, которые доступны с Java. Это делает принятие решений слишком сложным. Это как когда у тебя слишком много выбора, у тебя нет выбора. Вы должны потратить время на сотню фреймворков, чтобы действительно придумать фреймворк, который работает для вас. Стандартная архитектура Servelt очень сложна для большинства приложений. Это не относится к Ruby, Django и прочим. Они являются скорее единой структурой, а не языком.

Самые большие жалобы, которые я слышу от разработчиков

  1. Синтаксис слишком длинный. Просто чтобы напечатать что-то, мы должны написать System.out.print. Вы не можете использовать простой редактор, похожий на VI, и написать рабочий код за несколько часов.
  2. Слабые тестовые рамки. Несмотря на то, что среды тестирования очень похожи в Java и Ruby, Ruby делает шаг вперед, делая его легко доступным для тестирования. Это особенно верно, если вы широко используете БД в своем приложении. Даже многие веб-фреймворки не думают о тестировании.
  3. Шаблоны - это боль. Делает относительно простой язык в суп с лапшой.
  4. Не круто. Большинство Java-приложений написаны в огромных компаниях, что связано с бюрократией, которая не так хорошо работает с разработчиками. Люди не думают о Google, когда думают о Java. Google == Python. Это также имеет большое значение для того, чтобы не было книг, указывающих на X в течение Y дней.
  5. Не люблю компилировать. Для большинства разработчиков компиляция - явление десятилетней давности. Это имело смысл в 80-х годах с C, но современные компьютеры могут сделать гораздо больше. Они не пишут код на скомпилированных языках. Java - один из немногих языков, который компилируется и используется для написания веб-приложений.
  6. Слишком много Ой Концепций. Несмотря на то, что разработчики незаметно приняли домен Oops. Им не нравится это полностью. Им не нравится, когда вы пишете приложение с 10 классами, каждый из которых делает только одну вещь. Позволяет открыть сотни файлов и представить взаимодействие между сотнями классов, иногда с фреймворками. Делает всю деятельность по программированию рутиной. Это может быть верно для большинства языков, но я видел, что разработчики Java уделяют много внимания тому, что делает класс. Это разработчики Java, которые часто придумывают код с сотнями классов. Это хорошо со многих точек зрения, но не Java-разработчики ненавидят это.

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

arunmur
источник
(2) замечательно обращается к JBoss Arquillian ( arquillian.org ). В остальном это скорее проблема JSF2, чем проблема Java. Самыми большими проблемами IMO являются кривая обучения и огромная ошибка структур, но если вы избегаете JSF2, у вас все получится.
Крейг Рингер
5
Я люблю ООП. Я также знаю ООП, поэтому я не согласен с тем, что подавляющее большинство разработчиков Java делают это слишком много. Вы можете написать класс, но если ваш код все еще представляет собой запутанный спагетти-беспорядок, все, что вы действительно сделали, - это нашли способ (бины) написать процедурный код для дерьма с бессмысленными структурами, которые в лучшем случае могли бы быть простыми функциями или структурами.
Эрик Реппен
2
«Люди не думают о Google, когда думают о Java». ... Я действительно думаю об Android и их Dalvik VM (которая является Java VM), когда я думаю о Google. Я также думаю о таких классных вещах, как GWT (автоматическая генерация JavaScript из Java). Если есть одна компания, которая "высоко" на Java, это Google. Гораздо больше, чем Apple или Microsoft. Разумеется, Oracle и IBM даже больше связаны с Java, чем с Google, но все же: миллиарды устройств Android, на которых выполняются приложения Java на виртуальной машине Java, трудно придумать, если не установить очень прочную связь Google / Java.
Седрик Мартин
В этих комментариях много ненависти к JSF2 из формы @CraigRinger. :-) Что тебя в этом раздражает? Мне было сложно начать с этого, но как только я начал, я люблю это. Конечно, я использовал Spring до этого, так что все остальное будет выглядеть как улучшение ... :-)
Брайан Ноблаух
1
Я разработчик ООП на Java и не могу переоценить преимущества ООП для разработчиков. Да, это занимает немного больше времени при разработке, но более низкая частота ошибок, удобочитаемость и простота обслуживания кода того стоят. Не говоря уже о том, что модульное тестирование становится намного проще с правильно выполненным ООП.
IntelliData
14

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

Раньше я работал в компании, которая занималась разработкой Spring / Java, и в лучшем случае считал, что фреймворк громоздок. Я не могу сказать много приятных вещей о среде Spring, за исключением того, что у меня был друг, который занимался разработкой Struts, и он думал, что Struts еще хуже. Веб-фреймворк - это не что иное, как создание приложений для настольных компьютеров или мобильных приложений (например, для Android), и в нем есть много очень абстрактных идей, которые действительно требуют времени для осмысления (хотя, разумеется, это дает вам большие возможности и возможности, если вы Вы профессионал и делаете что-то действительно сложное, например приложение корпоративного уровня). Я люблю программировать Java для мобильных или настольных устройств, но Java для веб-приложений? Не так много.

Лично я не занимался программированием на Ruby / Rails, но мой друг, который раньше занимался в Struts, сейчас занимается веб-программированием на Ruby и свидетельствует, что вещи, которые трудно сделать в веб-программировании на Java, требуют гораздо меньше кода и сложности для достижения в Рубин. Конечно, есть кривая изучения различных синтаксических и языковых правил, но для прототипирования приложений у него есть преимущества с точки зрения того, сколько кода требуется для достижения желаемого результата. Как уже упоминали другие, масштабируемость также является проблемой, и одна из причин, по которой более зрелые приложения встречаются не так часто на более хип-языках.

Джессика Браун
источник
+1 за превышение фреймворка. Это становится безумным, весенний J2ee Maven Ant Hibernate, вы тратите все свое время на написание конфигурации XML.
Ричард
1
+1 за рамки. Мало того, что исходные фреймворки были попытками P ** s Poor (JSP, STRUTS), у нас теперь есть около тридцати на выбор, ни один из которых не работает так же хорошо, как RoR.
Джеймс Андерсон
Это не просто рамки. Это непристойные уровни соответствия вещам, которые не имеют смысла. Предоставление множества свойств означает, что вы делаете это неправильно. Надев на него ванильный метод получения и установки, он просто добавляет бессмысленный вызов метода и ничего не меняет, однако ни один Java-разработчик не будет просто свисать со свойств такого объекта, потому что сообщество подтверждает, что это как-то более неправильно, чем то, что они уже делают. А если серьезно, XML вместо кода ... как это длилось дольше 5 минут?
Эрик Реппен
14

Все сводится к затратам и тенденциям. Запуск Web 2.0 создан провидцем до 30 лет, у которого больше таланта, чем денег (конечно, я обобщаю, но это то, что вы увидите «в среднем»). Он собирается использовать язык, с которым он знаком, потому что он занимается программированием (возможно, вместе с несколькими друзьями). Скорее всего, он программист-самоучка.

Java была ориентирована как корпоративная среда (под Java я имею в виду язык, структуру и стандарты). Существует множество дорогих инструментов, которые IBM, Oracle и BEA по всему миру хотят продать предприятиям.

Этапы освоения Java сложны и / или дороги. Я знаю, что ландшафт там меняется, но не слишком ли поздно?

После того, как стартап набирает обороты, наступает рост. Привлекать талантливых разработчиков сложно. Большинство программ «станьте программистом за шесть недель» преподают Java (или .NET), и рынок насыщен «программистами за шесть недель» (как ни странно, я видел разработчиков с резюме, которые рассказывают о 7-летнем опыте, который все еще показывает знание шести недельный программист). Использование не основной корпоративной среды может быть естественным фильтром для шестинедельных программистов. Требуется самоотверженность и личные инвестиции, чтобы выучить Ruby или Scala за пределами требований к работе. Для меня это самый большой показатель потенциала кандидата.

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

Майкл Браун
источник
Я думаю, что это действительно хороший момент +1
sfrj
1
Я не согласен с параграфом, который говорит: он, скорее всего, программист-самоучка. Это не соответствует действительности в наши дни, в настоящее время большинство людей из этой программы 30-х годов являются компетентными программистами и имеют по крайней мере степень.
Coyote21
1
??? Я рисую прототип веб-стартапа. Я ничего не говорил о их компетентности. Вы можете быть самоучкой и компетентным одновременно. Я не уверен, с чем ты не согласен.
Майкл Браун
1
Это должен был быть мой ответ. Java в значительной степени является единственной современной веб-технологией, которая не разработана так, что любой компетентный разработчик может просто взять ее и использовать. Вторая часть вашего ответа в значительной степени соответствует тому, что написал Пол Грэм в The Python Pardox
user16764
14

Ява слишком сложна. Я много работаю с PHP, и в большинстве случаев это просто и быстрее. Возможность просто SSH на сервер открыть файл php внести изменения сохранить и быть сделано, это здорово. Несколько Java-приложений, над которыми я работал, всегда требовали перезапуска для самых простых изменений. (не говоря уже о том, что я всегда делаю). Кроме того, хостинг PHP дешев и доступен.

Я также думаю, что у вас есть, по крайней мере, в PHP множество разработчиков, которые, как и я, начали 14/15 лет назад со статического HTML. По мере продвижения мы начали добавлять PHP на наши сайты, потому что это было легко, просто и доступно. За эти годы язык расширился и расширил свои способности, выходя за рамки скромного начала, и теперь изо всех сил старается быть тем, чем, на мой взгляд, является множество вещей, которых на самом деле нет.

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

Я пытался изучать Java, мои первые впечатления, когда он был очень длинным и запутанным, вызывал запястный туннель. Кроме того, с самого начала у меня осталось много вопросов, которые, вероятно, кажутся простыми для ветерана Java. OpenJDK или Sun? Tomcat, или Glassfish, или? Плюс, кажется, каждое введение в книгу по Java запускает написание кода для командной строки. Я думаю, что большинство людей в наши дни находят этот праздник дремотой.

Кир
источник
3
Я возьму больше вариантов и немного больше сложности по сравнению с более чем 9000 встроенных методов PHP.
Калеб Брэзи
1
PHP очень прост в настройке.
Barfieldmv
9
но это просто затрудняет написание хорошего кода ... проще в настройке, легче в запуске, менее скучным не должно быть критерием, который вы используете для выбора языка. Хорошее программирование требует дисциплины, терпения и усилий ... это плохой знак, если у вас их нет при выборе ...
alex
Если они оба не воняют, но один из них - гораздо больше, чем другой.
Эрик Реппен
12

Моя команда и я в настоящее время разрабатываем новое веб-приложение на Java 6 + Stripes. В течение прошлого года я также работал над другим новым веб-приложением, используя Java 6 + Stapler (несколько неизвестный веб-фреймворк, разработанный Kohsuke Kawaguchi из Hudson / Jenkins известности).

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

Современные серверы приложений Java очень конкурентоспособны с ASP.NET с точки зрения производительности, и оба на несколько порядков быстрее, чем любой динамический язык, который я знаю.

Не поймите меня неправильно ... Я не говорю, что Java всегда лучший выбор (не удаленно!), Но это не всегда неправильный или «устаревший» выбор.

Даниэль Приден
источник
1
Я склонен не соглашаться с «быстрее». Теоретически они должны быть, но есть несколько крупных php-сайтов, и почти все анекдоты о проблемах производительности связаны с MySQql или другими базовыми базами данных. С другой стороны, почти каждое приложение J2EE, с которым я столкнулся, требовало обширной настройки, прежде чем производительность стала приемлемой.
Джеймс Андерсон
1
@James: у тебя есть что-нибудь кроме туманных анекдотов, подтверждающих это? Все топ-10 веб-сайтов либо работают на управляемых платформах (Amazon на Java, Twitter на Scala IIRC, Google на настраиваемом бэкенде Java и C ++), либо имеют сильно настроенную инфраструктуру (Facebook и Википедия используют PHP, но у них обоих есть огромное количество собственного нативного кода для скорости). Java регулярно превосходит динамические языки в тестах. Я не фанат Java, но производительность не является проблемой Java.
Даниэль Приден
С самой Java нет проблем с производительностью "не так быстро, как C, но быстрее, чем что-либо еще". Тем не менее, J2EE, плюс фреймворки, плюс ORM, плюс внедрение зависимостей, плюс избыточный дизайн почти гарантированно не будут работать; существует слишком большой потенциал для скрытых узких мест и непредвиденных взаимодействий
Джеймс Андерсон
1
@Basic: Какова ваша точка зрения? Есть много сломанных библиотек и фреймворков для любого языка. Да, есть много жесткой и устаревшей документации - но это тоже вряд ли необычно. И наоборот, есть несколько фантастических библиотек, фреймворков и инструментов для Java. Вы серьезно пытаетесь предположить, что должна быть одна сквозная структура для каждого приложения?
Даниэль Приден
1
@Basic: назад от чего? Через полтора года после того, как я впервые написал этот ответ, я перешел и сейчас работаю в Google, и я могу заверить вас, что Java очень активно используется для разработки веб-приложений в Google. Конечно, потребности Google сильно отличаются от потребностей многих других компаний, но Java - это совершенно другой зверь, когда вы используете правильные библиотеки и фреймворки - просто посмотрите на некоторые вещи, которые у Google есть с открытым исходным кодом (Guava, Guice, GWT, протокол буферов и т. Д.).
Даниэль Приден
12
  1. Java сложнее изучать, чем PHP / Python / Ruby
  2. Java экосистема очень сложная, очень большая и довольно запутанная для начинающих
  3. Есть много исторически плохих фреймворков с отрицательной репутацией, связанных с Java, вы должны знать, какие фреймворки, чтобы избежать тратить время на
  4. Инструменты сборки Java - это сложный путь (maven & ant)
  5. В Java нет модульных систем, которые просты в использовании (OSGI слишком сложен)
  6. Java IDE, такую ​​как Eclipse, в то время как очень мощный и с удивительными функциями, трудно настроить для эффективной веб-разработки без большого опыта.
  7. Если вы используете в качестве сервера что-либо кроме Tomcat или Jetty, вы будете разочарованы длительным временем запуска WebSphere / WebLogic / JBOSS
  8. Java EE решает проблемы, которых нет у многих, таких как распределенные транзакции

Новый разработчик, начинающий профессиональную разработку, найдет Java на порядок сложнее, чем rails, python или php, чтобы освоить то, что легко освоить.

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

  1. Время запуска менее 10 секунд
  2. Правильно сконфигурированное рабочее пространство Eclipse со всеми фреймворками
  3. Хороший выбор библиотек (Spring, Spring MVC, Spring Social, Spring Security, JPA, Hibernate, Velocity и т. Д.)
  4. Машины быстрого разработчика с твердотельными накопителями
  5. Orielly Safari подписка
военно-картографическая служба
источник
8
Давайте будем ясно, хотя. Язык Java не сложен в изучении. Это все уровни дерьма, построенные вокруг работы с Java, чтобы компенсировать ее недостатки (многословие, защищать вас от себя и своих партнеров по команде, будучи негибкими, как все, выход из строя, абсурдное количество библиотек, на которые полагаются, и т. Д ...), это PITA учить.
Эрик Реппен
2
@ErikReppen Очень верно. Мне приходится работать над проектом Java, но у меня есть опыт работы в .Net. Язык и синтаксис просты, как и все, с чем я сталкивался, чтобы понять. Это многословие действительно сводит меня с ума. То, что я использовал в 1 строке, теперь занимает 5-10 и (часто) редактирование файла конфигурации XML. Не говоря уже о том, что, не тратя много времени на чтение, выбор «правильной» структуры для работы - это кошмар - и это еще до того, как вы узнаете, что ваш сценарий рассматривается как крайний случай, не поддерживается и если вам не нравится это, переписать это. Я хочу тратить свое время на решение больших проблем
Basic
«Java сложнее» - кто-нибудь может вспомнить порядки параметров для PHP strposили in_array? И XML-интерфейс PHP DOM смешной (приводить атрибуты к строкам для их получения?). OSGi абсолютно великолепен и не зависит от языка.
Джевон
@jevon: документы по PHP очень хороши, и моя IDE все равно хочет мне напомнить. Также SimpleXML.
DanMan
12

Около 5 лет назад мне и коллеге дали задание на программирование для какого-то внутреннего проекта. Достаточно простая задача, требующая парсинга команд.

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

Это заставило меня задуматься. Везде сложность ценилась. (Я работал в одной из крупнейших компаний по разработке программных продуктов.) Ява была инструментом выбора, а шаблоны проектирования были ПУТЬ к коду.

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

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

Что касается масштабирования динамических языков, JVM является результатом десятилетий исследований. Многое происходит с Руби и т. Д.

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

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

Ар Вэнь
источник
Я не фанат java, но та «сложность», на которую вы ссылаетесь, вполне могла быть абстракцией. Абстракция очень полезна как для тестирования, так и для сопровождения (при использовании в модерации). Трудно сказать наверняка, не имея возможности сравнить код
Basic
11

В недавнем интервью с Джозефом Снарром (Joseph Snarr), технический руководитель google plus, объяснил, как приложение использует Java-сервлеты для внутренней части и JavaScript на внешней стороне.

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

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

Greg Guida
источник
4
Стартапы используют другие технологии, потому что они хотят сделать это сейчас. Не позже. И они сделали это, чтобы сделать это сейчас, как 3 человека, а не 30.
Эрик Реппен
Цитирование человека может только предоставить его взгляды и его выбор, но не подтверждает, что все, что он / она выбрал, было / было правильным решением.
DivKis01
9

Поскольку вы упомянули о веб-разработке и Java, многие люди склонны забывать, что вначале использование Java-апплетов в веб-браузере не давало хороших результатов, и не только это, но «песочница» для апплетов не была полностью разработана и были проблемы с безопасностью Java-апплеты могут работать в браузере и получать доступ к данным локального компьютера (проблема безопасности на стороне клиента). Конечно, Java хорошо работала с бэкэндом и автономными приложениями, но я думаю, что связывание языка Java с апплетами Java (запущенными в браузере) вместе немного испортило некоторые представления о Java как компоненте веб-разработки. Я не думаю, что они когда-либо оправились от этого.

LocoTx
источник
9
Точно нет! На самом деле Java является доминирующим языком в мире серверной части. Апплеты погасили, может быть, десять лет назад.
Хирон
5
Флэш сделал то, что пытались сделать Апплеты. Быстрый запуск, быстрая загрузка, низкий объем памяти.
4
Я знаю многих людей, которые не могут даже различить Java и Javascript. Хотя они совершенно не связаны. Это еще одна вещь, которая дает Java плохое имя.
Кибби
5
@ Kibbee ... или это дает Javascript дурную
славу
9

Вопрос должен быть «Почему Java не используется стартапами или небольшими проектами?». Java, безусловно, используется для «современных веб-приложений». В Google Java используется в качестве бэкэнда для многих сервисов, а JS или GWT, скомпилированный при закрытии, используется для внешнего интерфейса. Проблема - скорость против масштаба. Стартапам нужно добираться до минимально жизнеспособного продукта. Обычно это небольшие команды из 1-3 инженеров, которые ценят скорость итерации за производительность или ремонтопригодность. Решение проблем с масштабируемостью или обслуживанием кода команды - это проблема, «которую вы хотели бы иметь», то есть к тому времени, когда вы достигнете этой стадии, это признак того, что ваша первоначальная реализация помогла вам преодолеть начальный барьер привлечения клиентов или инвестиций. Вы можете позволить себе переписать приложение на этом этапе.

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

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

Кромвеля
источник
1
Где ваш источник, утверждающий, что стартапы не используют Java? Пожалуйста, подкрепите свое предположение некоторыми фактами.
Уолтер
7

Традиционные веб-приложения на Java, хотя и хорошо структурированные, очень далеки от «быстрого развития». Хотя я когда-либо писал только одно полноценное веб-приложение (Java / Tomcat / Struts), оно было крайне требовательным, отладка заняла больше времени, чем ожидалось, и, как правило, была болезненной при реализации уровня бизнес-логики. Что касается потенциальной защиты Java, то это было единственное веб-приложение, которое я написал на Java (хотя я привык программировать приложения на уровне системы на Java), и я считаю, что во второй раз я мог бы написать другое веб-приложение немного быстрее.

Сказав это, я также написал приложения на PHP и C #, и они просто работают лучше и гораздо более щедры, чем Java. Более того, Ruby on Rails был написан специально для быстрой разработки приложений, которые, как сказал Робби, обеспечивают легкий доступ CRUD к базам данных. Проблема в том, что большинство веб-сайтов, которые вы будете разрабатывать самостоятельно, не нуждаются в уровне настройки, который предлагает Java (и требует от вас выполнения). Кроме того, каждый объект соединения с БД должен быть написан от руки, и его не так просто шаблонизировать. Может быть, существует лучшая среда, особенно та, которая использует преимущества новых функций поддержки динамического языка Java 7 , но я еще не проводил исследования.

Брайан
источник
3
Вы должны взглянуть на Play Framework - это веб-фреймворк Java, который делает вас продуктивным с Java и вдохновлен Ruby on Rails.
Джонас
2
@Jonas, подумайте над тем, чтобы написать несколько хороших постов в блоге, объясняющих все это кратко
@Jonas, что сказал Thorbjorn! Я бы внимательно прочитал. :)
Брайан
@ Thorbjørn: у меня нет блога. Вкратце: с Play Framework вы просто сохраняете исходный код Java, а затем обновляете веб-браузер. Код автоматически компилируется на стороне сервера с использованием компилятора Eclipse. JPA используется для доступа к базе данных. Вот статья об этом Play! Удобство использования фреймворка
Джонас
2
@ Thorbjørn & Brian: Посмотрите видео на первой странице веб-сайта Play Framework, оно очень хорошо объясняет, я бы сказал.
Бьярке Фрейнд-Хансен
7

Простой ответ: кривая обучения для базовой производительности.

Системы на основе фреймворков, такие как RoR, как правило, вкладывают «магию» в язык / синтаксис. Очень просто увеличить базовый синтаксис RoR и запустить приложение.

Сначала ява была языком, а инструменты и фреймворки появились позже. Итак, вы должны сначала изучить Java, а затем вы должны изучить Spring, Grails, или ваш супер IDE, или что-то еще. Любимый пример Ruby, он не требует сеттеров и геттеров. Факт в том, что Java IDE тоже избавились от ручного кодирования ... но оно все еще в вашем источнике. Преимущество этого подхода заключается в том, что за рамками есть язык, который совместим, с которым могут работать все Java-разработчики.

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

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

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

Лукас МакГрегор
источник
6

Зависит от того, как вы определяете «разработку современных веб-приложений». Если вы говорите о стартапах, быстрых веб-сайтах, вам нужно будет рассмотреть языки и платформы, разработанные для этой цели. Если вы ищете стабильную, масштабируемую веб-разработку уровня предприятия, вы ищете языки и платформы, которые поддерживают эти идеалы. В моей книге это две совершенно разные цели. RoR, Groovy и т. Д. Хороши для первого, а Java больше подходит для второго.

cdkMoose
источник
6

Google App Engine поддерживает Java, так что вы можете написать все свое веб-приложение на Java, используя Eclipse в качестве IDE и интерфейса развертывания, с разумно документированным API Google - так что я бы не сказал, что он не используется или не используется. годные к употреблению.

Павел
источник
5

В стартапе, над которым я работаю, мы решили использовать Java и JRuby для реализации нашего API, потому что они дополняют друг друга.

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

Если мы видим, что один из наших классов JRuby становится узким местом, мы просто реализуем его непосредственно в Java (в основном, построчное преобразование). Это может случаться довольно часто с классами, которые должны выполнять много вычислений, и в этом контексте JRuby ведет себя во многом как язык прототипирования.

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

Ключ заключается в том, чтобы избегать всего, что связано с Java EE, - оно громоздкое, громоздкое и антигибкое.

Дэвид Семерия
источник
5

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

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

Это слабость языка? По сравнению с другими языками, такими как Python или Ruby, Java является многословной и, как правило, требует больше кода для выполнения подобных задач. Но это не только возможности языка, а также окружающее его сообщество и разработчики, использующие эти инструменты. Таким образом, большинство модулей и инструментов на Python, Ruby, PHP и т. Д. Имеют открытый исходный код и их легче найти, чем в мире Java, просто потому, что этот более сфокусирован на предоставлении (и оплате) услуг. Например, сообщество Ruby действительно действительно ориентировано на веб-разработку, поэтому каждый разработчик, который может использовать Ruby, будет знать о проблемах и доступных инструментах для веб-проекта. Это не обязательно верно для разработчиков Java, которые могли бы работать на других типах систем, таких как системы отчетов. Конечно, любой хороший разработчик наверстает упущенное,

Является ли это несправедливым стереотипом Java, потому что он существует так долго (он был несправедливо связан с его старыми технологиями и не получил признания за его "современные" возможности)? Java на самом деле не такая уж старая, и, если честно, она значительно улучшилась. Это была крутая, актуальная платформа около 10 лет назад. Но с тех пор появились новые платформы с новыми проблемами, такие как Ruby on Rails. Основным сектором Java был в основном корпоративный мир с различными проблемами, поэтому люди, ищущие новые проекты за пределами, искали разные инструменты. Кроме того, главное преимущество Java-дизайна, будучи мультиплатформенным, сегодня не так актуально, как это было раньше.

Является ли негативный стереотип разработчиков Java слишком сильным? (Java больше не «крутой»). В этом тоже есть доля правды. Ява по-прежнему является языком для изучения "чтобы получить работу". Так что, если вам все равно, а просто хотите научиться чему-то, чтобы заработать деньги, вы закончите изучать немного Java и больше не будете заботиться об улучшении. Опять же, много о восприятии и видимости. Есть множество замечательных Java-разработчиков, которые пишут код без передачи своих знаний, в то время как многие PHP-разработчики, возможно, не такие хорошие, пишут блоги и сотрудничают с открытым исходным кодом. Это наводит на мысль, что разработчики PHP лучше, чем Java, поскольку у вас есть определенные отзывы о них.

Действительно ли приложения, написанные на других языках, быстрее создаются, легче поддерживаются и работают ли они лучше? Я бы сказал, что их быстрее построить. Принципы языков, таких как PHP, Python или Ruby, делают их весьма полезными для создания программного обеспечения, которое может постоянно меняться. Например, динамическая типизация облегчает изменение интерфейса. В Java важно иметь четко определенный интерфейс, что приводит к более стабильным (и сложным для изменения) интерфейсам. Это очень важно в новом стартапе, главная проблема которого - получить продукт, прежде чем закончатся деньги. Что касается производительности, очень легко неправильно понять потребности и попытаться использовать магические приемы для достижения требуемой производительности, такие как «Java быстрее, чем Ruby. Period» или «MongoDB - это масштабирование в сети».

Используется ли Java только крупными компаниями, которые слишком медленно адаптируются к новому языку? Определенно, имея уже существующую команду Java-разработчиков в компании, упрощает использование одного и того же языка для новых проектов. Это воспринимается как «безопасная ставка», особенно если ядром компании является не технология. Но, в любом случае, Java не используется ТОЛЬКО в больших компаниях, все еще есть много стартапов, которые используют Java для классных вещей (например, FightMyMonster или Swrve широко используют Java), но я бы сказал, что общая тенденция в стартапе сцена должна использовать другие языки. Это также способ привлечь людей, так как большинству людей будет интереснее работать с Ruby, Python или PHP, которые воспринимаются как более «дружелюбные» и «веселые».

Khelben
источник
5

Это правда, но не из-за Java и ее экосистемы. Это из-за людей, которые при использовании Java имеют тенденцию создавать большие беспорядки и тяжелые мерзости.

Существует достаточно фреймворков (spring-mvc, grails, play и т. Д.), Которые позволяют быстро создавать вещи. Тот факт, что люди перерабатывают свои системы, является проблемой, которая связана с увеличением знаний, которые люди получают, работая с экосистемой Java, - вы знаете гораздо больше вещей, и у вас есть их в наличии (есть инструменты для всего), и «все выглядит так ноготь".

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

Исследование 49 программистов: статическая система типов не влияла на время разработки ... http://www.cs.washington.edu/education/courses/cse590n/10au/hanenberg-oopsla2010.pdf

Bozho
источник
3

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

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

Кроме того, если вы используете Linux и PHP / Python / Ruby, инструменты и платформа бесплатны и предназначены для поддержки друг друга. С Java иногда кажется, что два мира (OS и Java) иногда не работают в гармонии друг с другом.

Мэтт Райан
источник
Кривая обучения абсолютно вертикальная. Первые несколько недель вы потратите на то, чтобы понять, что за аббревиатуры, как стандарты соотносятся с их реализациями, как все распределено по слоям и т. Д. Затем в течение следующих нескольких недель вы узнаете, какое ядро ​​из библиотек и фреймворков использовать. Затем следующие несколько недель сообщают об ошибках в них ...
Крейг Рингер
3

Кто сказал, что это не так?

Spring MVC + Spring Data JPA или Mongo + Thymeleaf для шаблонизации + плагин coffee-maven-plugin для переноса кофе в JS, и все готово.

Мартин Спа
источник
Я полностью согласен с тобой +1
Аршад Али
3

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

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

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

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

Асгейр Нильсен
источник
Java EE 6 может быть «легковесным» (за исключением JSF2), но это все еще невероятно большая кривая обучения, гигантский стек сложных спецификаций и чрезвычайно сложная многоуровневая система. Может быть, легкий, но не простой.
Крейг Рингер
2

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

Уайетт Барнетт
источник