Сайт вебмастера

Какой язык программирования учить новичку

04-06-2020Время чтения ~ 6 мин.Блог 6792

Для новичков, которые только задумываются об IT, вопрос выбора первого языка программирования (ЯП) стоит достаточно остро. И это понятно — ведь языков очень много, а критерии выбора не такие очевидные.

Эта тема, безусловно, холиварная, поскольку опытные программисты дают советы через призму собственного жизненного опыта. Масла в огонь подливают менеджеры и маркетологи многочисленных контор, которые занимаются обучением. Такие давно уже не стесняются давать объявления, где обещают сделать востребованным супер-пупер программиста за 1, 2, 3 (подставьте любое число) месяцев. В качестве первого языка предлагают что угодно, приводя в качестве аргументов некий рейтинг популярности или даже количество меток на StackOverflow.

Вся эта маркетинговая чушь рассчитана только на бизнес обучающих контор, которым в общем-то без разницы какой «втюхать» язык программирования. Благо курсов написано предостаточно...

Перед тем, как податься в программисты, нужно оценить свои способности. Программирование требует в первую очередь сильного логического мышления и умения систематизировать информацию. Это определённый склад ума, который даётся от рождения и никогда не меняется. В соционике за это отвечает функция Логика (или Мышление в MBTI). Самый простой путь — это пройти несколько соционических тестов (для достоверности) и определить есть ли у вас Логика в названии ТИМа. Если есть — отлично. Нет... ну есть множество других профессий, даже в области IT, например дизайнеры, менеджеры, seo'шники, копирайтеры и т.п.

Работа программиста по сути заключается в двух вещах. Первая — это работа с данными. Есть входящая информация, потом с ней что-то делают, а на выходе итоговые данные.

Вторая задача — это алгоритмы и связи. Данные нужны для того, чтобы что-то с ними сделать по определенным алгоритмам, которые задаются в функциях. В свою очередь функции могут быть между собой связаны, например одна использовать другую.

Поэтому html-верстальщики не являются программистами — они не создают алгоритмы и не работают с данными.

Любой язык программирования использует собственную семантику, но по сути предназначен для создания алгоритмов для обработки данных. То есть программирование на любом ЯП хоть и происходит в своей семантике, всё-равно решает определенную задачу. Сменив один ЯП на другой, мы поменяем семантику, но задача останется той же.

Хорошая аналогия — обычные человеческие языки. Если мы хотим передать суть слова, то в разных народностях будем использовать разные звуки/буквы. С програмированием тоже самое — семантика вторична, главное понимать общие принципы решения задач (алгоритмы, данные, связи).

Поэтому самый важный момент — нужно учиться не конкретному языку программированию, а самому программированию. Когда есть хорошая основа, то большинство ЯП становятся похожими друг на друга.

Естественно, речь не идёт об экзотических, вроде Velato.

Первым языком программирования должен быть такой, который даст эту самую базу в полном объёме. С моей точки зрения — лучший выбор — это старый добрый Pascal.

Это не значит, что вы будете в будущем на нём работать. Найдутся и те, кто будет кричать, дескать Паскаль старый и немодный. Это глупости. Паскаль прекрасно подходит именно для новичков поскольку имеет ряд преимуществ.

1. Простой синтаксис и семантика. Проще него, наверное только Бэйсик. Программа на Паскале фактически читается как обычный текст.

2. Мало «синтаксического сахара». Это очень важно: когда сокращение кода, приятное для опытных, но вводящих в ступор новичков.

3. Возможности языка. В Паскале есть практически все средства, которые используются в других ЯП. Это переменные, константы, циклы, функции, процедуры, условия и т.д.

4. Это компилируемый язык. То есть на выходе полноценная программа, которая будет работать на любом компьютере. Ей не нужна дополнительная обвеска в виде виртуальной машины или интерпретатора.

5. В Паскале статическая типизация данных. Это позволит полноценно понять, что такое память и как она используется. К тому же это развивает ценный навык корректной работы с разными типами данных.

То есть Паскаль — это именно та самая база, с которой можно спокойно перейти на другой язык.

Почему не стоит сразу изучать интерпретируемые языки? Они работают в пределах «программы-оболочки» и не создают на выходе своей самостоятельной программы. То есть не возникает понимания того, как именно исходный код превратился в исполняемый.

В компилируемом языке этот процесс чёткий и понятный — на выходе получается именно исполняемый код, который можно сопоставить Ассемблеру. Ниже его только машинный код (про калькуляторы MK 61/52 не будем...).

В Паскале можно прямо писать на ассемблере. Когда-то это было очень модно и круто. :-)

Сложно начинать с языков с динамической типизацией (PHP, Python, Ruby, JavaScript и т.д.), поскольку это тотально размывает даже само понятие «данные». При строгой типизации мы не просто объявляем переменную, но и задаём её тип и размер, который выделяется в памяти. Это позволяет осознать тот факт, что переменные — не какая-то абстракция, а именно «ячейки памяти», которые имеют физическую природу. Очень много ошибок в программирование связано именно с динамической типизацией, то есть когда переменная может принять, совершенно другой тип данных. Скажем вы ожидаете строку, а приходит число. Отловить такие ошибки очень сложно.

Не зря в PHP наметился тренд в сторону статической типизации.

Почему не стоит ориентироваться на популярность языков? Такие рейтинги обычно строятся по количеству вакансий или вопросов и это никак не связано с самим программированием. Скажем Java намного популярней Паскаля, но для новичков явовский синтаксис окажется очень сложным, не говоря уже о том, что это 100% объектно-ориентированный язык.

Годится ли Python в качестве первого языка? Да, годится, но только с наставником. Дело в том, что Python имеет достаточно своеобразную реализацию многих вещей. Например цикл «for» на самом деле это цикл «for each». Или например мутабельные и иммутабельные переменные, скажем вы не можете изменить символ строки по индексу. Отсутствие констант. А про особенность модели ООП вообще можно говорить часами. С другой стороны именно Python обладает очень хорошей читабельностью и возможностями, поэтому сам по себе синтаксис не вызывает особых сложностей у новичков. C наставником, который знает все эти особенности и может обратить на них внимание изучение будет проходить намного эффективней.

Что касается JavaScript, то это достаточно своеобразный язык, который имеет очень много странностей. Хорошо, когда их понимает опытный разработчик, но они совсем не подходят для новичков. Самый, наверное, простой пример — понятие контекста выполнения, когда переменную можно объявить после её использования. В другом ЯП код вывалится с ошибкой, но в JS прекрасно работает. Понять это совершенно невозможно и таких «приколов» в JS полно.

Языки C и C++ имеют, пожалуй, самое сильное влияние, поскольку синтаксис C по сути стал «стандартом» для многих других ЯП. Но, так уж сложилось, что C и тем более С++ имеют достаточно сложный синтаксис. Поэтому я думаю, что если их и изучать, то лучше после Паскаля. «Утонуть» в синтаксисе C элементарно.

И конечно, же совершенно не годятся в качестве первого языка все строго объектно-ориентированные. То есть Java или C# точно не годятся, поскольку сама концепция ООП сложна и вытекает из понимания типов данных.

В заключении, наверное стоит отметить «визуальное программирование». Я не про Scratch, а про IDE, которые позволяют визуально создавать формы и элементы программ. Для Паскаля, это конечно же Delphi и Lazarus. В Microsoft Visual Studio — это С# и другие языки (я просто не в курсе). Думаю, что переход к подобным IDE возможен только после получения базы, поскольку IDE скрывают большую часть работы по созданию файлов ресурсов. Этот момент тоже желательно понимать, поскольку без него программирование будет превращаться в какую-то «магию» без понимания сути происходящего.

ps Ну и бонус: большая коллекция «Hello World» на самых разных языках программирования.

Похожие записи
Комментарии (3) RSS
1 Ирина 2020-06-04 21:54:55

Почему никто мне раньше этого не сказал ((


2 Старый прохожий 2020-10-13 21:04:14

Си, на самом деле, гораздо проще С++, гораздо ближе к ассемблеру (при необходимости) и имеет реальную востребованность (целый Linux). Так что, наверное, это лучшая кандидатура. Это во-первых.

Во-вторых. Отсутствие зависимостей от runtime сейчас мало реально даже в компилируемых языках, а интерпретаторы python, perl и прочих lua почти наверняка уже присутствуют в системе. Не особенно значимый аргумент. Да и по скорости некоторые интерпретаторы уже вполне сравнимы - с неповоротливым C++ уж точно.

Ну, и соционическое обоснование тоже как-то неубедительно :) уж извините...


3 Владимир Камуз 2020-10-23 10:45:16

По моему можно научится всему - было бы желание и время. То же самое по поводу талантов в спорте и других областях. Врождённый талант и предрасположенность - хорошо, но если у тебя этого нет, то не нужно сразу отказываться от мечты, не важно что это. По моему лучший язык - это JavaScript - тебе для начала нужно только браузер, он самый популярный сейчас и он везде. А вообще нужно исходить из того что ты хочешь - делать простые сайты или веб-сервисы, мобильные или дескопные приложения и т. д. - и тут опять же с JavaScript можно попробовать себя везде.