
Зачем изучать Python?
от незнакомца в чужой стране до знакомого с языком
Программное обеспечение формирует большую часть моей жизни. Если вы читаете это, значит, это во многом влияет и на вас. Только когда я присоединился к запуску программного обеспечения, я понял, как мало я понимаю в программном обеспечении. Здесь я делюсь основными моментами своего путешествия в программирование. Поначалу я чувствовал себя мальком рыбки, который спрашивает более мудрую рыбку о море:

Осознав это, я начал подозревать, что моя слепота к окружающей меня силе — к ее силе, к ее возможностям, к ее влиянию, к ее границам — была встречным ветром на пути к моей карьере в области технологий. Встречный ветер плохой. Эссе Пола Форда Что такое код ударило меня по лицу, как газета, летящая сквозь бурю.
Чтобы исследовать природу, вы отправляетесь в дикую природу. Чтобы изучить программное обеспечение, вы отправляетесь в путешествие по языку программирования. Что такое Питон? Python — это язык программирования, который заставляет компьютеры творить чудеса.
Это также интерпретируемый объектно-ориентированный язык программирования высокого уровня с динамической семантикой. — Питон.org
Так что я нырнул. К счастью, у меня были две более мудрые рыбы, которые помогали мне на этом пути. Raylu — мой коллега, написавший серию руководств по Python и порекомендовавший мне перейти на более низкий уровень и попробовать Automate the Boring Stuff от @AlSweigart. Профессор Джон Мамер (PM) занимает особое место на факультете @uclaanderson. Он помог мне с моей первой ошибкой и предоставил проницательный контекст для, казалось бы, незначительных вещей, таких как трудности включения Python в мой PATH, а также для более крупных идей о преподавании и обучении. PM подтолкнул меня к мысли о программе, которую я хотел бы закодировать, чтобы у меня был фокус и контекст для моих исследований. Ниже я расскажу больше об этой программе и о том, что я узнал при ее написании. Хотя я не изучал Python, чтобы понять Дао, теперь мой путь в этом современном мире стал более ясным.
# настраиваем на кучу настроек
Я провел немало времени, разбираясь с автомобилями. У ПМ тоже. Он и я оба пришли к пониманию того, насколько мучение похоже на программирование. Если вы хотите заменить воздушный фильтр вашего автомобиля, вам понадобится несколько вещей, чтобы сделать это. Место для работы на машине. Инструменты. Новый воздушный фильтр. Кодирование аналогично. Вот пять основных вопросов, которые у меня возникли сразу:
Что такое текстовый редактор, чем он отличается от интерактивной оболочки IDLE, что такое Terminal?Проще говоря, это ссылка на «гараж». Это где вы кодируете!
Что такое тип данных?Оказывается, программисты тратят много времени на размышления о разных типах данных; как разница между «G» и «7». Это очевидно, когда написано, но нельзя взять G и умножить на 7.
Что такое принцип DRY?Он означает Не повторяйся. Это мощный и сложный идеал с практическими преимуществами в кодировании. Это приводит к коду, который не является избыточным, к коду, в котором меньше ошибок и ошибок, которые легче исправить, и к коду, который чище и легче читается. Это также очень удивительная цель для повседневной жизни. Если вы выполняете задачу, которая часто повторяется, вероятно, программа (которая по своей природе очень хороша в повторении) может вам помочь! Премьер-министр отметил, что в New York Times была опубликована интересная статья о подходе программиста к самосовершенствованию: холодная, жесткая рациональность.
Что такое библиотека и является ли она модулем?Разница если она есть не имеет большого значения. Это не значит, что они не важны… на самом деле они абсолютно необходимы! Думайте о модулях как о новом воздушном фильтре для вашего автомобиля: это компонент/часть, которую вы можете поместить в свой код. Очень многие библиотеки/модули имеют открытый исходный код, готовы и бесплатны для использования в ваших программах. Requests, BeautifulSoup и Selenium — хорошие примеры.
С чего начать?Если бы это была кухня, вы бы хотели, чтобы кастрюли, нож, разделочная доска и авокадо были на своих местах. Если бы это был гараж, вы бы хотели, чтобы машина стояла на подъемнике, капот был открыт, а инструменты готовы. В моем случае это означало установка последней версии Python. И многое другое, например, апгрейд пипа (который служит той же цели, что и ваш транспорт в ваш любимый магазин автозапчастей и обратно).
К счастью, просто пройдя через процесс подготовки вашей машины к началу кодирования, вы сами продвинетесь гораздо дальше, чем кажется, даже до того, как вы напишете свою первую строку кода. Вы будете запускать что-то из командной строки, вы прочитаете свою первую партию инструкций для программиста, вы обдумаете пакеты и версии программного обеспечения. И вы сделаете первый шаг из мира графического пользовательского интерфейса и внесете изменения в основу вашего компьютера, которые не бросаются в глаза. Все это укрепляет доверие и знакомство, даже если и то, и другое трудно заметить на этой ранней стадии.
Характеризовать этот этап как «ранний» — не то же самое, что «легкий». Если вы столкнетесь с проблемами, как и я, полезно помнить, что вы не одиноки:
Вчера я провел большую часть дня в поисках четкого ответа на установку pip. Я не могу найти хорошее решение.
Может ли кто-нибудь помочь мне установить его? - "ТАК. пользователь Система»
Моя проблема с пипом была сосредоточена на Python 2.7.10 по сравнению с Python 3.5.1:


