LINUX.ORG.RU
ФорумTalks

Кто как оценивает перспективы Java?

 , , ,


1

3

Надоел мне Си, копание в бинарниках, hex, ASM, отладчик и поиск причин переполнения стека до невозможности. Платят хорошо, но это уже скучно: я даже не столько пишу, сколько отлаживаю низкоуровневое барахло и копаюсь в бинарниках.

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

//Linux тут при том, что я его юзаю, на Java можно писать под ним же. Да и вообще, форум-то IT'шный...



Последнее исправление: ymn (всего исправлений: 1)

Ответ на: комментарий от abcarado

Тем, что на Java можно просто почти забить на память, стек, непредвиденное поведение

o_O

У тебя какие-то очень странные представления о Java :D На утечки памяти в глобальных объектах, «странное поведение» при сравнении комплексных переменных и т.п. Java-программист наступает почти сразу после знакомства с языком. Потом просто учится всё это учитывать, но это не значит, что проблемы нет :D

Конечно, на Java «странностей» меньше, чем на Си или PHP, но они есть и сталкиваешься с ними часто.

KRoN73 ★★★★★
()
Ответ на: комментарий от f1xmAn

Просто странно видеть, как кто-то из опытного девелопера добровольно переходит на неизвестный стек технологий, в джуниоры.

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

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

KRoN73 ★★★★★
()
Ответ на: комментарий от uuwaan

Я на Java серьезно никогда не писал, но вопросом интересовался. И у меня сложилось впечатление, что морочиться придется точно так же.

У меня многолетняя практика и на Си, и на Java. Да, на Java заморочек дофига (со многими я даже не разбирался, имея практику программирования в 20 лет на десятки языков, новые языки начинаешь осваивать не методично по учебнику, а сразу начав на нём программировать, что не позволяет избежать танцев на граблях поначалу, а ряд банальных и известных всем вещей можешь неожиданно узнавать уже имея годы программирования на языке), но всё равно, эффективность решения задач подскакивает очень сильно. Сам спектр задач сужается (хотя при переходе с Си на Java не очень сильно, как, например, при переходе с Java на PHP), но задачи решаются несравнимо быстрее. Ты, конечно, можешь выкатить неоптимальный говнокод, но ты сделаешь это в 10 раз быстрее и с в 10 раз меньшим числом скрытых ошибок. А потом уже, когда будет время и если возникнет надобность, можно позаниматься и плотной оптимизацией.

Правда, отмечу, что всё сказанное касается именно Си и Си++ стандартов 90-х гг. Сейчас Си++ и его библиотеки продвинулись вперёд очень сильно и отрыв от Java уже не такой сильный. Хотя остаётся.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

f1xmAn ★★★★★
()
Ответ на: комментарий от f1xmAn

Разумеется, но не начинать же из-за каждого языка карьеру заново.

Зачем заново? Если ты программист, а не кодер, у тебя должно быть много свободного времени. Часть его можно (и нужно) тратить на самообразование :)

а разбираться с ними уже по мере решения соответствующих задач

Да, с поправкой s/разбираться/осваивать/. Разобраться надо заранее, чтобы понять, что вообще из себя представляет язык и как на нём решаются разные типы задач. Кстати, это одна из причин, по которой я регулярно гоняю тесты, типа Бенчмарк объектный Фибоначчи. Часть 3-я. :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Зачем заново? Если ты программист, а не кодер, у тебя должно быть много свободного времени. Часть его можно (и нужно) тратить на самообразование :)

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

Просто странно видеть, как кто-то из опытного девелопера добровольно переходит на неизвестный стек технологий, в джуниоры.

что и вызвало мое недоумение.

f1xmAn ★★★★★
()

Надоел мне Си, копание в бинарниках, hex, ASM, отладчик и поиск причин переполнения стека до невозможности.

В Java копаться может и приходится, но не так глубоко... отлаживать намного проще. Думаю, то, что нужно для ТС.

