От COBOL для мэйнфреймов к объектно-ориентированной бездне: нарушение силы

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

Великий магистр: Я не могу его научить. Он не знает, что означает объектно-ориентированный подход.

Лидер Совета: Он изучит объектно-ориентированный подход.

Великий магистр: Хммм. В нем, как и в отце, много упрямства.

Руководитель Совета: Я был другим, когда вы меня учили?

Великий магистр: Ха! Он не готов.

Разработчик Python: Я готов! Я могу быть рыцарем Python. Глава Совета Python, скажите ему, что я готов!

Великий Магистр: Готовы? Что ты знаешь о готовом? 26 лет я тренировал Python Knights. Я буду придерживаться своего собственного совета, кого нужно обучать! Рыцарь Python должен иметь самую глубокую приверженность, самый серьезный ум. Неэффективный, хрупкий, нечитаемый код. Рыцарь-питон не жаждет всего этого… Вы безрассудны!

Руководитель Совета: Я тоже, если вы помните.

Великий магистр: Он слишком стар. Да, слишком стар, чтобы начинать обучение.

Разработчик Python: Но я многому научился!

Великий Магистр: * вздыхает * ... Закончит ли он то, что начал?

Разработчик Python: я вас не подведу - я не боюсь.

Не пытайтесь. Делать. Или нет. Нет попытки.

Осваивать Python к концу этой программы наставничества я не буду, но создам фундамент, на котором я смогу эффективно использовать Python и развивать свои навыки еще дальше. И, надеюсь, вы перестанете слышать голос Йоды в своей голове, когда будете читать оставшуюся часть этого блога. :)

Я нахожусь на втором месяце программы наставничества ChiPy Spring, и я не только достаточно хорошо освоил Python, но и многому научился в отношении передового опыта. Ранние сценарии, которые я писал, считались хрупкими, поскольку не было обработки исключений, а основные процедуры были длинными и нечитаемыми с небольшим использованием определенных функций. Теперь код, который я разрабатываю, очень удобочитаем с процессами, разбитыми на более мелкие функции с более длинными, но более информативными именами (все еще совершенствуя это). Любые непредвиденные ошибки вызвали сбой этих ранних модулей, но теперь, используя различные методы обработки исключений, мой код будет определять и отлавливать потенциально серьезные ошибки. Когда это происходит, управление передается обратно в ОС с соответствующими кодами возврата, чтобы система могла выполнять определенные действия, и это также позволяет обработчикам аккуратно закрывать связанные системные задачи.

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

Но как я дошел до этого момента и куда я собираюсь отсюда? Читать дальше…

Дорожная карта

После нескольких начальных разговоров, посвященных моему опыту и целям, а также некоторым идеям для проекта, Аллан составил «Дорожную карту» того, чему я должен научиться во время этой программы. Ниже приведены дороги, по которым мне пришлось пройти, прежде чем пройти базовую подготовку и стать молодым рыцарем Python:

Базовый Python 101 › Для циклов If / Elif / Else, перемещаться по словарю, перемещаться по списку, работать с кортежами, работать со строками, записывать и читать из файла.

Расширенный Python 101 › Аргументы командной строки, создание модулей (контекст вызова и __main__ kinks), flake8 / PEP8, строки документации / PEP257, понимание списка, менеджер контекста« с », обработка исключений, классы и т. д. они пришли ему в голову (это был мой личный фаворит), разбирая XML, регулярное выражение.

Git 101 › Зафиксировать и отправить, зафиксировать в ветке и отправить, объединить ветку, разрешить конфликты, запросы на извлечение GitHub и не забывать .gitignore.

Тестирование 101 › Напишите тесты для проверки вывода моего скрипта, настройте Continuos Integration на GitHub для получения бонусных баллов. Это были особые требования ко мне от инженера по качеству.

Выход из Python 101

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

Итак, после шести долгих недель с множеством поздних ночей и бесчисленных часов, проведенных в журнале, и без особой помпы, я заработал достаточно очков, чтобы закончить Python 101. Это был огромный шаг для меня, особенно учитывая, что я пришел из периода COBOL в эпоху мэйнфреймов. технологической шкалы времени. Этот динозавр прекрасно понимает то, чему он уже научился, и готов применить это с пользой и узнать еще больше. Итак, я беру то, чему научился, и строю систему в облаке. Поговорим о моем проекте!

Весенний наставнический проект 2017

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

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

В Главной лиге бейсбола есть сервер данных, на котором хранится информация обо всех играх в течение года, даже о текущих. Каталоги на этом сервере очень организованы и используют файлы словарей JSON для записи данных во время воспроизведения и доступны для всех. Я не могу использовать API MLB для доступа к данным. На самом деле, есть, но я не являюсь предпочтительным партнером MLB (думаю, ESPN), поэтому до тех пор, пока моя система не приобретет национальную известность, я буду обычным пользователем этих данных. Я изучил сложную структуру этих словарей и понял, как они указывают друг на друга и как хранятся соответствующие данные. Мне нужно будет создать мастер-файлы для эффективного выполнения моих сценариев запросов, и они будут храниться в структурированных словарях JSON.

Оказывается, данные обновляются в течение примерно 25 секунд после удара игрока, поэтому доступная информация актуальна. Я планирую разработать серию скриптов и веб / мобильных интерфейсов, которые предоставят средства для запроса статистики MLB для желаемых игроков. На выходе будут показаны данные, относящиеся к фэнтези-бейсболу, поскольку очки начисляются на основе результатов игрока в отношении определенных ключевых статистических показателей подачи и отбивания. Но сначала мне нужно закончить сценарии, которые я пишу, чтобы извлекать данные на ежедневной и даже ежечасной основе, чтобы создавать и поддерживать те файлы основных словарей, о которых я упоминал. У меня они уже написаны, но я поправляю их, просматривая их с Алланом.

А потом это случилось…

Да, это действительно так. В прошлую пятницу мы с Алланом провели 4 часа в таверне и, среди прочего, создали учетную запись AWS и настроили мой облачный экземпляр для размещения моей системы поиска данных MLB. Мы не только полностью настроили его со всеми необходимыми установками и настройкой безопасности SSH, но и связали его с моей учетной записью GitHub и перенесли первые несколько сценариев, которые я уже написал. Мы решили их покрутить… и знаете что, они успешно побежали с первой попытки! "Не может быть!" воскликнул Аллан, "Этого не происходит, не с первого раза!" После проверки результатов мы дали пять, определили несколько следующих шагов и назвали это ночью.

Я упоминал ранее, что был взволнован тем, что окончил Python 101 с честью. Итак, представьте себе мое волнение от настройки экземпляра облака AWS и получения нескольких скриптов для запуска с моей первой попытки! Я нахожусь на пути к доставке описанной мной системы и не могу дождаться, чтобы представить статистику ожидающему ее владельцу фэнтезийной бейсбольной команде за дружественным пользовательским интерфейсом. С каждым прогрессом это становится все веселее! В моем мире определенно есть беспокойство в Силе, поскольку я осваиваю много новых навыков, связанных с Python, которые я могу найти для себя, и это повлияет на компанию, в которой я работаю, и на мое личное удовлетворение.

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



Свежая перспектива: обновлено

В моем предыдущем блоге я рассказал о различиях и сходствах между миром Python / объектно-ориентированного программирования, в который я недавно вошел, и миром COBOL мэйнфреймов, из которого я пришел. Я упомянул, насколько они сильно различаются по используемым технологиям, и это очевидно, но я также говорил о том, что основные принципы действительно одинаковы для этих двух.

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



Эта концепция на самом деле ничем не отличается от того, что мы используем в мире мэйнфреймов, который мы называем Enterprise Release. От одной до многих команд, владеющих разными частями системы, работающих вместе, чтобы вносить улучшения или разрабатывать новые функции в существующую систему, и которые организованно объединяются для разработки, тестирования и выпуска кода в производство. Это контролируется координатором выпуска, который управляет внедрением любого нового кода в конвейер (или магистраль), следя за тем, чтобы команды не наступали друг другу на пятки, и управляет установками в различных тестовых и производственных средах. Технология отличается, это данность, но, опять же, основные принципы те же.

Июнь не за горами ... и мой последний блог ... следите за обновлениями!

Ах да, кстати… Мне до сих пор при каждой встрече дают бесплатную пиццу! #togoodtobetrue #thankyouChiPy