10 простых приемов, которые помогут вам писать код в соответствии с профессиональными стандартами
Фон
Я пишу код уже 20 лет и за это время установил набор из 10 принципов, которые, как я считаю, могут принять программисты, разработчики и специалисты по данным, чтобы помочь им писать свой код в соответствии с профессиональными стандартами.
Эти подходы, как правило, применимы к любой среде разработки программного обеспечения, но, поскольку в настоящее время я пишу код на языке Python в среде разработки VS Code, я сосредоточился на этих инструментах для конкретных примеров.
Прежде чем мы углубимся в советы, подумайте…
Присоединение к Medium по моей реферальной ссылке (я получу часть комиссии, если вы зарегистрируетесь по этой ссылке).
Подписка на бесплатную электронную почту всякий раз, когда я публикую новую историю.
Беглый взгляд на мои предыдущие статьи.
Загружаю мою бесплатную систему принятия стратегических решений на основе данных.
1. Линтинг
Первый простой способ помочь в написании профессионального кода — использовать линтинг.
Linting выявляет синтаксические и стилистические проблемы в вашем исходном коде Python, что часто помогает вам выявлять и исправлять тонкие программные ошибки или нетрадиционные методы кодирования, которые могут привести к ошибкам. (https://code.visualstudio.com/docs/python/linting#)
Чтобы начать линтинг в VS Code, перейдите в палитру команд с помощью Ctrl+Shift+P и введите «Выбрать линтер», затем выберите линтер, который вы хотите использовать.
Существует ряд доступных линтеров, и выбор будет зависеть от индивидуальных и групповых предпочтений, но мой личный фаворит — «pylint», потому что мне нравится, как он представляет ошибки и предупреждения, а также потому, что его легко установить и настроить.
После включения линтинга VS Code будет отображать предложения в окне проблем, которые будут динамически обновляться по мере того, как вы пишете новый код и улучшаете существующий код.
Устранение всех ошибок и предупреждений Pylint быстро позволит вашему коду отражать профессиональные, согласованные стандарты и следовать рекомендациям.
2. Комментарии, подсказки типов и документация
Начнем с типовых подсказок. Python — это язык с «динамической типизацией». Тип переменной не требуется, и в большинстве онлайн-примеров не указываются типы переменных, параметры и возвращаемые типы.
Недостатком является то, что клиент или вызывающая сторона не могут легко узнать, какой тип ожидает функция.
Однако, если в код опционально добавляются типы переменных, читабельность и понятность резко возрастают, потому что клиент или вызывающая сторона сразу узнают, какой тип ожидает функция…
Как только подсказки типов включены, следующим этапом является хорошо прокомментированный и документированный код, который является одной из вещей, которая отличает профессиональный код.
В дополнение к улучшению читабельности и ремонтопригодности, когда вы добавляете комментарии, подсказки по типам и документацию, это заставляет вас думать о своем коде с другой точки зрения, что приводит к рефлексивной обратной связи и улучшениям.
После установки расширения docString в VS Code просто нажмите клавишу возврата под объявлением функции, введите три двойных кавычки, а затем заполните созданную для вас заглушку…
Также важно оставлять общие комментарии в теле кода для повышения понятности и удобства сопровождения, а обертывание блоков комментариев в области позволяет аккуратно складывать их в редакторе VS Code…
Когда подсказки типов и docStrings были заполнены по всему модулю, очень легко создать полный набор профессионально выглядящей документации. Просто вызовите pydoc следующим образом…
python -m pydoc -w "..\lib\crypto_tools.py"
…и веб-страница с документацией будет создана автоматически…
3. Структура проекта
Многие небольшие проекты можно создать в одной папке, содержащей весь код и файлы конфигурации, необходимые для запуска проекта.
Однако вскоре одна папка может превратиться в неструктурированную свалку, ведущую к грязным и непрофессиональным проектам.
Я видел несколько рекомендаций по стандартному макету папок для проектов Python и пришел к выводу, что не имеет значения, какой из них выбрать, если он обеспечивает разумную, логичную, интуитивно понятную, дискретную и последовательную организацию ресурсов проекта.
Это стандарт, который я принял для своих проектов…
Подпапка «data» содержит любые файлы данных, относящиеся к проекту, и я обычно добавляю подпапки «in» и «out», если мой проект очищает или преобразует данные.
«docs» — это место, где я храню документацию, созданную pydoc из docStrings, и пакетный файл для вызова pydoc, чтобы обеспечить создание документации одним щелчком мыши.
«ключи» были специальным проектом для этого конкретного проекта, демонстрируя, что я не прочь расширить свой стандартный подход, исходя из потребностей проекта.
«lib» — это место, где я храню любые повторно используемые библиотеки кода. В этом случае я переместил весь код, который имел потенциальную ценность для повторного использования в будущем, в crypto_tools.py и провел его рефакторинг, чтобы максимизировать удобство использования и ремонтопригодность.
«ноутбуки» — это место, где все Jupyter Notebooks разделены и хранятся. Обычно я использую блокноты для создания образца пользовательского интерфейса и демонстрации того, как проект работает и может быть использован.
«src» — это место, где я храню любой другой код Python, который не является библиотекой многократного использования.
«unittests» — это место, где хранятся все модульные тесты pytest. В проекте среднего размера может быть много файлов модульных тестов, и их действительно нужно перемещать в отдельное место для поддержания порядка. Это требует дополнительной настройки, которую я опишу в следующей статье.
Хорошо организованный и структурированный проект мгновенно добавляет профессионального признания программному коду.
4. Модульное тестирование
Тратить время на разработку модульных тестов имеет решающее значение для кодирования как профессионал, и я лично предпочитаю среду модульного тестирования pytest.
После создания модульных тестов (подробнее см. https://code.visualstudio.com/docs/python/testing) просто используйте значок фляги внутри VS Code, чтобы открыть все модульные тесты, а затем нажмите Воспроизвести для выполнения. торговый центр -
Они загорятся зеленым, если все работает нормально, или красным, если какие-либо модульные тесты не пройдут.
Сила всестороннего модульного тестирования заключается в том, что будущие изменения и обновления могут быть сделаны с уверенностью, что, если что-то непреднамеренно сломано, тестовый запуск одним щелчком мыши мгновенно выявит проблемы.
Таким образом, код может разрабатываться и поддерживаться профессионально, а текущее и будущее качество кода будет высоким.
5. Объектно-ориентированное программирование
Четыре основные концепции объектно-ориентированного программирования (ООП):
Наследование — класс наследует свойства и методы другого класса.
Инкапсуляция — данные скрыты и защищены внутри своего класса с помощью частных свойств.
Полиморфизм — методы могут иметь одно и то же имя, но с разной реализацией — например, len(int)
против len(list)
.
Абстракция — автоматическое применение стандартных интерфейсов — подумайте .fit()
и .fit_transform()
в scikit-learn.
Подробное объяснение с некоторыми примерами Python можно найти здесь — https://www.analyticsvidhya.com/blog/2020/09/object-orientary-programming/.
ООП имеет много преимуществ по сравнению с традиционным процедурным программированием. включая повторное использование кода, ремонтопригодность, безопасность, производительность, более простое устранение неполадок и т. д.
Однако ключевым преимуществом ООП для меня является то, что потребители и клиенты классов и объектов имеют гораздо более интуитивно понятный и удобный интерфейс, что приводит к тому, что внешний код становится более компактным, удобным в сопровождении и читабельным.
Например, в следующем фрагменте кода показан интуитивно понятный и простой интерфейс для одностороннего хеширования, которое в противном случае могло бы быть запутанным и сложным:
В этом сила ООП и почему я всегда пишу свой код в виде классов и объектов, и это один из ключевых подходов к повышению профессионализма программного кода.
6. Избегайте дублирования кода
Дублирование одного и того же или очень похожего кода приводит к проектам, подверженным ошибкам. Если аналогичный фрагмент кода был повторен в проекте 10 раз, а затем ошибка нуждается в исправлении или добавлении улучшения, это нужно сделать 10 раз, что неэффективно и трудоемко и дает 10 возможностей для ошибок.
Рассмотрим эти простые функции –
Каждый из них заменяет только одну строку кода, так зачем беспокоиться? Что ж, этот фрагмент кода взят из проекта, который содержал сотни экземпляров декодирования и кодирования, и в какой-то момент проекта кодировку пришлось изменить с «utf-8» на «ascii».
Это потребовало множества изменений, и каким-то образом пара из них была упущена, что привело к ошибкам и ошибкам, которые не были обнаружены до тех пор, пока код не был запущен в производство.
Переместив все экземпляры в две простые функции, код стал выглядеть чище, дублирование было устранено, а любые будущие изменения в кодировке можно было вносить быстро и уверенно.
На языке программирования это известно как СУХОЙ метод — Не повторяйся (подробнее см. https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).
7. Рефакторинг кода
Рефакторинг — это итеративный подход к просмотру и улучшению существующего кода до тех пор, пока он не станет настолько чистым, аккуратным и профессиональным, насколько это возможно.
Вот несколько вопросов и соображений, которые помогут в процессе проверки…
1. Можно ли заменить несколько строк кода меньшим количеством строк?
2. И наоборот, должен ли код быть немного более подробным, чтобы улучшить читабельность?
3. Был ли написан специальный код, в котором существующая библиотека могла бы выполнять ту же работу?
4. Можно ли исключить повторяющийся код?
5. Можно ли переписать несколько связанных функций и данных как класс (ООП)?
6. Можно ли расширить код, чтобы улучшить его надежность и возможность повторного использования?
7. Были ли учтены и включены исключения и обработка ошибок?
8. Были ли полностью использованы «питоновские» подходы, такие как лямбда-функции, понимание списков и т. д.?
9. Эффективен ли код и быстро ли он выполняется?
10. Можно ли повторно запускать и использовать код?
Рассмотрение этих вопросов и одержимость итеративным рефакторингом вашего кода до тех пор, пока он не станет близок к идеальному, — это один из ключевых приемов, который поможет вам писать код как профессионал.
8. Библиотеки строительных кодов
Работодатели и клиенты всегда требуют работать быстро, что иногда может привести к небрежному кодированию, но вы можете работать быстро, не жертвуя качеством, создавая повторно используемые библиотеки кода.
Мой личный подход заключается в поддержке двух библиотек с немного разными целями.
Первый называется «Образец кода». Это свалка для всех полезных фрагментов кода, которые я натыкаюсь в Интернете и в книгах, и я знаю, что захочу вернуться к ним в будущем, но потом не смогу найти!
Моя вторая библиотека — это моя библиотека «Утилиты». Чтобы претендовать на эту библиотеку, код должен быть реорганизован, приведен в порядок, протестирован, задокументирован и структурирован таким образом, чтобы он был в целом полезен и повторно использовался в будущих проектах.
Вот пример. Мне нужны были синтетические данные для проверки алгоритма классификации. Вскоре Google помог мне отследить код, но он был немного запутанным и недокументированным. После небольшой дополнительной работы в моей библиотеке утилит появился новый полезный метод:
Единственное, что вам нужно сделать, это импортировать вашу библиотеку в будущие проекты следующим образом:
sys.path.insert
добавляет папку утилит к пути Python для проекта, а затем make_classification_data
импортируется и может использоваться.
Создание истории образцов кода и служебных библиотек действительно поможет вам писать код со скоростью и качеством профессионального программиста.
9. Написание блогов по программированию
Эффект протеже — это психологический феномен, при котором…
обучение … или подготовка к обучению информации другим помогает человеку усвоить эту информацию (https://effectiviology.com/protege-effect-learn-by-teaching/).
Это лишь одно из многих преимуществ регулярного ведения блога о программировании.
Подготовка блога включает в себя просмотр кода с обновленным критическим взглядом; в конце концов, вы не хотите, чтобы какие-либо ошибки попали в публичную статью!
Кроме того, объяснение вашего кода другим поможет вам полностью понять его и улучшить свои знания и опыт в этом процессе.
Поверьте мне в этом — одним из ваших будущих читателей и студентов будете вы сами! Через 6 месяцев или год вы забудете детали той действительно полезной техники кодирования, которую открыли, и вернетесь к своим собственным статьям, чтобы помочь себе вспомнить.
Наконец, ведение блога на авторитетной платформе, такой как среда и наука о данных, поможет создать вашу профессиональную личность в Интернете, что поможет вашим коллегам, сообществу программистов и потенциальным будущим работодателям понять ваши профессиональные стандарты и возможности.
10. Чтение и вызовы
Читайте как можно больше соответствующих материалов, которые помогут вам улучшить свои профессиональные навыки кодирования и знания предмета.
Подпишитесь на списки рассылки, такие как Real Python (https://realpython.com/), и убедитесь, что вы присоединились к medium.com…
Примечание: автор получит часть гонорара, если вы зарегистрируетесь по этой ссылке.
… затем разместите приложение на своем смартфоне, чтобы вы могли читать о своей теме каждый раз, когда стоите в очереди за покупками или ждете, пока закипит чайник…
Также подпишитесь на подкаст Towards Data Science, чтобы совершенствовать свои профессиональные навыки, пока вы за рулем или сидите на диване — https://open.spotify.com/show/63diy2DtpHzQfeNVxAPZgU?si=224fbdb47b6f4c1f.
В дополнение к этим бесплатным или недорогим ресурсам иногда стоит заплатить за хорошую старомодную книгу. Вот подборка лучших книг, которые я прочитал за последнее время, чтобы улучшить свои навыки.
Последняя рекомендация в этом разделе — бросить себе вызов, используя множество онлайн-инструментов и ресурсов.
Если вам нужны общие задачи по программированию на Python, вы можете использовать такой ресурс, как Принципы Python — https://pythonprinciples.com/challenges/.
Если вы хотите решить более сложную задачу, связанную с наукой о данных, и сравнить свою производительность с коллегами, почему бы не выбрать набор данных, который вам нравится на Kaggle, и посмотреть, как далеко вы сможете подняться в таблице лидеров.
В настоящее время я нахожусь на 4-м месте в соревновании ниже, почему бы не посмотреть, сможете ли вы победить меня? …
Заключение
Чтобы стать профессиональным программистом, нужно усердно работать и преданно работать, но если, как и я, программирование волнует и вдохновляет вас, и если вы любите свой предмет, вы добьетесь своего, и в этой статье я рассмотрел 10 инструментов и методов, которые могут ускорить этот путь.
Помимо писательства, я тренировал и наставлял многих программистов, и если вы рассматриваете возможность наставничества, почему бы не связаться со мной по адресу [email protected]?
Если вам понравилась эта статья, подумайте…
Присоединение к Medium по моей реферальной ссылке (я получу часть комиссии, если вы зарегистрируетесь по этой ссылке).
Подписка на бесплатную электронную почту всякий раз, когда я публикую новую историю.
Беглый взгляд на мои предыдущие статьи.
Загружаю мою бесплатную систему принятия стратегических решений на основе данных.
Кроме того, я хотел бы услышать от вас, что вы думаете о моих статьях или о чем-либо еще, связанном с наукой о данных и анализом данных.
Пожалуйста, не стесняйтесь обращаться к LinkedIn по адресу https://www.linkedin.com/in/grahamharrison1 или по электронной почте [email protected].