BattleCoder ★★★★★
()
Ответ на: комментарий от xnick

Чем сишарп хуже явы?

1. C# язык более развитый, соответственно нужно дольше учить, что бывает проблематично для целевой аудитории

2. Переносимость у Java лучше. Достаточно много среднестатистичиских Java программистов все равно умудряются писать непереносимы программы. Хотя конечно, если писать нормальный код на C# то проблем с переносимостью тоже не должно быть.

3. Больше библиотек. Хотя в проекте котoрому больше пары лет и над которым поработало несколько ахитектов это становится недостатком, так как в проекте появлыется несколько библиотек с пересекающейся функциональностью и конфликтами.

4. моно при тупом переносе Java программы медленне. При разумном быстрее, но думать - это не расспространнённый метод и более того тот-же KRoN73 как-то отказался принять результаты оптимизорованной программы на C# хотя Java оптимизоровали по самое немогу.

5. Религиозный фанатизм ненависти к C# как разработанному MS и пиетет по отношению к Java от Oracle которая в отношении Open Source и конкурентам ведет себя гораздо хуже MS, но фанатиков это не останавливает.

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 4)
Ответ на: комментарий от grim

А чем различаются задачи и ниши этих ЯП?

Java — это в первую очередь сетевые сервисы.

C# — основной сегодня инструмент для создания Windows-приложений.

Концептуально и языки, и виртуальная машина схожи, но изначально разная направленность увела их в разные ниши.

KRoN73 ★★★★★
()
Ответ на: комментарий от grim

и более того то-же KRoN73 как-то отказался принять результаты оптимизорованной программы на C#

Где это было? o_O

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Java — это в первую очередь сетевые сервисы.
C# — основной сегодня инструмент для создания Windows-приложений.

А что windows приложения не могут быть сетевыми сервисами?

IMHO вы не совсем в теме.

Концептуально и языки, и виртуальная машина схожи, но изначально разная направленность увела их в разные ниши.

Вы намекаете на то, что Java создавалсь как язык бля встроенных приложений для микроконтроллеров а C# как Энтерпрайзная замена Java?

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)
Ответ на: комментарий от KRoN73

Я на Balancer-что_то_там выложил оптимизированный тест на C#, но вы его отказались включать в таблицу.

grim ★★☆☆
()
Ответ на: комментарий от grim

Я на Balancer-что_то_там выложил оптимизированный тест на C#

Ага, нашёл. Однако, я там давал исчерпывающий ответ — http://www.balancer.ru/g/p2307246 и http://www.balancer.ru/g/p2308771

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

KRoN73 ★★★★★
()

А вот и главные действующие лица подтянулись )

vertexua ★★★★★
()
Ответ на: комментарий от KRoN73

Однако, я там давал исчерпывающий ответ

Это только вам он кажется исчерпывающим или даже разумным.

измерить скорость работы с честными объектами.

Java в вашем варианте не работает с честными объектами.

grim ★★☆☆
()
Ответ на: комментарий от grim

А что windows приложения не могут быть сетевыми сервисами?

И на Java делают GUI-приложения, даже популярные. Это не отменяет факта сильного разделения ниш этих языков и виртуальных сред.

IMHO вы не совсем в теме.

Может быть. Тогда просветите. IIS или Eclipse не предлагать, они нифига не меняют общую картину :)

Вы намекаете на то, что Java создавалсь как язык бля встроенных приложений для микроконтроллеров а C# как Энтерпрайзная замена Java?

Оба этих языка создавались в качестве универсальных. Java — как просто ЯВУ нового поколения, C# — после того, как MS окончательно разосралась на тему MSJVM с Sun'ом и ей понадобилось что-то подобное, но уже целиком своё.

KRoN73 ★★★★★
()
Ответ на: комментарий от grim

Java в вашем варианте не работает с честными объектами.

