ПРЕДИС­ЛОВИЕ АВТОРА



Здравствуй, уважаемый читатель!

В начале земля была бесформенной и пустой, но солнце светило над ней, светило глубоко под хрупкую земную кору. Огромные силы лишь ждали момента для высвобождения и этот момент настал! Появились программисты и язык программирования Python. В современном мире, надо сказать, программирование является одним из самых интересных и полезных занятий. Знание языков, умение написать программу и заставить работать устройства так, как требуется вам, - приносят немалый доход. Большинство наиобеспеченнейших людей нашей планеты связаны с IT-индустрией. Вспомните истории успеха Стива Джобса, Билла Гейтса, Марка Цукерберга - эти имена на слуху. Да, это работает именно так!

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

В чём заключается предназначение технических устройств? Ответим не задумываясь: устройства существенно облегчают нам нашу нелёгкую "жизнь-боль", развлекают нас, выполняют рутинные работы, собирают данные и сведения, контролируют нашу безопасность, пылесосят, в конце концов!

Но что находится между нажатием рычага и результатом? Что выполняется между сигналом датчика уровня топлива в бензобаке и лампочкой, мигающей на панели управления вашего автомобиля? Что работает между нажатием иконки на экране смартфона и запуском анимации вызова абонента?

Правильно! Программа! Программа, которая получает данные с устройств, выполняет с ними определённые действия и выдаёт результат. Ваш смартфон находится в постоянном ожидании нажатия на иконку контактов. Как только вы касаетесь её, то программа смартфона запускает целую цепочку действий: как минимум получает ваши контакты, оформляет их надлежащим образом и выводит на экран. И всё для того, чтобы вы выбрали нужного человека, дозвонились и насладились разговором. Ну, или поругались, что тоже бывает нередко.

Всё действие программы "Контакты" смело можно обобщить и назвать их обработкой данных. Любая программа на компьютере, смартфоне, в вашем автомобиле, умном доме, телевизоре выполняет лишь одну функцию - обрабатывает данные.

Ещё раз - любая программа обрабатывает данные.

И... и больше ничего, как бы дико это не звучало.

Обработка данных - запомните выражение. Это Акуна Матата программирования, главная молитва программистов, дзен разработчика, полярная звезда на пути написания кода.

Ни больше и не меньше. Всего лишь обработка данных. Кто учит устройство обрабатывать данные? Легко! Это программист, записывающий программу на языке программирования. Программа станет делать всё, что заложено в неё программистом, эдаким эрзац-богом, творцом нового электронного мира, отцом и матерью Результата, который мы увидим на экране монитора, смартфона, или велокомпьютера. Или приборной панели нашего маленького легкомоторного самолёта, рвущего осиным жужжанием пропеллеров безупречную тишину неба.


СИС­ТЕМ­НОСТЬ ПРО­ЦЕС­СА


Общение с пользователями приложения в чате Telegram вскрыло ещё одну проблему: практически полное отсутствие системной информации по программированию. Что я подразумеваю под выражением "системная информация"?

Однажды летом мне пришло в голову заменить металлическую пружину винтовки-воздушки на газовую. Говорят, отдача меньше и удобней стрелять. В один прекрасный день собираемся мы с другом в гараже, достаём из винтовки старую пружину и начинаем заталкивать новую.

Но возникает проблема: чтобы газовая пружина встала в пазы и закрепилась, нужно приложить огромное усилие, на что у нас двоих просто не хватило энергии. Вертели винтовку и так, и сяк, подпирали деревяшкой, пытались вбить пружину молотком (глупцы!) Помните басню "Мартышка и очки"? Вот это про нас.

После двухчасовых усилий мы смирились: газовую пружину поставить на место не можем. Нужен какой-то аппарат, похожий на огромные тиски, чтобы задача была решена.

"И тут появился изобретатель..." (об этой замечательной фразе в главе "Тактический приём" для игры "Учись считать"). В гараж заехал повидаться ещё один мой друг, технически развитый человек, всю жизнь занимающийся автомобилями и всем, что с ними связано.

Он, как и полагается настоящим друзьям, посмеялся, поиронизировал, потроллил, выставил нас дураками, сказал, что "засунуть газовую пружину легче, чем отобрать у ребёнка конфетку", и... сделал!

Мой друг соорудил несложную конструкцию, разместив винтовку с торчащей газовой пружиной между бревном, небольшой железкой и упором в проёме ворот гаража. К воротам приставил черенок от лопаты, который довольно надёжно упирался в выступающую часть газовой пружины. Потом одной рукой, совершенно не напрягаясь, чуть-чуть прикрыл створку ворот гаража: вжух! Усилие передалось на черенок, черенок "втолкнул" пружину внутрь винтовки, где она и защёлкнулась! Бинго!

Что произошло? Ведь гараж остался гаражом, все железки, черенки, винтовка и газовая пружина не изменились. Но нашёлся человек, который смог собрать воедино все имеющиеся параметры, который увидел, что к проблеме нужно применить принцип рычага, реализуемый с помощью валяющихся предметов.

А мы с другом так и не увидели. Хотя всё лежало в буквальном смысле под ногами: наклонись и подбери.

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

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

Но мы не сможем построить дом, собрать автомобиль, вырастить поле пшеницы. Почему? Да потому что знания у нас не системные. Отрывочные. Мы не видим общей картины в целом, а только маленькую часть.

Причина, побудившая написать этот материал, следующая: в интернетах куча инструкций, видео, рассуждений о том, как работают языки программирования и о том, что чтобы вывести на экран надпись, надо использовать команду print().

Эти сведения отрывочны, они, словно знание "дом состоит из кирпичей", - ничего нам не дадут. Мы не сможем, изучив действие каждой команды языка, сотворить что-то по-настоящему полезное. Разрозненные знания - бич современного общества. Мы что-то изучаем, владеем терминологией, но не видим, как это работает изнутри.

Впрочем, такие знания создают иллюзию собственной значимости и "учёности". Сидишь такой, пьёшь кофе, и понимаешь: "семена прорастают". И сразу такой важный становишься в собственных глазах, и слеза гордости за свою же мудрость скатывается по щеке... Глупо? Да.

Поэтому основной задачей я ставлю не изучить и описать команды языка (хотя и без этого не обойтись), а научить применять эти команды и видеть результат. Мой технически подкованный друг увидел, что решение задачи с газовой пружиной валяется на полу. Вас хочу научить тому же: видеть, как собирать из команд структуры, приводящие к поставленным целям.


ДЛЯ КОГО МАТЕ­РИАЛ?


Прежде всего - для вас!

P.S. Да, я люблю игры. Го, я создал :)

Единственное препятствие, которое может возникнуть на вашем пути - лень и нежелание следовать предложенным инструкциям и рекомендациям.

Я уже почти два десятка лет занимаюсь преподаванием информатики и делаю упор именно на программировании. Материал рассчитан на всех, кому интересно или жизненно необходимо освоить программирование. Например, если у вас есть желание сменить сферу деятельности и вы не знаете, с чего начать. Начинайте отсюда, прямо отсюда, с этого места, где вы сейчас находитесь!

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

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

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

Но пусть вас не смущает кажущаяся простота идей! Для их реализации нужно понимать многое, уметь связывать, обрабатывать, хранить, выводить, определять, что нужно видеть пользователю, а что должно остаться в хитросплетении программного кода.

Получить практический результат, увидеть результат своего труда, - бесспорное преимущество игростроения!

Кстати, пока заговорили. Одна из проблем программирования в школьных и университетских курсах - это теория без ссылок на практическое применение. Мы изучаем алгоритмы, изучаем в отрыве от их использования. Находим максимальные и минимальные элементы в массивах... зачем? НОД чисел - зачем? А если сказать, что алгоритмы поиска максимальных и минимальных чисел важны в навигационных системах и искуственном интеллекте? Что НОД позволяет нам организовать зум приближение и детализацию в Google Maps? Что 3D-технологии без этих алгоритмов просто невозможны?

