Достала жаба - куда идти?

luna89

Программирую на яве. Ужасно она мне надоела. Точнее, не она сама, а культура, которая поощряется в сообществе ява-разработчиков. Я имею в виду xml, паттерны, геттеры и сеттеры, фреймворки, бины и прочее говно. Если вы когда-нибудь видели API какой-нибудь ява-библиотеки, то знаете, о чем я говорю.
Когда есть возможность написать js-код или sql-запрос, то для меня это как отдушина.
Более-менее точно мое мнение совпадает с мнением, изложенным в этих постах (автор не я):
http://tonsky.livejournal.com/202390.html
http://tonsky.livejournal.com/203880.html
http://users.livejournal.com/_winnie/342753.html
У меня есть надежда, что на других платформах разработки не поощряется суперабстрактный паттернизированный ООП-говнокод, и следовательно, мне надо сменить платформу. Сейчас я занимаюсь выбором платформы, и хотел бы услышать каких-нибудь советов.
Пока я исключил:
С# - та же ява только в профиль.
PHP - вторично, так как сообщество копирует либо Rails, либо Java-фреймворки.
Есть сомнения по поводу:
Ruby/Rails - сообщество состоит из хипстеров, много говнокода в самих Rails. Есть подозрения, что на нем пишутся только мелкие сайты, которые целиком переписываются при выходе новой версии Rails.
Пока что основные претенденты:
1)Клиентский JavaScript. Минус - не хочется расставаться с СУБД и сервер-сайдом.
2)Oracle. Все нравится, кроме того что он используется только в крупных компаниях. Кроме того, есть опасения, что скоро начнут внедрять nosql даже в банках, и тогда ораклистам вообще конец.

kokoc88

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

luna89

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

luna89

Тебе надо либо сменить работу, либо род деятельности.

Род деятельности менять не хочу, работу недавно менял.

pilot

Python забыл.

kokoc88

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

ifani

С# - та же ява только в профиль.

Имхо, зря исключил - там язык намного более гибкий, чем Java. По крайней мере, у меня сложилось такое впечатление, когда делал один проект на C#.
Попробуй глянуть в сторону Scala.
PS:
Сам я Java-разработчик и после многих лет разработки всё равно очень доволен языком.
Но сейчас параллельно изучаю Groovy - хочется, чтобы и текущие знания пригодились, но при этом попробовать функциональное программирование. А дальше думаю как раз взяться за Scala.

elenangel

1)Клиентский JavaScript. Минус - не хочется расставаться с СУБД и сервер-сайдом.

см. node.js
а вообще, мне не понравился наезд на абстрактный паттернизированный ООП-код.
ты против ООП в целом? тогда смотри на функциональные языки.
нравится ООП, но не нравятся абстракции и паттерны? есть еще темплейты. ну или правда, надо менять род деятельности.

ifani

Когда есть возможность написать js-код или sql-запрос, то для меня это как отдушина.
У меня есть надежда, что на других платформах разработки не поощряется суперабстрактный паттернизированный ООП-говнокод, и следовательно, мне надо сменить платформу.

Вообще, если глянешь известные js-фреймворки - они тоже весьма паттернизированные, со смесью ООП и функциональщины. И это нормально. Умение мыслить абстрактно - это, на мой взгляд, один из основных навыков разработчика, который другим людям даётся тяжело. И вполне нормально, что общие решения записываются в абстрактной форме. Конечно, всегда нужно представлять, что рядом стоит Оккам с острой бритвой и зорко за тобой следит :grin: , но всё-таки у абстрактных решений есть своя красота.

luna89

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

luna89

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

katrin2201

xml, паттерны, геттеры и сеттеры, фреймворки, бины и прочее говно
С такими претензиями я бы ушел куда-нить в кернел-девелопмент на си.
А вообще, ты судя по всему просто не там работаешь.
Фреймворки, бины, конфигурационные xml и прочее говно - тут достаточно уйти в команду, где сплошной core java.
Геттеры-сеттеры - если их лепят в простейших dto - ну просто на автомате люди кодят. В остальном не должно большой неприязни вызывать.
Паттерны - это когда сплошные SomethingFactoryBuilderFactory? Опять же, смени проект/команду/работу.

luna89

а вообще, мне не понравился наезд на абстрактный паттернизированный ООП-код.
ты против ООП в целом? тогда смотри на функциональные языки.
Скажи, ты когда-нибудь пользовался фреймворками на яве?
Я приведу пару примеров.
Вот например, схема, как создать HelloWorld компонент в фреймворке JSF:
http://www.jsftutorials.net/components/pic/relationship.jpg
Все, кто пытались понять API этого фреймворка, сходили с ума.
Вот еще пример:
http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.html
Этот класс является частью большого пакета, цель которого - дать возможность писать

@ExecuteSomeStuffAround
public void doStuff{
...
}

вместо

public void doStuff{
startExecuteSomeStuff;
try{
...
}finally{
endExecuteSomeStuff;
}
}

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

elenangel

просто не надо писать для Web. Imho, Web - проклят от рождения.
p.s. это про первую ссылку.
про вторую - "что да - то да, но уж никак не ой-ёй-ёй"

luna89

просто не надо писать для Web. Imho, Web - проклят от рождения.
Мне веб нравится, по-моему, там все более-менее ок.

elenangel

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

elenangel

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

luna89

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

yroslavasako

При этом принесут кучу проблем, типа отсутствия обратной совместимости.
objection. scala вполне себе совместимая

yroslavasako

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

SergeRRRRRR

1)Клиентский JavaScript. Минус - не хочется расставаться с СУБД и сервер-сайдом.
Как уже посоветовали, node.js
2)Oracle. Все нравится, кроме того что он используется только в крупных компаниях.
Не только.
Кроме того, есть опасения, что скоро начнут внедрять nosql даже в банках, и тогда ораклистам вообще конец.
Да, но поподробнее?

6yrop

С# - та же ява только в профиль.
ровно наоборот, того что ты перечислил "xml, паттерны, геттеры и сеттеры, фреймворки, бины" там нет. Более того, для бизнес приложение (расчет скидок ты упоминал) к C#-у мало что хочется добавить.
Прозрачная работа с реляционными БД на их родном языке.
Для web-а Razor вполне хорош (лямбды плохо поддержали, но можно жить). Еще ждем от Хельсберга дженерики в Typescript-е, и поддержку со стороны IDE. Вебсторм уже вроде поддерживает. Тогда можно и на Node.js переходить, если для взаимодействия с базой будет решение.
А Java как язык, реально, отстала лет на 8, проблемы затыкают фрейворками и xml-ями.

jakal222

А как же тот самый накрученный objective-c?
Или тебе нравится динамическая типизация?
Или туча функций?
Попробуй поразбирать скрипты Perl или посмотри в сторону чистого канонического С.
В треде еще Scala упоминалась, так можно рядом с ней упомянуть и Clojure.
А если уж нравится писать сервера, то почему бы не Erlang?

6yrop

Scala упоминалась
долгая компиляция, плохая поддержка в IDE
Clojure

Typing discipline: dynamic
Erlang

Typing discipline: dynamic

luna89

А Java как язык, реально, отстала лет на 8, проблемы затыкают фрейворками и xml-ями.
У меня другая теория. У некоторых людей есть потребность писать непонятный код. Если такие люди пользуются языком, который позволяет писать непонятный код, то они будут творить в рамках этого языка. Если язык простой и понятный, то им приходится выдумывать запутанные фреймворки.

luna89

Как уже посоветовали, node.js

0 вакансий в Москве. К тому, же я не очень понимаю, зачем он нужен.

6yrop

зачем он нужен.
один язык и для клиента и для сервера это прикольно. Можно просто шарить сорци между клиентом и сервером и еще куча вкусностей.

6yrop

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

luna89

ровно наоборот, того что ты перечислил "xml, паттерны, геттеры и сеттеры, фреймворки, бины" там нет.

http://www.springframework.net/
http://nhforge.org/
http://nant.sourceforge.net/
Для web-а Razor вполне хорош (лямбды плохо поддержали, но можно жить).

Пока весь мир делал веб на stateless фреймворках, микрософт мучал разработчиков своим ASP.NET. Когда наконец микрософт сделал нормальный фреймворк, то оказалось что везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нужен

Dasar

http://www.springframework.net/
http://nhforge.org/
http://nant.sourceforge.net/
это всё прямые порты с Java-ы, и поэтому они и построены в идеологии Java-ы. Нативные для C# разработки обычно построены более красивым и простым образом.

NAIL

Если интересует PHP\mysql\js - пиши в приват опыт и ожидаемую зп.
Есть проекты совсем без ООП :)
Пишем игры (много логики и интересных задач) и внутренние сервисы немного. Вот ещё актуальна в общем.

luna89

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

В яве есть замыкания. Если объявляешь класс внутри метода, то он может захватывать локальные переменные этого метода.

luna89

один язык и для клиента и для сервера это прикольно. Можно просто шарить сорци между клиентом и сервером и еще куча вкусностей.
Как я понял, фича node.js в асинхронном IO. Я не уверен, что понимаю, зачем он нужен.

6yrop

Пока весь мир делал веб на stateless фреймворках, микрософт мучал разработчиков своим ASP.NET.
ты отстал от жизни, на C# -е уже есть зрелый стейтлес фраймвор (под лайблом Razor я и имел ввиду его)

luna89

ты отстал от жизни, на C# -е уже есть зрелый стейтлес фраймвор (под лайблом Razor я и имел ввиду его)

Я так и понял. Кстати, не подскажешь, где находится документация по ASP.NET MVC?

6yrop

В яве есть замыкания. Если объявляешь класс внутри метода, то он может захватывать локальные переменные этого метода.
если переменная объявлена final, а это не удобно. Не говоря уже об громоздком синтаксисе анонимного класса.

Dimon89

Я так и понял. Кстати, не подскажешь, где находится документация по ASP.NET MVC?
http://www.asp.net/mvc и далее по ссылкам.

soroka000

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

6yrop

Кстати, не подскажешь, где находится документация по ASP.NET MVC?
даже не знаю, там как-то всё само собой, в гугл, и обычно на stackoverflow уже есть ответ :) . Как ты сам написал от веб брейфорка не много надо. Главное не заморачиваться идеалогией MVC, в частности, воспринимать Model тупо как аргумент метода (view). Там можно вообще всё на базовых простых принципах делать, а Razor просто как генератор C# кода Razor Generator.

6yrop

Главное не заморачиваться идеалогией MVC
даже сама майкрософт предлагает на Razor-е два фрейворка MVC и Web Pages

6yrop

везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нужен
ну во-первых, с аяксом не надо забывать про поисковики, им всё же аякс не скормишь.
Во-вторых, появляются нетипизированные json DTO объекты; т.е. статическая типизация теряется слишком рано.

luna89

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

6yrop

Когда есть возможность написать js-код ... то для меня это как отдушина.
Вообще, вот это доставляет, насколько же надо было загадить всё фрайворками, чтобы народ вот такое писал (уже встречал такое мнение т.е. после статики динамику воспринимать как отдушину :shocked: .

6yrop

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

luna89

Представь себе, если не считать фильтрации списков, использовал замыкания в js всего один раз, причем это было дико неудобно, потому что пришлось нагугливать такой трюк:
http://stackoverflow.com/questions/2568966/how-do-i-pass-the-value-not-the-reference-of-a-js-variable-to-a-function
Вообще, замыкания в JS неудобны, потому что в замыкании переопределяется this, очень легко допустить ошибку. Есть костыли типа jQuery.proxy или третий параметр в underscore.js.
Я пользовался Backbone.js, там своя объектная система, она наверное использует замыкания, но об этом можно не думать.

6yrop

Вообще, замыкания в JS неудобны, потому что в замыкании переопределяется this, очень легко допустить ошибку.
this в это отдельная песня, он вообще определяется вызывающим функцию кодом, тут замыкания ни причем.
Фишка замыканий в том, что closured переменные почти не отличаются от обычных. Ты натолкнулся на известную фишку с циклом, ну да, надо про нее помнить, кстати, в новой версии C#-а это поведение исправили, и теперь не надо городить переменную внутри цикла.

pilot

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

6yrop

А ООП подходит для борьбы со сложностью?

pilot

А ООП подходит для борьбы со сложностью?
Для борьбы с простотой — точно подходит, см чуть раньше по треду :D

luna89

objection. scala вполне себе совместимая

А это что такое?
http://typesafe.com/technology/migration-manager

yroslavasako

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

yroslavasako

если переменная объявлена final, а это не удобно. Не говоря уже об громоздком синтаксисе анонимного класса.
синтаксис правится scala. jvm не исправимо (и не поддерживает континуаций)

yroslavasako

А это что такое?
http://typesafe.com/technology/migration-manager
я думал про совместимость с явой. А так да, проблема. Детская болезнь компилятора. Он растёт, и библиотеки, скомпиленные разными версиями, не линкуются между собой.

zorin29

>Кстати, не подскажешь, где находится документация по ASP.NET MVC?
даже не знаю, там как-то всё само собой, в гугл, и обычно на stackoverflow уже есть ответ
Похоже, слишком тонко над тобой постебался, ты даже и не понял, что это стеб :)

Realist

Scala уже предлагали? Ужасно красивая штука

Papazyan

Скажи, ты когда-нибудь пользовался фреймворками на яве?
Это круто! Надо было написать ентерпрайз хрень для получения и обработки данных, взял Кемел - хуяк jms компонент, хуяк асинхронная очередь, хуяк xslt преобразование. За один раз ресурсов наверно жрется больше чем во всей комп лаборатории в 70-х, но зато говнокодится все быстро.

apl13

а они где-то есть кроме схемы и хаскеля?
В Алголе, поди-ко!

apl13

Если серьезно, Педовикия обещает, что Many modern garbage-collected imperative languages, such as Smalltalk, the first object-oriented language featuring closures,[2] C#, but notably not Java (planned for Java 8[3]) support closures.

yroslavasako

смысл от замыканий без континуаций? Они являются больше сахаром

Ivan8209

Замыкания полезны и без продолжений.
Симуляция замыканий при помощи объектов анонимных классов ---
особый вид извращений, смысл которых понимают только кофеинщики.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

kokoc88

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

PooH

Представь себе, если не считать фильтрации списков, использовал замыкания в js всего один раз, причем это было дико неудобно, потому что пришлось нагугливать такой трюк:
считаю, что на JS надо прогать в функциональном стиле, тогда все красиво и лаконично
а про this - ты зря, просто не разобрался
я обычно делаю в что типа var that = this в конструкторе, чтобы отделить мух от котлет

luna89

я обычно делаю в что типа var that = this в конструкторе, чтобы отделить мух от котлет
Это очень хорошая мысль.

karkar

смысл от замыканий без континуаций? Они являются больше сахаром
А много ли языков с полноценными продолжениями? Схема, Руби 1.8, что еще?

okis

haskell?

Hastya

PHP - вторично, так как сообщество копирует либо Rails, либо Java-фреймворки.
И как думаешь, почему?

agaaaa

смысл от замыканий без континуаций? Они являются больше сахаром
Я чего-то не понимаю. Что вы подразумеваете под континуациями, чего нет в C#?

karkar

Не припомню в хаскеле нормальных продолжений. Монаду Cont видел, это не то.

fisher555

Имхо, проблема не в конкретном языке программирования, а в тех людях, кто на нем пишет. На Java написано много софта, который работает более, чем хорошо. Посмотри на те же стандартные библиотеки классов Java из JDK. Разве не хороший код? По мне так очень хороший. Проблема в том, что благодаря простому синтаксису на Java легко начать писать и, овладев необходимым начальным уровнем, многие разработчики начинают лениться и оставаться на начальном уровне развития, не обременяя себя ознакомлением с литературой и документацией. Опыт этих разработчиков растет и им начинают ставить более сложные задачи, которые, тем не менее, не могут быть качественно решены на устоявшемся уровне. Так же встречаются "самые умные", которые лезут патчить ORM фреймворки, лезть писать свои и заниматься прочей порнографией, которая в 90% случаев ничем хорошим не заканчивается. Тут уже начинают встречаться другие проблемы - даже если человек пишет хороший код, то при написании фреймворка кода должно быть достаточно много и требования, которые к нему будут предъявляться будут бОльшими, нежели прикладной код конечного продукта, а обеспечить написание такого кода может далеко не каждый. Для этого нужно понимать как надо писать соответствующий софт, как закладывать его архитектуру, да так что бы не потерять гибкость ну и т.д. Проблемы, как мне кажется, кроются в команде, в которой ты работаешь. Можешь попробовать сменить команду (имеет смысл даже присмотреться к соседним командам в рамках компании - даже внутри одной компании уровень конкретных команд может сильно варьироваться).
Относительно других языков - если на них пишут неграмотные разработчики, которые не занимаются саморазвитием, то, как мне кажется, спустя год - другой, когда достаточно подрастешь и повидаешь мир соответствующего языка, ты столкнешься с теми же проблемами.
Мой вывод: если хочешь работать с интересом и что бы работа приносила удовольствие, то надо работать с компетентными коллегами, которые будут заинтересованы в качестве продукта, его архитектуре, гибкости, маштабируемости. А такую команду, вне зависимости от языка, на которой она будет разрабатывать, найти будет тяжело. Да и самому придется соответствовать уровню команды. Как бы там ни было - удачи.

