В наше время многие интересуются программированием и работой программистов. Кто-то собирается учиться на программиста, кто-то подумывает об этом направлении деятельности. Попробуем на пальцах разобраться с такими понятиями, как программа, программист и что такое программирование.
Давайте представим себе, что мы находимся внутри, скажем, некоей компьютерной игры. Вообще, раз уж речь пошла о программировании, то стоит вспомнить, что программирование появилось изначально, как раздел математики – прикладная математика.
Математики любят начинать любые действия со слов: «Пусть дано…». Так вот, пусть дано следующее: мы внутри компьютерной игры «Катание на слонах среди жителей условного племени Мумба-Юмба». Представили? Тогда – поехали!
![Что такое программирование](https://www.compgramotnost.ru/wp-content/uploads/2021/02/chto-takoe-programmirovanie.jpg)
Содержание статьи:
1. Как понять собеседника, говорящего на другом языке
2. Как выглядит двоичный код
3. Заменяем двоичный код на шестнадцатеричный
4. Мнемоническое кодирование
5. О программной визуализации
6. Видео: Что такое программирование и кто такие программисты
7. Двоичный код – далее визуализация, или наоборот
8. Кто такие программисты и какова их роль
9. Что представляют из себя языки программирования
10. Легко ли быть программистом
11. Программирование – это наука, искусство или ремесло?
Как понять собеседника, если он говорит на другом языке
Итак, предположим, мы едем на слоне в компьютерной игре. Навстречу нам идет человек из уже упомянутого гипотетического племени Мумба-Юмба. Он говорит нам что-то. Мы не понимаем. Что делать?
Первое, что приходит в голову, нужен переводчик – человек, который знает наш русский язык и одновременное язык племени. Есть ли такой среди нас? Оглядываемся – увы, нет.
Но зато на соседнем слоне едет знаток русского и английского. Спрашиваем у него (по-русски), понимает ли он что-то из сказанного местным жителем. Ответ отрицательный.
На следующем слоне едет человек, который знает французский и английский. Англичанин с соседнего слона спрашивает француза по-английски, понял ли тот, что сказал местный житель. Очевидный ответ – нет, не понял.
Наконец, всех нас выручает четвертый слон, на котором едет француз, знающий язык племени Мумба-Юмба. Удача! Теперь он говорит французу, знающему английский, что местный житель просит нас слезть со слонов.
Француз тут же переводит на английский нашему соседу, что пора слезать. Нам же переводят по-русски: «Слезть со слона требуют».
Мы не слезаем, мы не знаем, как спуститься. Потому задаем встречный вопрос: «А как слезть-то?». Англичанин переводит французу, тот следующему французу со знанием мумбийского, последний переспрашивает жителя племени. Местный житель терпеливо, но совершенно непонятно отвечает. И вновь пошли только что описанные заморочки с переводами…
Здорово, правда?!
Как выглядит самый простой двоичный код
Давайте представим себе, что в языке племени Мумба-Юмба есть только две буквы. Пусть это будет две латинских заглавных буквы: «I» и «O». При этом «I» звучит по-русски, скажем, как «и». А вторая латинская буква «O» прямо так и звучит по-русски «о». Представили?
Как с помощью этих двух букв в мумбийском языке можно записать фразу «слезайте со слонов»? Пусть дано (как в математике), что в мумбийском языке эта фраза выглядит следующим образом:
- первое слово «слезайте» есть IIOOIOOI (ииооиоои),
- второе «со» выглядит как IOOOIOOO (иоооиооо),
- третье «слонов» записывается как OOIIOOIO (ооииооио).
Тогда выходит, что местный житель нам сказал примерно следующее (запишем слова в столбик):
IIOOIOOI
IOOOIOOO
OOIIOOIO
Замечательно, не правда ли? Давайте теперь заменим буквы на цифры. Букву I заменим на единицу «1», похожую по написанию на эту букву. В свою очередь букву O заменим на похожую на нее цифру ноль «0». Получим новый вариант мумбийского текста в виде:
11001001
10001000
00110010
Что напоминает приведенный выше текст из ноликов и единичек? Конечно же, так называемый двоичный код, состоящий исключительно из нулей и единиц. Значит, теперь переходя с мумбийского языка на математический и компьютерный, – мы имеем дело с самым примитивным, с самым простым языком, который называется «двоичный код».
Само племя Мумбы-Юмбы, конечно, тут ни при чем. Они не примитивные – это лишь математическая абстракция в данном игровом примере.
Почему код называется двоичным
Потому что он состоит всего лишь из 2-х знаков 1 и 0. А почему это так называемый код, а не что-то иное? Да потому что это код и есть, шифр какой-то. И человеку ничего не понятно, что тут закодировано!
Если никому не понятно, то зачем это нужно? Дело в том, что двоичный код прекрасно понимает… процессор, который есть в любом компьютере, телефоне, смартфоне, планшете, ноутбуке.
Более того, процессор понимает только двоичный код. Процессор можно назвать сердцем компьютера, благодаря которому всё у нас работает на компе!
Итак, получается, чтобы «донести» до процессора компьютера, что ему нужно сделать для нас (он же для нас, любимых, старается, не так ли?), нам надо преподнести ему некие команды, наборы слов в виде двоичного кода. И это только что было выше представлено в форме «игры» с катанием на слонах.
Напишем заново сказанное представителем племени. При этом немного модернизируем код. Вставим пробелы после каждых четырех символов кода, чтобы всё выглядело более структурированно. Получаем следующий код:
1100 1001
1000 1000
0011 0010
На этом пока остановимся с двоичным кодом, и перейдем к следующей части повествования.
Заменяем двоичный код на шестнадцатеричный код
Работать с двоичным кодом человеку невозможно. Если попытаться его выучить, как иностранный язык, никто, пожалуй, с этим не справится. Слишком уж примитивно всё выглядит. Нужно сделать код более наглядным.
Надо как-то упростить двоичный код. Для этого давайте изменим каждую группу из 4-х цифр двоичного кода на что-то более понятное и читабельное. Например, сделаем таблицу перевода двоичных чисел в шестнадцатеричные числа.
Что такое шестнадцатеричное число? Есть, скажем, десятичное – десять известных цифр от 0 до 9. А как может выглядеть шестнадцатеричное исчисление?Это то же самое, только знаков будет не 10, а 16. Но ведь цифры уже закончились! Мы просто добавим к цифрам латинские буквы A, B, C, D, E, F.
Итак, делаем таблицу перевода. Она будет нужна французу, который едет на одном из слонов. Он, конечно, и без нашей таблицы умеет переводить с мумбийского языка на французский. Но мы делаем таблицу перевода, чтобы нам попытаться понять, как он переводит.
К настоящим французам это, понятно, не имеет никакого отношения, хотя известно, что лучшие классические математики были сплошь французы! И одним из переводчиков в цепочке перевода мумбийского текста в игровом примере катания на слонах у нас был француз.
Вот таблица перевода двоичного кода в шестнадцатеричный:
0=0000, 4=0100, 8=1000, C=1100
1=0001, 5=0101, 9=1001, D=1101
2=0010, 6=0110, A=1010, E=1110
3=0011, 7=0111, B=1011, F=1111
Подглядывая в таблицу перевода, запишем всё, что сказал нам местный житель, но теперь уже на условном французском языке (с помощью шестнадцатеричного кода):
1100 1001 = С9 (потому, что C=1100, 9= 1001)
1000 1000 = 88 (ибо 8=1000, 8=1000)
0011 0010 = 32 (3=0011, 2=0010)
Запишем теперь сильно укоротившийся код в виде строки, а не в столбик:
C9 88 32
«Слезай со слона», так и слышится, не правда ли?! А ведь всё начиналось со слов: ииооиоои иоооиооо ооииооио…
Про мнемокоды или о фразах в языках программирования
Наверное, мы согласимся, что условный французский (то есть, шестнадцатеричный) язык несколько проще воспринимается, чем мумбийский (двоичный). Стало ближе к человеческому восприятию, но все-таки язык еще слишком далек от идеала.
Малопонятно, что значат эти странные цифры и буквы: C9 88 32. Хотя уже лучше, чем и-кание («I») и о-кание («О»), точнее, лучше сочетания единиц и нулей.
Представим себе далее, что условный английский язык, которым владеет следующий переводчик в нашей игровой цепочке, состоит из некоего подобия английских слов. Допустим, что:
- UP будет означать «слезай»,
- FROM будет означать русский предлог «со» (или «с»),
- а ELEPHANT есть не что иное, как «слон».
Настоящие английские слова буквально, в переводе, означают следующее:
- up – вниз,
- from — от или с,
- elephant – слон.
Осталось сделать таблицу перевода с условного французского языка (с шестнадцатеричного кода) на условный английский. Выглядеть она будет так:
- 32=ELEPHANT,
- 88=FROM,
- C9=UP.
Таблица, приведенная выше, расположена в порядке возрастания величин шестнадцатеричных чисел. Тогда получим следующее (прямо как в математике: пусть дано…, тогда…):
С9 88 32 = UP FROM ELEPHANT
Последняя запись UP FROM ELEPHANT есть не что иное, как мнемокод.
Мнемонический код – это код, который интуитивно понятен на человеческом уровне восприятия, потому что здесь присутствует, так называемая, мнемоника.
Перед нами уже не странный двоичный или попроще, но не менее странный шестнадцатеричный код. Мы явственно видим некие подобия привычных слов. Пусть это не совсем человеческий язык. Пусть это еще не совсем точное подобие нашей речи и письменности.
Двоичные и шестнадцатеричные коды более понятны железному автомату, каковым является компьютер и его сердце – процессор. Мнемокод может иметь, например, такой вид: UP FROM ELEPHANT. Согласитесь, что такой мнемокод уже может читать и писать человек.
Как мы воспринимаем компьютерную информацию
![кто такие программисты](https://www.compgramotnost.ru/wp-content/uploads/2021/02/kto-takie-programmisty.jpg)
Догадливый читатель, разумеется, предположит, что из мнемокода, из условного английского языка в нашем игровом примере, можно сделать перевод на русский, понятный нам язык. По идее, это может выглядеть так:
Слезай=UP, С(о)=FROM, ELEPHANT=Слона.
Получается следующее:
UP FROM ELEPHANT = Слезай Со Слона
Вот мы, кажется, добрались до понятного нам языка. Но всё не совсем так. Дело в том, если мы посмотрим на современные компьютерные и смартфоновские приложения, там мало русских или английских слов, меню и прочего. В них много картинок: кнопок, галочек, отметок, рисунков и прочего. Язык общения с компьютером давно стал визуальным, рисованным, если можно так выразиться.
Поэтому на последнем этапе перевода с мумбийского языка процессора компьютера на русский язык пользователя компьютера, мы должны увидеть не русские слова «слезай со слона», а некие графические образы. Скажем, будет нарисована лестница, которая сама по себе или с чьей-то помощью будет приставлена к слону. Далее возникнут некие призывные действия (скажем, музыка, звуки, указатели на экране), которые четко покажут нам: давай, по-быстрому, слезай со слона!
Получается, что самый последний переводчик с условного английского языка мнемокодов должен переводить мнемонический (буквенно-цифровой) код на язык графики, язык рисунков. Собственно говоря, так и происходит. В итоге мы видим графические образы (сопровождаемые текстами и звуками) на экранах наших устройств.
Видео: Что такое программирование и кто такие программисты
Переводим команды процессора в визуальные образы и обратно
Допустим, мы слезли со слона, как призывает нас последний переводчик с условного английского на графический язык. Но потом по условию задачи нам надо обратно залезть, типа, «поехали дальше».
Значит, мы мышкой или тапом пальцем покажем, что собираемся залезть обратно. А откуда вдруг возьмется (из ниоткуда) лестница? Нужно, получается, перевести процессору:
- с графического тапа (клика) по спине слона, означающего «поехали дальше», на язык мнемокода,
- затем из мнемокода нужно сделать шестнадцатеричный код,
- наконец, понадобится получить двоичный код из шестнадцатеричного.
И только тогда процессор сделает некие действия, чтобы в ответ наш экранный персонаж взгромоздился на высокую спину могучего животного (на картинке, разумеется).
Получается, что перевод происходит как вперед (с двоичного кода на язык визуализации), так и назад (с языка визуализации на двоичный код). Собственно говоря, в начале статьи об этом так и было сказано на примере «катания на слонах».
Нам говорят некий текст на языке племени Мумба-Юмба, переводчики последовательно переводят этот текст. Мы задаем встречный вопрос. Навстречу происходит обратный последовательный перевод.
Про программистов: кто пишет код
Программист – этот тот самый персонаж, которого мы не видим на экране компьютера, телефона, смартфона, планшета, ноутбука, но который нам все организует. Именно программист переводит с понятного нам визуального языка на непонятный нам язык неких мнемонических кодов, и наоборот, в обратном направлении хода мыслей и действий.
Программисты знают, разумеется, язык общения людей. И при этом они знают условный английский (если пользоваться нашим игровым примером) – язык мнемокодов. Именно программисты в буквальном смысле переводят любые наши клики, тапы, жесты, вводы символов, нажатия на клавиши клавиатуры и прочее на внутренний язык компьютера.
Программисты, на самом деле, не переводят, как нам обычно это представляется. Они сразу пишут на языке мнемокодов всё то, что мы должны будем увидеть на экране, услышать в колонках или наушниках, разглядеть на картинках, на видео, в текстовом виде и др.
Программисты не сидят в засаде с задней стороны экрана монитора, ожидая когда мы куда-нибудь кликнем или тапнем. Они заранее рассчитывают все наши возможные действия. И на все наши предполагаемые действия заранее пишут код (мнемокод). Заранее! Тогда, что бы мы не сделали на экране, с помощью мышки, клавиатуры, стилуса и прочих устройств ввода, – на каждое наше действие работают заранее написанные программы (заранее написанный код) программистов.
Вот почему программистов называют программистами, а не переводчиками. Ибо они не переводят из одного кода в другой по ходу дела, а заранее предусматривают ВСЕ (!) возможные действия и заранее программируют (кодируют) абсолютно все действия. Именно программисты всё кодируют или, иными словами, программируют. Потому они и программисты.
А почему не «кодисты», например, а «программисты»? Потому что понятие «программирование» появилось в математике намного раньше, чем появились компьютеры. Может даже, лет на 100-150 до появления наших привычных компьютерных устройств. Языки же человеческого общения развиваются медленно, порой, значительно отставая от технического прогресса, вот потому и «программисты». Но это уже совсем другая история…
Про языки программирования и их элементы
Программисты НЕ спускаются на самый нижний, примитивный уровень двоичного кода. За них это сделали ранее другие программисты. Те, прежние ранние программисты сначала создали для современных программистов так называемые трансляторы языков программирования. Современные программисты пишут программы на языках программирования с помощью созданных трансляторов.
Что такое языки программирования? Программы пишут в виде мнемокодов, примерно как показано в наших простых примерах. Мнемокоды пишут с помощью разных символов, букв, цифр, знаков препинания, значков, рисунков и прочих базовых элементов языка программирования. Всё вместе – это алфавит языка программирования.
В русском языке тоже есть алфавит. Только мы под алфавитом понимаем строгую последовательность букв. А вот, например, в китайском языке алфавита нет в таком понимании, нет строгой последовательности иероглифов. Но с математической, с программистской точки зрения, в китайском языке алфавит есть – это полный набор всех иероглифов языка, независимо от порядка их расположения.
В языках программирования алфавит – это полный набор ВСЕХ допустимых символов языка программирования, включая тексты, графику и прочее.
Помимо алфавита в языках программирования есть полный перечень ВСЕХ возможных слов, которые можно употреблять в программах. Набор слов и правила их написания – вместе это своего рода синтаксис языка, его правописание.
В дополнение к синтаксису добавим правила формулирования фраз на языке программирования – это уже семантика. Синтаксис вместе с семантикой составляют вместе так называемую грамматику языка программирования.
В наших естественных языках (в русском языке, например) тоже есть грамматика. Только она значительно более сложная. Ибо наша грамматика – это контекстно свободная грамматика. Мы можем говорить и писать одно, а подразумевать совершенно другое. Потому среди людей встречаются поэты и писатели, художники и музыканты. Они, вроде бы пользуются теми же словами и образами, как остальные люди, но создают шедевры!
Грамматики языков программирования и их применение
Грамматики языков программирования несколько проще по сравнению, например, с грамматикой русского языка. Они имеют ограниченные контекстные условия. Проще говоря, с помощью языков программирования нельзя писать романы, поэмы, вирши. Это точные, можно сказать, во многом строго математические языки. Но со своими грамматиками, несмотря на определенную простоту по сравнению с естественными человеческими языками (русский, английский, китайский и прочие).
Следом за грамматикой идет уже смысловая часть языка – умение его применять на практике. Говорить на языках программирования не приходится, а вот писать – сколько угодно.
Умение писать на языках программирования – это и есть смысловое выражение того, что должен делать компьютер (смартфон, планшет и прочее) в ответ на действия людей или на действия подключенной к компьютеру иной техники (принтеры, сканеры, мышки, клавиатуры и прочее).
Выходит, что программисты должны учить языки программирования почти как иностранные языки: учить алфавиты и грамматики. Следом программисты должны на практике применять языки программирования. Мало знать алфавит, синтаксис, семантику языка программирования. Нужно, самое главное, уметь писать правильно работающие безошибочные тексты программ!
Про синтаксис и семантику в программировании
Легко ли научиться говорить на иностранном языке? Можно выучить все буквы, много слов, грамматику по учебнику. Но вот чтобы заговорить – потребуется практика общения. Аналогично в программировании.
Любой язык программирования можно выучить по инструкциям, в которых этот язык описан: алфавит, синтаксис, семантика. Далее потребуется упорно тренироваться, пробовать писать программы, смотреть, что будет получаться в итоге, исправлять возникающие ошибки.
В процессе написания программ, увы, ошибки возникают. Аналогично мы можем совершать ошибки, говоря на иностранном языке. Нас могут не понять. Компьютер тоже может не понять написанное программистом. Это и есть ошибки.
Ошибки бывают, во-первых, синтаксические. Вместо UP напишем по ошибке AP, или вместо ELEPHANT запишем ELEFANT. Можем подобным образом ошибиться? Почему бы и нет. Синтаксические ошибки находит транслятор языка программирования (тот, что был написан ранее другими программистами) и показывает их программисту. Мол, что это за AP? Нет такого слова в синтаксисе языка. Исправляй, пожалуйста!
В распространенном текстовом редакторе Microsoft Word компьютер тоже указывает на синтаксические ошибки. Редактор подчеркивает ошибочные слова красным цветом. Скажем, мы печатаем ошибочное слово, которого, возможно, нет в нашем родном языке. В ответ редактор Word подчеркивает неправильное слово красным цветом и, порой, сразу предлагает варианты исправлений. Похожим образом программист может видеть синтаксические ошибки в текстах написанных им программ (в написанном коде).
Ошибки могут быть, во-вторых, семантические. Допустим, слова все правильные, но вот их совместное употребление может вызывать вопросы. В редакторе Word для обозначения семантических ошибок используется подчеркивание зеленым цветом: мол, текст какой-то странный.
Трансляторы языков программирования тоже могут во многих случаях указывать на семантические ошибки. И тем самым, позволяют программистам исправлять ошибки в текстах программ.
Легко ли программистам писать программы
Ошибки могут быть смысловыми. Тут уже компьютер нам не помощник.
Допустим, возьмемся мы за перо, откроем Microsoft Word и напишем подобие романа «Война и мир», подражая Л.Н Толстому. Word нам покажет, что все ОК, нет ни красного, ни зеленого подчеркивания. Но шедевр вряд ли получится! Почему? Слова-то правильные, синтаксис, семантика – всё на месте. А роман не задался, не выражает он те образы и явления даже близко к тому, что смог отобразить великий писатель.
Так и в программировании. Можно все правильно сделать, все верно написать, без ошибок. Но работать даже грамматически верная программа не станет. Или будет работать, но не так, как задумано.
Смысловые ошибки – самые трудные для программистов. Чтобы их было как можно меньше, программистам пишут технические задания, где подробно поясняют, что должно быть сделано, в какой последовательности, зачем и почему. Отчасти, это страхует от сложных смысловых ошибок. Но полностью не избавляет от необходимости искать ошибки, даже если синтаксис и семантика языка программирования полностью выдержаны.
Тут на помощь программисту приходят разные дополнительные средства, такие как, например, трассировщики программ. Они выполняют программу не всю сразу, а как бы по шагам. Сделает трассировщик шаг, остановит программу, выведет промежуточные результаты для осмысления. Затем по команде программиста, делается следующий шаг. Снова – стоп, далее осмысление. И так далее.
Инструменты для отладки программ — так иногда называют одной фразой всю совокупность методов поиска и устранения ошибок. Таких инструментов существует множество. Программисты должны знать методы отладки кода и уметь ими пользоваться. Это еще одна сторона требуемой квалификации программистов.
Суммарно получаем перечень необходимых умений программиста:
знать языки программирования, уметь ими пользоваться на практике и владеть методами отладки программного кода до конечного, полностью рабочего состояния.
Что такое программирование – наука, искусство или ремесло?
Делалось много попыток обобщить знания о программировании. Но вопрос о том, что такое программирование с философской точки зрения, остается открытым. В разные моменты, в разных ипостасях – это и наука, и искусство, и ремесло.
Здесь самое главное состоит в том, что программирование – это еще и усидчивость, стрессоустойчивость, целеустремленность, а также терпение, терпение, терпение.
Против железного и хладнокровного компьютера эмоции не помогают. Нужны холодный разум, точный расчет, следование техническому заданию (если оно есть), внимательность и опять терпение, терпение, терпение.
Ведь предстоит из понятных человеку текстов, картинок, видео, жестов, взглядов и даже мыслей создать с помощью кода (посредством программирования) набор совершенно точных, математически верных и безупречных простейших действий автомата, каковым является компьютер или смартфон, или планшет.
Немыслимо трудно наш свободный язык и мышление облечь в форму простых и понятных кликов, тыков, тапов, иных жестов, которые должны стать понятны бездушному автоматическому устройству. Ведь «железки» на самом деле умеют всего-то выполнять одну-две сотни простейших команд, типа сложение, умножение, сравнение больше или меньше и тому подобное.
Мы не преуменьшаем мощности и возможности современной компьютерной техники. Но напоминаем, что компьютеры умеют выполнять строго ограниченный набор действий.
Программисты же – это те, кто наше безграничное мышление, нетривиальные действия и, порой, непредсказуемые поступки должны перевести на язык конечного автомата. Этому учат, этому учатся, у многих это отлично получается!
Дифирамбы программистам
Сложнейшее человеческое мышление и невероятные поступки программисты переводят в огромное количество простейших действий. А если простых действий безумно много, то это может в конечном итоге сымитировать высшую деятельность людей. Но никогда кодирование (программирование) не заменит самих людей, по крайней мере в той конфигурации компьютерной техники, какая есть сейчас.
Спасибо программистам! Без них не было бы всего разнообразия современной техники, устройств, компьютеров, программ, приложений. И не было бы огромной пользы для нас, простых и неискушенных пользователей компьютеров, телефонов, смартфонов, ноутбуков, планшетов.
Ура программированию, а также трансляторам языков программирования и их создателям! Слава всему тому, что позволяет нам быть на ты с техникой, которая нас окружает и работает на нас. И вот тут в первую очередь – слава программистам!
Дополнительные материалы:
1. Что такое переменная в программировании и чем она отличается от константы
4. Что такое системное программное обеспечение
5. Деление в Excel двух чисел и работа над ошибками при вводе данных