А если не просто сказать, а ещё и показать? Прикладное программирование - интересное программирование! Какой смысл жарить картошку, если её не попробуешь или не продаёшь? Зачем очки для зрения носить в кармане, а не на носу? Теория без практики мертва, практика без теории слепа (авторство цитаты не указываю, потому что не знаю. Наш Великий и Могучий интернет выдаёт слишком много разных "авторов" этого выражения).

Поэтому, дорогой читатель, будем подкреплять теорию практикой, а практику - теорией!


ПОЧЕМУ КОН­СОЛЬ­НЫЕ ИГРЫ? ПОЧЕ­МУ PYTHON?


Наша с вами первичная задача - изучить, как компьютер обрабатывает данные. Без лишних заморочек и нервотрёпок. Базовая математика и базовая логика, доступная каждому, кто умеет вставить ключ в замочную скважину.

Сложность поставленных задач низкая, демонстрация возможностей компьютера и языка программирования - высокая.

Python выбран по трём причинам:



КОНКУРСЫ


Надеюсь, слово "Конкурсы" привлекло вас. Но, к моему собственному изумлению, здесь не конкурс, а о конкурсах.

Дело в том, что в профессии программиста нет какого-либо разумного финала. Нельзя сказать - ух, я программист. Программист - это движение. Программист - постоянное обновление знаний, накопление опыта. Мир развивается достаточно быстро, а хорошие программисты всегда должны быть на гребне волны и успевать за требованиями времени.

Хорошим подспорьем вам станут конкурсы программирования. Благо, сейчас их множество - от топовых хакатонов до вполне себе "можно поучаствовать". Ищите, да найдёте. Учитесь в школе? Подойдите к учителю информатики и настойчиво попросите вписать вас куда-нибудь (учителя это любят, кстати). Работаете? Посмотрите конкурсы от разных школ и образовательных проектов. "Конкурс для программистов" в поисковой системе выдаст множество вариантов.

Просто смелее вписывайтесь и пробуйте. На первых порах совершенно не важно - победите вы или нет. Главное, идите до конца. Участвуйте в каждом этапе конкурса, выжимая из себя всё возможное. Даже если в конце ваша программа напоминает страдающую под солнцем жабу, всё равно идите до конца, до финала, до представления программы. Ещё раз повторю - на первых порах важен не результат, а процесс. Полный процесс. У вас мало уверенности в своих силах? Идите до конца! А уверенность растёт с каждым пройдённым конкурсом. Не взяли первый приз? Пфф, мелочи, вы же только учитесь!

Цель участия в конкурсах не получить как можно больше и как можно дешевле, а влиться в мир программирования, посмотреть задачи, посмотреть свои знания на текущий момент. Объективно оценить себя, найти "дыры в опыте" и постараться их закрыть. В конкурсах - участвуйте!

Из всероссийского хакатона "Цифровой прорыв" в Южном IT-хабе в августе 2020 я ушёл с победой. Но на начало соревнований я совершенно не знал, что потребуется делать, как это выглядит и чего от меня ждут. Учитывая, что в хакатоне принимало участие около тысячи программистов Юга России, мне было слегка не по себе.

В итоге три бессонных дня, проведённые за компьютером, стали самыми насыщенными за всё лето 2020-го. Я испытал гамму эмоций. Здесь и разочарование, и вдохновение, и ужас, и восхищение, ненависть, признание, радость... Множество людей: программисты-профессионалы, программисты-не профессионалы, просто программисты и не программисты совсем - создавали отражающий современный мир атмосферу. Криптозащита, искусственный интеллект, блокчейн, биометрия... Эх, жаль, что всё так быстро кончилось.

В нашем мире важно уметь подать себя, чего я не очень-то умею делать. Пожалуй, прикреплю диплом (*набивает себе цену (нет). Вы же должны доверять моему умению писать программы!*)