выводы из настройки
Программирование программного обеспечения требует терпения. Существует много чтения файла readme. Если вы, как и я, бегло просматриваете инструкции, вы быстро избавитесь от этой ужасной привычки. Чтение и выполнение инструкций очень внимательно, шаг за шагом, действительно единственный способ добиться успеха.
Мы с ПМ обсудили концепцию ясности в общении. Вы когда-нибудь уходили с собрания, думая, что все согласны? Сообщение Slack, которое вы разослали, увековечивая ключевые элементы действий, следующие шаги и ответственных лиц, было подтверждено. Тем не менее, в следующий раз, когда ваша команда остановится, чтобы оценить прогресс, единственное, что будет ясно, это то, что все пошло не так!
Определенные типы людей сочтут это знание совершенно очевидным, другие услышат его, но не станут слушать. Я не слушал, пока несколько раз не столкнулся с одним и тем же препятствием, и, наконец, после того, что было похоже на покровительственное прочтение инструкций, тщательно следовал им. Я нашел свою религию readme:

Когда PM впервые начал программировать 40 лет назад, доступ к справочным материалам был очень ограничен. Он описывает это как небольшой переворот, когда бизнес-школа Калифорнийского университета в Лос-Анджелесе убедила Hewlett Packard пожертвовать копию руководства по эксплуатации школьного мейнфрейма… Руководства, выстроенные в ряд, имели ширину 8 футов. Тогда помощь была индивидуальной.
«Вы бы нашли кого-то, кто мог бы делать то, что вы не могли бы сделать, и вы бы сделали себя вежливым вредителем». - ВЕЧЕРА
Идея одинокого программиста, спрятанного где-то в темной комнате и стучащего по клавиатуре, уже не близка к реальности. GitHub, Stack Overflow, IRC, электронная почта, Интернет и такие инструменты, как Slack, не обязательно изменили степень сотрудничества, а скорее его периодичность, легкость и скорость.

# помните о предупреждениях и сообщениях об ошибках…
…и прочтите файлы readme! Подобно тому, как навигационное приложение Waze имеет тенденцию выбрасывать, казалось бы, игнорируемые предупреждающие сообщения, такие как «Осторожно! Впереди выбоина…» некоторые компоненты в вашем программном гараже будут время от времени издавать звуковой сигнал, жужжание и шипение (часто в тексте, который кажется специально составленным, чтобы заставить глаза новичка затуманиться). Вот один пример, с которым я задержался, и потребовалось несколько часов, чтобы распутать его, как только я наконец остановился, чтобы позаботиться о нем:
ВНИМАНИЕ: Используемая версия Tcl/Tk (8.5.9) может быть нестабильной. Посетите http://www.python.org/download/mac/tcltk/ для получения актуальной информации.
ДА! Кто хочет, чтобы что-то в их системе было нестабильным?! Усердные нет.
Если вы потратите какое-то время на кодирование, вы обнаружите, что изучаете ошибки и обходные пути на Переполнении стека. Это веб-сайт, где другие кодеры милосердно помогают друг другу. Несколько часов моих усилий по обновлению Tcl/Tk, и я, наконец, нашел ответ, который мне был нужен, как последний ответ в длинной ветке:

Не расстраивайтесь из-за ответов, начинающихся с «это легко…», когда вы находите, что это ужасно сложно! Что привлекло меня в этом ответе, так это то, что он ссылался на PATH (проблема, с которой я сталкивался раньше), он ссылался на диаграмму (предполагая, что эта проблема зависит от пересечения других переменных) и не требовал переустановки Python (что-то, что я неохота пытаться).
Во многих инструкциях также есть предупреждения, с которыми вы столкнетесь, когда начнете пробовать что-то новое с кодом или когда будете удалять и обновлять программы. Особенно пугающим для меня примером стало мое решение просмотреть следующую страницу Mozilla в поисках инструкций о том, как удалить сохраненный профиль веб-браузера Firefox:

