Достала жаба - куда идти?
У меня есть надежда, что на других платформах разработки не поощряется суперабстрактный паттернизированный ООП-говнокод, и следовательно, мне надо сменить платформу.Тебе надо либо сменить работу, либо род деятельности.
Тебе надо либо сменить работу, либо род деятельности.Я правильно понял, что в твоих словах скрыт сарказм, и ты не согласен со мной, что в яве есть проблемы?
Тебе надо либо сменить работу, либо род деятельности.
Род деятельности менять не хочу, работу недавно менял.
Python забыл.
Я правильно понял, что в твоих словах скрыт сарказм, и ты не согласен со мной, что в яве есть проблемы?Сарказма нет, как и проблем в Java. По твоим ссылкам только проблемы конкретных команд разработки.
С# - та же ява только в профиль.
Имхо, зря исключил - там язык намного более гибкий, чем Java. По крайней мере, у меня сложилось такое впечатление, когда делал один проект на C#.
Попробуй глянуть в сторону Scala.
PS:
Сам я Java-разработчик и после многих лет разработки всё равно очень доволен языком.
Но сейчас параллельно изучаю Groovy - хочется, чтобы и текущие знания пригодились, но при этом попробовать функциональное программирование. А дальше думаю как раз взяться за Scala.
1)Клиентский JavaScript. Минус - не хочется расставаться с СУБД и сервер-сайдом.
см. node.js
а вообще, мне не понравился наезд на абстрактный паттернизированный ООП-код.
ты против ООП в целом? тогда смотри на функциональные языки.
нравится ООП, но не нравятся абстракции и паттерны? есть еще темплейты. ну или правда, надо менять род деятельности.
Когда есть возможность написать js-код или sql-запрос, то для меня это как отдушина.
У меня есть надежда, что на других платформах разработки не поощряется суперабстрактный паттернизированный ООП-говнокод, и следовательно, мне надо сменить платформу.
Вообще, если глянешь известные js-фреймворки - они тоже весьма паттернизированные, со смесью ООП и функциональщины. И это нормально. Умение мыслить абстрактно - это, на мой взгляд, один из основных навыков разработчика, который другим людям даётся тяжело. И вполне нормально, что общие решения записываются в абстрактной форме. Конечно, всегда нужно представлять, что рядом стоит Оккам с острой бритвой и зорко за тобой следит , но всё-таки у абстрактных решений есть своя красота.
По твоим ссылкам только проблемы конкретных команд разработки.Я тоже раньше так думал.
Я считаю яву отличным языком программирования. Теоретически, ничего не мешает писать на ней отличный код. Но на практике почему-то такого не бывает.
Я уверен кстати, что если бы команда, история которой описывается во второй ссылке, использовала тупой PHP без фреймворков, то у нее все было бы в порядке. Там просто негде развести ООП (в плохом смысле этого слова). Пришел http запрос, сделали пару-тройку запросов к базе, выплюнули данные в шаблон. Просто нечему ломаться.
Имхо, зря исключил - там язык намного более гибкий, чем Java. По крайней мере, у меня сложилось такое впечатление, когда делал один проект на C#.Мне нравится ява как язык. Всякие scala, groovy и прочие дадут, в лучшем случае, локальное сжатие кода, например возможность более кратко отфильтровать список или что-то в этом роде. При этом принесут кучу проблем, типа отсутствия обратной совместимости.
Попробуй глянуть в сторону Scala.
xml, паттерны, геттеры и сеттеры, фреймворки, бины и прочее говноС такими претензиями я бы ушел куда-нить в кернел-девелопмент на си.
А вообще, ты судя по всему просто не там работаешь.
Фреймворки, бины, конфигурационные xml и прочее говно - тут достаточно уйти в команду, где сплошной core java.
Геттеры-сеттеры - если их лепят в простейших dto - ну просто на автомате люди кодят. В остальном не должно большой неприязни вызывать.
Паттерны - это когда сплошные SomethingFactoryBuilderFactory? Опять же, смени проект/команду/работу.
а вообще, мне не понравился наезд на абстрактный паттернизированный ООП-код.Скажи, ты когда-нибудь пользовался фреймворками на яве?
ты против ООП в целом? тогда смотри на функциональные языки.
Я приведу пару примеров.
Вот например, схема, как создать 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;
}
}
При этом на самом деле этот пакет сам не реализует такой механизм, а является фреймворком, обобщающим разные (уже имеющиеся) реализации. У каждой реализации свой глюки и недостатки.
p.s. это про первую ссылку.
про вторую - "что да - то да, но уж никак не ой-ёй-ёй"
просто не надо писать для Web. Imho, Web - проклят от рождения.Мне веб нравится, по-моему, там все более-менее ок.
ага. за исключением того, что чтобы сделать страницу, приходится использовать 5-6 разных технологий со своими языками, особенностями, синтаксисом и ограничениями, которые, кроме того не всегда хорошо друг с другом дружат
вообще, я, конечно, не джавист ни разу и возможно не представляю всю глубину ваших глубин.
Хочу еще добавить, что зло не в самих фреймворках, а в том что такого рода код считается хорошим и таким образом реализуется тупая бизнес-логика. В результате, пока пытаешься понять алгоритм начисления каких-нибудь скидок, можно сойти с ума.
При этом принесут кучу проблем, типа отсутствия обратной совместимости.objection. scala вполне себе совместимая
Этот класс является частью большого пакета, цель которого - дать возможность писатьсудя по всему это недо CLOS. Может тебе попробовать себя в лиспе? Он динамичный и скриптовый как яваскрипт. Не страдает избытком темплейтов
1)Клиентский JavaScript. Минус - не хочется расставаться с СУБД и сервер-сайдом.Как уже посоветовали, node.js
2)Oracle. Все нравится, кроме того что он используется только в крупных компаниях.Не только.
Кроме того, есть опасения, что скоро начнут внедрять nosql даже в банках, и тогда ораклистам вообще конец.Да, но поподробнее?
С# - та же ява только в профиль.ровно наоборот, того что ты перечислил "xml, паттерны, геттеры и сеттеры, фреймворки, бины" там нет. Более того, для бизнес приложение (расчет скидок ты упоминал) к C#-у мало что хочется добавить.
Прозрачная работа с реляционными БД на их родном языке.
Для web-а Razor вполне хорош (лямбды плохо поддержали, но можно жить). Еще ждем от Хельсберга дженерики в Typescript-е, и поддержку со стороны IDE. Вебсторм уже вроде поддерживает. Тогда можно и на Node.js переходить, если для взаимодействия с базой будет решение.
А Java как язык, реально, отстала лет на 8, проблемы затыкают фрейворками и xml-ями.
Или тебе нравится динамическая типизация?
Или туча функций?
Попробуй поразбирать скрипты Perl или посмотри в сторону чистого канонического С.
В треде еще Scala упоминалась, так можно рядом с ней упомянуть и Clojure.
А если уж нравится писать сервера, то почему бы не Erlang?
Scala упоминаласьдолгая компиляция, плохая поддержка в IDE
Clojure
Typing discipline: dynamic
Erlang
Typing discipline: dynamic
А Java как язык, реально, отстала лет на 8, проблемы затыкают фрейворками и xml-ями.У меня другая теория. У некоторых людей есть потребность писать непонятный код. Если такие люди пользуются языком, который позволяет писать непонятный код, то они будут творить в рамках этого языка. Если язык простой и понятный, то им приходится выдумывать запутанные фреймворки.
Как уже посоветовали, node.js
0 вакансий в Москве. К тому, же я не очень понимаю, зачем он нужен.
зачем он нужен.один язык и для клиента и для сервера это прикольно. Можно просто шарить сорци между клиентом и сервером и еще куча вкусностей.
всё гораздо проще, в Java нет нормальных замыканий, а это же базовая фича.
ровно наоборот, того что ты перечислил "xml, паттерны, геттеры и сеттеры, фреймворки, бины" там нет.
http://www.springframework.net/
http://nhforge.org/
http://nant.sourceforge.net/
Для web-а Razor вполне хорош (лямбды плохо поддержали, но можно жить).
Пока весь мир делал веб на stateless фреймворках, микрософт мучал разработчиков своим ASP.NET. Когда наконец микрософт сделал нормальный фреймворк, то оказалось что везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нужен
http://www.springframework.net/это всё прямые порты с Java-ы, и поэтому они и построены в идеологии Java-ы. Нативные для C# разработки обычно построены более красивым и простым образом.
http://nhforge.org/
http://nant.sourceforge.net/
Есть проекты совсем без ООП
Пишем игры (много логики и интересных задач) и внутренние сервисы немного. Вот ещё актуальна в общем.
всё гораздо проще, в Java нет нормальных замыканий, а это же базовая фича.
В яве есть замыкания. Если объявляешь класс внутри метода, то он может захватывать локальные переменные этого метода.
один язык и для клиента и для сервера это прикольно. Можно просто шарить сорци между клиентом и сервером и еще куча вкусностей.Как я понял, фича node.js в асинхронном IO. Я не уверен, что понимаю, зачем он нужен.
Пока весь мир делал веб на stateless фреймворках, микрософт мучал разработчиков своим ASP.NET.ты отстал от жизни, на C# -е уже есть зрелый стейтлес фраймвор (под лайблом Razor я и имел ввиду его)
ты отстал от жизни, на C# -е уже есть зрелый стейтлес фраймвор (под лайблом Razor я и имел ввиду его)
Я так и понял. Кстати, не подскажешь, где находится документация по ASP.NET MVC?
В яве есть замыкания. Если объявляешь класс внутри метода, то он может захватывать локальные переменные этого метода.если переменная объявлена final, а это не удобно. Не говоря уже об громоздком синтаксисе анонимного класса.
Я так и понял. Кстати, не подскажешь, где находится документация по ASP.NET MVC?http://www.asp.net/mvc и далее по ссылкам.
Независимо от технологий неизбежно будет казаться, что все плохо. Что все надо переписать. Что время тратится на какую-то ерунду.
Причем, как мне показалось, чем хуже код, тем лучше продается продукт.
Кстати, не подскажешь, где находится документация по ASP.NET MVC?даже не знаю, там как-то всё само собой, в гугл, и обычно на stackoverflow уже есть ответ . Как ты сам написал от веб брейфорка не много надо. Главное не заморачиваться идеалогией MVC, в частности, воспринимать Model тупо как аргумент метода (view). Там можно вообще всё на базовых простых принципах делать, а Razor просто как генератор C# кода Razor Generator.
Главное не заморачиваться идеалогией MVCдаже сама майкрософт предлагает на Razor-е два фрейворка MVC и Web Pages
везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нуженну во-первых, с аяксом не надо забывать про поисковики, им всё же аякс не скормишь.
Во-вторых, появляются нетипизированные json DTO объекты; т.е. статическая типизация теряется слишком рано.
если переменная объявлена final, а это не удобно.Приведи пример задачи, когда это неудобно, а я покажу, как это делается на яве.
Что касается синтаксиса, то я никогда не чувствовал потребности в создании большого количества замыканий (про фильтрацию списков можно пример не приводить).
Когда есть возможность написать js-код ... то для меня это как отдушина.Вообще, вот это доставляет, насколько же надо было загадить всё фрайворками, чтобы народ вот такое писал (уже встречал такое мнение т.е. после статики динамику воспринимать как отдушину .
Приведи пример задачи, когда это неудобно, а я покажу, как это делается на яве.Что касается синтаксиса, то я никогда не чувствовал потребности в создании большого количества замыканий (про фильтрацию списков можно пример не приводить).Думаю, что тебе js нравится во много из-за нормальных замыканий. Нужен пример, посмотри на 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, там своя объектная система, она наверное использует замыкания, но об этом можно не думать.
Вообще, замыкания в JS неудобны, потому что в замыкании переопределяется this, очень легко допустить ошибку.this в это отдельная песня, он вообще определяется вызывающим функцию кодом, тут замыкания ни причем.
Фишка замыканий в том, что closured переменные почти не отличаются от обычных. Ты натолкнулся на известную фишку с циклом, ну да, надо про нее помнить, кстати, в новой версии C#-а это поведение исправили, и теперь не надо городить переменную внутри цикла.
Пришел http запрос, сделали пару-тройку запросов к базе, выплюнули данные в шаблон. Просто нечему ломаться.Другая сторона этой простоты — очень примитивные проекты.
А ООП подходит для борьбы со сложностью?
А ООП подходит для борьбы со сложностью?Для борьбы с простотой — точно подходит, см чуть раньше по треду
objection. scala вполне себе совместимая
А это что такое?
http://typesafe.com/technology/migration-manager
всё гораздо проще, в Java нет нормальных замыканий, а это же базовая фича.а они где-то есть кроме схемы и хаскеля?
если переменная объявлена final, а это не удобно. Не говоря уже об громоздком синтаксисе анонимного класса.синтаксис правится scala. jvm не исправимо (и не поддерживает континуаций)
А это что такое?я думал про совместимость с явой. А так да, проблема. Детская болезнь компилятора. Он растёт, и библиотеки, скомпиленные разными версиями, не линкуются между собой.
http://typesafe.com/technology/migration-manager
>Кстати, не подскажешь, где находится документация по ASP.NET MVC?Похоже, слишком тонко над тобой постебался, ты даже и не понял, что это стеб
даже не знаю, там как-то всё само собой, в гугл, и обычно на stackoverflow уже есть ответ
Scala уже предлагали? Ужасно красивая штука
Скажи, ты когда-нибудь пользовался фреймворками на яве?Это круто! Надо было написать ентерпрайз хрень для получения и обработки данных, взял Кемел - хуяк jms компонент, хуяк асинхронная очередь, хуяк xslt преобразование. За один раз ресурсов наверно жрется больше чем во всей комп лаборатории в 70-х, но зато говнокодится все быстро.
а они где-то есть кроме схемы и хаскеля?В Алголе, поди-ко!
Если серьезно, Педовикия обещает, что 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.
смысл от замыканий без континуаций? Они являются больше сахаром
Симуляция замыканий при помощи объектов анонимных классов ---
особый вид извращений, смысл которых понимают только кофеинщики.
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Симуляция замыканий при помощи объектов анонимных классов ---Таки дотнетчики их понимают намного лучше.
особый вид извращений, смысл которых понимают только кофеинщики.
Представь себе, если не считать фильтрации списков, использовал замыкания в js всего один раз, причем это было дико неудобно, потому что пришлось нагугливать такой трюк:считаю, что на JS надо прогать в функциональном стиле, тогда все красиво и лаконично
а про this - ты зря, просто не разобрался
я обычно делаю в что типа var that = this в конструкторе, чтобы отделить мух от котлет
я обычно делаю в что типа var that = this в конструкторе, чтобы отделить мух от котлетЭто очень хорошая мысль.
смысл от замыканий без континуаций? Они являются больше сахаромА много ли языков с полноценными продолжениями? Схема, Руби 1.8, что еще?
haskell?
PHP - вторично, так как сообщество копирует либо Rails, либо Java-фреймворки.И как думаешь, почему?
смысл от замыканий без континуаций? Они являются больше сахаромЯ чего-то не понимаю. Что вы подразумеваете под континуациями, чего нет в C#?
Не припомню в хаскеле нормальных продолжений. Монаду Cont видел, это не то.
Относительно других языков - если на них пишут неграмотные разработчики, которые не занимаются саморазвитием, то, как мне кажется, спустя год - другой, когда достаточно подрастешь и повидаешь мир соответствующего языка, ты столкнешься с теми же проблемами.
Мой вывод: если хочешь работать с интересом и что бы работа приносила удовольствие, то надо работать с компетентными коллегами, которые будут заинтересованы в качестве продукта, его архитектуре, гибкости, маштабируемости. А такую команду, вне зависимости от языка, на которой она будет разрабатывать, найти будет тяжело. Да и самому придется соответствовать уровню команды. Как бы там ни было - удачи.
На Java написано много софта, который работает более, чем хорошо.Например?
Обычно Java - это трудности с запуском (нужно 100500 слабодокументированных переменных окружения постоянные стектрейсы в stderr (с которыми непонятно что делать конфиги в xml или чем-то похожем (в котором половина тегов не документированы). Ну и иногда падает, потому что какой-то параметр JVM не так установлен.
Это я как админ говорю, не видел ни одной программы, чтоб работала хотя бы просто хорошо.
Не припомню в хаскеле нормальных продолжений. Монаду Cont видел, это не то.Посколько формально у хаскеля нет глобального состояния, то континуации там есть. Та же самая монада Cont сойдёт
Чем стектрейс от записи в логе об ошибке отличается я не сильно понимаю. Для интепретации типовых ошибок хватит базового английского языка с уклоном в IT. Что делать? Я бы сказал, что надо читать документацию. Чем конфиги в xml хуже других видов конфигов - плохо понимаю. В любом приложении, какой бы формат конфигов оно не использовало, найдутся не задокументированные опции. В Java с этим, имхо, даже по легче будет, ибо некоторые конфигурационные файлы стандартизованы. На счет параметров - обычно все есть в документации. Чаще всего я вижу такую ситуацию: есть quick install guide, который позволяет запустить ПО в дефолтной конфе, и admin guid-ы, которые уже содержат детальную информацию о том где как и что тюнить.
П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.
П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.То есть серверную часть ты пишешь в vi/emacs, потому что idea, eclipse, netbeans, jedit - это фейл?
Под десктопными приложениями я понимаю всякие утилиты, которые направлены на неподготовленного пользователя (читай обычного юзера который ни с одной проблемой справиться не сможет и ошибку ему надо будет выдавать читабельную, локализованную и понятную для пользователя начального уровня. Такие приложения, написанные на Java, вроде, вообще не встречаются.
Это я как админ говорю, не видел ни одной программы, чтоб работала хотя бы просто хорошо.А какие ты видел?
в stderr уже лет 5 как моветон выводить, пользуются логгерами. Переменные окружения за последние 3 года я настраивал всего 2: JAVA_HOME и ANT_HOME, хотя батники для запуска сами ищут всё. Конфиги в xml обычно на веб серверах бывают и там недокументированность - это грех непосредственно разработчиков.
П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.они удобны по нескольким причинам:
1. на них легко надевать скины и делать настраиваемый внешний вид
2. их можно создавать из хтмл-ки
Я думаю, что твой пост вызван тем, что ты вынужден админить Java-сервера в условиях РФ. Как-то я почитал один из Administration Guide-ов и обомлел от того, сколько админских ролей там обозначено. Еще больше я удивился, когда понял, что на западе это действительно работает - один архитектор IT систем из Австралии был искренне удивлен, что у нас каждый админ - мастер на все руки. У них, в Австралии, есть OS guy, который ставит и настраивает операционные системы, DB guy, который ставит и настраивает БД, WebLogic guy, который ставит, настраивает и следит за функционированием J2EE сервера, Performance guy, который занимается проблемами производительности, Deployer guy, который занимается тем, что деплоит, апдейтит и настраивает разработанные девелоперами приложения... Это еще не полный список - там было еще пару guy-ев, каждый из которых выполняет свою узкую задачу и разбирается в ней хорошо. In soviet russia есть понятие админ, на которого пихают все, поэтому возникает дилемма - надо разобраться со всем на свете и сделать это быстро. В итоге админы Java-серверов, мягко говоря, охуевают от того, что на них сваливается и разбираться в проблемах досконально времени у них не хватает.
На самом деле трудность только в предварительной подготовке проекта - когда настроил все инструменты для автоматической сборки и continuous integration, все становится очень красиво и удобно, и дает возможность "писать код, блеать", не отвлекаясь на сборку-пересборку, добавление библиотек, синхронизации всего этого добра между разрабами и тп и тд.
из крупных проектов, amazon, вроде, на java написан.в смысле их сервисы?
не считается, ибо неотчуждаемо
В итоге админы Java-серверов, мягко говоря, охуевают от того, что на них сваливается и разбираться в проблемах досконально времени у них не хватает.Да, такая проблема есть, но тем не менее другие продукты сходной сложности работают лучше, и разобраться проще.
У них, в Австралии, есть OS guy, который ставит и настраивает операционные системы, DB guy, который ставит и настраивает БД, WebLogic guy, который ставит, настраивает и следит за функционированием J2EE сервера, Performance guy, который занимается проблемами производительности, Deployer guy, который занимается тем, что деплоит, апдейтит и настраивает разработанные девелоперами приложения...ну если это госконтора или высокомаржинальный бизнес не в IT, и можно много пускать денег на инфрастуктуру, то легко
в РФ тоже есть такие заказчики, у них каждый сотрудник занимается узкой областью, и поэтому если какая-то системная проблема, то никто не готов её решать
в stderr уже лет 5 как моветон выводить, пользуются логгерамину в общем в специальный лог конечно культурнее, но суть та же:
(синтаксис пишу по памяти, могу ошибиться)
catch (Exception E) {
System.err.println(E.toString;
}
то есть смысл в том, что есть исключение, и заглушка, которая срёт в лог
чем отличается от нормальных ошибок в логе?
нормальная ошибка - которая обрабатывается специально, а не общей заглушкой
ей соответствует текстовое описание и уровень важности
если в логах виден стектрейс - значит надо смотреть в код и/или запускать отладчик, чтобы исправить баг
но java-программы просто срут в лог и работают дальше - это их нормальный режим работы, поэтому в случае проблем обнаруживаешь, что лог уже многогигабайтный, и малоинформативный - так как для всех исключений одна заглушка, а специально обрабатывать их никто не думал
Я вообще про сам сайт амазона говорил, тут что-то есть, правда инфа старая и мало.
В России, к сожалению, я часто вижу, как экономят на людях. Покупают Oracle Database, Oracle WeblLogic сервера, которые стоят вполне себе кучу бабла, тратят бабло на нормальный хардвар, а админы, как я описал, так и остаются мастерами на все руки. Учитывая стоимость труда в РФ и на западе, набрать достаточное количество квалифицированных админов здесь дешевле, но почему-то продолжают экономить. Я этого искренне не понимаю! Наблюдаю кластер работающий на приведенных выше недешевых технологиях и, при этом, падающий чуть ли не каждый день, так как админов на этот кластер целый отдел, но предпочитают нанимать дешевых. Нанимают админа под Oracle Directory Server Enterprise Edition, который ни разу его не видел... Имхо, это менталитет.
ей соответствует текстовое описание и уровень важностиКаждому сообщению в логе, про который тебе написали, будет соответствовать текстовое сообщение и уровень важности. Если тебе приходится иметь дело с каким-то плохим проектом, то Java тут совсем не при чём.
если в логах виден стектрейс - значит надо смотреть в код и/или запускать отладчик, чтобы исправить багНет, не значит.
но java-программы просто срут в лог и работают дальше - это их нормальный режим работы, поэтому в случае проблем обнаруживаешь, что лог уже многогигабайтный, и малоинформативный - так как для всех исключений одна заглушка, а специально обрабатывать их никто не думал
Ещё раз повторюсь, что Java тут не при чём. А логи принято сжимать в любых проектах, даже если они написаны на Си. И ещё логирование можно настроить так, чтобы от большого стектрейса исключения оставалось 1-2 строки, это как раз задача администратора.
Ещё раз повторюсь, что Java тут не при чём.казалось бы
но у программ на Java некий особый feel
наверное, используемый язык таки влияет на мышление разработчиков
но у программ на Java некий особый feelКто мешает включить в конфигурации ограничение на логирование стек трейсов?
наверное, используемый язык таки влияет на мышление разработчиковПросто в Си очень тяжело сделать библиотеку, которая логирует стек трейс. В результате чего иногда бывает несколько тяжелее обнаружить причины возникновения некритических ошибок. Впрочем, дампы тоже иногда очень тяжело проанализировать.
наверное, используемый язык таки влияет на мышление разработчиковБезусловно. Стектрейс - одина из фич языка и разработчики ей пользуются. Стектрейс дает немного дополнительной информации, которая помогает понять чуть более детальнее как произошло падение, вот и кидают, держа в голове то, что они же и будут разбираться в проблеме. Админу Java-сервера, как мне кажется, нужно знать откуда берутся классические exception-ы типа OutOfMemory,ClassNotFound и тому подобное. А то, что вылетело не из этой области надо передавать разработчикам для дальнейшего анализа стектрейса.
Могу только повторить вопрос: откуда такие программы?
Кто мешает включить в конфигурации ограничение на логирование стек трейсов?ну от этого подход не меняется
идут необработанные исключения, генерируются стектрейсы, просто ты их предлагаешь игнорировать, не записывая даже в лог
смысл такой, что гигабайты ошибок - не есть признак какой-то проблемы, а нормальный способ работы этой программы
смысл такой, что гигабайты ошибок - не есть признак какой-то проблемы, а нормальный способ работы этой программыимхо, гигабайты ошибок - это нормальная работа любой программы.
Просто под c/c++ необходимо каждую ошибку выводить в лог руками - и поэтому это мало кто делает, а в java/c# можно сделать, чтобы все ошибки валились в лог автоматически.
это что-то с чем-то
хотя его тоже используют разные большие компании, и видимо он там работает таки
Вообще, checked exception'ы - идея была разумная, но обернулось все вон оно как...
Может просто тебе внутренне джава не нравится, ты ее не понимаешь, и любые с ней проблемы повергают в ступор и вызывают раздражение?
Поэтому, модуль апача какой-нибудь настроить, как бы он уныл бы не был - нормально, а что-нить незнакомое из джава мира - уже не-не-не?
и тогда получается более качественный продукт
а можно отдать ошибку заглушке, которая её выведет в stderr/лог/проигнорирует
в надежде разобраться как-нибудь потом
это "потом" не наступает никогда
хадуп то чего?ну как бы всё работает, задачки выполняются, но в логах гигабайты ошибок
потом вдруг раз, и что-то упало, и ищи среди этих стектрейсов, что из них реально показывает на баг, а что просто так на всякий случай
Исключения всегда будут писаться в лог - это нормально. То, что на них никто не смотрит - это исключительно проблемы вашей команды. В командах, где эти эксепшены будут стоить денег - есть даже роботы, которые мониторят эксепшены в логах, и волнуются алертами в случае чего.
в логах гигабайты ошибокОт юзер тасков? Это не проблема хадупа...
потом вдруг раз, и что-то упало, и ищи среди этих стектрейсов, что из них реально показывает на баг, а что просто так на всякий случайОчень просто, например, что записано с уровнем выше WARNING. Описываемой тобой "заглушки" ни в одном нормальном проекте нет. В каждом обработчике исключений всегда понятно, выводить ошибку как INFO (например, если это просто socket disconnect как WARNING (database connection failed) или как ERROR (a bug has occured ). Опять же, разные уровни логирования ты как администратор можешь писать в разные файлы.
Посколько формально у хаскеля нет глобального состояния, то континуации там есть. Та же самая монада Cont сойдёт
Это плохая отмазка, т.к. формально продолжения с состоянием не особо связаны и теоретически имеются у любого вычисляемого выражения. Вопрос лишь в том, позволяет ли язык их захватить и использовать как первоклассный объект. То, что дает Cont, доступно в любом языке с замыканиями, тут хаскель ушел не дальше джаваскрипта какого-нибудь.
Описываемой тобой "заглушки" ни в одном нормальном проекте нет.Да, я слышал уже, что бывают и нормальные проекты.
Только вот на других языках я их ещё и видел
Исключения всегда будут писаться в лог - это нормально. То, что на них никто не смотрит - это исключительно проблемы вашей команды.Ну вот я смотрю, что тестовая задача выполняется в соответствии с документацией. Но при этом в логе сотня ошибок. Какой я вывод должен сделать?
В командах, где эти эксепшены будут стоить денег - есть даже роботы, которые мониторят эксепшены в логах, и волнуются алертами в случае чего.Пока задачи выполняются - деньги не теряются.
Ну вот я смотрю, что тестовая задача выполняется в соответствии с документацией. Но при этом в логе сотня ошибок. Какой я вывод должен сделать?
Пока задачи выполняются - деньги не теряются.Значит надо научиться отделять логи хадупа от логов юзертасков.
Если это не сделали в хадупе (что сомнительно и ваши проггеры не готовы идти тебе навстречу, то по пекеджу эксепшена вероятно можно отличить, хадуповский он или юзерский.
Заботай доку по хадупу / замучай ваших девов / напиши себе грепалку и спи спокойно.
Значит надо научиться отделять логи хадупа от логов юзертасков.В юзертаксах нет логов в данном случае - это простейшие примеры из документации, или скажем короткий запрос в hive.
напиши себе грепалку и спи спокойноэто очередной способ игнорировать эти ошибки
да, их можно придумать много, мне не нравится сама идея
ну типа этой штуке больно, она явно страдает, но ты не можешь помочь и отворачиваешься
Но это уже, конечно, запредельный уровень квалификации.
А почему помочь не можете? Примера эксепшена нету?
JDBC драйвер пишет в лог некоторые ошибкиво, тут было про оракл
вот мой мхом поросший опыт тогда
тоже писались в лог некоторые ошибки
оказалось, что в оракле TNS_Listener (или как-то так, забыл за давностью, в общем компонент, принимающий соединения к базе) тупо падает в корку
потом специальный watchdog его перезапускает через несколько секунд
ещё через несколько секунд клиентская библиотека (ну она из потрохов этого JDBC вызывается) прозрачно для пользователя делает реконнект, и после него всё работает, просто тормоза секунд на 10 и несколько ошибок в логах
на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"
я стараюсь не трогать эту хрень, пока задачи работают
на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"И при чём же тут Java?
И при чём же тут Java?в том случае ни при чём была
это просто оракловцы так своих монстриков на линукс впервые портировали
Ок. Тогда если вдруг пример случайно появится - обращайся =) Я прям заинтригован...
П.С. Десктоптые Java приложения это вообще фейл, не понимаю зачем кто-то их вообще пишет, поэтому пишу про серверную часть.кстати, вспомнил. В соседнем /games половину народу упарывается по minecraft.
1. на них легко надевать скины и делать настраиваемый внешний видcurrent java UI (javafx) вообще перешла на css
кстати, вспомнил. В соседнем /games половину народу упарывается по minecraft.Ну так я про это и говорю - десктопные приложения на Java достаточно редки. Я под десктоп уже давно ничего не писал, но что-то мне подсказывает, что писать их на Java в настоящее время не очень удобно и, как следствие, их и мало и вспомнить сложно.
Чё?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Вот к примеру недавно добавлял поддержку AIX: там нашлась mt__trce и работает как надо. Хорошо что мне это нужно лишь в crash-хендлере, а что если хочется как в Java только стек текущего потока, и без всяких сигналов, а просто в нужном месте кода?
В общем если нужна портируемость чуть шире чем Linux+Windows, то уже придётся знатно потрахаться.
на оракловом technet нашёл про эту проблему, там было написано "всё ок, в итоге же всё перезапускается, забейте, это наш продукт так работает"Совесть не позволяет пройти мимо не защитив поруганную честь оракла! Почему технет, а не металинк? Ты бы еще на linux.org.ru спросил у анонимных экспертов.
Не верю что официальный представитель оракла мог так ответить.
ну выходит так, что если есть ошибка, то надо её как-то обработатьвозьмем банальный пример: соединение сдохло, эта ситуация была обработана, и соединение было создано заново.
и тогда получается более качественный продукт
Ошибку о том, что соединение сдохло - надо в лог писать или не надо?
> эта ситуация была обработана, и соединение было создано заново.
> Ошибку о том, что соединение сдохло - надо в лог писать или не надо?
Обязательно! И обязательно с распечаткой стека!
---
...Я работаю антинаучным аферистом...
если такие ошибки не писать, то потом тяжело собирать статистику - на каких запросах и по какой причине происходит падение соединения.
проблема, когда среди них намешаны WARN и ERROR со стектрейсами, но это не отображается видимым образом на работе программы - тогда никто не обращает внимания на предупреждения, и реальные проблемы начинаются ВНЕЗАПНО
это сообщение уровня INFO и стектрейс тут не нуженпри этом же было запорото выполнение каких-то команд, а значит это как минимум warn, а не info.
при этом же было запорото выполнение каких-то команд, а значит это как минимум warn, а не infoесли warning по случаю того, что наверное, запороты какие-то команды - то это не обработка, а тупая заглушка, про что и пишу
обработкой в данном случае будет - выяснить, что за команда, и откатить либо повторно её выдать
warning или error - только в том случае, если при этом возможна потеря данных, и нужно вмешательство человека, чтоб разрулить эту ситуацию, тогда соответственно нужно написать не "обрыв соединения", а "не выполнена такая-то команда"
а тупая заглушка, про что и пишукод с попытками в любом случае будет выглядеть как-то так:
обработкой в данном случае будет - выяснить, что за команда, и откатить либо повторно её выдать
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;
}
}
}
логирование, конечно, можно убрать, но тогда потеряется инфа о том, что команды иногда не проходят и причины этого явления
WARN со стектрейсом независимо от того, сумела ли в итоге программа восстановиться после ошибки с помощью штатной логики, либо же нужно вмешательство человека
и видно влияние языка - есть даже сахар специально для написания говнозаглушек (throw без аргументов)
это у тебя говнозаглушка как разтак имея даже конкретную информацию, логика кода все равно лучше не будет.
просто такая заглушка будет не одна на всю программу, а их будет сотни с незначительными вариациями.И да - логгирования в них не будет, потому что разработчика будет ломать с этим разбираться, когда он будет вставлять код конкретной заглушки в 97-ой раз.
код с попытками в любом случае будет выглядеть как-то так:Забавно. Я практически такой же код писал недавно. Тоже забыл break поставить после Execute
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
оказалось что везде тотальный аякс, html шаблоны уехали в браузер, так что веб-фреймворк вообще уже не нужензаметь, я написал "Razor", а не "веб-фреймворк". То, что ты понял что java-стайл веб-фрайворки не нужны это хорошо, именно это понимание и является главной заслугой ASP.NET MVC, т.е. в .net мире стало не стыдно говорить о том, что
Возвращаясь к моей фразе про Razor и твоей про html шаблоны в браузере. Razor это и есть всего лишь шаблонизатор . Причем в java аналога нет. А клиентские шаблонизаторы имеют свои преимущества за счет доступности на клиенте, но для ентерпрайза статическая типизация играет существенную роль, поскольку позволяет сохранять бизнес правила в виде кода, который поддается машинному анализу. Кстати, Razor доступен и для клиентского кода ref. Но мы этим не пользовались, на наших проектах не принципиальны приемущества клиентского шаблонизатора. Короче, TypeScript-у есть куда развиваться .
Каков мост, таков и тролль.
Оставить комментарий
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 даже в банках, и тогда ораклистам вообще конец.