Этот вопрос имеет огромную историю и аудиторию, и такую же неоднозначность (где много людей — там много мнений).
Однако, каждый раз он поднимается как будто в первый раз. И каждый раз порождает нешуточные споры. Попробуем немного прояснить ситуацию.
Во-первых, изучать программирование надо… не с языка, а с основ, в которые входят: основы алгоритмов, основы данных, основы устройства вычислительных систем и т.п. Это — если учащийся — достаточно взрослый и уже понимает, что и зачем он изучает. А если мы имеем дело с ребёнком, то начинать надо с программистских игрушек типа системы визуального программирования Scratch, которая имеет большую историю, прекрасно локализована, имеет онлайн и офлайн среды разработки, хорошо документирована и поддерживается большим сообществом во всём мире. В принципе, на Scratch можно создавать довольно серьёзные проекты, однако это не слишком удобно — именно потому что это учебная система визуального, а не текстового программирования.
После того как мы наигрались в Scratch и/или немного разобрались с основами информационных технологий, можно начинать пробовать программировать на каком-нибудь простом и понятном (читаемом и понимаемом) текстовом языке программирования. Таких языков, к сожалению, в настоящий момент практически нет: почти все (99,9%) текстовые языки программирования — английские, а следовательно — нечитаемые и, следовательно, непонимаемые для русскоязычных учащихся.
Однако, русскоязычное сообщество упорно демонстрирует определённое единодушие в вопросе «Какой язык программирования для вас был первым?»
Обратите внимание, есть даже люди, утверждающие, что совсем неплохо начинать изучение программирования с языка Ассемблера…
Просто для примера — стандартная программка «Hello World!» на Ассемблере:
.model tiny ; Модель памяти, используемая для COM
.code ; Начало сегмента кода
org 100h ; Начальное значение счетчика - 100h
start: mov ah, 9 ; Номер функции DOS - в AH
mov dx, offset message ; Адрес строки - в DX
int 21h ; Вызов системной функции DOS
mov ax,4C00h
int 21h ; Завершение программы
message db "Hello World!", 0Dh, 0Ah, '$' ; Строка для вывода
end start ; Конец программы
Не правда ли, всё очень «просто» и «понятно» — как раз для начального обучения программированию? 🙂
Хорошо, но это Ассемблер, а как же Python, уверенно удерживающий первое место? Да точно так же как идея плоской Земли — хорошо распиаренная бредятина… 🙁
Да, Python — популярный язык программирования, популярность которого обусловлена… исключительно финансовыми вливаниями и PR акциями Google. Создатель Python работал в Google с 2005 по 2012 год. Таких языков, как Go и Dart, тогда еще не было, или, по крайней мере, они не были широко известны, а с учетом того, что C# от Microsoft набирал популярность, в Google поняли, что им нужен собственный язык. По сути, можно было бы использовать Java, но тогда бы Google не миновали очередных юридических проблем с Oracle. И тогда боссы компании выбрали Python и начали его раскручивать.
Одним из следствий этой раскрутки явилось внедрение Python в качестве школьного учебного языка программирования. Конечно, после ШАЯП и его аналогов:
алг Сумм (арг цел n, рез цел S)
дано | n > 0
надо | S = 1*1 + 2*2 + 3*3 + … + n*n
нач цел i
| ввод n; S:=0
| нц для i от 1 до n
| | S := S + i * i
| кц
| вывод "S = ", S
кон
код на которых напоминает панель управления самоходной гаубицей, программа на Python кажется на первый взгляд гораздо более «понятной»:
>>> def deco(func):
... def inner():
... print('running inner()')
... return inner
…
>>> @deco
... def target():
... print('running target()')
>>> target()
running inner()
>>> target
<function deco.<locals>.inner at 0.10063b598>
В принципе, какая разница: непонятные русские сокращения или непонятные английские слова? И то — невоспринимаемо, и это…
По сути дела в процессе обучения программированию Python «хорош» — для того чтобы запутать учащихся и в итоге отбить у них всякое желание программировать, а впоследствии — сделать практически невозможным изучение нормальных языков программирования: у них совершенно другая форма подачи информации в тексте программы. Можно также посмотреть вот эту статью о недостатках Python или статью о том, почему будущее не за ним.
Разумеется, для уже сформировавшегося программиста, который владеет основами текстового программирования на нормальных языках программирования, изучить ещё и Python — не составляет особого труда. Но мне не встречалось ни одного такого программиста, который бы (хорошо зная Си-подобные языки программирования) утверждал, что Python — гораздо лучше. В чём-то проще и где-то удобнее — да, но однозначно лучше — нет.
Теперь перейдём к группе принципиально учебных языков программирования: Basic (классический) и Pascal. Здесь есть только одна проблема: в настоящее время эти языки безнадёжно устарели и практически не развиваются и не поддерживаются. К тому же, переход от них к какому-либо актуальному современному языку программирования будет так же сложен, как и переход со Scratch. В своё время, лет 20 назад многие начинали изучение программирования с Basic или Pascal. Не скажу, что я жалею об этом, но после Basic и Pascal язык C казался слегка сложным и непривычным. Если бы я вернулся в прошлое, то скорее всего взял бы за основу язык C…
Что у нас осталось? А осталась группа универсальных Си-подобных языков, которые вполне современны, популярны, активно развиваются (кстати, почти без активной раскрутки и финансовых вливаний) и вполне взаимно совместимы на уровне семантики. Всё потому, что построены они все на основе языка Си. Это:
- Сам Си
- С++
- C#
- Java
- JavaScript
- PHP
- …
То есть, если вы знаете Си, вы сможете понять код, написанный на любом из этих языков. Только в этом списке их 6, а вообще их насчитывается более десятка, и всё это — не какие-то похожие языки из одной области, а принципиально различные языки для самых разных задач и областей применения.
Да, всё это принципиально английские языки программирования, но зато при не слишком высоком уровне знания английского они вполне читаемы.
Почему именно Cи в итоге оказывается в приоритете ?
- Наиболее широкие возможности самого языка — от низкого до высокого уровня
- Быстродействие компилируемого и хорошо оптимизируемого языка
- Си-подобный синтаксис, который встречается во многих других языках программирования
- Актуальность использования в настоящее время
- Навыки работы с памятью, указателями и другими системными элементами
- Разумная сложность, которую можно регулировать
- После него легче изучать подобные языки, такие как Java или C++
После изучения языка C можно начать знакомство с окружающими его низкоуровневым языком Assembler и высокоуровневым C++. Уже в дальнейшем можно познакомиться с Python и JavaScript, чтобы хотя бы примерно понимать их недостатки, преимущества и особенности. Также опытные разработчики посоветуют вам изучить хотя бы один функциональный язык программирования. К примеру, Haskell, Go или Лисп.
Также стоит упомянуть, что любой язык программирования — всего лишь инструмент, который выбирается для выполнения определенной задачи. А задача начинается с её понимания, формализации, поиска и оптимизации решения, его алгоритмизации и только потом идёт написание программы. Поэтому есть более важные вещи, чем заучивание синтаксиса, такие как, например, изучение алгоритмов и структур данных, которые никак не связаны с языками программирования.
Как вы уже поняли, языков программирования — очень много, даже о самых популярных из них невозможно рассказать в одной статье. Но это и не нужно. Самое важное, что нужно помнить начинающему программисту — путь в разработчики не является простым, всё это довольно сложно. Если вы слышали какие-то истории быстрого успеха, что за 6 месяцев люди становятся «крутыми разработчиками», то это всегда связано с быстрым изучением основ WEB-разработки, т.к. там очень просто начать что-то делать и не требуется большого количества знаний. Но это путь кодера, а не полноценного инженера-программиста. Не спешите «быстро» научиться программировать — скорее всего у вас получится совсем не то, к чему вы стремились.
PS: Есть такой старый шуточный тест для выбора языка программирования. (Прошу не воспринимать всерьёз!)
Вот ещё интересная статья на тему
Поделиться: