Зачем и почему?
Нынешние реалии действительно требуют от непрофильных специалистов IT-навыков. Burning Glass Technologies, компания-разработчик ПО и американский аналитик рынка труда, в своём отчёте 2015 года пишет, что при общем сокращении количества вакансий «чистых» программистов, число оферов с указанным навыком «программирование» достигло 7 млн, а спрос на «программистов» (в данном случае специалистов, которые обладают навыком кодинга, но не являются собственно разработчиками) в США рос в 2 раза быстрей, чем в среднем по другим направлениям. Всего было проанализировано свыше 26 млн вакансий, размещённых онлайн.
Что круто, половина из этих 7 млн находится за рамками привычной IT-индустрии: финансы и банкинг, производящие отрасли, здравоохранение — диджитализация охватила всё, а программирование стало инструментов для выполнения повседневных задач бизнеса. Возможно, скоро деление на IT и не IT-специалистов исчезнет вовсе — ведь как можно не быть айтишником, если даже отправка рассылки покупателям требует минимальных знаний HTML (о том, как любознательность привела онлайн-маркетолога к карьере тестировщика ПО, можете прочесть тут).
Как итог, классическое деление на право- и левополушарных теряет смысл. Если вы маркетолог, бизнесмен, специалист «гуманитарного» профиля, и при этом чувствуете, что достигли в своей области потолка, то, возможно, пришло время расширить инструментарий. А самый сильный инструмент нашего времени — программирование. Один наш знакомый UX-разработчик описал свою работу, как «голова думает, руки делают». Ну а если голова полна светлых идей, почему бы не дать ей инструмент, способный воплотить их в жизнь?
В данном случае Python — один из ответов на вопрос «с чего начать». И мы это говорим вовсе не потому, что запускаем уже 6-й поток курса разработки на этом языке. Python регулярно входит в топы языков по поисковым запросам, количеству дополнительных open source-материалов и числу вакансий (ребята из IEEE при составлении этого индекса анализируют поисковики, данные с GitHub, Stack Overflow и даже популярность постов про языки на Reddit). Возвращаясь к России, в одной только Москве набралось 1396 предложений о работе с упоминанием пайтона (кстати, почти вся аналитика данных требует знания этого языка).
P.S. А ещё он относительно легко читается. Спустя часа 3.
Disclaimer
Всё написанное выше — многословное предисловие к мини-эксперименту, главный результат которого был выведен в заголовок этого текста. Если вы программист, то есть кодер со стажем и уже съели пару IT-собак, читайте дальше на свой страх и риск. За нанесение психологических травм ответственности не несём (только за личный позор). Помните, мы тут говорим об уровне «я знаю только то, что я ничего не знаю».
Методология эксперимента
Самое страшное в программировании для неспециалиста — это начать. Мы решили сделать это за вас, собрав по пути пару седых волос. Было ли сложно? Конечно, да. Но ведь школьная геометрия тоже когда-то казалась сложным предметом. Внимательно следите за текстом и повторяйте за нами, вместе веселее. Забегая вперёд — запустив свою первую микропрограммку, вы почувствуете, что можете свернуть горы. Ну или услышите, как на горе свистнул рак.
Что у нас было:
- один компьютер (mac OS Sierra 10.12);
- подопытный и редактор (гуманитарии со знанием алгебры логики, последний раз писавшие код на basic лет 7 назад);
- 8 часов на разборки с языком + 8 часов на написание этого текста.
Шаг 1. Запуск цирка имени Монти Пайтона
Первое, что нужно сделать — это обустроить себе песочницу, то есть скачать сам язык и IDLE («интегративную среду разработки для python»). Просто жмёте сюда и качаете предлагаемый файл под вашу систему. У нас была версия Python 3.6.3. После установки нужно открыть сам IDLE — в итоге у вас будет окно «Python 3.6.3 Shell» (в это окно можно повводить какие-то данные для тренировки). В основном мы будем заводить новый файл (File —> new), экспериментировать в нём и запускать «прогон» (Run —> run module).
Первое, что мы сделали — вбили в shell «1 + 2 + 3». Python, слава богу, в отличие от iPhone это умеет. Не забыли и про «print ('Hello world!’)». Один маленький шажок для нас, и миллисекунда для программиста. Выражаясь метафорично, мы разложили письменные принадлежности и открыли рабочую тетрадь. Теперь пришло время Азбуки.
Шаг 2. Аз, Буки, Веди
Любой язык обладает семантикой и грамматикой. И вот тут-то начинается наша тренировка абстрактного мышления. На этом этапе главное — книга или основной источник, который вы для себя выберете. Мы пользовались книгой Automate the Boring Stuff with Python. Большая надпись «for the total beginners» сразу привлекла внимание редакции — это было то, что нам нужно. У книги, кстати, есть версия в формате видеоуроков, очень удобно для визуалов. Литературы на самом деле вагон и маленькая тележка — и на русском, и на английском. Освоив азы, можно начинать скакать по ресурсам и вычитывать только нужные фрагменты. Ну а пока пройдёмся по базису Python.
Итак, пайтон работает с тремя типами данных:
- целые числа (integers, функция «int») —> 1, 2, 7, 156, -8
- числа с плавающей запятой (floating-point numbers, функция «float») —> 1.05, 2.00, -3,57
- строки (strings, функция «str») —> ‘а’, ‘Съешь ещё этих мягких французских булок’, ‘_’, ‘ ’
Если с первыми двумя все более или менее понятно, то концепция строк куда сложнее. По сути это нечто внутри одиночных кавычек, которое воспринимается пайтоном как текст, даже если вы написали там пробел. При этом надо запомнить, что любые данные, вводимые пользователем (при помощи оператора «input»), будут автоматически отнесены ко строкам. Так что если вы хотели получить число, это придётся прописать дополнительно. К сожалению, мы об этом узнали гораздо позднее.
Также у нас есть «переменные» (variables), для которых значение задает автор кода. Упростим: представьте кучу коробок при переезде. Каждую подписали и заботливо положили что-то внутрь (возвращаемся к типам данных). По факту это выглядит как «stuff = 1» и т.п. и т.д. Название переменной может 1. писаться в одно слово (stuffIForgotToThrowAway), 2. состоять только из букв и цифр (stuff42), 3. а также нижнего подчеркивания (_stuff). Ах, да, начинать с цифр нельзя! Вам сразу дадут по рукам.
Раз есть данные, значит, с ними можно что-то делать. Первое, чему нас научил Великий коллективный разум интернета и учебник — арифметические операции (в сложение мы уже играли).
Всё работает как в обычной математике, но за опечатку пайтон выдаст ошибку («+ 7/ * 8» — ни одна машина не поймёт скрытого смысла этого выражения). Оператор «+» также может использоваться для вывода строки, состоящей из нескольких других. Условно, print (‘Что’ + ‘где’ + ‘когда’) → Чтогдекогда. Да, о пробелах не стоит забывать, за вас их никто не поставит.
Вопрос, а как же программа общается с пользователем? Ведь shell ничего визуально не выдаёт, пусть и исполняет все указания. Для этого нам понадобятся самые простые функции ввода и вывода данных — print () и input (). Их работу вы видите в первой микропрограме ниже. Print() выводит значение строки, заключённой внутри скобок, а input() уносит внутрь программы.
Кажется, что проще некуда, но даже тут есть пара моментов, которые требуют минимального понимания синтаксиса языка. Например, user_name и user_age — это переменные, значение которых пользователь вводит сам. Из-за этого последняя строка требует чуточку магии. По дефолту user_name была распознана как строка (string), поэтому мы спокойно «cплюсовали» её значение с другими (‘Рад знакомству, ’ и ‘!’). Но чтобы показать возраст человека через 7 лет, пришлось при помощи функции int() превратить значение user_age в целое число, прибавить к нему 7, и результат снова превратить в строку (str). Мы специально вставляем код скринами. Поверьте, полезнее один раз вбить все строки лично, чем читать код целиком 10 раз.
Шаг 3. Хорошее слово — «если»
Со времён Аристотеля классическая логика почти не изменилась. Логический (булевой) тип данных позволяет свести значение выражения к понятной машине двоичности: лжи (False) и истине (True), 0 и 1. Значение True и False может быть дано любой переменной, но как новичку нам они понадобятся для понимания работы реляционных и условных операторов:
Начинается самое интересное — с помощью реляционных операторов мы будем создавать блоки кода с условиями «если…, то…» и «пока…, делай…». В первом случае речь об операторе if (если), который обычно работает вместе с else (иначе) и elif (а если). Этот инструмент позволяет программе «ветвиться», выбирать следующий шаг, опираясь на входящие данные. Для удобства блоки с этими операторами можно визуализировать в виде блок-схемы. У нас получился такой пример:
Текст кода
Блок-схема (flowchart)
Оператор elif позволяет вводить дополнительные условия — не выполняется первое, программа идёт проверять значение по второму, третьему и т.п. При этом в отсутствии оператора else программа может не совершить выбор действия вовсе. На естественном языке это бы звучало примерно так: «если приедет автобус, то мы поедем в парк; а если такси, то в кино; а если троллейбус, то в торговый центр». А теперь представьте, что приехал трамвай — бывает и такое. Пример того, как выглядит и работает elif будет ниже.
Вернёмся к Красной шапочке. После условных выражений учебник предложил поиграть с оператором циклов while. Автор пособия, видимо обладая особым чувством юмора, привёл пример программы, которая заставляет пользователя вечность вводить «своё имя» (а ввести надо именно эту фразу). Ниже же прописан простой цикл, который следует читать как «пока answer1 не равен "нет", выводи фразу "А если ещё подумать?"».
Шаг 4. Всем нужны фичи
А точнее функции. Python, как оказалось, помимо стандартных функций — print(), input() и т.д. — предлагает писать свои. По сути это микропрограмма внутри, которая решает конкретные задачи. Собственная функция имеет вид «def название(переменная в основе функции):».
Поскольку только ленивый ещё не подготовил гороскоп на следующий год, ловите нашу программку (по сути рандомайзер с заготовленными ответами), которая способна предречь судьбу пользователя на 2018 год. Рандомные предсказания ещё никогда не были столь точны. Здесь сразу два нововведения: функция «def getAnswer(answerNumber):» и библиотека random, в которой был нужный нам оператор.
Кстати, вот и оператор elif во всей красе. Чтобы узнать судьбу, скачайте файл Пифии в конце статьи и развлекайтесь. Подробнее о функциях нашлось тут.
На этом этапе уже можно чувствовать себя хакерманом и броситься в эксперименты. С первого раза вряд ли выйдет что-то впечатляющее. Программирование требует практики, практики и ещё раз практики. Учимся читать и улучшать свой и чужой код.
Шаг 5. Не можем ходить — будем бегать. Ironman (с)
Python — язык, собравший вокруг себя огромное сообщество (о российском мы уже писали), в котором охотно помогают новичкам и делятся своими решениями. Поэтому на этапе экспериментов каждый возникающий вопрос или ошибку мы просто забивали в Google. Почти всегда проблему решала первая же ссылка (ну или ловкость рук и изворотливость).
Для того, чтобы собрать что-то поинтереснее, мы искали «крутые вещи для новичков, которые можно сделать на Python». YouTube, конечно, за 16 часов не напишешь, а вот новогодний тамагочи со злым котом — пожалуйста.
Вечно голодный и недовольный кот.
Исходный код этого проекта лежит тут, но так как подопытному на месте не сиделось, мы внесли чуточку разнообразия, да и родной Персик был сердцу милее. Что же мы поменяли? Добавили изображений и условий для их отображения, изменили счёт времени (в оригинале дни шли вперёд до смерти кота, у нас же шёл отсчёт 100 дней до Нового года), сделали два исхода игры.
Мы выбрали именно тамагочи, потому что здесь пришлось в оперативном порядке знакомится с библиотекой Tkinter, которая позволила сделать и кнопку, и кота в понятном человеку формате. С помощью tkinter мы дали окну название, задали его размеры, тип шрифта для отображения, вынесли счётчики во вне. Один минус — работает библиотека только с gif-изображениями, на танцы с jpg, к сожалению, времени не было. Но это уже другая история.
Скачать кота себе, чтобы поиграться с кодом, можно отсюда. Постарались прокомментировать код по максимуму.
Выводы
Основы Python стоит понять только ради того, чтобы оказаться на берегу бескрайнего океана, движение в котором ничем не ограничено. Новичок, научившийся читать чужой код, вполне может собрать из существующих в сети кусков нечто новое. Конечно, придётся покопаться, но в этом и суть — чем больше экспериментируешь и пробуешь, тем лучше понимаешь. Если в детстве вы любили играть в конструктор, это чувство должно быть вам знакомо.
И пусть поначалу это будет только игра в программиста, кто знает какую собственную идею вы сможете реализовать через несколько месяцев практики. Придумаете ли новый способ обработки данных, приложение для автоматизации повседневных задач, или соберёте собственный сайт (хотя тут придётся попотеть) — возможности безграничны. Может, только ради этого ощущения и стоит учиться программированию. Мы же за 16 часов вознамерились написать текстовой квест на Python — задание себе на зимние каникулы.
P.S. Все файлы, которые мы создали за короткое время знакомства с Python можно скачать здесь. Присоединяйтесь к игре, это того стоит.
Комментарии