Я составляю правила программирования для моей команды: какие у вас?
Некоторое время я работал над списком, который помогает мне рассказать о причинах подхода к программированию и подумать так же, как сделать что-то.
Для этого я хотел создать список вещей, которые:
- лучшая практика,
- лучшая мысль,
- лучший подход...
это помогает программисту анализировать, думать, подходить, решать и реализовывать наиболее эффективным способом.
Я видел десятки невероятно ценных комментариев в вопросах в Stack Overflow, но я не мог найти место, где мы будем их хранить вместе. Существует наиболее противоречивое мнение о переполнении стека. Однако я просто ищу мудрые идеи, которыми можно поделиться и помочь моей команде, и я лучше подхожу и решаю проблемы с помощью лучшего программирования.
Надеемся, что это может быть одно место, чтобы собрать один или два лайнера, которые являются краткими, глубокими и легкими, чтобы поделиться, повторить, рассмотреть. Если мы придерживаемся одного правила для каждого ответа, может быть проще всего проголосовать за или против.
Начну с первого.
СУХОЙ - Не повторяйте себя - В коде, комментариях или документации.
65 ответов
Всегда оставляйте код немного лучше, чем когда вы его нашли.
Код не существует, пока не введен в систему контроля версий.
Не бойтесь признать "я не знаю" и спросить.
10 минут с просьбой кого-нибудь сэкономить, потянув за волосы!
ПОЦЕЛУЙ - Держи это простым, глупым.
Выберите самое простое решение, которое работает.
Не усложняйте вещи (слишком), пока они не должны быть.
То, что все остальные используют какую-то сложную среду для решения своих проблем, вовсе не означает, что вы должны это делать
Если в основной библиотеке должна быть функция для этого - вероятно, есть.
Ремонтопригодность важна.
Напишите код, как будто человек, который будет поддерживать его, сумасшедший и знает, где вы живете.
Кто-то другой не исправит это.
Если проблема привлекает ваше внимание, возьмите на себя ответственность достаточно долго, чтобы гарантировать, что о ней так или иначе позаботятся.
Не оптимизируйте, если нет очевидной проблемы.
Большую часть времени, когда люди пытаются оптимизировать код до того, как он будет признан необходимым, они тратят много ресурсов, затрудняют чтение и поддержку кода и не достигают заметного эффекта. Иногда они даже ухудшат ситуацию.
"Мы должны забыть о малой эффективности, скажем, в 97% случаев: преждевременная оптимизация - корень всего зла".
- Дональд Кнут
Как трудно это может быть?
Не позволяйте любой проблеме запугать вас.
Не собирай требования - копай их
Требования редко лежат на поверхности. Они похоронены глубоко под слоями предположений, заблуждений и политики
Следуйте твердым принципам:
Принцип единой ответственности (SRP)
Никогда не должно быть более одной причины для изменения класса.
Открытый-Закрытый Принцип (OCP)
Программные объекты (классы, модули, функции и т. Д.) Должны быть открыты для расширения, но закрыты для модификации.
Принцип замещения Лискова (LSP)
Функции, которые используют указатели или ссылки на базовые классы, должны иметь возможность использовать объекты производных классов, не зная об этом.
Принцип разделения интерфейса (ISP)
Клиенты не должны зависеть от интерфейсов, которые они не используют.
Принцип обращения зависимостей (DIP)
A. Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
Б. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Я думаю, что почти все, что перечислено в "Дзен Python", применимо к каждому списку "Правила программирования мышления". Начните с 'python -c' import this '':
Дзен Питона, Тим Питерс
- Красиво лучше, чем безобразно.
- Явное лучше, чем неявное.
- Простое лучше, чем сложное.
- Сложный лучше, чем сложный.
- Квартира лучше, чем вложенная.
- Разреженный лучше, чем плотный.
- Читаемость имеет значение.
- Особые случаи не настолько особенные, чтобы нарушать правила.
- Хотя практичность превосходит чистоту.
- Ошибки никогда не должны проходить бесшумно.
- Если явно не молчать.
- Перед лицом двусмысленности откажитесь от соблазна гадать.
- Должен быть один - и желательно только один - очевидный способ сделать это.
- Хотя этот путь может быть неочевидным на первый взгляд, если вы не голландец.
- Сейчас лучше, чем никогда.
- Хотя никогда не бывает лучше, чем сейчас.
- Если реализацию сложно объяснить, это плохая идея.
- Если реализацию легко объяснить, это может быть хорошей идеей.
- Пространства имен - одна из отличных идей - давайте сделаем больше!
Лучшая практика: используйте свой мозг
Не следуйте какой-либо тенденции / принципу / образцу, не думая об этом
Test Driven Development (TDD) заставляет кодеров лучше спать по ночам
Просто чтобы прояснить: некоторые люди думают, что TDD - это просто некомпетентный способ кодера хромать от А до В, не перегружая все, и что, если вы знаете, что делаете, это означает, что нет необходимости (единица измерения) методики тестирования. Это полностью упускает из виду разработку через тестирование. TDD - это три (обновление: очевидно, четыре) вещи:
Рефакторинг магии. Наличие полного набора тестов означает, что вы в противном случае можете сделать безумные рефакторинговые трюки, манипулируя всей структурой вашего приложения, не пропуская даже одного из двухсот сумасшедших тонких побочных эффектов, которые возникают в результате. Даже лучшие программисты неохотно проводят рефакторинг своих базовых классов и интерфейсов без хорошего (модульного) покрытия тестами, потому что почти невозможно отследить все маленькие "волновые эффекты", которые они вызывают без них.
Обнаружение ошибок рано. Если вы пишете тесты правильно, это означает, что вы должны заставить себя рассмотреть все дополнительные случаи. Часто это приводит к лучшему выбору дизайна после начала фактической разработки, потому что кодировщик уже рассмотрел некоторые хитрые ситуации, которые могут потребовать другой структуры наследования или более гибкого шаблона проектирования. Потребность в этих изменениях часто неочевидна - или интуитивно понятна - во время первоначального планирования и анализа, но эти точные изменения могут значительно облегчить расширение приложения и его поддержку в дальнейшем.
Обеспечение написания тестов. TDD требует от вас написания тестов перед написанием кода. Несомненно, это может быть проблемой в заднице, так как написание тестов утомительно по сравнению с написанием реального кода - и часто также занимает больше времени. Тем не менее, это единственный способ убедиться, что тесты будут написаны вообще. Если вы думаете, что не забудете написать тесты, как только код будет готов, вы почти всегда ошибаетесь.
Заставляет вас писать лучший код. Поскольку TDD вынуждает весь код быть тестируемым (вы не пишете код до того, как для него есть тест), он требует, чтобы вы писали более разъединенный код, чтобы вы могли тестировать компоненты изолированно. Так что TDD заставляет вас писать лучший код. (Спасибо, Эско)
Google, прежде чем спросить вашего коллегу и прервать его кодирование.
Меньше кода лучше, чем больше, если он имеет больше смысла, чем много кода.
Привычки ленивого кодера
В первый раз, когда вас попросят что-то сделать, сделайте это (справа).
Во второй раз, когда вас попросят сделать это, создайте инструмент, который сделает это автоматически.
И в третий раз, если инструмент не сокращает его, разработайте язык, специфичный для предметной области, для создания дополнительных инструментов.
(не следует воспринимать слишком серьезно)
Будь катализатором перемен
Вы не можете заставить людей меняться. Вместо этого покажите им, каким может быть будущее, и помогите им принять участие в его создании.
Не паникуйте при отладке
Сделай глубокий вдох и ДУМАЙ! о том, что может быть причиной ошибки.
Вы можете скопировать и вставить, чтобы заставить это работать, но вы не можете оставить это таким образом.
Дублированный код - это промежуточный этап, а не конечный продукт.
Это и то, что ты говоришь, и то, как ты это говоришь
Нет смысла иметь отличные идеи, если вы не доносите их эффективно.
Всегда пишите код, как будто человек, который в конечном итоге поддерживает ваш код, является жестоким психопатом, который знает, где вы живете.
От: код ужас
Часто проводить проверки кода
Проверка кода и, следовательно, рефакторинг - это постоянная задача. Вот несколько положительных моментов о проверке кода на мой взгляд:
- Это улучшает качество кода.
- Это помогает преобразовать повторно используемые коды в повторно используемые библиотеки.
- Это поможет вам учиться у ваших коллег-разработчиков.
- Это поможет вам учиться на своих ошибках и освежить вашу память о гениальном коде, который вы написали ранее.
Все, что может повлиять на работу приложения, должно рассматриваться как код, а это означает, что оно должно быть переведено в систему контроля версий. Особенно строить скрипты и схемы базы данных и файлы данных (.sql).
Принять участие в разработке с открытым исходным кодом
Если вы используете в своих проектах открытый исходный код, не забудьте опубликовать свои исправления и улучшения в сообществе. Сама по себе это не лучшая практика разработки, но это определенно мышление программиста, к которому нужно стремиться.
Особенно в тех случаях, когда условности являются сильными и гибкость может быть принесена в жертву.
Понять инструменты, которые вы используете
Не используйте шаблон, пока не поймете, почему вы его используете; не используйте инструмент, не зная почему; не полагайтесь на то, что ваш фреймворк или языковой дизайнер всегда подходят для вашей ситуации, но также не думайте, что они не правы, пока это не доказано!