Добрый день. Продолжаю свой рассказ про он-лайн обучение по государственной программе «Цифровые профессии».
Начинаю публикации непосредственно по программе обучения. Материал беру из лекций, чтобы можно было оценить ценность урока.
Когда люди только начинают учить язык программирования, они считают, что программирование целиком и тот язык программирования, который учат сейчас — одно и то же. Это приводит к следующему: вы научились писать на одном языке и думаете, что всё программирование такое, а когда начинаете писать на другом языке, то повторяете принципы первого языка. Есть один небольшой риторический вопрос: «Есть ли жизнь после Java и призмы языков программирования?». Разберёмся, что здесь имеется в виду.
Для джавистов есть даже такое обидное выражение: «Java головного мозга». Потому что те, кто начал с языка программирования Java, продолжают писать так, как было в первом языке. Это свойственно не только для Java, но и практически для любого другого языка. Поэтому важно понимать, что язык программирования и программирование целиком — разные вещи.
У вас может возникнуть вопрос: «В чём проблема? Я сейчас учу один язык, неважно какой, а потом, если понадобится, выучу другой». Да, так действительно можно. Но переход с одного языка на другой доставляет много сложностей.
Например, вы сильно углубились в какой-то один язык и не прочувствовали момент, когда ушли в особенности этого языка. В этом случае вы не поняли программирование, как составление алгоритмов.
Возьмём пример, связанный с изучением иностранных языков. Когда вы только начинаете изучать языки, возникает большая проблема.
Вы поняли перевод слов, знаете, как, например, с русского языка перевести на английский, но когда строите предложения и делаете дословный перевод, грамматика не соблюдается, а люди вас плохо понимают на английском языке. Недостаточно заменить слова и оставить ту же конструкцию, надо понять, какая конструкция должна быть изначально.
Основная идея заключается в том, что недостаточно перевести слова и оставить их в той же конструкции. Получится то же, что и с «Java головного мозга».
Вы взяли новый язык программирования, поменяли слова из языка Java на слова из языка, например, Python, а в результате почему-то ничего не работает или работает, но над вами все смеются, потому что так делать не надо. То же самое связано и с обычными языками, которые мы учим.
Вы можете попробовать заменить русские слова на английские, но если оставить их в пределах правил русского языка, то ничего хорошего не получится. Да, люди вас, наверное, поймут, додумают, но в программировании такое не работает. Компьютер вряд ли сможет додумать всё за вас.
Поэтому важно понимать, как и на каком языке надо писать, какие особенности имеет тот или иной язык программирования.
Раз мы начали говорить об обычных языках, на которых общаемся, скажем, что сейчас существует более семи тысяч языков. Естественно, их было больше: какие-то исчезли, а какие-то остались. Но на сегодняшний день по данным «Википедии» существует более семи тысяч языков, на которых люди могут общаться. На сорока наиболее популярных говорят две трети населения планеты.
А теперь подумаем, о чём эти люди могут на этих языках говорить.
Возьмём, например, слово «собака». На русском языке — «собака», на английском — dog, на немецком — hund, и ещё более сорока языков, на которых это слово можно произнести. Но сама собака, как животное, живое существо, от этого никак не поменяется. Мы почему-то называем её по-разному, но сам объект остаётся таким же.
Или слово «привет». На русском языке оно произносится как «привет», на французском — bonjour, на английском — hello и т. д. Опять же, смысл не меняется, но средства его донесения у каждого языка могут быть разные. Где-то похожие, а где-то нет.
Таким образом, важно понимать, что возникает следующая конструкция: есть смысл, который мы хотим донести, и средства донесения этого смысла. В такой ситуации язык, на котором мы разговариваем, считается средством донесения этого смысла, но никак не смыслом. То есть собака не перестанет быть собакой, если мы называем её hund, а не «собака», как привыкли.
Другой пример связан с радугой. Есть радуга гражданина РФ и есть радуга иностранного гражданина. Выясним, в чём здесь смысл.
Мы с детства привыкли, что у нас есть семь цветов радуги. Но если посмотрим на английский язык, то в нём нет голубого цвета. Есть blue — «синий», light blue — «светло-синий», а голубого в нашем понимании нет. И сама радуга у них состоит не из семи цветов, а из шести.
Можно найти примеры языков и стран, где есть люди, которые считают, что радуга состоит из пяти цветов. Однако очевидно, что само атмосферное явление, радуга на небе, одна и та же. Мы видим её одинаково, но ввиду каких-то особенностей интерпретируем по-разному. Для нас очевидно, что цветов семь, но в других языковых группах их может оказаться иное количество: где-то больше, а где-то меньше. Просто люди так привыкли.
То же самое с языками программирования. Надо запомнить, что есть смысл и есть средства донесения (интерпретация) этого смысла.
Однако не существует единственного хорошего языка. Нет какого-то языка, который идеально подходит для всего. У каждого языка есть какая-то сфера применения, в которой он проявляет себя лучше, чем остальные.
Исторически сложилось, что русский язык хорош для поэзии, прозы, написания романов. В качестве примера мы слышали, что Лев Толстой в «Войне и мире» мог по 1–2 страницы описывать, как колышутся листья на ветру.
Но если мы говорим о немецком языке, то принято считать, что он хорош для юриспруденции. Этот язык более точный, он не предполагает нескольких смыслов. Да, там предложения размером с абзац, но в юриспруденции это допустимо, и двойных толкований нет.
Английский же язык подходит для математики и программирования.
Однако важно понимать, что основные публикации на научные, а именно: математические, темы проходят на английском языке. У этого есть несколько причин. Одна из них — английский язык более строгий.
Прямого перевода может не быть, и мне придётся адаптировать то, что хочу сказать, на другой язык — это вызовет много сложностей. Однако если заранее договориться, что означают те или иные значки, то можно очень сложные понятия и определения доносить до других математиков. И все всё поймут.
Если до этого мы говорили, что есть русский язык, немецкий и английский, то для других сфер можно придумать ещё какие-то языки.
Представим себе нотную грамоту. Разлинованная тетрадь с точками и закорючками — это мелодия. Её тоже можно было бы записать как-то иначе, но договорились записывать в нотной грамоте. И все музыканты в целом понимают, о чём идёт речь.
Таким образом, для каждой сферы удобен тот или иной язык. И это не только привычные нам языки, на которых общаемся, но и экзотические языки, удобные для конкретной сферы применения.
Но если мы хотим, чтобы это решил человек, который русский язык не знает, а знает, например, английский, китайский или немецкий, возникнет гора проблем. Нам потребуется перевести всё на другой язык, записать это с учётом его особенностей, и только тогда человек сможет воспроизвести решение.
Если мы говорим про машину, то ситуация ухудшается. Додумать она не сможет, а решение потребуется произвести точное.
Поэтому для записи алгоритмов, а то, что мы рассматривали, и есть алгоритм — последовательность действий, которые необходимо выполнить — используется такая форма записи.
Чтобы записи этих алгоритмов могли воспроизводить разные люди, используются блок-схемы.
То, что мы можем написать в нескольких предложениях, можно записать в виде такой блок-схемы. Да, чтобы её понять, требуется некоторое понимание блок-схем, немного с ними поработать, но это не очень сложно. Если вы понимаете, что мы идём от блока Start по стрелкам, то, как в детском лабиринте, переходим с одного объекта на другой, идём с одной стрелки на другую и так доходим до конца. В конце — решение.
Поэтому, если вы записали блок-схему в таком виде, её сможет понять человек, даже не говорящий на русском языке.
Но у этой блок-схемы есть большая проблема. У нас жёстко зафиксированы числа, с которыми мы работаем. Если мы возьмём другие цифры или поменяем их местами, наша блок-схема сломается.
Это очень неудобно, так как для новой задачи придётся придумывать новую схему.
Мы до сих пор составляли какие-то алгоритмы. Разбирались с тем, как они работают, даже как-то их записывали. Но сейчас все эти алгоритмы до сих пор предназначены только для людей. Мы записывали их на русском языке и оформляли в виде блок-схем, но компьютер не понимает ни слова, ни картинки, ни блок-схемы. Поэтому нам надо каким-то образом донести до него информацию.
И хотя решение уже найдено, и мы записали его в нескольких видах, только здесь возникает программирование. Только здесь возникает язык программирования, на котором надо записать решение.
Если хотите, чтобы компьютер смог выполнить составленный вами алгоритм или блок-схему, надо написать это на понятном для него языке.
В качестве примера далее идёт реальный код, который может работать. Этот код написан на двух языках программирования. С одной стороны — язык Java, а с другой — Python.
Обратите внимание на код. Если на него посмотреть и попытаться вспомнить алгоритм, который мы расписывали, станет понятно, что здесь происходит.
Языки отличаются не только по синтаксису, но и по внутреннему устройству. Если посмотрим на внешние отличия, то увидим, что в Java почему-то требуется указывать, какое значение будет храниться внутри.
Немного зная английский язык, мы поймём, что int — integer — это целое число. Поэтому в Java нам надо подсказать компьютеру, что в переменной a будет находиться число, равное 1.
Если мы говорим про Python, то там синтаксис немного другой. В Python можно не указывать тип значения, который будет находиться в переменной. Компьютер сам с этим разберётся.
Однако у вас не должно появиться ощущение, что Python лучше, чем Java. У разных подходов есть свои особенности. И то, что мы не указываем в Python тип, не лень программистов. Просто есть ряд особенностей, которые позволяют использовать то, что мы не указываем. И наоборот, у Java есть ряд преимуществ, которые достигаются именно тем, что этот тип надо указывать. Главное, чтобы вы поняли, что наличие типа в Java и его отсутствие в Python — просто некоторые особенности языков.
Ещё мы видим, что в Java надо ставить «;» после каждого выполняемого действия. В Python это не требуется.
Если набрать код на языке Python, он заработает. Однако на языке Java код в таком виде работать не станет. Просто Java немного более сложный язык, он требует дополнительных записей. На языке Python — полностью рабочая программа. Но смысловая часть языка Java тоже передана полностью.
Подписывайтесь на канал, чтобы не пропустить новые публикации.
До новых встреч!
Статья написана по материалам лекции: «Что такое программирование и языки программирования» Ильнар Шафигуллин, компания «GeekBrains».