Какой язык программирования выбрать Итак, попробую ответить на этот животрепещущий вопрос. И начну ответ с уточнения, что вопрос поставлен некорректно. Вопрос должен скорее стоять в выборе направления программирования, специальности. Выбор языка в пределах специализации — уже штука вторичная, и между языками одной специализации существенно проще переключиться, чем между разными специализациями. Как вы уже понимаете, больше нет профессии «программист». Есть целая вязанка профессий, и представители одной будут с большой натяжкой считать коллегами представителей другой профессии. Например — фронтэндер и embedded разработчик. На сегодняшний момент я могу выделить такие программистские специальности: — Enterprise; — Embedded разработка; — Web-разработка; — Mobile разработка; — Front-End; — Game Dev. Можно выделить еще несколько условно-программистских специальностей — automation QA, DevOps, администрирование и т.д. Но я на них останавливаться подробнее не стану, хотя все эти специальности интересны и позволяют заработать себе на хлеб с маслом. На что в первую очередь должен обращать внимание человек, выбирающий свою специальность? На востребованность на рынке (количество вакансий и зарплату), на перспективы развития (не придется ли скоро переучиваться, поскольку специальность станет не актуальной) и на порог вхождения (сколько придется потратить сил на изучение и насколько легко устроиться новичку на первую работу). Именно исходя из этих трех параметров я и буду разбирать все направления. Сразу хочу предупредить — естественно, точной информацией по всем этим вопросам не владеет никто. И я в том числе. Ориентировался я исходя из опросов ДОУ и своего личного наблюдения. Некоторые аспекты пришлось додумывать, но там я отдельно об этом скажу. Итак, поехали. И начнем мы по порядку. Enterprise разработка Сначала о том, что это такое. Речь идет о разработке программ (вернее, интегрированных систем управления предприятием) для крупных и гигантских компаний (по-английски, Enterprise). То есть все эти программы объединяют несколько общих черт: — Чудовищная сложность предметной области. Достаточно сказать, что даже теоретически одному человеку невозможно понять, как всё работает даже в одном Enterprise предприятии. Для понимания необходимо иметь целый штат людей, которые понимают все (каждый — свой кусочек); — Огромные объемы данных. Терабайтные базы, гигабайтные файлы передаваемых данных — это все про Enterprise. Сейчас уже считается, что никакого отдельного направления BigData нет. Все эти подходы применимы к большинству Enterprise разработок; — Большое количество legacy (т.е. устаревших, но все еще находящихся в использовании) систем, с которыми, тем не менее, надо интегрироваться и, самое страшное, — поддерживать, то есть — исправлять и расширять; — Огромное количество внешних интеграций с другими системами. В среднем каждый Enterprise проект интегрируется минимум с 3-5 другими системами; — Высокие требования к отказоустойчивости и сохранению транзакций. Что и не удивительно — такая транзакция вполне может нести данные о многомиллионной сделке; — Высокая стоимость внесения любых изменений — так как каждое изменение вполне может влиять не только на саму систему (то есть ее надо полномасштабно тестировать), но и на все смежные системы (то есть и их тоже надо тестировать). — Крайне консервативное отношение к используемым системам и фреймворкам. В enterprise вы практически не встретите софта, разработанного позднее, чем 5 лет назад. На сегодняшний момент существует ровно две платформы для Enterprise — .Net и J2EE (Enterprise Java). В общем-то, обе платформы чувствуют себя достаточно неплохо, но вследствие того, что большие корпорации предпочитают использовать у себя сервера на Unix-like (правда, вы удивились?), а на них работает (по настоящему работает, то есть работает давно и успешно) только J2EE. Соответственно, в данный момент можно говорить, что Enterprise = Java. Для .Net остаются достаточно небольшой сегмент компаний, которые завязаны на обращение с продуктами Microsoft. Ну и на сегодняшний момент заметно некоторое спадание интереса к этой платформе. Итак, что можно сказать про специальность .Net разработчика: — Одни из самых высоких на рынке зарплат. Выше только у Java; — Более низкий, чем у Java, порог вхождения, особенно, если человек что-то уже писал в продуктах Microsoft; — Практически полное отсутствие альтернатив в выборе средств разработки. И все они (внезапно) от Microsoft. Шучу, конечно, но тенденция видна — если в Java у вас всегда вязанка доступных фреймворков, то в .Net у вас практически всегда один путь. Это очень облегчает разработку, хоть и лишает гибкости; — Перспективы — непонятные. Я был уверен несколько лет назад, что .Net будет жить долго и счастливо. Сейчас такой уверенности поубавилось. Ну и про Java Enterprise разработку: — Самые высокие на рынке зарплаты; — Самый высокий на рынке порог входа; — Самые сложные задачи, самый большой спектр саб-специализаций; — Самая большая на рынке востребованность. Ну что сказать, Java Enterprise — это спецназовец, который смело кидается в сливной колодец, пробирается через канализацию в самое логово врага. Кстати, глядя на код, который остался от поколений безвестных вьетнамских программистов, аллегория кажется не такой уж и притянутой за уши. С другой стороны, Java Enterprise — это не всегда про разработку вообще. Очень часто ваша задача будет состоять в настройке вашего приложения на мощном распределенном серверном кластере. Ну и много других задач, которые сложно даже назвать, не устраивая часовую лекцию про то, что это такое. Ну и самое главное — Java Enterprise разработчик учится перемалывать информацию в таких диких количествах, что в случае потребности любой другой язык выучивается за время аналогичное времени осваивания новой библиотеки. Так как с нашей точки зрения — любой другой язык примерно ей и соответствует по сложности. Embedded разработка Сейчас в любом устройстве, которые нас окружают, микросхем больше, чем во многих компьютерах. Телевизоры, холодильники, автомобили, телефоны, станки, промышленное оборудование... Да что угодно, хоть электронная сигарета. Все это работает с использованием электроники, которую кто-то должен запрограммировать. И кто-то должен эту программу написать. Вот именно этим и занимаются эмбедед-разработчики. Основным используем языком там, насколько я знаю, является С++, но и асемблер, и даже языки более высокого уровня, вроде Java, там используются. Естественно это не совсем та Java, что в Enterpise. Все эти языки для данной специальности связывает именно сфера применения — специфичное железо, весьма специфичные задачи и близость к самому низкому уровню — проводам, электричеству, радиоволнам. Языки С++ и асемблер и так не самые простые, а то, что помимо них надо знать еще и конкретное железо, как вы понимаете, не делает задачу проще. Так что порог входа достаточно высокий. С другой стороны — работа интересная и с большим количеством вызовов. Если вам нравится программировать ардуинки, делать своих роботов-квадрокоптеров, программировать сигнализацию и писать свои собственные прошивки на андроид — вам там понравится. Отдельным бонусом идет то, как выглядит рабочее место embeded девелопера. Если у остальных программистов это обычный компьютер и один-два монитора, то у embeded разработчика — настоящий шик. Куча какого-то непонятного полуразобранного железа, связанного друг с другом навесным монтажом, все это соединено с таким же полуразобранным компьютером, откуда-то торчит несколько мониторов, на некоторых из которых синусоиды, странные изображения и диаграммы. В общем — настоящий кибер-панк. Но это все шутки. По делу тут достаточно сказать только факты — порог вхождения высокий, зарплаты хорошие, перспективы — отличные. Не думаю, что эта сфера хоть когда-нибудь начнет сужаться. Процессоры скоро будут уже в одежду вставлять! Так что если вам нравятся железяки, С++ и провода — то эта профессия для вас. Web разработка Сейчас 21-й век, и даже самой маленькой фирмочке стыдно не иметь своего сайтика. Пусть даже визитки. И потребность в этих сайтиках появилась не год назад. Поэтому на рынке полно предложений на любой вкус и кошелек. Причем, предложения стартуют с каких-то уж совсем смешных сумм, типа «за 500 грн мы вам нарисуем прекрасный сайт силами одного студента-второгодника». Ну и хватает фирм, предлагающих уже вполне вменяемые решения за разумные деньги. Долгое время на этом рынке все было полностью оккупировано PHP, за исключением достаточно специфичных сайтов. С точки зрения разработчика, в этой области все весьма просто — порог входа очень низкий (ниже, пожалуй, даже найти ничего не удастся), достаточно широкий рынок, на котором легко начинать (как я уже говорил) и есть куда расти. Хотя, справедливости ради, надо сказать, что за счет легкости входа на рынок зарплаты в этом секторе оставались и самыми низкими в индустрии. С другой стороны, на нишу веб-разработки так же влияют новые тенденции сайтостроения. Сейчас очень многие простые сайты делаются вообще из одной единственной статической странички — так называемого лендинга. И разрабатывать на таком сайте откровенно нечего — сверстали, подвязали соц. сети — вуаля. Работа тут найдется разве что фронт-эндеру. Резюмирую. Я бы не стал выбирать эту сферу сейчас в качестве своей основной. Ситуация несколько неустойчива — надо бы подождать годик и посмотреть, куда все вывезет. Mobile (Android&iOS) development Несмотря на то, что разработка под Android и под iOS ведутся на разных языках, все равно я объединил их в один пункт — сходство этих специализаций между собой гораздо больше, чем с любыми другими. Например — разработка под Android на Java гораздо ближе к разработке на iOS, чем к Enterprise разработке на той же (на самом деле нет) Java. Итак, что мы имеем на этом сегменте? Относительно низкий порог вхождения — наваять небольшое приложение под Android/iOS в состоянии и студент у себя дома. Ничего запредельно сложного там нет, и получить опыт вполне реально. Отсутствие специалистов с 15-20 лет стажа в этой области (по понятным причинам). Огромный запрос на рынке (не иметь своего мобильного приложения уже просто стыдно практически любой фирме). И соответственно — дефицит квалифицированных кадров, и — следовательно — неуклонно растущие зарплаты. Ну что я скажу. Если бы я сейчас начинал свой путь в профессию, я бы посмотрел только на этот сегмент и на фронт-энд. Склонности к дизайну у меня нет от слова совсем, так что выбор очевиден — занимался бы именно мобильной разработкой. Front-End разработка Когда-то давным-давно, в далекой-далекой... то есть, я имел в виду, несколько лет назад такой профессии вообще не существовало. Сайты делались обычными веб-мастерами (как они себя называли), веб-дизайнерами (ну, эти всегда выживут) и верстальщиками (как мы их называли). Но постепенно JavaScript становился все навороченнее, AJAX поднял голову — и все, вуаля. На клиенте стало крутиться достаточно много кода. А потом пошло вообще страшное — синтетические языки, которые компилировались в JavaScript, навороченные фреймворки и много-много всякого другого. Итого, что мы имеем сейчас. Одна из самых динамически развивающихся специальностей. Каждый день что-то новенькое. Очень быстро растущие запросы рынка на специалистов, а специалистов с 15 годами стажа так же нет (по опять же понятным причинам — раньше всем этим занимались обычные дизайнеры и верстальщики). Запрос у рынка большой, а порог входа достаточно низкий. Так что — очень неплохая специализация для новичка. Но тут есть один нюанс: потребность в дизайне и качественной верстке — никуда не делась. И выполнять ее приходится практически всегда именно специалисту по Front-end. Так что вы должны быть готовы к тому, что Photoshop будет таким же частым вашим инструментом, как и любимая IDE. Ну все просто — кто-то же должен это делать. И никого ближе к дизайну просто нет. Game dev Направление разработки, традиционно вызывающее обильное слюноотделение у всей молодой аудитории, особенно мужской ее части. Это же так романтично — написать своего убийцу StarCraft или Counter Strike. Да, наверное. Но жизнь — штука тяжелая и тут есть пара моментов, о которых вы должны заранее знать. Если вдруг ваша мечта сбудется, и вы будете разрабатывать настоящие игры, а не социалки, то вам придется держать на столе справочники по сопротивлению материалов, акустике, оптике, гидро- и аэродинамике и всяким другим страшно любимым студентами предметам, так как именно они и будут самыми важными вашими знаниями. И наконец — зарплата. Ну скажем так — зарплата не такая уж и плохая. Но. Обратно пропорциональная интересности и пафосности работы. Чем интереснее проект — тем больше на нее охотников. Тем меньше зарплата — это рынок, детка. В общем, если вам ужасно хочется с друзьями в гараже наваять свой World of Warcraft — то ваяйте. Это весело, и чему-то даже научитесь. Например, отношениям внутри коллектива. Но рассчитывать стать профессиональным гейм-девом и хорошо на этом заработать — ну, шансов больше, чем хорошо зарабатывать на футболе. Хоть это хлеб. Итоги Итак, на чем же остановиться? Выбор за вами. Автор: Sergey Nemchinsky ©http://dou.ua/lenta/articles/specialization/