Marinavo_0507

На Java написано много софта, который работает более, чем хорошо.
Например?
Обычно Java - это трудности с запуском (нужно 100500 слабодокументированных переменных окружения постоянные стектрейсы в stderr (с которыми непонятно что делать конфиги в xml или чем-то похожем (в котором половина тегов не документированы). Ну и иногда падает, потому что какой-то параметр JVM не так установлен.
Это я как админ говорю, не видел ни одной программы, чтоб работала хотя бы просто хорошо.

yroslavasako

Не припомню в хаскеле нормальных продолжений. Монаду Cont видел, это не то.
Посколько формально у хаскеля нет глобального состояния, то континуации там есть. Та же самая монада Cont сойдёт

fisher555

Например, почти все J2EE серверы. Oracle WebLogic, JBoss могут быть запущены только с одной переменной окружения - JAVA_HOME. Документации достаточно много, как и тематических форумов.
Чем стектрейс от записи в логе об ошибке отличается я не сильно понимаю. Для интепретации типовых ошибок хватит базового английского языка с уклоном в IT. Что делать? Я бы сказал, что надо читать документацию. Чем конфиги в xml хуже других видов конфигов - плохо понимаю. В любом приложении, какой бы формат конфигов оно не использовало, найдутся не задокументированные опции. В Java с этим, имхо, даже по легче будет, ибо некоторые конфигурационные файлы стандартизованы. На счет параметров - обычно все есть в документации. Чаще всего я вижу такую ситуацию: есть quick install guide, который позволяет запустить ПО в дефолтной конфе, и admin guid-ы, которые уже содержат детальную информацию о том где как и что тюнить.
П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.

yroslavasako

П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.
То есть серверную часть ты пишешь в vi/emacs, потому что idea, eclipse, netbeans, jedit - это фейл?

fisher555

Среда разработки на Java - это норм, так как ей будет пользоваться разработчик Java и, если что-то пойдет не так, то он вполне в состоянии разобраться почему вылетел OutOfMemoryException (или что-то из той же серии) и рихтануть конфигурацию. А вообще к IDE я отношусь настороженно - они склонны к автогенерации всякого хлама и бреда, поэтому стараюсь все писать ручками. IDE использую только для удобства написания кода (подсветка, быстрый доступ к докам, возможности рефакторинга). Разного рода деплоймент дескрипторы, мавеновские помники и прочие подобные файлы пишу руками или рихтую то, что наплодило IDE в полном составе.
Под десктопными приложениями я понимаю всякие утилиты, которые направлены на неподготовленного пользователя (читай обычного юзера который ни с одной проблемой справиться не сможет и ошибку ему надо будет выдавать читабельную, локализованную и понятную для пользователя начального уровня. Такие приложения, написанные на Java, вроде, вообще не встречаются.

schipuchka1

Это я как админ говорю, не видел ни одной программы, чтоб работала хотя бы просто хорошо.
А какие ты видел?
в stderr уже лет 5 как моветон выводить, пользуются логгерами. Переменные окружения за последние 3 года я настраивал всего 2: JAVA_HOME и ANT_HOME, хотя батники для запуска сами ищут всё. Конфиги в xml обычно на веб серверах бывают и там недокументированность - это грех непосредственно разработчиков.

schipuchka1

П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.
они удобны по нескольким причинам:
1. на них легко надевать скины и делать настраиваемый внешний вид
2. их можно создавать из хтмл-ки

fisher555

Кстати, на счет админства.
Я думаю, что твой пост вызван тем, что ты вынужден админить Java-сервера в условиях РФ. Как-то я почитал один из Administration Guide-ов и обомлел от того, сколько админских ролей там обозначено. Еще больше я удивился, когда понял, что на западе это действительно работает - один архитектор IT систем из Австралии был искренне удивлен, что у нас каждый админ - мастер на все руки. У них, в Австралии, есть OS guy, который ставит и настраивает операционные системы, DB guy, который ставит и настраивает БД, WebLogic guy, который ставит, настраивает и следит за функционированием J2EE сервера, Performance guy, который занимается проблемами производительности, Deployer guy, который занимается тем, что деплоит, апдейтит и настраивает разработанные девелоперами приложения... Это еще не полный список - там было еще пару guy-ев, каждый из которых выполняет свою узкую задачу и разбирается в ней хорошо. In soviet russia есть понятие админ, на которого пихают все, поэтому возникает дилемма - надо разобраться со всем на свете и сделать это быстро. В итоге админы Java-серверов, мягко говоря, охуевают от того, что на них сваливается и разбираться в проблемах досконально времени у них не хватает.

SergeRRRRRR

из крупных проектов, amazon, вроде, на java написан.
На самом деле трудность только в предварительной подготовке проекта - когда настроил все инструменты для автоматической сборки и continuous integration, все становится очень красиво и удобно, и дает возможность "писать код, блеать", не отвлекаясь на сборку-пересборку, добавление библиотек, синхронизации всего этого добра между разрабами и тп и тд.

Marinavo_0507

из крупных проектов, amazon, вроде, на java написан.
в смысле их сервисы?
не считается, ибо неотчуждаемо

Marinavo_0507

В итоге админы Java-серверов, мягко говоря, охуевают от того, что на них сваливается и разбираться в проблемах досконально времени у них не хватает.
Да, такая проблема есть, но тем не менее другие продукты сходной сложности работают лучше, и разобраться проще.
У них, в Австралии, есть OS guy, который ставит и настраивает операционные системы, DB guy, который ставит и настраивает БД, WebLogic guy, который ставит, настраивает и следит за функционированием J2EE сервера, Performance guy, который занимается проблемами производительности, Deployer guy, который занимается тем, что деплоит, апдейтит и настраивает разработанные девелоперами приложения...
ну если это госконтора или высокомаржинальный бизнес не в IT, и можно много пускать денег на инфрастуктуру, то легко
в РФ тоже есть такие заказчики, у них каждый сотрудник занимается узкой областью, и поэтому если какая-то системная проблема, то никто не готов её решать :)

Marinavo_0507

в stderr уже лет 5 как моветон выводить, пользуются логгерами
ну в общем в специальный лог конечно культурнее, но суть та же:

catch (Exception E) {
System.err.println(E.toString;
}
(синтаксис пишу по памяти, могу ошибиться)
то есть смысл в том, что есть исключение, и заглушка, которая срёт в лог
чем отличается от нормальных ошибок в логе?
нормальная ошибка - которая обрабатывается специально, а не общей заглушкой
ей соответствует текстовое описание и уровень важности
если в логах виден стектрейс - значит надо смотреть в код и/или запускать отладчик, чтобы исправить баг
но java-программы просто срут в лог и работают дальше - это их нормальный режим работы, поэтому в случае проблем обнаруживаешь, что лог уже многогигабайтный, и малоинформативный - так как для всех исключений одна заглушка, а специально обрабатывать их никто не думал

SergeRRRRRR

под сервисами ты имеешь в виду aws что ли?
Я вообще про сам сайт амазона говорил, тут что-то есть, правда инфа старая и мало.

fisher555

В России, к сожалению, я часто вижу, как экономят на людях. Покупают Oracle Database, Oracle WeblLogic сервера, которые стоят вполне себе кучу бабла, тратят бабло на нормальный хардвар, а админы, как я описал, так и остаются мастерами на все руки. Учитывая стоимость труда в РФ и на западе, набрать достаточное количество квалифицированных админов здесь дешевле, но почему-то продолжают экономить. Я этого искренне не понимаю! Наблюдаю кластер работающий на приведенных выше недешевых технологиях и, при этом, падающий чуть ли не каждый день, так как админов на этот кластер целый отдел, но предпочитают нанимать дешевых. Нанимают админа под Oracle Directory Server Enterprise Edition, который ни разу его не видел... Имхо, это менталитет.

kokoc88

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

Ещё раз повторюсь, что Java тут не при чём. А логи принято сжимать в любых проектах, даже если они написаны на Си. И ещё логирование можно настроить так, чтобы от большого стектрейса исключения оставалось 1-2 строки, это как раз задача администратора.

Marinavo_0507

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

kokoc88

но у программ на Java некий особый feel
Кто мешает включить в конфигурации ограничение на логирование стек трейсов?
наверное, используемый язык таки влияет на мышление разработчиков
Просто в Си очень тяжело сделать библиотеку, которая логирует стек трейс. В результате чего иногда бывает несколько тяжелее обнаружить причины возникновения некритических ошибок. Впрочем, дампы тоже иногда очень тяжело проанализировать.

fisher555

наверное, используемый язык таки влияет на мышление разработчиков
Безусловно. Стектрейс - одина из фич языка и разработчики ей пользуются. Стектрейс дает немного дополнительной информации, которая помогает понять чуть более детальнее как произошло падение, вот и кидают, держа в голове то, что они же и будут разбираться в проблеме. Админу Java-сервера, как мне кажется, нужно знать откуда берутся классические exception-ы типа OutOfMemory,ClassNotFound и тому подобное. А то, что вылетело не из этой области надо передавать разработчикам для дальнейшего анализа стектрейса.

schipuchka1

Могу только повторить вопрос: откуда такие программы?

Marinavo_0507

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

Dasar

смысл такой, что гигабайты ошибок - не есть признак какой-то проблемы, а нормальный способ работы этой программы
имхо, гигабайты ошибок - это нормальная работа любой программы.
Просто под c/c++ необходимо каждую ошибку выводить в лог руками - и поэтому это мало кто делает, а в java/c# можно сделать, чтобы все ошибки валились в лог автоматически.

Marinavo_0507

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

katrin2201

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

katrin2201

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

Marinavo_0507

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

Marinavo_0507

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

katrin2201

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

katrin2201

в логах гигабайты ошибок
От юзер тасков? Это не проблема хадупа...

kokoc88

потом вдруг раз, и что-то упало, и ищи среди этих стектрейсов, что из них реально показывает на баг, а что просто так на всякий случай
Очень просто, например, что записано с уровнем выше WARNING. Описываемой тобой "заглушки" ни в одном нормальном проекте нет. В каждом обработчике исключений всегда понятно, выводить ошибку как INFO (например, если это просто socket disconnect как WARNING (database connection failed) или как ERROR (a bug has occured :) ). Опять же, разные уровни логирования ты как администратор можешь писать в разные файлы.

karkar

Посколько формально у хаскеля нет глобального состояния, то континуации там есть. Та же самая монада Cont сойдёт

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

Marinavo_0507

Описываемой тобой "заглушки" ни в одном нормальном проекте нет.
Да, я слышал уже, что бывают и нормальные проекты.
Только вот на других языках я их ещё и видел :)

Marinavo_0507

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

katrin2201

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

Marinavo_0507

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

Marinavo_0507

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

fisher555

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

katrin2201

Хайв... Тоже странно, на самом деле.
А почему помочь не можете? Примера эксепшена нету?

Marinavo_0507

JDBC драйвер пишет в лог некоторые ошибки
во, тут было про оракл
вот мой мхом поросший опыт тогда
тоже писались в лог некоторые ошибки
оказалось, что в оракле TNS_Listener (или как-то так, забыл за давностью, в общем компонент, принимающий соединения к базе) тупо падает в корку
потом специальный watchdog его перезапускает через несколько секунд
ещё через несколько секунд клиентская библиотека (ну она из потрохов этого JDBC вызывается) прозрачно для пользователя делает реконнект, и после него всё работает, просто тормоза секунд на 10 и несколько ошибок в логах
на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"

Marinavo_0507

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

kokoc88

на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"
И при чём же тут Java?

Marinavo_0507

И при чём же тут Java?
в том случае ни при чём была
это просто оракловцы так своих монстриков на линукс впервые портировали

katrin2201

Ок. Тогда если вдруг пример случайно появится - обращайся =) Я прям заинтригован...

yroslavasako

П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.
кстати, вспомнил. В соседнем /games половину народу упарывается по minecraft.

yroslavasako

1. на них легко надевать скины и делать настраиваемый внешний вид
current java UI (javafx) вообще перешла на css

fisher555

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

Ivan8209

> Просто в Си очень тяжело сделать библиотеку, которая логирует стек трейс.
Чё?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

ava3443

Ну так и есть, чё. У каждой платформы свои методы, зачастую убогие.
Вот к примеру недавно добавлял поддержку AIX: там нашлась mt__trce и работает как надо. Хорошо что мне это нужно лишь в crash-хендлере, а что если хочется как в Java только стек текущего потока, и без всяких сигналов, а просто в нужном месте кода?
В общем если нужна портируемость чуть шире чем Linux+Windows, то уже придётся знатно потрахаться.

luna89

на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"
Совесть не позволяет пройти мимо не защитив поруганную честь оракла! Почему технет, а не металинк? Ты бы еще на linux.org.ru спросил у анонимных экспертов.
Не верю что официальный представитель оракла мог так ответить.

Dasar

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

Ivan8209

> возьмем банальный пример: соединение сдохло,
> эта ситуация была обработана, и соединение было создано заново.
> Ошибку о том, что соединение сдохло - надо в лог писать или не надо?
Обязательно! И обязательно с распечаткой стека!
---
...Я работаю антинаучным аферистом...

Dasar

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

Marinavo_0507

это сообщение уровня INFO и стектрейс тут не нужен
проблема, когда среди них намешаны WARN и ERROR со стектрейсами, но это не отображается видимым образом на работе программы - тогда никто не обращает внимания на предупреждения, и реальные проблемы начинаются ВНЕЗАПНО

Dasar

это сообщение уровня INFO и стектрейс тут не нужен
при этом же было запорото выполнение каких-то команд, а значит это как минимум warn, а не info.

Marinavo_0507

при этом же было запорото выполнение каких-то команд, а значит это как минимум warn, а не info
если warning по случаю того, что наверное, запороты какие-то команды - то это не обработка, а тупая заглушка, про что и пишу
обработкой в данном случае будет - выяснить, что за команда, и откатить либо повторно её выдать
warning или error - только в том случае, если при этом возможна потеря данных, и нужно вмешательство человека, чтоб разрулить эту ситуацию, тогда соответственно нужно написать не "обрыв соединения", а "не выполнена такая-то команда"

Dasar

а тупая заглушка, про что и пишу
обработкой в данном случае будет - выяснить, что за команда, и откатить либо повторно её выдать
код с попытками в любом случае будет выглядеть как-то так:

void Execute(ICommand command)
{
var tryCount = 3;
for(var try = 0; try < tryCount; ++try)
{
try
{
command.Execute;
break;
}
catch (Exception exc)
{
if (try < tryCount - 1)
Log(exc, WARN);
else
throw;
}
}
}

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

Marinavo_0507

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

Dasar

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

zorin29

код с попытками в любом случае будет выглядеть как-то так:
Забавно. Я практически такой же код писал недавно. Тоже забыл break поставить после Execute :)

Ivan8209

Каков программист, таков и код.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

6yrop

оказалось что везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нужен
заметь, я написал "Razor", а не "веб-фреймворк". То, что ты понял что java-стайл веб-фрайворки не нужны это хорошо, именно это понимание и является главной заслугой ASP.NET MVC, т.е. в .net мире стало не стыдно говорить о том, что король голый веб фрайворк не нужны именно после MVC, а сам по себе MVC нахер не сдался, но перелом в массовом сознании связан именно с ним, народ начал думать, и понимание пришло.
Возвращаясь к моей фразе про Razor и твоей про html шаблоны в браузере. Razor это и есть всего лишь шаблонизатор :). Причем в java аналога нет. А клиентские шаблонизаторы имеют свои преимущества за счет доступности на клиенте, но для ентерпрайза статическая типизация играет существенную роль, поскольку позволяет сохранять бизнес правила в виде кода, который поддается машинному анализу. Кстати, Razor доступен и для клиентского кода ref. Но мы этим не пользовались, на наших проектах не принципиальны приемущества клиентского шаблонизатора. Короче, TypeScript-у есть куда развиваться :).

zorin29

Каков мост, таков и тролль.
Оставить комментарий
Имя или ник:
Комментарий: