Решила записать текст своего открытого урока для первоклассников в лицее.
Уже к середине первого класса дети начинают задаваться вопросом: "Зачем мне все эти знания, которые дает учитель?" А многие из этих знаний оказываются очень полезными спустя годы, когда они войдут в мышечную память и забудутся. Это те крошечные механизмы в мозгах, которые помогают потом усваивать более сложные знания.
Когда начинаешь учить программированию не в первом классе, а на первом курсе, сталкиваешься с непониманием, когда многие элементарные знания уходят настолько вглубь памяти, что уже повзрослевшие дети попросту не воспринимают основы, на которых держится все программирование. Выучить язык - это не сложно. Тут как в анекдоте про русского студента и экзамен по китайскому: "Есть учебник? Пошли сдавать!"
В этой статье я расскажу свое видение программирования, которое у меня лет с 8 базируется на пособии для младших школьников, которое было создано моей мамой много лет назад. И многие идеи (не считая описанного в книге языка программирования) являются базой, которую должен знать всякий программист. Даже тот, который сам не пишет руками ни строчки кода.
Я всегда говорю, что программист, как художник, писатель, архитектор, он творит свой собственный мир, в котором потом живут те, кто купил программу. Это не обязательно игра. Это может быть и серьезная расчетная разработка, и инструмент для представителя какой-то другой профессии. Но каждая разработка - это свой мир. А в любом мире, окружающем нас, есть три вещи:
1. Предмет (нечто, что мы видим и созерцаем)
2. Признак (то, что характеризует предмет)
3. Действие (что может происходить в мире с одним или несколькими его предметами)
А в программировании эти вещи называются несколько иначе:
1. Объект (нечто, с чем работает пользователь)
2. Свойство (то, что характеризует объект)
3. Метод (то, что может происходить с объектом)
Объясним на котиках:
Предмет/объект: Кот
Признак/свойство: рыжий, пушистый, милый, большой
Но в программировании к свойствам еще относят: кличка, число лап, любимая еда... - это тоже свойства
Действие/метод: мыукать, бегать, прыгать, кушать, драть обои...
А теперь вопрос: может ли котик с картинки существовать в нашем мире? Почему?
А вот в мире, созданном программистом, такой котик вполне себе может существовать! Что он там будет делать? Решит программист. Может, это будет эмблема программы. Может - иллюстрация. Может - игровой персонаж...
Поговорим о роботах
Прежде, чем мы напишем свою первую программу, разберемся, что же это такое. А начнем с робота. Многие, несомненно, вспомнят электронную игрушку с руками и ногами, со светящимися глазами, включишь ее, а она идет да песенки поет. Но если смотреть шире - роботы в нашем мире повлюду: это и телевизор, и чайник, и автомобиль, и телефон... И всем этим устройствам нужно рассказать, что им нужно делать. Последовательно.
Представим, что у нас есть робот, которого нужно научить играть в прятки.
Но только нужно учесть, что любой робот пунктуален, аккуратен и точен, и что он выполняет действия в том порядке, который ему указан.
Хорошо, вот набор инструкций для робота:
Алгоритм Прятки()
- Я считаю до 10
- Ты прячешься
- Я тебя ищу
- Если я тебя найду, то я выиграл Иначе выиграл ты
Эти объяснения робот будет хранить в своей памяти. Набор этих команд - это алгоритм (правило, порядок действий) для игры в прятки. Поздравляю! Мы научили играть робота в прятки.
Задание для робота-кулинара
Представим, что мы дали роботу следующее задание: Пойди на кухню, почисти яблоко и принеси. Робот все понял, пошел на кухню, почистил яблоки и принес... очистки. А почему он сделал именно это?
Ответ прост: роботу не сказали, что именно он должен принести. Робот в точности выполнил инструкцию: он пошел на кухню, почистил яблоки и принес последнее, что было в его руках.
Вывод: Указания должны быть точными!
Задание для робота-маляра
А теперь представим себе, что у нас есть робот-маляр, который умеет красить стены. Когда ему будет составлена инструкция, как эти стены покрасить. Допустим, составили мы для робота набор команд (алгоритм), который робот должен был исполнить.
Алгоритм ПокраскаСтен()
- Открой банку с краской
- Окуни кисть в банку с краской
- Нанеси краску с кисти на стену
- Перейди к шагу 2
- Если стены покрашены, то перейди к шагу 6
- Закрой банку с краской
- Вытри кисть
- Конец
Все отлично! Инструкции выданы, можно идти по своим делам. Робот приступил к работе, а программист ушел. Что увидит программист, когда вернется? Закончит ли робот свою работу?
Не важно, сколько отсутствовал программист. Вернувшись, он увидит, что робот прилежно продолжает повторять шаги 1,2,3, добравшись до шага 4, он возвращается на шаг 2 и красит, и красит, и красит стену из пустой банки. С таким алгоритмом робот никогда не сможет добраться до шагов 5-8. Но робот не обижается, он выполняет ту работу, которую ему поручил программист.
Таким образом, робот выполняет инструкции сколько угодно раз подряд, даже если эти инструкции не верны.
Инструкции должны быть точными, однозначными и правильными!
Тогда как можно исправить программу для робота? Например, можно записать такой алгоритм.
Алгоритм ПокраскаСтен2()
- Достань банку с краской
- Открой крышку банки
- Пока стены НЕ покрашены, выполняй шаги 4-7
- Если банка с краской пуста, то перейди к шагу 1
- Окуни кисть в банку с краской
- Нанеси краску с кисти на часть стены, которая не покрашена
- Перейди к шагу 3
- Закрой крышку банки с краской
- Конец
Может ли робот закончить работу до того, как стены будут покрашены? Нет, не может.
Но теперь обратим внимание на шаг 4. Что нужно сделать, если робот не знает, что такое пустая банка? Очевидно, объяснить ему это. Для этого нам понадобится вспомогательный алгоритм, который будет называться "Банка с краской пуста":
Алгоритм БанкаПуста()
- Окуни кисть в банку
- Если на кисти есть краска, то банка не пуста Иначе банка пуста
- Конец
Трудно себе представить робота без компьютера, встроенного в него. Именно он заставляет робота исполнять написанный алгоритм. Компьютеру нуджны очень подробные инструкции, определяющие, что должен сделать робот на каждом шаге выполнения всей работы.
Что может компьютер?
Компьютер может всё. Ну, или практически все: рисовать, писать стихи, сочинять мелодии, играть в игры, вычислять, записывать дневники, хранить список книг в библиотеке и т.д. Он пунктуален, аккуратен и точен. Но компьютер исполняет только то, что его научили исполнять. Да, компьютер умен! Но не стоит забывать, что компьютер не может думать! Он исполняет только то, чему его научили.
Все записанные программистом алгоритмы компьютер хранит в своей памяти и, когда ему отдается специальный приказ (команда) на выполнение, он исполняет все то, чему его предварительно научили.
Именно поэтому стоит сказать, что программирование любит дисциплину и порядок!
Язык программирования
Что такое программа? Это некоторый список команд.
Что каждая из команд заставляет выполнять компьютер? Команда заставляет выполнять те действия, которые желательны человеку, работающему с компьютером.
Что такое команда? Приказ выполнить действие.
В каком порядке расположены команды в программе? В произвольном? Нет, по порядку.
На каком языке надо писать программу? На языке, понятном компьютеру. В моем детстве это был BASIC, потом в старших классах мы изучали Pascal, в университете - C++ и C#. А сейчас многое пишется на Python. В то время как современные дети работают с блочными языками - Scratch, языком G для Lego WeDo и т.д. Вообще, не важно, какой язык используется. Важно, чтобы записанный на нем алгоритм был правильным.
Для чего служит язык программирования? Для общения между человеком и компьютером. Большинство языков программирования похожи на наш естественный язык общения, потому что языки созданы людьми. В командах многих языков используются английские слова, поскольку английский - язык международного общения.
Как научиться программировать?
Самый лучший способ научиться любому языку - говорить на нем. Самый простой способ научиться языку программирования - писать на нем программы и сразу запускать их на компьютере.
Все примеры ниже я напишу на языке Python.
Python — высокоуровневый интерпретируемый язык программирования общего назначения. Создан Гвидо ван Россумом в 1991 году. Название отсылает не к змее, а к британскому шоу «Летающий цирк Монти Пайтона», что отражает неформальный подход к разработке. Python часто называют «английским языком программирования». Его синтаксис настолько интуитивен, что даже новички понимают код с первого взгляда.
Язык очень прост, на нем можно писать программы, зная примерно 10-15 слов. Но не следует думать, что это игрушечный язык. Существует немало серьезных научных разработок, созданных именно на этом языке.
Чтобы начать писать программы, необходимо скачать и установить Python на свой компьютер. Либо можно писать код на Python без установки на компьютер можно с помощью онлайн-сервисов, виртуальных машин или облачных вычислений. Например, код можно писать и запускать вот тут.
Давайте поздороваемся
print("Привет!")
После написания кода, нажимаем зеленый треугольник, и программа выполняется:
Разберем код. В команде использовано английское слово print - печатать. Эта команда заставляет компьютер отпечатать все, что написано в скобочках после слова print. Но для того, чтобы компьютер понял, что нужно буквально отпечатать все именно так, как ты попросил, это "все" должно быть расположено в кавычках.
Назови меня по имени!
А если я хочу, чтобы компьютер назвал меня по имени? Компьютер моего имени не знает. Что нужно сделать? Правильно, сообщить мое имя компьютеру. Для этого потребуется команда, которая просит ввести имя. Но это еще не все.
Компьютер должен запомнить мое имя. Для этого используется ячейка в памяти, куда сохраняется введенное имя. А как найти эту ячейку? Правильно, по адресу. Например, мой адрес - улица Пушкина, дом Колотушкина, квартира под номером 5. А у ячейки какой адрес? Как его узнать? Для этого программист должен его задать. То есть, каждая ячейка памяти должна иметь имя. Чтобы к ней можно было обратиться. А имя ячейке можно дать любое. Например, назовем ту ячейку, в которую будем записывать имя, буквой n (потому что по-английски "имя" = "name").
Вообще, надо стараться, чтобы имена ячеек имели смысл, иначе легко будет запутаться.
Итак, научим компьютер спрашивать, как зовут пользователя и сохранять полученную информацию в ячейку с именем n.
n=input('Как тебя зовут? ')
Для этого используется команда input, что в переводе с английского означает "ввести". В скобках укажем вопрос для пользователю, который программа выведет на экран. Без этого вопроса пользователь совсем не будет знать, что вводить: свое имя, какое-то число, день рождения или длину хвоста своего кота.
А после того, как пользователь введет свое имя, необходимо попривествовать его! Для этого мы уже знаем, какую команду использовать, конечно же, print.
print('Привет,',n,'!')
Но в этой команде появилось что-то новое! А именно, подстановка имени, которое хранится в ячейке под именем n. Мы не можем записать n внутри кавычек. Тогда программа просто выведет букву "n". В команде нужно задать имя ячейки и точно указать место, в котором будет выведено заданное имя.
Нам нужно вывести:
Привет, имя из ячейки n !
То, что указано жирным - пишется в кавычках. Это не изменяемый текст (включая пробелы). А "имя из ячейки n" - это то, что мы ввели в ячейку n, это пишется без кавычек, через запятую.
То есть, команда печати теперь состоит из трех подкоманд:
- Вывести "Привет, "
- Вывести то, что хранится в ячейке n
- Вывести восклицательный знак
Все эти три команды пишутся в одной print через запятую: print('Привет,',n,'!')
А теперь запустим нашу программу из двух строчек. Первое, что нас попросит программа - ввести имя. Хорошо, введем.
А потом увидим результат:
Давайте посчитаем!
А теперь предлагаю научить программу сложению и вычитанию. Различные действия, в том числе и арифметические, в программировании называются операциями. И записываются они точно так же, как и в тетради по математике. Например, захотелось мне посчитать, сколько будет 2+3:
Можно пойти и более сложным путем - сохранить слагаемые в ячейки памяти и как-нибудь эти ячейки назвать, например, a и b:
Но сейчас пользователь не будет видеть, чему равны слагаемые. Давайте выведем их:
Пойдем дальше - можно сохранить результат вычислений в ячейку, назовем ее "c", и потом с этим результатом еще что-нибудь можно сложить... Например, с ячейкой d, где хранится значение 4.
Но интереснее всего не просто складывать числа, заданные в программе, а просить пользователя самого ввести все слагаемые. Вводить мы умеем - для этого нужна команда input! Вперед!
Но тут нас ждет сюрприз:
Дело в том, что в языке Python вводимая информация записывается как строка. И тут все правильно: к строке 2 компьютер приклеил строку 3 и получил 23. Потом к 23 приклеил 4 и получил 234. Чтобы убедиться в этом, введем в ячейки a, b, d не числа, а имена. И вот что получим:
Мы же говорили, что компьютер работает правильно. Это мы даем ему неправильные команды. Так давайте научим компьютер разбираться, что мы вводим не строчку, а число. Для этого строку нам надо преобразовать в целое число (да, бывают еще не целые числа, но об этом вам расскажут в 4 классе). "Целое число" по-английски - "integer number". А команда называется первыми тремя буквами от слова "integer" - "int".
И вот мы видим, что компьютер исправился и снова научился считать правильно:
И напоследок предлагаю нарисовать картинку. Тут уже не нужны ячейки памяти. Тут просто рисуем с помощью команды print по точкам.
Домашнее задание
Нарисовать котика, попросить пользователя задать его имя и вывести под картинкой текст: "Это мой котик, его зовут " (имя, которое введено).
Это был небольшой обзор самых простых действий в Python. На самом деле, с помощью этого языка можно создавать разные даже самые сложные и невообразимые миры.