Здравствуйте, Hard_Club, Вы писали:
H_C>Собираюсь учить Java после повышения на C++ senior. Причины: C++ обошел стороной мои любимые AI и NLP.
H_C>У кого есть опыт. Проще ли будет его выучить?
H_C>Почитал — http://habrahabr.ru/post/111189/, и охренел.
шутка по теме.
С уважением Denys Valchuk
IMHO чем больше мнений тем оптимальней выбор варианта... :)
Re: Java проще C++?
От:
Аноним
Дата:
23.07.13 20:51
Оценка:
Здравствуйте, Hard_Club, Вы писали:
Создатели джавы пошли по пути переупрощений, из-за этого в языке существует некоторое количество косостей, а другие "странности" стандартны для языков с аналогичными конструкциями.
В целом, конечно, все не так легко, как бывалый сиплюсплюсник мог бы ожидать, халявы не будет, и стандарт придется помусолить, но C++ все равно гораздо страшнее.
А>Создатели джавы пошли по пути переупрощений, из-за этого в языке существует некоторое количество косостей, а другие "странности" стандартны для языков с аналогичными конструкциями.
Здравствуйте, Hard_Club, Вы писали:
H_C>У кого есть опыт. Проще ли будет его выучить?
Я переходил с C++ на Java в добровольно-принудительном порядке (сейчас вернулся назад, но переходу рад, помогло несколько переосмыслить взгляд на разработку ПО). Как это сделать быстро и безболезнено я описал тут. Выучить Java не проще, т.к. язык проще, но сопутствующих технологий ощутимо больше.
H_C>Почитал — http://habrahabr.ru/post/111189/, и охренел.
Сам понимаешь, надергать похожего про плюсы можно куда как масштабнее
Здравствуйте, kaa.python, Вы писали:
KP>На шаблоны в Java без слез смотреть нельзя.
Вы, очевидно, имеете в виде generics. Признаю — не самая элегантная фича. Но, во-первых, у авторов не было другого выбора, т.к. необходимо было сохранить совместимость с огромным объемом уже существовавшего на тот момент кода. А во-вторых, если не смотреть, а пользоваться, но весьма полезная вещь, меня, во всяком случае, на слезу не прошибает.
KP>Код обвешаный соплями try/catch, мягко говоря, не очень удобно читать.
Да любой код читать не так "удобно", как Агату Кристи. Но на Java пишутся огромные приложения, так что exceptions — весьма полезный механизм. Время от времени читаю рассуждения о том, что checked exceptions — это зло. По моему опыту это не так, причем сильно не так, т.к. избавляет от многих ошибок уже на стадии компиляции, а с современными IDE — уже на этапе печатанья.
Здравствуйте, 31415926, Вы писали:
3>Вы, очевидно, имеете в виде generics. Признаю — не самая элегантная фича. Но, во-первых, у авторов не было другого выбора, т.к. необходимо было сохранить совместимость с огромным объемом уже существовавшего на тот момент кода. А во-вторых, если не смотреть, а пользоваться, но весьма полезная вещь, меня, во всяком случае, на слезу не прошибает.
Java — вообще язык компромиссов. Если на него переходишь после C++, то он кажется чудовищно недоразвитым, особенно в области метапрограммирования. Потом, когда привыкнешь, всей его недоразвитости не замечаешь.
Здравствуйте, kaa.python, Вы писали:
KP>Java — вообще язык компромиссов. Если на него переходишь после C++, то он кажется чудовищно недоразвитым, особенно в области метапрограммирования. Потом, когда привыкнешь, всей его недоразвитости не замечаешь.
Да любой язык программирования (кроме сугубо академических) грешит компромиссами. Просто Java используется в другого типа проектах, нежели C++. Я с ужасом представляю себе проект на несколько миллионов строк, который развивался в течение десятка лет под давлением бизнеса сменяющимися командами (зачастую — с сомнительной квалификацией) и написанный при этом на языке с развитыми средствами метапрограммирования. Ровно из тех же соображений я крайне скептически отношусь к перспективам Scala, хотя сам язык мне нравится, и с удовольствием бы на нем попрограммировал, особенно после того, как автор угомонится и начнет всерьез заботиться о совместимости последовательных версий (на что, судя по всему, надежды мало).
Здравствуйте, 31415926, Вы писали:
3>Да любой язык программирования (кроме сугубо академических) грешит компромиссами. Просто Java используется в другого типа проектах, нежели C++. Я с ужасом представляю себе проект на несколько миллионов строк, который развивался в течение десятка лет под давлением бизнеса сменяющимися командами (зачастую — с сомнительной квалификацией) и написанный при этом на языке с развитыми средствами метапрограммирования.
Я, сейчас, над таким работаю, разве что команда была и есть высококвалифицированная. Ну, бывают сюрпризы, что уж тут, хотя, индокод на Java куда опаснее для психического здоровья
3> Ровно из тех же соображений я крайне скептически отношусь к перспективам Scala, хотя сам язык мне нравится, и с удовольствием бы на нем попрограммировал, особенно после того, как автор угомонится и начнет всерьез заботиться о совместимости последовательных версий (на что, судя по всему, надежды мало).
Да, я посмотрел на Scala и мне подумалось, что нагородить на ней можно еще похлеще чем на C++, хотя, язык приятный во всех отношениях, но требования к разработчикам должны быть очень высокие.
Как по мне Java это С++ из которого выкинули все лишнее и добавили кучу полезных фич — к стати фичи C++ потихоньку перенимает у Java в последнее время.
Перешел на Java с С++, теперь без слез не могу смотреть на С++
Здравствуйте, kaa.python, Вы писали:
KP>Код обвешаный соплями try/catch, мягко говоря, не очень удобно читать.
А не надо городить сопли с try catch, и все хорошо будет . При некоторым опыте, когда стараешься код держать в приемлемом состоянии, обходишься практически без соплей. А сопли максимум в пределах метода один раз. А часто используемые обработчики можно аспектами на аннотациях разрулить, весьма читабельно получается. Соответственно если уметь готовить их, то исключения практически не напрягают. По крайней мере они не хуже исключений в плюсах, питоне, шарпе.
Здравствуйте, omgOnoz, Вы писали:
O>Как по мне Java это С++ из которого выкинули все лишнее и добавили кучу полезных фич — к стати фичи C++ потихоньку перенимает у Java в последнее время.
это ты про generic'и, try-with-resources, val, и когда уж там они наконец появятсялямбды?
Здравствуйте, Hard_Club, Вы писали:
H_C>1.Если f1 и f2 оба представляют Float.NaN, тогда метод equals возвращает true, в то время как Float.NaN==Float.NaN принимает значение false.
В целом, в Java оператор == почти что бесполезен для reference-типов. Это вбивается в девелоперов на уровне подкорки: всегда пишите if("Vasya".equals(customerName)), и никак иначе.
H_C>2.Если f1 содержит +0.0f в то время как f2 содержит -0.0f, метод equal возвращает false, в то время как 0.0f==-0.0f возвращает true.
Это уже особенность реализации compile-time вычислений. С ними почти во всех языках засада — компилятор устроен не совсем так, как рантайм, и иногда делает всякие неожиданные вещи.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, elmal, Вы писали:
KP>>Код обвешаный соплями try/catch, мягко говоря, не очень удобно читать. E>А не надо городить сопли с try catch, и все хорошо будет . При некоторым опыте, когда стараешься код держать в приемлемом состоянии, обходишься практически без соплей. А сопли максимум в пределах метода один раз. А часто используемые обработчики можно аспектами на аннотациях разрулить, весьма читабельно получается. Соответственно если уметь готовить их, то исключения практически не напрягают. По крайней мере они не хуже исключений в плюсах, питоне, шарпе.
Как без лишних try/catch открыть файл и записать в него что-нибудь?
Здравствуйте, alzt, Вы писали:
A>Как без лишних try/catch открыть файл и записать в него что-нибудь?
MyFileUtils.saveToFile(file, "Hello, file").
Которое кидает нужное тебе исключение, которое ты обрабатываешь на самом высоком уровне. А то и вообще рантаймовое.
Или еще вариант, в случае проблем эта утилита кидает эвент, а листерен соотвествующего эвента делает то, что нужно, запишет в лог, отобразит уведомление для юзера, поставит операцию записи в очередь, которая попробует повторить операцию.
Короче вариантов до черта, и зависит это от того, что конкретно надо делать в случае ошибки.
Здравствуйте, Sinclair, Вы писали:
S>Это уже особенность реализации compile-time вычислений. С ними почти во всех языках засада — компилятор устроен не совсем так, как рантайм, и иногда делает всякие неожиданные вещи.
Тем более, что с плавающей запятой никто вменяемый, представляющий как это работает внутри хотя бы отдаленно, никогда никаких == и equals не использует — всегда сравнение разности с дельтой.