вторник, 10 января 2017 г.

Какой язык программирования учить первым?

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

Направления и специальности

Как вы уже понимаете, больше нет профессии «программист». Есть целая вязанка профессий, и представители одной будут с большой натяжкой считать коллегами представителей другой профессии. Например — фронтэндер и embedded разработчик.
На сегодняшний момент я могу выделить такие программистские специальности:
— Embedded разработка;
— UI разработка;
— Web-разработка;
— Mobile разработка;
— Front-End;
— Game Dev;
— Enterprise.
Можно выделить еще несколько условно-программистских специальностей — automation QA, DevOps, администрирование и т.д. Но я на них останавливаться подробнее не стану, хотя все эти специальности интересны и позволяют заработать себе на хлеб с маслом.
На что в первую очередь должен обращать внимание человек, выбирающий свою специальность? На востребованность на рынке (количество вакансий и зарплату), на перспективы развития (не придется ли скоро переучиваться, поскольку специальность станет не актуальной) и на порог вхождения (сколько придется потратить сил на изучение и насколько легко устроиться новичку на первую работу). Именно исходя из этих трех параметров я и буду разбирать все направления.
Сразу хочу предупредить — естественно, точной информацией по всем этим вопросам не владеет никто. И я в том числе. Ориентировался я исходя из опросов ДОУ и своего личного наблюдения. Некоторые аспекты пришлось додумывать, но там я отдельно об этом скажу.
Итак, поехали. И начнем мы по порядку.

Embedded разработка

Сейчас в любом устройстве, которые нас окружают, микросхем больше, чем во многих компьютерах. Телевизоры, холодильники, автомобили, телефоны, станки, промышленное оборудование... Да что угодно, хоть электронная сигарета. Все это работает с использованием электроники, которую кто-то должен запрограммировать. И кто-то должен эту программу написать. Вот именно этим и занимаются эмбедед-разработчики.
Основным используем языком там, насколько я знаю, является С++, но и асемблер, и даже языки более высокого уровня, вроде Java, там используются. Естественно это не совсем та Java, что в Enterpise. Все эти языки для данной специальности связывает именно сфера применения — специфичное железо, весьма специфичные задачи и близость к самому низкому уровню — проводам, электричеству, радиоволнам.
Языки С++ и асемблер и так не самые простые, а то, что помимо них надо знать еще и конкретное железо, как вы понимаете, не делает задачу проще. Так что порог входа достаточно высокий. С другой стороны — работа интересная и с большим количеством вызовов. Если вам нравится программировать ардуинки, делать своих роботов-квадрокоптеров, программировать сигнализацию и писать свои собственные прошивки на андроид — вам там понравится.
Отдельным бонусом идет то, как выглядит рабочее место embeded девелопера. Если у остальных программистов это обычный компьютер и один-два монитора, то у embeded разработчика — настоящий шик. Куча какого-то непонятного полуразобранного железа, связанного друг с другом навесным монтажом, все это соединено с таким же полуразобранным компьютером, откуда-то торчит несколько мониторов, на некоторых из которых синусоиды, странные изображения и диаграммы. В общем — настоящий кибер-панк.
Но это все шутки. По делу тут достаточно сказать только факты — порог вхождения высокий, зарплаты хорошие, перспективы — отличные. Не думаю, что эта сфера хоть когда-нибудь начнет сужаться. Процессоры скоро будут уже в одежду вставлять! Так что если вам нравятся железяки, С++ и провода — то эта профессия для вас.

UI разработка

Имеется в виду разработка десктопных приложений — всяких там вордов и броузеров. Стоит ли рассматривать эту специальность? Скажу просто — забудьте. Ее в Украине просто нет. Ну, в заслуживающих внимания объемах. Да, кто-то что-то где-то пишет, но это настолько исчезающий рынок, что рассматривать его в качестве своего рабочего места явно не стоит.
Почему так вышло? Ну все просто — десктопное приложение недостаточно просто написать. Его надо еще продать и, самое главное, — поддерживать. Причем — поддерживать не в Украине, а там, куда вы его собираетесь продавать. То есть у вас должен быть колл-центр в какой-нибудь США со всеми этими девушками «Can I help you?» и соответствующим сервисом.
Ну нет у нас пока фирм, которые могут себе такое позволить. Поэтому — забудьте на ближайшие несколько лет. Вот если вдруг сюда массово бросятся западные компания открывать центры разработки... Ну, вы это и без меня узнаете:)

Web разработка

Сейчас 21-й век, и даже самой маленькой фирмочке стыдно не иметь своего сайтика. Пусть даже визитки. И потребность в этих сайтиках появилась не год назад. Поэтому на украинском рынке полно предложений на любой вкус и кошелек. Причем, предложения стартуют с каких-то уж совсем смешных сумм, типа «за 500 грн мы вам нарисуем прекрасный сайт силами одного студента-второгодника». Ну и хватает фирм, предлагающих уже вполне вменяемые решения за разумные деньги.
Долгое время на этом рынке все было полностью оккупировано PHP, за исключением достаточно специфичных сайтов.
С точки зрения разработчика, в этой области все весьма просто — порог входа очень низкий (ниже, пожалуй, даже найти ничего не удастся), достаточно широкий рынок, на котором легко начинать (как я уже говорил) и есть куда расти. Хотя, справедливости ради, надо сказать, что за счет легкости входа на рынок зарплаты в этом секторе оставались и самыми низкими в индустрии.
Честно говоря, практически все так сейчас и остается. И данные ДОУ это подтверждают — PHP все так же популярен, и сдавать позиции не собирается. С другой стороны, исходя из графика желаний программистов, очень многие из веб-разработки хотят если не поменять отрасль, то сменить язык.
Индекс удовлетворенности — хотели ли бы люди, работающие на таком-то языке, начинать следующий проект на нем же
И это в общем-то тоже понятно. Годы идут, появляются новые ниши, новые подходы к разработке. Только PHP практически такой же, каким он был на рубеже веков. Разработчикам явно хочется чего-то большего. Поэтому и идет попытка заменить PHP на Ruby, Python или на что-нибудь еще более экзотическое. Как вы понимаете — веб сейчас можно делать вообще на любом языке высокого уровня — во всех есть соответствующие фреймворки.
С другой стороны, на нишу веб-разработки так же влияют новые тенденции сайтостроения. Сейчас очень многие простые сайты делаются вообще из одной единственной статической странички — так называемого лендинга. И разрабатывать на таком сайте откровенно нечего — сверстали, подвязали соц. сети — вуаля. Работа тут найдется разве что фронт-эндеру.
Резюмирую. Я бы не стал выбирать эту сферу сейчас в качестве своей основной. Ситуация несколько неустойчива — надо бы подождать годик и посмотреть, куда все вывезет.

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 — то ваяйте. Это весело, и чему-то даже научитесь. Например, отношениям внутри коллектива. Но рассчитывать стать профессиональным гейм-девом и хорошо на этом заработать — ну, шансов больше, чем хорошо зарабатывать на футболе. Хоть это хлеб.

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 разработчик учится перемалывать информацию в таких диких количествах, что в случае потребности любой другой язык выучивается за время аналогичное времени осваивания новой библиотеки. Так как с нашей точки зрения — любой другой язык примерно ей и соответствует по сложности.

четверг, 3 марта 2016 г.