На каком языке говорить будем

Логотип компании
На каком языке говорить будем
Какой язык программирования учить и с чего начать? Слово тем, кто работает в этой сфере не первый год и добился успехов.

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

С чего же начать? Какой язык учить? Слово – профессионалам. Наши собеседники: Евгений Кузин, руководитель отдела сетевых проектов компании «Доктор Веб», Василий Дьяконов, технический директор компании KeepSolid, и Владислав Эстрайх, PHP-разработчик компании Movavi.

Первый шаг – самый главный. Как не ошибиться?

Евгений Кузин: Советую для начала ответить на вопрос: действительно ли программирование ваш конек? Конечно, это относительно модный вид деятельности, но, чтобы стать хорошим программистом, необходимо очень много знать и уметь, то есть трудиться на протяжении всей карьеры. Поэтому, если ваш интерес мимолетен, не тратьте время. Ну а если все серьезно – вперед. Поскольку программирование чрезвычайно разнообразно, постарайтесь понять, какое из направлений вам ближе: прикладная разработка для десктопов, мобильных устройств, веб-разработка или клиент-сервер. А может, низкоуровневое программирование драйверов и операционных систем? Несмотря на то что все эти направления объединены общим термином «программирование», различия в используемых языках, технологиях, фреймворках значительны. Хороший технический вуз и специальность, связанная с ИТ, если и необязательны, будут хорошим подспорьем. И дело не только в том, что там расскажут о логике, реляционной алгебре и дискретной математике. В вузе вас научат инженерному мышлению, техническому композиционному подходу к решению задач, то есть главным качествам программиста. Ничего страшного, если преподают один язык программирования, а вам интересен другой. В Сети легко отыскать информацию и даже пройти курсы дистанционного обучения по всем без исключения языкам и связанным с программированием дисциплинам. Благодаря open source можно найти примеры кода и решений, написанных опытными (или не очень) программистами в интересующей вас области. Лучше всего, если вы имеете возможность непосредственно использовать тот код, который решили изучить. Не бойтесь вносить собственные исправления и доработки. Ну и, конечно, не забывайте читать, причем не совершайте, подобно многим новичкам, такую ошибку: не обходите вниманием книги об алгоритмах, техниках программирования и правилах написания хорошего кода только потому, что на обложке нет названия вашего любимого языка или фреймворка. Последние часто теряют актуальность, а с алгоритмами и фундаментальными истинами это происходит гораздо реже.

На каком языке говорить будем. Рис. 1

Василий Дьяконов: Начинать нужно с того, чем хочется заниматься, – программирования. От простейших игр до решения задач из школьных учебников физики, математики и программ ACM-олимпиад. Стоит повышать общую компьютерную грамотность – знания об операционных системах, мобильных устройствах, способах сетевого взаимодействия между ними очень пригодятся. Ну а об изучении английского языка – как основного в ИТ-среде, на котором доступна вся серьезная документация, – я и не говорю…

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

Какие языки программирования наиболее востребованы?

Евгений Кузин: Учитывая количество мобильных устройств, неудивительно, что популярнее всего Java. Не отстает и JavaScript, снискавший множество применений, но наиболее известный как язык клиентских пользовательских интерфейсов в сети, а также пригодившийся в разработке высокопроизводительных приложений с использованием модели обратных вызовов. Далее, в порядке, не отражающем точного соотношения объема нового кода, пишущегося на этих языках, назову скриптовые языки общего назначения, применяемые в основе веб-разработок: PHP, Python, Ruby, затем C# – язык платформы .Net, ну и, пожалуй, C++, остающийся основным в разработке производительных оптимизированных приложений – от игр до встраиваемых систем. Повторяю, программирование как таковое весьма разнообразно, и в каждом отдельном направлении есть свои доминирующие языки и технологии. Там, где «говорят» в основном на C и C++, применить что-то другое зачастую просто невозможно.

Василий Дьяконов: Сейчас нет языка программирования, который подходил бы на все случаи жизни. В крупных проектах популярны Java и C# по причине богатой базы библиотек, относительной простоты написания кода и поддержки множества платформ. Приложения, требовательные к скорости исполнения и переносимости между различными платформами, успешно пишут на C/C++. Растущий рынок массовых мобильных устройств обслуживается разработчиками на Objective C/Java/C#. С учетом того, что последнее десятилетие ознаменовалось бурным ростом Интернета и обслуживающих онлайн-сервисы серверных приложений, стали популярны JavaScript, Python, Ruby. Более того, требования к производительности и безопасности серверного кода приводят к тому, что находят применение даже такие малоизвестные языки, как Go, Erlang, Haskell, Scala.

На каком языке говорить будем. Рис. 2
Василий Дьяконов

Владислав Эстрайх: В сфере веб-программирования, чем я занимаюсь, говорили и говорят на PHP. Как бы ни критиковали его за некий примитивизм и прочие недостатки, он все равно остается универсальным решением, которое динамично развивается и на покой не спешит. Конкурируют с ним Python и Ruby. Набрали обороты и JavaScript-ориентированные решения, например Node.js. Как говорится, кто бы мог подумать.

Какие языки, на ваш взгляд, будут востребованы в будущем?

Евгений Кузин: На ближайшие три-пять лет можно дать уверенный прогноз: Android и Java не уступят лидерства, а скорее даже укрепят его за счет появления большего количества интеллектуальных устройств бытовой электроники, «умных» часов и тому подобного. Возможно появление новых языков, транслирующихся в байт-код для JVM, что уже применяется. Рекомендую обратить внимание на Go – относительно молодой, но перспективный язык программирования от Google, что фактически дает гарантию его полной поддержки в Android и Chrome OS. В дизайн Go изначально заложена многопоточность, важность которой с каждым годом очевиднее. По замыслу создателей это должно уменьшить головную боль программиста при написании параллельных масштабируемых приложений. Также довольно интересен Rust от Mozilla, в первую очередь поддержкой множества популярных парадигм программирования. Язык компилируемый и позиционируется как средство создания больших клиент-серверных приложений с акцентом на безопасности, надежности и параллельном исполнении кода. При этом в Rust отсутствуют операции с указателями и прямой доступ к памяти, что исключает целый класс потенциальных ошибок.

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

Владислав Эстрайх: Насчет языков предсказывать не берусь. Будущее скорее за технологиями и принципами: будут востребованы облака, highload и наиболее приспособленные к ним средства и элементы разработки. Какие языки будут родными для этих средств и элементов – вопрос вторичный.

На каком языке говорить будем. Рис. 3
Владислав Эстрайх

Есть ли предпосылки для появления новых языков?

Евгений Кузин: В академической среде новые языки и сейчас появляются очень часто. Большинство из них так и не получает широкого распространения, а остается в экспериментальном статусе, но факт остается фактом: исследования в области языков программирования никогда не прекращаются. Если же говорить о появлении языков, которые стали бы известны за пределами лабораторий или специализированных дискуссионных групп Интернета, то здесь должны удачно сложиться обстоятельства. Как бы ни был хорош язык, он не станет популярен в течение первых месяцев или даже лет. Разработка ПО – это область, в которой уделяется огромное внимание надежности, совместимости и поддержке, то есть качествам, которыми новый язык не обладает в принципе. Обучение новому занимает не один день, а программисты – народ прагматичный и в своей массе не будут тратить время на технологию, будущее которой не гарантировано. Молодые языки Go, Rust, Dart, Nim появились пять и более лет назад. Таким образом, авторы нового языка по сути должны сделать удачную ставку на идеи, которые окажутся актуальны в ближайшие годы и в то же время недостаточно освещены конкурентами. Новые парадигмы программирования или, что более вероятно, пересмотр открытых ранее, внесение в ядро языка текущих тенденций разработки, удачные эксперименты с синтаксисом и функционалом – все это достаточные основания для появления новых языков.

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

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

Какие тенденции в программировании вы бы выделили?

Евгений Кузин: Во-первых, рост роли движков и фреймворков. Ни один язык высокого уровня уже не используется сам по себе, кроме него всегда в ходу фреймворк – набор готовых утилит и библиотек, призванный расширить функциональность языка в заданной предметной области и предоставить программисту максимальное удобство и надежность при разработке. С усложнением программ роль фреймворков будет расти. Во-вторых, облачные и параллельные вычисления, а также связанные с ними подходы в программировании. Чтобы работать с большими данными, не нужно быть флагманом – с необходимостью эффективно обрабатывать крупные объемы информации сталкивается все больше компаний. В таких условиях наиболее практично горизонтальное масштабирование, когда производительность достигается объединением множества вычислительных узлов, между которыми параллельно распределяются задачи. Чтобы максимально эффективно использовать такие системы, программы должны быть написаны специальным образом. Третья тенденция – мобильные приложения и веб-сайты. Спрос на разработчиков для мобильных платформ будет расти из-за увеличения вычислительной мощности последних. В то же время повышается интерес к разработке мобильных сайтов относительно мобильных приложений, что объяснимо с точки зрения кросс-платформенности и отсутствия необходимости регистрировать и поддерживать приложение для каждой из платформ. Впрочем, даже несмотря на значительный прогресс в области веб-интерфейсов, такой подход применим не для всех приложений.

Опубликовано 03.09.2015