Этот вопрос имеет огромную историю и аудиторию, и такую же неоднозначность (где много людей - там много мнений).
Однако, каждый раз он поднимается как будто в первый раз. И каждый раз порождает нешуточные споры. Попробуем немного прояснить ситуацию.
На самом деле у многих "крутых атишнегов", отвечающих на этот, казалось бы несложный вопрос, происходит типичная "подмена понятий": вместо ответа на вопрос "с какого языка следует начинать обучение программированию" они отвечают на вопрос "какой язык программирования стоит изучать" - с точки зрения текущей ситуации на рынке. Вероятно, это происходит либо от чрезмерного высокомерия, либо от недостатка общего уровня образования.
К тому же, сейчас в системе образования, в частности в IT, сложилась совершенно идиотическая ситуация: вместо того чтобы преподавать то, что действительно нужно, детям, им преподают "то, что знают" преподаватели. В результате вместо простых вещей типа Scratch, Small basic, Pascal, SketchUp и т.п. детям пихают Java, C++, Python, Blender...
Да что там далеко ходить, некотороые "крутые" онлайн-школы всерьез предлагают научить к 13 годам детей так, чтобы они пошли работать программистами! 🙂 Мир сходит с ума сразных концов...
Скажите, а вы (ображено к адептам указанных выше подходов) точно также серьёзно думаете, что начинать учиться ездить нужно на тяжелом магистральном грузовике с прицепом, а не на велосипеде или самокате, а потом на легковой машине, или, может быть, пилотов надо начинать обучать не на легких "Цесснах", АНах" и "ЯКах", а сразу на 747-х "Боингах" и 380-х "Аирбасах"? Интересно, как бы вам понравилось лететь куда-нибудь с таким вот пилотом?... Может быть лучше стоит этим "доморощеным" преподавателям самим пойти поучиться сначала? А чиновникам, утверждающим эти бредовые учебные программы - хоть раз в жизни задуматься над тем, что они делают, а не только над тем, сколько они с этого поимеют?
Во-первых, изучать программирование надо... не с языка, а с основ, в которые входят: основы алгоритмов, основы данных, основы устройства вычислительных систем и т.п. Это - если учащийся - достаточно взрослый и уже понимает, что и зачем он изучает. А если мы имеем дело с ребёнком, то начинать надо с программистских игрушек типа системы визуального программирования Scratch, которая имеет большую историю, прекрасно локализована (да, она есть на русском!), имеет онлайн и офлайн среды разработки, хорошо документирована и поддерживается большим сообществом во всём мире. В принципе, на Scratch можно создавать довольно серьёзные проекты, однако это не слишком удобно - именно потому что это учебная система визуального, а не текстового программирования.
После того как дети наигрались в Scratch и/или немного разобрались с основами информационных технологий, можно начинать пробовать программировать на каком-нибудь простом и понятном (читаемом и понимаемом) текстовом языке программирования. Таких языков, к сожалению, в настоящий момент практически нет: почти все (99,9%) текстовые языки программирования - английские, а следовательно - нечитаемые и непонимаемые для русскоязычных учащихся.
Однако, русскоязычное сообщество с упорством, достойным лучшего применения, демонстрирует определённое единодушие в вопросе "Какой язык программирования для вас был первым?"
Второй вопрос, который обычно не задаётся ни в коем случае - это: "А почему именно этот язык стал для вас первым?" Вот тут-то и кроется иситинная суть этого вопроса! И ответ, как правило чрезвычайно стандартен: "Так получилось, потому что язык программирования выбирался не профессиональным педагогом, а неким лицом, которому этот процесс доверили: чиновником, администратором онлайн-школы, менеджером..." А иногда - и просто слепым случаем.
Обратите внимание, есть даже люди, "утверждающие", что совсем неплохо начинать изучение программирования с языка Ассемблера (по крайней мере, они именно с него и начинали)...
Просто для примера - стандартная программка "Hello World!" на Ассемблере:
1 2 3 4 5 6 7 8 9 10 |
.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 в качестве основного школьного учебного языка программирования. Конечно, после ШАЯП и его аналогов типа КуМира:
1 2 3 4 5 6 7 8 9 10 |
алг Сумм (арг цел 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 кажется на первый взгляд гораздо более "понятной":
1 2 3 4 5 6 7 8 9 10 11 12 |
>>> def deco(func): ... def inner(): ... print('running inner()') ... return inner … >>> @deco ... def target(): ... print('running target()') >>> target() running inner() >>> target .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 или Лисп.
Кстати, согласно регулярно обновляющемуся индексу TIOBE (востребованность ЯП по вакансиям) в 2024 году 22% занимал Python, правда, сразу следом за ним, собирая более 40% (!!!), - шли С-подобные языки программирования: С++, Java, С, C# и JavaScript. То есть, для половины вакансий требовалось знание С-синтаксиса и логики.
Также стоит упомянуть, что любой язык программирования - всего лишь инструмент, который выбирается для выполнения определенной задачи. А задача начинается с её понимания, формализации, поиска и оптимизации решения, его алгоритмизации и только потом идёт написание программы. Поэтому есть более важные вещи, чем заучивание синтаксиса, такие как, например, изучение алгоритмов и структур данных, которые никак не связаны с языками программирования.
Как вы уже поняли, языков программирования - очень много, даже о самых популярных из них невозможно рассказать в одной статье. Но это и не нужно. Самое важное, что нужно помнить начинающему программисту - путь в разработчики не является простым, всё это довольно сложно. Если вы слышали какие-то истории быстрого успеха, что за 6 месяцев люди становятся "крутыми разработчиками", то это всегда связано с быстрым изучением основ WEB-разработки, т.к. там очень просто начать что-то делать и не требуется большого количества знаний. Но это путь кодера, а не полноценного инженера-программиста. Не спешите "быстро" научиться программировать - так как скорее всего в результате у вас получится совсем не то, к чему вы изначально стремились.
PS: Есть такой старый шуточный тест для выбора языка программирования. (Прошу не воспринимать его всерьёз!)
Вот ещё интересная статья на тему
Поделиться: