Pull to refresh

Scala хуже, чем Java. Как минимум, для половины Java проектов

Reading time 8 min
Views 37K
Original author: David Pollak
Итак, в своем посте (прим.пер. Да, Вирджиния, Scala сложна!) я согласился с тем, что Scala слишком сложна для большей части Java разработчиков. Тот пост вызвал немало дискуссий, большая часть которых исказила его смысл. Теперь я пишу снова, надеясь пояснить, о чем я, собственно, говорил и зачем мне все это нужно.

Но сначала обо мне. Меня зовут Дэвид Поллак. Я активный участник Scala сообщества с ноября 2006 года. Являюсь основателем проекта Lift.
Еще несколько важных моментов, о которых стоит упомянуть:
  • Я пишу Scala код непрерывно в течение большего времени, чем кто-либо за пределами EPFL (прим.пер. Scala разрабатывается в Лозаннском Политехе). [Обновление — @propensive и Билл Веннерс участвуют Scala комьюнити дольше, чем я.]
  • Я организовал первую конференцию по Scala в 2008 году, Scala Lift Off, и продолжаю проводить её по сегодняшний день.
  • Написал больше строк кода на Scala (более 250K), чем кто-либо на планете.
  • Написал популярную книгу, введение в Scala: Beginning Scala.
  • В течение последних пяти лет я писал более 10,000 раз на форумах Scala и Lift, на темы непосредственно относящиеся к Scala и Lift (это говорит о том, что я общался с огромным количеством разработчиков).
  • Я основал проект Lift web framework и написал значительную его часть, включая проектирование core API. Lift — это один из самых популярных framework'ов, основанных на Scala и первая широко известная Scala библиотека.
  • Сделал ревью более полумиллиона строк кода на Scala за последний год.
  • Я зарабатываю на жизнь консультированием, в основном для Scala и Lift, и, таким образом, активно участвую во множестве проектов.
  • Провел более 25 презентаций о Scala и Lift за последние 5 лет.
  • Обучал сотни людей тому, как использовать Scala и Lift в небольших командах.
  • Представлял Scala, прямо или косвенно, более, чем половине потребителей, которые перечислены на главной странице TypeSafe (прим.пер. Xerox, Siemens, Sony и другие киты).

Всё вышесказанное можно просуммировать: «У меня есть значительный опыт кодирования на Scala, преподавания Scala и презентации Scala самым разным людям и организациям. Я общался с достаточным количеством людей использующих Scala или собирающихся это делать, чтобы накопить большой объем данных для анализа факторов успеха Scala». Это не означает, что я считаю, что я прав, а все остальные неправы. Но это, тем ни менее, говорит о том, что люди, которые используют риторику с переходом на личности в качестве аргумента — не имеют веса в этой дискуссии. [Обновление: перечитав поста fogus'а… Я неправильно его понял. Думаю, fogus и я пришли к одинаковым выводам. Я остаюсь при своем мнении, не объявляя его истиной в последней инстанции. Тем ни менее, прошу прощения за жесткость к fogus'у и его посту!]

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

Это утверждение не более спорно, чем:
  • Java — неподходящий язык для большинства PHP разработчиков и не может рассматриваться как замена PHP, поскольку, как минимум, для половины PHP разработчиков сложность Java перечеркивает её достоинства.

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

Обсуждение

Одна из вещей, в которых я особенно слаб, — правописание. Мой мозг просто не запоминает написание слов. Когда я был редактором студенческой газеты, одна из журналистов бросила мне в лицо фразу о том, что только ленивый не знает правописания (это был 1985 год… до spell checkers). Я написал на меловой доске интеграл (это было до белых досок) и попросил решить его. Она сказала: «Это математика… это сложно… А я говорю о такой простой вещи как правописание ». Ну, что касается меня, я могу решать интегралы во сне, и я не смогу правильно написать слово даже если от этого будет зависеть моя жизнь. У разных людей — разные навыки.

Разные люди ценят разные вещи. Существует целый класс людей, которые любят компьютеры и любят писать код. Я среди них. И существует класс людей, которые не поставили бы программирование в топ-5 своих любимых занятий.

Есть множество программистов, выбравших карьеру в сфере разработки программного обеспечения, но не имеющих некой комбинации врожденных способностей и желания. Существуют школы, которые развивают эти способности и дают мотивацию. Но никакой блоггинг и хвастовство не могут этого изменить.
Для тех, кому не хватает врожденных способностей к кодингу и интереса к личностному росту, Scala обременительна. И если слишком много такого бремени на Scala окажется вокруг (читай — провальных Scala проектов), Scala перестанет расти, а это серьезная субоптимальная ситуация (прим.пер. ситуация, не обеспечивающая глобального экстремума) для людей вроде меня, который инвестировал более $ 600 000 в экосистему Scala. Подробнее о мотивации в конце поста.

Один из ключевых аргументов против моего поста «Вирджиния» было то, что мы должны использовать всех Java-разработчиков как есть, потому что Scala не настолько лучше, чтобы вызвать существенное повышение общего уровня этих программистов. Процитирую себя:
  • Я отвергаю аргумент: «Ну, тогда, найдите лучших программистов". Мы могли бы решать проблему сложности Scala путем повышения общего качества разработчиков (до тех, кто понимает сигнатуры типов, может описать свои программы математически и т.д.), но это не решит проблемы. Дело в том, что Scala не настолько лучше, чтобы спровоцировать революцию в области подготовки кадров, образования и приема на работу, и, таким образом, настолько изменить качество среднего разработчика, чтобы сделать её же доступной для этого разработчика.

Я согласен с Paul Snively, что Scala можно научиться. Именно поэтому я активно продвигаю Scala в течение многих лет. Штука в том, что Scala изучаем определенным видом людей. Этот вид не включает тех, кто не хочет учиться, и тех, у кого не хватает на это способностей (так же, как есть и те, кто может писать код на PHP, но не способны программировать на Java.)

Суть того, о чем я говорю это факт, что существует класс программистов, для которых Scala не подходит, и я говорю об этом уже в течение почти четырех лет… может быть и дольше, но это самый старый пост, который я смог найти. Моя позиция в то время не слишком отличается от того, к чему многие приходят сегодня: обучая и увольняя разработчиков, которые становятся менее продуктивны переходя на Scala. Кроме того, для меня совершенно очевидно, что есть группа чисто Java программистов, у который не получается со Scala, по крайней мере, на протяжении последних трех лет. Таким образом, моя позиция остаётся неизменной все эти годы.

Что изменилось в моем понимании, так это то, что я осознал, что есть огромное количество компаний, где программист появляется в начале рабочего дня, участвует в нескольких совещаниях, пишет несколько строк кода и идет домой. У меня был опыт работы с тремя компаниями такого типа в течение последнего года. Одни внедряют Scala, сражаются изо всех сил, пытаются сделать все правильно, несмотря на проблемы с Java кодом переписанным на Scala, поиском разработчиков и внутренним сопротивлением внутри компании. Другие принимают решение не внедрять Scala (хотя у них работает немного кода на Scala, о котором не знает руководство, этот код поддерживает один человек, для задач которого Scala значительно лучше, чем Java). Третьи приняли решение вернуться от Scala обратно к Java, поскольку организационные расходы на замену половины разработчиков, отправку 25% оставшихся на дорогие курсы, и отказ от аутсорсинга части проектов перевешивают все те преимущества, которые Scala дает троим лучшим программистам в их команде.