Не поддавайтесь желанию полностью прочитать инструкции, пока не найдете то, что, по вашему мнению, ищете. Не соглашайтесь полностью с «пока я не найду то, что ищу». То, что будет позже, может быть важным! Другими словами, «полностью» на самом деле означает «полностью». #ага
выводы из предупреждений
Если вы внимательно посмотрите на скриншот — ближе, чем я смотрел на страницу, — вы заметите специальный раздел предупреждения внизу. Я перешел на эту страницу, чтобы узнать, как удалить файлы профиля, и заметил соответствующие инструкции вверху. Чего я не увидел, так это того, что этот инструмент Mozilla удалит как файлы, так и папку, в которой хранится профиль браузера Firefox.
Моя проблема заключалась в том, что я сохранил профиль браузера Firefox в той же папке, что и моя последняя версия кода для моей программы. С таким же успехом можно содержать свои каталоги в порядке, верно? К счастью, у меня была резервная копия программного кода на Google Диске. Урок усвоен… удаляйте вещи очень осторожно и внимательно читайте инструкции!
Когда я поделился с PM, как внимательное отношение к предупреждениям помогает решить множество проблем, он указал на силу контекста. Шрифт, заглавные буквы, интервалы, отступы табуляции и пунктуация являются критически важными для функционального кода. Опыт работы с этими проблемами и время, потраченное на устранение исключений и устранение предупреждений, обеспечивают бесценный нематериальный контекст для кода. Конечно, контекст играет важную роль и в других ситуациях. Одним из примеров, который приходит на ум, является намерение командира, которое в кругах военного руководства используется для управления поведением солдат.
# написание кода
Да, первый сценарий, который я написал, включал печать Hello World! (как правило, первый штрих в океане программирования).

Программа PM помогла мне разработать гораздо больше. Он открывает веб-браузер, переходит на веб-сайт маркетингового инструмента, входит в систему с моим именем пользователя и паролем, перемещается в веб-приложении, находя и нажимая ссылки, копирует полезные данные с сайта, входит в учетную запись электронной почты Gmail, которой я управляю, и отправляет этот скопированный фрагмент данных по электронной почте моему оператору мобильной связи, чтобы оператор отправил мне текстовое сообщение.
Это выглядит так:

При запуске моя программа выводит это текстовое сообщение:

уроки кодирования
Фраза «написание кода» предполагает, что деятельность сосредоточена на вводе нажатий клавиш в текстовом редакторе, постепенно добавляя строки кода к любой программе, стоящей на плите или в гараже.
Однако написание кода при написании кода — это лишь малая часть творческого процесса, в ходе которого создаются полезные программы. Примером может служить обширный мозговой штурм, который ускоряет идею программы. Есть тестирование, есть исправление ошибок, есть чтение readme, поиск, задавание вопросов, копирование, вставка и импорт модулей (DRY распространяется на отказ от воссоздания колеса). Вы также тратите время на изучение способов создания кода, чтобы программа работала быстрее, требовала меньше строк или была менее сложной. В какой-то момент я подумал, что мне нужно скопировать весь HTML-код страницы, а затем разобрать его на куски, прежде чем копировать фрагмент данных, который я хотел отправить в текстовом сообщении. После дальнейшего изучения (то есть с помощью Raylu) я узнал, что модуль, который я использовал для нахождения фрагмента данных, который я хотел скопировать, сам мог копировать этот фрагмент. данных.
Что я чувствую, видя свою программу в действии, получая текстовое сообщение с нужными мне данными? Удивительный.
# выход()
Кодить сложно.
Я отправился в это путешествие, чтобы «изучить» Python. Этого не произошло.
По сути, я неправильно понял природу программного обеспечения. Изучение языка программирования не похоже на изучение иностранного языка. Вместо того, чтобы знать разницу между типами данных или как определять, описывать или понимать нулевые состояния для циклов, циклов while и исключений, свободное владение языком программирования гораздо больше похоже на игру в шахматы или игру в го. . Можно понять правила игры, и можно действительно хорошо играть в игру.
Тем не менее, у меня есть вкус к разочарованиям и радостям кодирования, и я гораздо лучше понимаю, что возможно с кодом. Кодирование требовательно, оно подталкивает вас к осторожности, вдумчивости и точности. Ошибочно размещенная открытая скобка или отсутствующий «:», и ваш код не будет работать. Затем вы исправляете свою глупость, ваш код работает, вы смотрите, как он работает, вы видите, сколько времени вы сэкономите, и вы начинаете чувствовать силу, скрытую под вашими пальцами, под клавишами вашей клавиатуры. Это как включить снегоход в горах и почувствовать, как руль трясется и гремит на грани между потенциальной и кинетической энергией… вы видите на горизонте заснеженные вершины, и теперь у вас есть быстрый и увлекательный способ добраться туда.
Я уже придумал простую программу, которая могла бы облегчить мою работу, а знакомство с Python помогает мне увидеть матрицу такой, какая она есть. Я думаю, что люди, которые по-настоящему «знают» Python — или любой другой язык программирования — сочетают видение, чтобы определить, какие проблемы можно решить с помощью программного обеспечения, с возможностью превратить это видение в работающий код. У меня пока этого нет. Я работаю.