вторник, 6 ноября 2012 г.

О перспективах Java. Часть 1

Получили очень интересный вопрос в комментариях, сразу его и процитирую:

Avicorn: Новичковый вопрос: на сколько сейчас востребованы программисты на java, в том числе - начинающие?
С учетом последних фортелей Oracle (смена лицензии и закрытие 100500 открытых еще Sun'ом проектов, исключение java-машины из linux-дистрибутивов и т.п.) и активного развития .net и php (если речь идет о вебе) будущее платформы видится туманным.
 Не буду голословным, поэтому начну с фактов. И сразу оговорюсь, буду говорить только про Киев, так как ситуацией в других городах не владею. Факты - это количество вакансий и количество соискателей. Вернее их отношение. Так вот, фактически последние пять лет у меня не было ни единого раза, чтобы были заполнены все вакансии - людей постоянно не хватает. Как заметили мне в комментариях - заполненность вакансий - 0.3 человека на место. Зарплаты в долларах у программистов на Java за последние пять лет же выросли от 1000 долларов до 2500 долларов для middle developer со стажем с года до 6 лет. Если кому хочется посмотреть текущую ситуацию с зарплатами, то среднюю температуру по больнице можно оценить вот здесь: на dou.ua . Обращаю внимание, что данные эти по настоящему "средние", то есть существенно искажены в сторону уменьшения, тем, что в рейтинг попадают и сотрудники гос предприятий и разработчики компаний, работающих на отечественный (читай бСССР) рынок. Почему у них зарплаты существенно меньше - чуть позже. Вывод - перспективы прекрасные.



А сейчас чуть-чуть теории. Чтобы мои выкладки не казались просто высосанными из пальца.

В мире существует великое множество языков программирования. Однако, коммерчески востребованными (я имею в виду, предложений о работе больше одного в любом городе) является весьма небольшой список. Соответственно и программисты разделяются на соответственные группы. Языки же делятся по сферам применения и об этом я как раз сейчас постараюсь рассказать.

Первую ступень (легче всего научиться, соответственно и кандидатур больше) занимают работы, связанные непосредственно с вебом - программисты на PHP, JavaScript и частично Flex (у программистов на флекс очень большой разброс видов работы - поэтому и зарплаты и позиционирование разное).  Собственно говоря и зарплаты ниже существенно. Другой разговор, что и в этом сегменте сейчас недобор сотрудников, поэтому совсем смешных зарплат, как было всего пару лет назад, теперь там и не бывает. Почему я сказал "первая ступень"? потому что работают такие приложения, как правило, на виртуальных серверах и разрабатываются они в большинстве своем для небольших фирм, то бишь - малый и самое начало среднего бизнеса.

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

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

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

Поэтому далее я буду говорить только о энтерпрайз-решениях.

Теперь немного об отличиях в платформах .Net и Java.

На рынке устоялось такое положение, что сейчас мелкий бизнес делает себе В ОСНОВНОМ решения на PHP, средний и частично крупный (те, что помоложе) - на .Net, а крупный (практически весь) - на Java. На самом-то деле и для мелкой фирмочки можно сделать решение лна джаве,а  можно энтерпрайз сваять на ПХП, но это все-таки редкости.

Тут все очень просто - крупный бизнес - это большая фирма (спасибо, Кэп), а в большой фирме за всю инфраструктуру отвечает большой штат администраторов. И как вы думаете, какую ОС поставят на все свои сервера администраторы, если их не заставлять? Нет, вы правда считаете, что это будет что-то на платформе Windows? А вот хрен. Это будет либо Linux, либо что-нибудь  из семейства  Unix (что имеет обобщенное наименование unix-like). То есть платформу, на которой все писать, выбрали уже до нас - и это кросплатформенная Java. Да-да, есть проект Mono (куда же без него?), но если вы предложите серьезному IT-директору компании уровня э... транснациональной корпорации установить боевые сервера на эмуляторе, то вряд ли вы будете у него работать. Бывают, конечно и исключения, когда вся инфраструктура фирмы ИЗНАЧАЛЬНО была на Windows, но такое, как правило, свойственно скорее средним фирмам, чем крупным.

А теперь все-таки о самих отличиях платформ:

.Net:

  • модная и активно развивающаяся
  • ниже порог вхождения
  • набор фреймворков в основном только от одного производителя (угадайте, от какого?). Это с  одной стороны делает более легким вхождение в чужой код, а с другой стороны не позволяет выбирать инструменты под конкретный проект
  • работает только на одной платформе. С одной стороны хорошо для разработчика - нет проблем с переобучением, а другой стороны - ну вы поняли
  • проблемы с обратной совместимостью по версиям .Net framework. Это свойство я считаю единственным безусловно плохим
Java:
  • долгое время на рынке, накоплен огромный массив знаний и умений.
  • требует более существенной подготовки перед началом работы
  • огромное количество сторонних фреймворков, среди которых есть определенное количество де-факто принятых за стандарт большинством разработчиков. В общем-то, если вам нужен какой-то функционал, то с вероятностью близкой к единице его уже кто-то реализовал в своей библиотеке. С другой стороны - в этом многообразии легко потеряться
  • кроссплатформена и поддерживает обратную совместимость вплоть до совсем древних версий. То есть, если код написан правильно и откомпилирован в MS DOS еще в 1997 году, то вы в 2012 его легко запустите на своем линуксе.
  • Ну и вы, наверное, догадались - зарплата у java разработчиков несколько выше, чем у .net разработчиков
А вот про перспективы -в  следующей статье, в этой как-то не уместилось :) До новых встреч в эфире

P.S. А для тех, кто хочет еще инфомрации - вот аналитика от DOU : рейтинг языков программирования

10 комментариев:

  1. MS помогли Java тем что протупили. Протупили серверную платформу и интернет и мобильные устройства. Java де факто сильна там где слаба Windows.

    .Net последнее время своим подъемом обязан дешевой Windows. Windows Web Server и программе бесплатных лицензий для стартапов. MS опомнились. Реально, когда серверная платформа основанная на Win стала не очень дорогой многие стали выбирать C#, но время MS упустили всё равно.

    Мы например в 2008 году как раз собирались с Windows Server переходить на юниксы. И не перешли как раз из за этой новой копеечной лицензии. Прикольно, но это оказалось в итоге даже дешевле. Догадаешься почему, Сергей? :)

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

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

      > Догадаешься почему, Сергей? :)
      Ты обо мне слишком хорошо думаешь :)

      Удалить
  2. Потому, что квалифицированные админы Unix стоят очень дорого. Экономия на их зарплате окупает очень много лицензий :)

    В мобильном сегменте MS тоже опомнились : Lumia 800/900 за свою цену очень хорошая штука. А новый планшет от MS - вообще бомба из-за софта в комплекте. Посмотрим что у них выйдет.

    ОтветитьУдалить
    Ответы
    1. Гму, я бы и не догадался, у нас админы кроссплатформены практически все, так что разницы в ЗП нету. Единственное, они как приходят,в се норовят на юних-лайк перевести, так что вот такая штука.

      А нокия дейтсвительно неплоха, за одним исключением - она, афаир на 7 винде работает, что совершенно не позволительно, когда 8 уже есть и живая. Кто же покупать будет? Я сам рассматривал покупку, но купил все-таки андроидофон.

      Удалить
  3. В догонку: насчёт подавляющего большинства на Linux я спорить не готов, но сомневаюсь :) У меня подавляющее большинство серверов это Windows + несколько линухов для специальных нужд. Несмотря на то что пишем всё на Java. У знакомых с системами сравнимого размера тоже платформы на смешанных OS как правило, помимо линухов часто BSD всякие, например. У ребят с Java часто Solaris. Мы кстати его тоже собирались пробовать, потому что по слухам Java там особенно хорошо летает, но "Open" оракл прибил, а платить влом :)

    ОтветитьУдалить
    Ответы
    1. Ну, ты -то всю дорогу в одной конторе работаешь,а я раз в год меняю, причем я в аутсорсе, так что работаю постоянно с разными заказчиками. так вот, по моим наблюдениям заказчиков на винде - пока не видел за последние 10 лет. Не, вру - был один, да и то отечественный.

      Удалить
  4. Не согласен с оценкой второй ступени - разработчиков коробочных продуктов.

    Здесь все зависит от рода и масштаба продукта. Так получилось, что я занимался и занимаюсь разработкой довольно сложных систем (средства автоматизации проектирования/моделирования софта и систем для телекома, автопрома, авиа, военных т.п). Приходилось плотно сталкиваться с задачами уровня от real-time/embedded до enterprise в рамках одного и того же семейства продуктов.

    В плане адаптации к разным задачам люди из второй ступени дадут фору остальным. Умение быстро разбираться с новой областью прокачивается быстро. Правда если повезло попасть в серьезный проект.

    ОтветитьУдалить
  5. Сколько встречал серверов за последние года 3, так в основном или Debian или Ubuntu, что собственно одно и тоже. Windows серверы совсем не редкость, но если такой попадается, то как правило в какой нибудь жадной компании где не привыкли платить вообще ни за что. Да и как правило они вешают такой сервер на своего сисадмина, которому ничего не остается кроме как скачать с инета ломаную винду и юзать ее, в противном случае он останется без работы. Ну а должным образом настроить linux, да ещё и автоматизировать торговлю через такой сервер у рядового админа конечно же знаний не хватит. У таких персонажей когда спрашиваешь про Java или хотя бы PHP, так они просто молча чешут репу )
    В остальных же случаях, если серьезная компания, то о виндоуз не может быть и речи, так как все прекрасно понимают что скупой платит дважды.

    ОтветитьУдалить