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

visibility 478
08 Сен 2020г. в 08:22

Правильного ответа на вопрос «какой язык программирования мне выбрать первым?» не существует. Существует несколько правильных вопросов, которые полезно задать себе. Это и будет первым тестовым заданием для входа в профессию.

Некоторые предуведомления

Во-первых, одного языка недостаточно. Даже на первом году обучения. Как минимум несколько «специализированых» языков всё равно понадобятся (HTML, CSS, SQL, YAML, JSON, XML, Markdown — как минимум примеры разных синтаксисов, которые почти наверняка придётся читать, и с большой вероятностью — писать). Но и не только. Не-JS-программисту почти наверняка понадобится прочитать чуточку JS; JS-программисту — проверить реализацию алгоритма, описанную на Python; системному программисту — разобраться с чужим говнокодом на скриптовом языке.

А на пути к «миддл»-уровню их придётся освоить полдюжины. А чтобы стать настоящим профессионалом — разбираться в парадигмах всякой фантастической дряни.

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

Но и не только это — сменится «основной» язык в полюбившейся конторе, или наймёт другой работодатель по твоей любимой теме, изменятся воздушные потоки стартапной или энтерпрайзной культуры — и ВЖУХ — ты уже и не помнишь конструкций так тщательно выбранного «первого языка».

Поэтому, в общем, не стоит относиться к этому выбору слишком серьёзно, как к выбору жены или дома (их тоже можно сменить — но всё же чуть сложнее). Начать, попробовать всякое и найти своё — намного более осмысленная стратегия чем несколько недель/месяцев/лет анализировать «а с чего же всё-таки начать».

В-третьих, и самых главных — зачастую не «ты выбираешь язык», а язык выбирает тебя. Стоит по-настоящему заинтересоваться тем, что ты делаешь, выбрать это как важную часть своей жизни — а я обращаюсь именно к таким людям, не к тем кто надеется «по субботам подработать программингом» (их уже ничего не спасёт) — так вот, стоит сделать этот выбор, и дальше все советы «что выбрать» будут до лампочки. Интересная задача или перспективный работодатель нарисуются сами, язык на котором не получается сделать круто, отвалится сам собой, зато вырастет другой.

Внимание, правильные вопросы!

Зачем собираешься учиться? Очень важный вопрос, который стоит честно задать себе первым делом. Получить дополнительный инструмент для своей основной профессии (например, микробиологии или бухгалтерии)? Развлечься в свободное время? Помочь ребёнку в школе?.. Ну, окей, на mkdev мы по умолчанию предполагаем, что ты собрался работать программистом (хотя с удовольствием научим и микробиолога — знаешь ли ты, что Ruby у них ужасно популярен?). Но: ты уже твёрдо уверен, что хочешь найти профессию в IT как можно быстрее, или просто решил попробовать, твоё ли это? Во втором случае, возможно, стоит перепробовать десяток языков и подходов, чтобы понять что тебе нравится — или ничего, это тоже ок!

Связанный вопрос: Сколько у тебя времени? Без чёткого дедлайна «через год я уже должен зарабатывать X долларов» — может быть разумно (и вполне приятно) сразу планировать себе «вузовского класса» обучение: то есть составить список из нескольких классических языков — Scheme, Haskell, Prolog, нескольких промышленных (Java, Ruby, JS), пары супермодных (Rust, Pony, Elixir)... А вопрос «на чём именно писать» как-то сам вырастет. Но если хочется «настоящую профессию и побыстрее», то ...

Знаешь ли точно, в какой области хочешь работать? «Только разработка игр, ничего другое не прёт», «Искусственный интеллект — это то, о чём я со школы мечтал», «Хочется поближе к железу быть, всяких роботов и сенсоры программировать» или даже «Да вот друзья собираются делать стартап про сериалы с бигдатой» — хорошие варианты ответа на этот вопрос. Но ты совершенно не обязан их иметь. «А покажите, пожалуйста, весь ассортимент» — тоже хороший ответ. И «пока попробую у дяди в фирме бухгалтеру помочь, а там хочется чего-то поинтереснее» — тоже норм.

Дальше: А что бы хотел делать? Кажется, это тот же вопрос, что выше? А нет. Закрой глаза, и представь, как выглядит твой идеальный рабочий процесс? Экспериментировать с интерфейсом, чтобы пользователь оказался счастлив, даже не подозревая сколько сил вложено? Выдумать новый алгоритм столкновения частиц для физического движка игры и три года доводить до ума? Быстро написать много кода, объединив десяток известных компонентов в новую стартапную идею, пока никто её не придумал? Разобраться со сложной чужой штукой, чтобы заставить её работать в новой среде? — есть огромное количество вариантов, и некоторые даже и уводят вдаль от профессии «просто программиста» — в область devops, или UI-специалистов, или аналитиков данных... Посвяти хотя бы 20 минут этой медитации, результат может быть Совсем Неожиданным.

Например (в связке с предыдущим вопросом) даже если ты уверен, что хочешь участвовать в разработке игр, понять что ты хочешь отлаживать новые уровни, или что тебя действительно развлечёт проработка физически точных алгоритмов столкновений, или — создание игрового сервера который выдержит стотыщмиллионов соединений — это всё же сильно разные направления для обучения и саморазвития.

И только ответив (или сознательно решив отложить ответ) на все вопросы выше, имеет смысл задать прагматический вопрос: Какие языки сейчас активно используются? — в той области, теме и среде, что тебе интересна. И выбрать штуки три (именно так!) для освоения в ближайшее время.

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




Ниже — субъективные, короткие и неполные сведения о топ-15 нынешних языков программирования.

C — единственный живой дедушка программирования, притом живее всех живых. Всё системное (с поправками на Rust и Go, про которые ниже), программирование всяких микроконтроллеров и встроенных устройств, всяких драйверов для дронов и прочих mindblowing штук — это по-прежнему C. Ещё он «базовый» язык для сшивания или ускорения других языков и библиотек (какая-нибудь научная хрень, которая скажем изначально писалась на Python, потом для скорости переписывается на C, потом к этой C-имплементации появляются обёртки на Ruby, Julia и Haskell... так и живём). Короче, вряд ли первый язык, но обязательный для изучения — совершенно точно. К тому же, вовсе не стоит на месте, и свежие стандарты вполне свежи и хороши;

C++ — уродливый (по мнению одних) или восхитительно-сложный (по мнению других) племянник C. Объектно-ориентированный, метапрограммируемый, чудовищно переусложнённый, долго компилируемый... короче, C++ — это моя первая любовь среди языков программирования. Сейчас используется, насколько можно судить, для разработки игр, некоторых десктопных систем и немношк везде где можно C, но нужно более сложный код (потому что компилятор gcc доступен на всех примерно ОС, и компилирует и то и это);

C# — один из немногих языков, программисты на котором продали душу диаволу почти намертво привязаны к экосистеме Microsoft (которая, будем честны — особенно для разработчиков — довольно впечатляюще развита). Области применения — игры, либо Сложный Дорогой Enterprise софт. Сам язык, по состоянию на текущий момент, довольно красивый и прогрессивный. И, в общем, как почти все не новые и прагматичные языки общего назначения, имеет в себе немношк функционального, мношк ОО, что-то из метапрограммирования и т.д.;

Clojure — такой, волшебный единорог от языков программирования, работает на JVM (почитай про Java ниже), наследник Lisp, функциональный язык. Его диалект ClojureScript компилится в JS (тоже читай ниже, почему это важно). Используется в «умных» стартапах и в продакшене Очень Серьёзных Компаний. Выбрать можно только по Большой Любви (но он клёвый);

Erlang+Elixir — Erlang — это язык и платформа, особо популярный для создания телекоммуникационных (раньше) и вообще высоконагруженных распределённых (сейчас) приложений. Elixir — язык, работающий на той же платформе, но менее инопланетянский чем Erlang (впрочем, «основной» язык платформы всё равно придётся хоть немного понимать, см. ниже рассуждение про Java). На сегодняшний день всё это немножко отдаёт «элитарностью», но надёжно укоренилось в некоторых областях (скажем, в банковских системах) — и ужасно интересно;

