Почему я советую знакомым студентам учить Java?


Недавно снова наткнулся на вопрос «почему Java а не что то другое?». Я уже отвечал на форуме, теперь достал и оформил в виде статьи с акцентом почему я советую знакомым студентом учить Java.
Я не очень опытный специалист и здесь будет много субъективного мнения, и конечно же тема очень обширная и холиварная, но я хочу собрать все свои мысли в одном месте.
Вкратце суть статьи:
Учить нужно то, за что платят (т.е во что вкладывают) деньги, а больше платят за Java. Там и инновации, и широкий спектр решений и технологий.
Java нацелена на разработку больших проектов, поэтому её любят большие корпорации.
А платят за Java больше чем например за C#, в который тоже вбухивают деньги, потому что стоимость разработки и сопровождения ниже: много бесплатных инструментов, библиотек обкатанных временем, средства разработки и она кроссплатформенная и можно использовать бесплатный Linux, обратно совместимая, предсказуемая и надёжная.

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

Начнём с анализа текущих дел

Сейчас массовый софт работает в трёх основных областях:

  • Desktop приложения (офисы, АРМы, студии, системы документоборота, антивирусы), т.е. требующие установки на компьютер.
  • Web приложения сюда мы отнесём все сайты и онлайн сервисы (wikipedia, gmail). Многих она притягивает потому что не требуется установка ПО и данные остаются доступными в сети.
  • Мобильные приложения
  • Игры, особенно мобильные и броузерные для социальных сетей.
  • Embeded — встроенные системы (драйверы, контроллеры)

Примерно прикинем популярность по трендам индексатора американских сайтов работы indeed.com:

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

Embeded я убрал из-за странного дёрганого тренда.

А теперь график по языкам:

Тут несколько нюансов:

  • Для большего драматизма я добавил любимый но мертвый Delphi.
  • Также по Си из-за однобуквенного названия график выходит неоправданно завышенным, я использовал C Developer, тренд хоть кажется адекватным.
  • Objective-c подозрительно маленький тренд, чаще пишут iOS developer.
  • JavaScript (не путать с Java!) раньше имел ограниченное применение для небольших клиентских сценариев в броузере, но сейчас стал активно использоваться для создания игр и даже для серверного программирования.

Основные области применения Java это большие web приложения, банковские desktop приложения и мобильная разработка для Android. Т.е. она сразу попадает в три популярные категории.

Ну и собственно зарплаты по данным опроса DOU.ua
75 перцентиль midle разработчиков в Киеве. Справа шкала количества анкет.

 

Причины такой позиции Java

  • Строгая, статическая типизация что значительно уменьшает число ошибок и улучшает сопровождаемость кода, особенно если ещё использовать статический анализатор. При этом в яве есть ограниченные возможности динамического программирования через магию рефлексии и аннотаций. Но тем не менее есть её диалект Groovy который динамический и почти полностью совместим с ней на уровне синтаксиса. На нём кстати есть отличный Rails подобный фреймворк.
  • Java на рынке с 1995 года, обкатана и существуют сотни решений и технологий.
  • Что немаловажно является по сути упрощённым C++ который учили все в институтах и поэтому переход на неё проходит менее болезненно.
  • Язык прост, предсказуем, и минималистичен. Новые фичи вводятся очень осторожно, иногда даже черезчур долго (например замыкания).
  • Синтаксис Java является чем то вроде linva franca поэтому авторы книг часто выбирают её для примеров кода.
  • Мощные IDE, в частности Idea вообще вершина эволюции средств разработки и стоит в разы дешевле чем Visual Studio Ultimate для C# (700$ против 13300$).
  • Даже если кто и быдлокодит, это будет относительно легко разгрести через средства рефакторинга в IDE.
  • Кроссплатформенность, работает буквально на всём: от суперкомпьютеров до смарткарт и что особенно приятно на бесплатном Linux и FreeBSD.
  • Существуют около 350 гигабайт библиотек доступных в репозитории Maven. Для всего всего всего. И они в большинстве своём открытые, да.
  • В следствии очень дешёвая разработка.
  • Очень много программистов. Java самый популярный язык. Есть официальная сертификация программистов OSCJP.
  • Открытая стандартизация JSR, спецификации Java EE.
  • Компилируется в байт код, а не требует полной интерпретации как например Ruby и Python, что ускоряет работу. А благодаря оптимизирующему JIT компилятору может приближаться по скорости к нативному коду.
  • И последняя но далеко не последняя по важности: Полная обратная совместимость по API и ABI ещё с самых первых версий. Седьмая Java это всего лишь минорная версия, т.е. 1.7. Ни один другой язык не может похвастаться такой обратной совместимостью, даже C#.

 

Вывод

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

«Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует.»

(c) Бьёрн Страуструп, автор C++

И Ява тоже далека от идеала. Кстати комментарий из этой статьи:

>> Ведь основная цель java была в облегчении жизни нам — простым разработчикам.
Это вас кто-то обманул. Главное преимущество джавы — надежность и предсказуемость. Ценой многократных, по сравнению с другими языками, усилий разработчиков.

Но это не самое важное, а главное «Вы должны писать на языке, который делает вас счастливее» (Пэт Аллан).

P.S. Наткнулся на очень толковое обсуждение где очень толковые специалисты высказали своё ведение проблемы.
Обратите внимание, я не призываю выбирать Джаву как первый язык программирования, в этом есть определённая опасность.

Ещё одна статья Какой язык программирования выбрать


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

Один комментарий

  1. Уведомление: Python или Java? Хм… а может Groovy? | Серёжа Пономарёв aka stokito
  2. Matrix

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

  3. Matrix

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

  4. Matrix

    JAVA SUCKS

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

    Скажи, что Дуб, а язык назывался так, не тупняк, открой руководство по его визуальному интерфейсу скажем, ты поймешь, что я прав. Не знаешь, значит ты не знаешь java!

    Все импортные языки сложить, свернуть в трубочку — обозначить единицей, дописать нуль — умножить на десять — будет доля 1с. Тему рынка и зарплат я бы вообще затрагивать не стал — там все мрак. А еще лучше идти в коммерцию, в среднем заработок выйдет больше, а работа интереснее. Так что тут нечего сравнивать. В коммерции ты сразу 30 будешь получать.

    Строгая, статическая типизация что значительно уменьшает число ошибок и улучшает сопровождаемость кода, особенно если ещё использовать статический анализатор. При этом в яве есть ограниченные возможности динамического программирования через магию рефлексии и аннотаций. — бред, ты вот почитай про динамическое программирование, что такое и ты поймешь что из себя представляет эта java, все там через задницу

    Но тем не менее есть её диалект Groovy который динамический и почти полностью совместим с ней на уровне синтаксиса. На нём кстати есть отличный Rails подобный фреймворк. — отстой это все, там диалектов javame
    javaee
    javase
    javafx
    java android
    ты вот про какую java говоришь, библиотек старых и новых тыщи

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

    Язык прост, предсказуем, и минималистичен. Новые фичи вводятся очень осторожно, иногда даже черезчур долго (например замыкания). — бред, очень сложные библиотеки, xml

    Синтаксис Java является чем то вроде linva franca поэтому авторы книг часто выбирают её для примеров кода. — бывает пишут фигню всякую, но я бы не стал сравнивать с другими

    Мощные IDE, в частности Idea вообще вершина эволюции средств разработки и стоит в разы дешевле чем Visual Studio Ultimate для C# (700$ против 13300$). — я видел по 26000 долларов иде и отстойные иде. Вот. Купить Microsoft Visual Studio в Санкт-Петербурге от 15860р.

    Даже если кто и быдлокодит, это будет относительно легко разгрести через средства рефакторинга в IDE. — отстой там иде
    Кроссплатформенность, работает буквально на всём: от суперкомпьютеров до смарткарт и что особенно приятно на бесплатном Linux и FreeBSD. — работает, но это никому не надо, ты у нас много линухов видел.

    Существуют около 350 гигабайт библиотек доступных в репозитории Maven. Для всего всего всего. И они в большинстве своём открытые, да.
    В следствии очень дешёвая разработка. — лучше б их вообще не было
    Очень много программистов.
    Java самый популярный язык. — бред самый популярный 1c, значит и платят там больше.
    Есть официальная сертификация программистов OSCJP. — отстойная, как всегда
    Открытая стандартизация JSR, спецификации Java EE. — лучше б она совсем закрытая была
    Компилируется в байт код, а не требует полной интерпретации как например Ruby и Python, что ускоряет работу. А благодаря оптимизирующему JIT компилятору может приближаться по скорости к нативному коду. — сомневаюсь сильно
    И последняя но далеко не последняя по важности: Полная обратная совместимость по API и ABI ещё с самых первых версий. Седьмая Java это всего лишь минорная версия, т.е. 1.7. Ни один другой язык не может похвастаться такой обратной совместимостью, даже C#. — ну да, а по-моему, там постоянно новые версии чего-то выходят.
    была помню еще javame
    javaee
    javase
    javafx
    java android
    ты вот про какую java говоришь, между ними нет совместимости, между устройствами тоже нет совместимости, понимаешь api меняется от того, что устройства разные. Там такой маразм с совместимостью, библиотеками и скоростью работы библиотек, насколько я знаю.

    В c#, который вроде как конкурируют с java тоже постоянно всякое говно вынуждены вводить типа mvc. И везде такой отстой лезет, что меня бесит в Java! Именно поэтому я и пишу эту статью.

    Самый простой язык — ассемблер тогда знаешь, по сравнению с этой java — там вот совместимость 100%, а в java старые исходники не работают, чтоб ты знал! Ну и че это круто для языка высокого уровня, что его постоянно переписывают? Че дурачки писали, там не то что API уже все 100% переписали, там сам язык переписывают постоянно!

    Ассемблер можно выучить, java — нет, 350 Гиг сорцов — я аж подавился.

  5. Matrix

    Тему рынка и зарплат. Ну лучше работать на крупном предприятии, заводе, чтоб ты знал, там зарплата будет немного ниже, что, однако, не факт, потому что есть премии, чем в отечественных коммерческих говнописалках, так вот зарплата всяких там юристов, коммерческих начальников, бухгалтеров, экономистов в разы больше, чем у программистов, а программист получает больше сисадмина на 20 процентов или такая же у младшего звена, а в коммерческих говнописалках у менеджеров по продажам то же самое, а работа лучше. Кроме того есть много работ, где очень достойно платят по сравнению с программистами. Тем же водителям, летчикам, военным, и т.д. Не говоря про соц пакеты. А Java это отстой реальный, от нее только всякая зараза идет типа mvc. Кончита Вурст эта java.

    • brzzbr

      Ты, мальчик, или очень толстый тролль, или наглухо пришибленный школьник. Но пишешь смешно — пиши ещё, посмеюсь.

  6. Уведомление: Что самое главное что нужно студенту чтобы устроиться на работу программистом? | Серёжа Пономарёв aka stokito
  7. Уведомление: Что главное чтобы устроиться на работу программистом студенту? Законченный проект! | Серёжа Пономарёв aka stokito
  8. comment

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

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

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

  9. Уведомление: Частые вопросы Java Juniors | Серёжа Пономарёв aka stokito
  10. wizart91

    В Интернете много хороших книг, но читая книги программистом не станешь. Чтобы стать программистом, нужно много программировать. JavaRush — это онлайн-курс обучения программированию на Java, на 80% состоящий из практики. Именно то, что нужно чтобы стать Java-программистом.
    http://javarush.ru/user/reference/f2095d07-1d68-4260-b58a-a3944736c628

  11. wizart91

    Как в нашем веке вообще можно учиться только по книгам? Такой подход был инновационным в 17 веке, но не в 21. В JavaRush используются новейшие методики, которые делают ваше обучение легче, интересней и продуктивнее: визуализация, сторитейлинг, мотивация, геймификация и еще два десятка технологий, о которых вы даже не слышали.Именно то, что нужно чтобы стать Java-программистом.
    http://javarush.ru/user/reference/f2095d07-1d68-4260-b58a-a3944736c628

    • stokito

      Какая-то сплошная подборка заблуждений.
      1. > В последнее время Python приобрёл большую популярность и широко используется в приложениях машинного обучения
      Питон в мамашином обучении используется в основном потому что AI использует gpu, а это низкий уровень и много нативного кода. Саму нативщину запаковуют в либы для AI, например TensorFlow но наружу интерфейс выводят через мерзкий Питон, просто потому на Плюсах никто писать не хочет (просто не умеют). У Джаву традиционно очень плохо с интеграцией с нативщиной, а вот Питон очень просто.
      И если вы присмотритесь то почти везде где Питон используется — это всегда просто как обвёртка над нативными либами.
      Для маш обучения Питон ещё хорош из-за наличия интепретатора и годной либы NumPy.
      Кстати, саму Джаву тем временем пытаются таки впихнуть на gpu (project Sumatra), но это всё равно ничем не кончиться, потому что слишком долго портировать придётся под каждую новую карту Nvidia

      Но в остальном, в принципе на Джаве таки много делают проектов по AI, просто используя нативные либы через jni, что не приветсвуется в Джаве но работает. Например OpenCV так и сделан.
      Так что, в целом, нафиг Питон с этой точки зрения

      Код на Python имеет меньший размер, чище, что даёт «преимущество» перед привычной Java
      вся эта чистота не имеет никакого смысла когда код становится хоть чуть чуть сложнее и особенно когда нужно его рефакторить и оптимизировать, особенно другому человеку который даже не хочет вникать что тут к чему. И на Джаве код отлично читаем.
      Но если конечно вам тупо лень писать типы, то есть для вас Groovy который просто диалект Джавы.
      Короче нафиг Питон и с этой точки зрения.

      Оба приложения выполнились за 2820
      конечно, потому что внутри тот же самый нативный код на плюсах.
      Но даже если бы было не так, всё равно весь перформанс уходит на IO, поскольку JIT всё скомпилит

  12. Уведомление: Что главное чтобы устроиться на работу программистом студенту? Законченный проект! | stokito on software
  13. Аноним

    смешно
    получается быстрее assembler
    а можно вашу ф… на дискете перенести?
    а то после вас по с ума сходит
    дискета 1мб
    на связке васик и асм в легкую
    а ваш «си», «паскаль» — «дельфи» — убойнвая вещь для памяти и ресурсов
    старый вопрос:
    сколько байтов надо, чтобы показать букву на черном (погашеном) экране белым(так называют) цветом в середине экрана(средства для отображенимя) и, главное, ни каких «библиотек»?
    в асме (без использования средств, но не в windows и ему подобное) порядка 500 байт
    а ваш java «сожрет» загрузки не меряно
    вы учите людей быть… слова не подберу
    простите
    вам — задача
    сладите — публично извинюсь
    имеется обьект, где надо — жизнеобеспечение (в первую очередь для животный — ну там климат, еда, воздух и тд), охрана, любые средства
    ограничение одно 48кб памяти
    а система (ну, я глупый — уже работает с 2005 года) есть
    вперед
    и не осмеивайте меня
    покажите результат
    это Россия

Оставьте комментарий