Мы живем в мире, где средний разработчик пишет 3250 строк кода в год (около 20 в день). Это происходит в Eclipse, нажатием кнопки «дай мне шаблон X» с подстановкой кода в предложенные средой разработки места. Потом поход на несколько митингов. И они называют это рабочим днем. Мы не можем уволить всех этих разработчиков. Мы не можем обучить их, чтобы они стали лучше. Это Середняки. Эти разработчики могут быть героями мультиков про Дилберта (прим.пер юмористическая лента про офисный планктон). Но знаете что? Это именно те, кто использует Java. А знаете что еще? У таких программистов нет той самой комбинации врожденных способностей и желания стать лучше. Но дело не только в этом, вся цепочка менеджмента над программистом не имеет ни способности, ни воли к изменению ситуации. Мы не можем сдвинуть эту гору… или, конкретнее говоря, Scala не настолько лучше, чтобы уволить 50% непродуктивных разработчиков.
Итак, лучшими направлениеми движения могут быть:
  • Сфокусироваться на тех программистах и проектах, которые будут втрое эффективнее, используй они Scala; или;
  • Усовершенствовать Scala для программистов-середняков (этого не произойдет до тех пор, пока Scala, в первую очередь, инновационный, исследовательский язык)
Мотивация

«Ну и что?» — спросите вы, — «ты для того столько всего написал, чтобы доказать, что Scala не успешна и сложна?»

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

И у Scala есть несколько удивительных историй успеха. Цитаты и статьи и общее ощущение чего-то необычайного вокруг Scala — всё это всерьёз и всё это заслужено. Scala — замечательный язык; язык, который не имеет себе равных в современном программировании с точки зрения его универсальности для решения широчайшего спектра задач, от простых и повседневных до самых и самых сложных.

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

Для того, чтобы Scala продолжила свой рост, она должна оставаться успешной и с ней должен быть связан минимум проблемных проектов. Это означает, что необходимо быть открытым и честным, говоря о сильных и слабых сторонах Scala, чтобы правильно выбирать области применения для Scala и Lift. Для роста Scala необходимо, чтобы она была предложена именно тому типу программистов, у которых есть правильное сочетание умения и желания создавать удивительные вещи с помощью Scala.
Мы должны принять, что Scala не собирается вытеснять Java в утилитах командной строки, CRUD и фронтэндах баз данных. Сила Scala для написания ORM (извини, Макс… Squeryl — реально классная штука) намного меньше, чем значение Scala для для разработки систем реального времени, распределенных, распараллельных приложений. Но большинство-то делает ORM, CRUD, утилиты, и прочие штуки в стиле заполни-форму-и-сохрани-в-базе. Вот где большинство разработчиков и где деньги. В то время как крутые парни разрабатывают гигантские нечеткие, управляемые событиями, мега-гипер-супер-колоссальные-реального-времени-супер-бла-бла-бла штуки, большинство программистов делают скучные вещи, перекладывая данные из базы данных и обратно, и Oracle/SQL предлагает механизм, прекрасно подходящий для этого.

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

Моей мотивацией для написания этого поста было желание вселить осознание того, о чем я сказал в мозги разработчиков. Я предпочел бы увидеть 5000 новых проектов на Scala в следующем году, 4000 из которых успешны, чем видеть 50000 новых проектов, лишь 10000 из которых являются успешными. Программисты, со способностями и склонностями к Scala, после успешных экспериментов с языком, скорее всего, читая мои посты, скажут, что я не знаю, о чем говорю. Остальные разработчики будут повторять заключение («Скала слишком сложна») и не использовать её. И такой результат, с намного большей вероятностью будет вести Scala к успеху; пока её доделают настолько, чтобы она стала доступной и для середняков. Это лучший путь для Scala и Lift.

О… и все вы, злые умные люди, которые раздвигают (или, уверен, скоро будут раздвигать) границы, с мега-событийно-управляемыми-в-режиме-реального-времени штуковинами, вы обнаружите, что Scala — это мечта, которая сбылась, и нет ничего подобного (ну, разве что, кроме Haskell). Так что, идите, создавайте ваши крутые штуки на Scala и пусть у вас всё получится.
Tags:
Hubs:
+44
Comments 80
Comments Comments 80

Articles