ES (JavaScript, CoffeeScript, TypeScript и т.д.) — очевидный фаворит на текущий момент, ES/JS/... — по сути, не язык, а семейство языков. На них пишут (несколькими разными способами) веб-интерфейсы и мобильные интерфейсы, и ещё (несколькими другими образами) серверный и админский софт, и черта лысого. Что именно сегодня называется «языком JavaScript» определить довольно тяжело: нанявшись на работу «JavaScript-программистом», ты, в зависимости от везения, можешь оказаться человеком, который поддерживает древний интерфейс банковской системы, которая кровь-из-носу должна работать под любым браузером; или частью модной команды пишущей на строго-типизированном TypeScript сложную визуализацию научных данных; или вдруг поучаствовать в разработке интерфейса будущего на «следующей» версии языка, которая сложным образом компилируется в нечто работающее на старой нокии... целый мир, который одним абзацем не опишешь. Но «свой первый язык» в этой области искать довольно опасно;

Есть ещё третье мнение и рассказ о том, на чём основывается выбор языка программирования в реальной разработке
Читать

Go — простой как палка и эффективный язык, сделанный гуглом, в основном для случаев «сделать быстрый, тупой, надёжный код». Полёт мысли в нём сразу обрубается грубостью языка. Зато эффективный — не передать как;

Java — особый случай. Java это и язык, и платформа (JVM) — и в этой платформе работает, например, смешной и клёвый Clojure, научно-заумная Scala, и JRuby (тот же Ruby, но для JVM). Да и сама Java сегодня — вовсе не тот «ограниченный язык для корпоративных рабов», как ей когда-то создали репутацию. Учитывая невероятное количество мощных библиотек, выбор языков работающих на этой платформе и её универсальность, некоторое представление о Java должен иметь любой уважающий себя программист. А ещё Java — единственный (с некоторыми оговорками) язык разработки под Android;

PHP — старинный оккупант веба с чудовищной репутацией. В современном изводе от большей части адского наследия избавился, и вообще вполне приличный современный ОО-язык. Зато по старой памяти составляет Очень значительную часть инфраструктуры интернетов. Нанявшись PHP-шником можно с равной вероятностью попасть в аккуратный проект с Архитектурой и Тестами — а можно в поддержку безумной доисторической системы с неструктурированными if/else на 2000 строк;

Python — когдатошний «конкурент» Ruby в качестве модного языка для веба и стартапов, сейчас язык в основном для поддержки сложных и взрослых web-приложений, которые на нём и выросли — а больше для научных/bigdata исследований, местами даже забарывает R (см. ниже);

R — язык как бы общего назначения, но используют только учёные/бигдата. Довольно адовый синтаксис (потому што старый), зато куча крутых пакетов для него есть, и исследований на нём написанных. Чуть ли не лучший в мире, выходит, язык для удовлетворения любопытства;

Ruby — ещё несколько лет назад «модный» и «хипстерский», сегодня — просто один из мейнстримных языков. Очень выразительный и лаконичный, немного «магический», довольно медленный. Используется в основном для веб-разработки. На сегодня это язык который легко с первого взгляда полюбить или возненавидеть, и довольно беспроблемно найти работу. Ещё Ruby сегодня любят админы и тестеры, на нём есть клёвые инструменты для тех и других;

Rust — один из довольно новых игроков. Быстрый и сложный. Обещает заменить C в области системного программирования, но пока что, кажется, учить его имеет смысл скорее «на будущее»;

Scala — «умный младший брат» на платформе Java: современный, сложный, функциональный, ужасно любимый всякой бизнес-аналитикой и от того стремительной набирающий популярность;

Swift / Objective-C — единственный выбор для разработки под iOS. Ориентироваться, конечно, стоит только на Swift (Objective-C уже только для поддержки старых приложений) — и он, в общем, не замечателен ни какими-то особыми фичами, ни какими-то особыми глупостями, приличный современный язык, сравнимый с C# и Java. Рекомендовать его как первый можно разве что для тех, кто решил намертво связать свою судьбу с Apple, поскольку применимость его (сознательно) ограничена.

Какие то языки не попали в этот список — например, Perl, разработчики на котором вполне востребованы, но сам язык находится в странном состоянии и порекомендовать его как «первый» язык не поворачивается. Или, например, Lua — тоже популярный, но как язык мелких скриптов для других систем (в основном, игр), быть «просто Lua-программистом» вроде бы довольно бессмысленно.

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



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

Ваше имя::


Комментарий::




Ничего не найдено