Мне не важно, что под капотом, хоть телепатический модуль. Мне важно, как я работаю с кодом с точки зрения программиста. И мне интересно, как разные языки/среды справляются с типичными моими задачами. Объекты, и интенсивное создание и вызовы методов. Объекты полноценные, поскольку я активно использую наследование. Так родился тест.

Ваш вариант не годится под мои задачи, так как не способен реализовать наследование.

Да, этот тест предельно упрощён и там наследование не используется. Но оно подразумевается самой задачей.

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

KRoN73 ★★★★★
()

я даже не столько пишу, сколько отлаживаю низкоуровневое барахло и копаюсь в бинарниках

По поводу других языков - для тебя очень плохие новости. Только убери слово «низкоуровневое».

ak380618
()
Ответ на: комментарий от Legioner

Юзеру на утечки памяти плевать, он их не видит.

Зато он отлично видит баннер «Сайт недоступен хрен знает по какой причине.»

ak380618
()
Ответ на: комментарий от abcarado

Работа - хобби, не больше. Даже пусть так, можно же вернуться :)

Респект за такой подход. :)

ak380618
()
Ответ на: комментарий от uuwaan

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

Вот и настал момент: Lisp стал всего лишь предбанником к Haskell.

:D

ak380618
()
Ответ на: комментарий от KRoN73

И на Java делают GUI-приложения, даже популярные.

Не нужно пожалуйста сказок рассказывать.
Десктопными Java приложениями пользуются только тем кому девться некуда. Вроде Java разработчиков. Exlipse и Oracle developer или saprx EA конечно-же популярные приложения, но только изза того что деваться некуда.

Это не отменяет факта сильного разделения ниш этих языков и виртуальных сред.

Вы хотите сказать, что на C# не пишут сетвые сервисы?
Я уже приводил какому-то местному фанатику сайты крупнейших в мире банков сделанные на aspx

Вас это переубедит? Могу поискать.

Может быть. Тогда просветите.

На .Net/mono пишут не меньше сетевых сервисов.

Оба этих языка создавались в качестве универсальных

Нет.
Java создавалсь как интерпретируемы ЯП для микроконтроллеров. Последствия чего чуствутся даже сейчас.

grim ★★☆☆
()
Ответ на: комментарий от KRoN73

Мне не важно, что под капотом, хоть телепатический модуль.

я это понял и поэтому не стал спорить, так как бесполезно.

grim ★★☆☆
()
Ответ на: комментарий от grim

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

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

ak380618
()
Ответ на: комментарий от yyk

Как в пределах jvm описать поле/параметр как лямбда с определёнными типами (или дженерик) кроме как классом (интерфейсом)? Что называется, не поверю, пока не увижу.

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

А в текущей версии - согласен, только имитация через анонимные классы.

ak380618
()
Ответ на: комментарий от KRoN73

Java была мэйнстримом задолго до Андроида и выход последнего на рынок на её позиции не повлиял: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

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

ak380618
()
Ответ на: комментарий от KRoN73

Понятие «сервак» очень расплывчато. Но мелокразмерном Web'е Java распространена мало. На толстых корпоративных решениях — почти эксклюзивна.

Очень точно сказано. Плюсую.

ak380618
()
Ответ на: комментарий от grim

Вы хотите сказать, что на C# не пишут сетвые сервисы?

Пишут.

На .Net/mono пишут не меньше сетевых сервисов.

Гораздо меньше. Сравните популярность C# и Java. Найдите массовое применение Java за пределами сетевых сервисов.

Java создавалсь как интерпретируемы ЯП для микроконтроллеров.

Угу. А Андроид задумывался как ОС для цифровых фотоаппаратов. Только первоначальная задумка и цель, в которую выливается разработка часто отличаются очень сильно.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Объекты, и интенсивное создание и вызовы методов. Объекты полноценные, поскольку я активно использую наследование. Так родился тест.

Тогда что в той теме делают плюсовые тесты с аллокацией на стеке? И чем принципиально отличается вариант на C# с такой же аллокацией на стеке?

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

Сделать интерфейс с одной функцией value(), класс с реализацией, и фабрику по созданию объектов, чтобы напрямую нельзя было создавать объекты.

kamre ★★★
()
Ответ на: комментарий от kamre

Тогда что в той теме делают плюсовые тесты с аллокацией на стеке?

А что не нравится? Объекты полноценные, выделяются, убиваются. То, что их передать куда-то по ссылке нельзя — это уже другой вопрос.

Сделать интерфейс с одной функцией value(), класс с реализацией, и фабрику по созданию объектов, чтобы напрямую нельзя было создавать объекты.

Да, тоже вариант.

Ещё интересно (но это уже для другого теста) пощупать многопоточность в тех языках, где она есть. Типа, каждый из двух Fib() получать в отдельном потоке :)

Но это всё пока сильно на будущее отложено. Сейчас другими вещами загрузился…

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Вы опять ошиблись.
Я реально рад, что помог.

grim ★★☆☆
()
Ответ на: комментарий от KRoN73

То, что их передать куда-то по ссылке нельзя

Это почему нельзя?
В с++ совершенно без проблем можно получить адрес локальной переменной.

grim ★★☆☆
()
Ответ на: комментарий от KRoN73

Вот это поворот. В любом случае Java никуда не денется в ближайшие лет 10 точно. А ты как думаешь?

amazpyel ★★★
()
Ответ на: комментарий от ak380618

Я, возможно, плохо знаком с предметом, но литература по другим ФЯП мне показалось какой-то хардкорной: чуваки с первых страниц выносят читателю мозг всеми возможными баззвордами и откровенно наслаждаются процессом. Безусловно, многие люди осиливают такое, однако куда приятнее погружаться в область постепенно, начиная с «детских» вещей: что такое функция, рекурсия, чистота, сторонние эффекты.

uuwaan ★★
()

буду краток
перспективы радужные

kto_tama ★★★★★
()
Ответ на: комментарий от andreyu

Android NDK доступен с версии 2.2, а на уже 2.3 даже обвязки в виде явы не нужно.

А теперь и ява компилируется сразу AOT в Android Run Time, и далвик стал ненужен http://www.androidpolice.com/2013/11/06/meet-art-part-1-the-new-super-fast-an...

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

А теперь и ява компилируется сразу AOT

Да, но только в андроид 4.4, который доступен даже не для всех гуглодевайсов. Как минимум (если верить заявлению гугеля) galaxy nexus и nexus 7 (2012).

andreyu ★★★★★
()
Ответ на: комментарий от grim

В с++ совершенно без проблем можно получить адрес локальной переменной.

Можно. Только сразу по выходу из локальной области видимости этот адрес станет указывать на мусор.

KRoN73 ★★★★★
()
Ответ на: комментарий от Legioner

Это гетерогенные системы, php не покрывает все надобности. В ВК же и говорят, что основное ядро у них на плюсах.

NiceForce
()
Ответ на: комментарий от andreyu

ну так бета-тест же. 2 года они пилили альфу, теперь выложили бету для паблик тестирования. не сразу же Москву строить

Karapuz ★★★★★
()
Ответ на: комментарий от Karapuz

ну так бета-тест же. 2 года они пилили альфу, теперь выложили бету для паблик тестирования. не сразу же Москву строить

Это понятно, но ndk от этого не пострадает. Поскольку писать кроссплатформенное приложение проще.

andreyu ★★★★★
()
Ответ на: комментарий от uuwaan

а вот тут юзай StringBuilder вместо объединения строк

Это никак не зависит от языка/платформы/вм/что_угодно, StringBuilder вместо объединения строк нужно юзать всегда и везде.

fmap
()

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

Новичкам, приходящих к Java, лучше нацеливаться на изучение и работу с JDK 8, в котором будут революционные изменения по сравнению с предыдущими версиями платформы Java.

iZEN ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.