На хакатоне познакомился и работал в команде с прекрасным специалистом - Андреем Донцом из Краснодара. Он изобрёл PHP, базы данных и MySQL шикарный back-end (код на стороне сервера) разработчик с нетривиальным мышлением и интересными решениями, и просто пообщаться и разработать программу для меня уже удовольствие. Так что могу порекомендовать, если кому нужны серверные решения. Это не реклама, а проявление моей благодарности и уважения к специалисту современного уровня. Контактов не оставляю, поисковая система решает.

На конкурсах у вас появится шанс познакомиться с удивительными людьми и расширить связи, кругозор, профессиональные навыки. "Удивительные люди" - это и те, кто вас откровенно напряжёт и достанет, и те, с которыми вы продолжите взаимодействовать и общаться, делиться идеями и находить решения. Главное, что на конкурсах вы только приобретаете (опыт, знания, знакомства).

Программирование в спокойной и комфортной домашней обстановке неминуемо приведёт к заболачиванию. Идите в свет!

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


СТРУК­ТУРА УЧЕБ­НИКА


Однажды я наблюдал за работой одного знаменитого (в нашем городе) художника. Он согласился показать процесс рисования, минут пять разглядывал чистый лист, словно выискивая в нём формы; затем чёткими и резкими, как у хирурга, движениями что-то расчертил и отошёл. Формы у него были, честно говоря, никакие, но я умудрился различить берег реки, деревья на той стороне и почему-то пляжный зонтик на первом плане. Карандашные линии образовывали хаотичную паутину, в которой мой мозг самостоятельно определял знакомые формы.

Дальше вновь бой с бумагой на карандашах, линии становились чётче и ярче. Что я сначала принял за пляжный зонтик оказалось крышой любопытного своей архитектурой здания. Правда, полчаса спустя мне надоело смотреть и я, попрощавшись, ушёл. Полагаю, дальше в ход пошли ластик, краски, быть может художественные специальные инструменты. В итоге (и позднее) я увидел эту картину: ночь, луна дорожкой на воде, тёмный лес с коллективом светлячков и симпатичный дом на "этом" берегу, сквозь освещённое окно которого видна разобранная и, простите, чертовски уютная кровать!

Структура материала учебника в чем-то повторяет работу художника. В первой главе - основы языка: конструкции, которые будем применять при написании игры. Последующие разделы посвящены созданию игры по принципу работы художника: сначала чертим каркас, потом на него наращиваем смысл. Помните "Восставший из ада"? Один из героев из скелета возрождался в человека. Примерно так и с играми: сначала скелет, потом его окультуриваем. Поэтому и материал рекомендую читать последовательно, вникая и отрабатывая написанное.

Нет, копировать код из приложения нельзя. Ни в коем случае. Моя позиция была и остаётся неизменной: если хотите научиться, то переписывайте. Никаких копипаст!

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

В процессе, в тексте, я буду задавать вопросы. Ответы на них представлены тут же, в такой конструкции. Ответив "для себя" и "про себя" - посмотрите мой ответ. Сравните и проанализируйте.

Нажми сюда, здесь спойлер ответ

Олды тут?



АВТОР­СКОЕ ПРАВО


Все использованные изображения созданы автором или скачаны. Скачанные материалы имеют открытую для коммерческого использования лицензию.

Все текстовые материалы, не являющиеся программным кодом, принадлежат автору, перепечатка, публикация без явного письменного разрешения запрещена.

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

Программный код выделяется в специальном поле, например:

print("Привет, я программный код!") print("Меня можно брать, изменять, распространять и выдавать за свой!") # Когда надпись не # помещается в ширину, # воспользуйтесь # скроллингом по полю # с кодом.

Удачи вам!

С уважением,
Виктор Трофимов
Апрель, 2020




© 2019-2021 Виктор Трофимов
[ Оглавление ] [ В начало страницы ]