Этот вопрос имеет огромную историю и аудиторию, и такую же неоднозначность (где много людей – там много мнений).
Однако, каждый раз он поднимается как будто в первый раз. И каждый раз порождает нешуточные споры. Попробуем немного прояснить ситуацию.
На самом деле у многих “крутых атишнегов”, отвечающих на этот, казалось бы несложный вопрос, происходит типичная “подмена понятий”: вместо ответа на вопрос “с какого языка следует начинать обучение программированию” они отвечают на вопрос “какой язык программирования стоит изучать”. Вероятно, это происходит либо от чрезмерного высокомерия, либо от недостатка общего уровня образования.
К тому же, сейчас в системе образования, в частности в IT, сложилась совершенно идиотическая ситуация: вместо того чтобы преподавать то, что действительно нужно, детям, им преподают “то, что знают” преподаватели. В результате вместо простых вещей типа Scratch, Small basic, Pascal, SketchUp и т.п. детям пихают Java, C++, Python, Blender…
Скажите, а вы серьёзно думаете, что начинать учиться ездить нужно на тяжелом магистральном грузовике с прицепом, а не на велосипеде или самокате, или, может быть, пилотов надо начинать обучать не на легких “Цесснах”, АНах” и “ЯКах”, а сразу на 747-х “Боингах” и 380-х “Аирбасах”? Интересно, как бы вам понравилось лететь куда-нибудь с таким вот пилотом?… Может быть лучше стоит этим “доморощеным” преподавателям самим пойти поучиться сначала? А чиновникам, утверждающим эти бредовые программы – хоть раз в жизни задуматься над тем, что они делают, а не только над тем, сколько они с этого поимеют?
Во-первых, изучать программирование надо… не с языка, а с основ, в которые входят: основы алгоритмов, основы данных, основы устройства вычислительных систем и т.п. Это – если учащийся – достаточно взрослый и уже понимает, что и зачем он изучает. А если мы имеем дело с ребёнком, то начинать надо с программистских игрушек типа системы визуального программирования 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 в том, что он якобы “прост”, только вот простота его хороша не для обучения, а для лентяев… 🙁
Да, 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 к C#. В своё время, лет 20-30 назад многие начинали изучение программирования с Basic или Pascal или такого же простого Fortran. Это безусловно, очень хороший опыт, на котором, однако, не стоило застревать надолго. Да, после Basic и Pascal язык C казался сперва слегка сложным и непривычным. В настоящее время начинать обучение полноценному текстовому программированию, на мой взгляд, целесообразнее всего именно с языка C.
Что у нас осталось? А осталась группа универсальных Си-подобных языков, (кстати, составляющих в сумме около 50%) которые вполне современны, популярны, активно развиваются (кстати, почти без активной раскрутки и финансовых вливаний) и вполне взаимно совместимы на уровне семантики. Всё потому, что построены они все на основе языка Си. Это:
- Сам Си
- С++
- C#
- Java
- JavaScript
- PHP
- …
То есть, если вы знаете Си, вы сможете понять код, написанный на любом из этих языков. Только в этом списке их 6, а вообще их насчитывается более десятка, и всё это – не какие-то “просто похожие” языки из одной области, а принципиально различные языки для самых разных задач и областей применения, очень мощные, популярные и с большой историей.
Да, всё это принципиально английские языки программирования, но зато при не слишком высоком уровне знания английского они вполне читаемы.
Почему именно Cи в итоге оказывается в приоритете ?
- Наиболее широкие возможности самого языка – от низкого до высокого уровня
- Быстродействие компилируемого и хорошо оптимизируемого языка
- Си-подобный синтаксис, который встречается во многих других языках программирования
- Актуальность использования в настоящее время
- Навыки работы с памятью, указателями и другими системными элементами
- Разумная сложность, которую можно регулировать
- После него легче изучать подобные языки, такие как Java или C++
После изучения языка C можно начать знакомство с окружающими его низкоуровневым языком Assembler и высокоуровневым C++. Уже в дальнейшем можно познакомиться с Python или JavaScript, для того чтобы хотя бы примерно понимать их недостатки, преимущества и особенности. Также опытные разработчики посоветуют вам изучить хотя бы один функциональный язык программирования. К примеру, Haskell, Go или Лисп.
Также стоит упомянуть, что любой язык программирования – всего лишь инструмент, который выбирается для выполнения определенной задачи. А задача начинается с её понимания, формализации, поиска и оптимизации решения, его алгоритмизации и только потом идёт написание программы. Поэтому есть более важные вещи, чем заучивание синтаксиса, такие как, например, изучение алгоритмов и структур данных, которые никак не связаны с языками программирования.
Как вы уже поняли, языков программирования – очень много, даже о самых популярных из них невозможно рассказать в одной статье. Но это и не нужно. Самое важное, что нужно помнить начинающему программисту – путь в разработчики не является простым, всё это довольно сложно. Если вы слышали какие-то истории быстрого успеха, что за 6 месяцев люди становятся “крутыми разработчиками”, то это всегда связано с быстрым изучением основ WEB-разработки, т.к. там очень просто начать что-то делать и не требуется большого количества знаний. Но это путь кодера, а не полноценного инженера-программиста. Не спешите “быстро” научиться программировать – так как скорее всего в результате у вас получится совсем не то, к чему вы изначально стремились.
PS: Есть такой старый шуточный тест для выбора языка программирования. (Прошу не воспринимать его всерьёз!)
Вот ещё интересная статья на тему
Поделиться: