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, вы можете использовать такой ресурс, как Принципы Pythonhttps://pythonprinciples.com/challenges/.

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

В настоящее время я нахожусь на 4-м месте в соревновании ниже, почему бы не посмотреть, сможете ли вы победить меня? …



Заключение

Чтобы стать профессиональным программистом, нужно усердно работать и преданно работать, но если, как и я, программирование волнует и вдохновляет вас, и если вы любите свой предмет, вы добьетесь своего, и в этой статье я рассмотрел 10 инструментов и методов, которые могут ускорить этот путь.

Помимо писательства, я тренировал и наставлял многих программистов, и если вы рассматриваете возможность наставничества, почему бы не связаться со мной по адресу [email protected]?

Если вам понравилась эта статья, подумайте…

Присоединение к Medium по моей реферальной ссылке (я получу часть комиссии, если вы зарегистрируетесь по этой ссылке).

Подписка на бесплатную электронную почту всякий раз, когда я публикую новую историю.

Беглый взгляд на мои предыдущие статьи.

Загружаю мою бесплатную систему принятия стратегических решений на основе данных.

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

Пожалуйста, не стесняйтесь обращаться к LinkedIn по адресу https://www.linkedin.com/in/grahamharrison1 или по электронной почте [email protected].