Я составляю правила мышления программиста для своей команды:А какие у тебя?[закрыто]

StackOverflow https://stackoverflow.com/questions/513953

  •  21-08-2019
  •  | 
  •  

Вопрос

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

Для этого я хотел составить список вещей, которые:

  • наилучшая практика,
  • лучшая мысль,
  • наилучший подход...

это помогает программисту анализировать, мыслить, подходить, решать и внедрять наиболее эффективным способом.

Я видел десятки невероятно ценных комментариев в вопросах по всему Stack Overflow, но я не смог найти место, где мы храним их вместе.Существует самое противоречивое мнение о переполнении стека.Тем не менее, я просто ищу мудрые идеи, которыми можно поделиться и которые помогут моей команде, и я лучше подхожу к решению проблем с помощью более совершенного программирования.

Надеюсь, это может стать одним из мест, где можно собрать один или два лайнера, которые будут краткими, глубокими и которыми легко поделиться, повторить, просмотреть.Если мы будем придерживаться одного правила для каждого ответа, возможно, будет проще всего проголосовать "за" или "против".

Я начну с первого.

СУХО - Не повторяйтесь - В коде, комментариях или документации.

Это было полезно?

Решение

Всегда оставляйте код немного лучше, чем когда вы его нашли.

Другие советы

Код не существует до тех пор, пока не будет введен в система управления версиями.

Не бойтесь признать: "Я не знаю" - и спросить.

10 минут, потраченных на то, чтобы попросить кого-нибудь, могут сэкономить день на выдергивании ваших волос!

ПОЦЕЛУЙ - Будь проще, глупый.
Выберите самое простое решение, которое работает.
Не усложняйте ситуацию (слишком) до того, как в этом возникнет необходимость.
Просто потому, что все остальные используют какой-то сложный фреймворк для решения своей проблемы, это не значит, что вы должны это делать.

Не изобретайте велосипед заново

Если там следовало бы быть функцией для этого в основной библиотеке - вероятно, так и есть.

Важна ремонтопригодность.

Пишите код так, как будто человек, который в конечном итоге будет его поддерживать, сумасшедший и знает, где вы живете.

Кто - то другой не будет исправь это.

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

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

"Мы должны забыть о небольшой эффективности, скажем, примерно в 97% случаев:преждевременная оптимизация - это корень всего зла ".
- Дональд Кнут

Насколько это может быть трудно?
Не позволяйте ни одной проблеме запугать вас.

Не собирайте Требования - копайте сами

Требования редко лежат на поверхности.Они погребены глубоко под слоями предположений, неправильных представлений и политики

через Прагматичный Программист

Следуйте инструкциям ТВЕРДЫЕ принципы:

Принцип Единой ответственности (SRP)

У класса никогда не должно быть более одной причины для изменения.

Принцип "Открыто-Закрыто" (OCP)

Программные объекты (классы, модули, функции и т.д.) должны быть открыты для расширения, но закрыты для модификации.

Принцип замещения Лискова (LSP)

Функции, использующие указатели или ссылки на базовые классы должны иметь возможность использовать объекты производных классов , не зная об этом.

Принцип разделения интерфейса (Провайдер)

Клиенты не должны быть вынуждены зависеть от интерфейсов , которые они не используют.

Принцип Инверсии зависимостей (ПОГРУЖЕНИЕ)

A.Модули высокого уровня не должны зависеть от модулей низкого уровня.И то, и другое должно зависеть от абстракций.

B.Абстракции не должны зависеть от деталей.Подробные сведения должно зависеть от абстракций.

Наилучшая практика: Используй свой мозг
Не следуйте никакому тренду / принципу / паттерну, не подумав об этом

Я думаю, что почти все, что перечислено в разделе "Дзен Python", применимо к каждому списку "Правил мышления при программировании".Начните с "python -c "импортирует это"":

Дзен Python, автор Тим Питерс

  • Красивое лучше, чем уродливое.
  • Явное лучше, чем неявное.
  • Простое лучше сложного.
  • Сложный - это лучше, чем запутанный.
  • Плоский - это лучше, чем вложенный.
  • Разреженный лучше, чем плотный.
  • Важна читабельность.
  • Особые случаи не настолько особенные, чтобы нарушать правила.
  • Хотя практичность превосходит чистоту.
  • Ошибки никогда не должны проходить бесшумно.
  • Если только явно не замолчать.
  • Столкнувшись с двусмысленностью, откажитесь от искушения угадать.
  • Должен быть один - и желательно только один - очевидный способ сделать это.
  • Хотя поначалу этот способ может показаться неочевидным, если только вы не голландец.
  • Сейчас лучше, чем никогда.
  • Хотя "никогда" часто бывает лучше, чем правильно сейчас же.
  • Если реализацию трудно объяснить, значит, это плохая идея.
  • Если реализацию легко объяснить, это может быть хорошей идеей.
  • Пространства имен - это чертовски отличная идея - давайте сделаем больше таких!

Разработка, основанная на тестировании (TDD), помогает программистам лучше спать по ночам

Просто чтобы уточнить:Некоторые люди, похоже, думают, что TDD - это просто способ некомпетентного программиста перейти от пункта А к пункту В, не перегружая все слишком сильно, и что если вы знаете, что делаете, это означает, что нет необходимости в методологиях (модульного) тестирования. Это полностью упускает из виду суть разработки, основанной на тестировании. TDD составляет около трех (обновление:по-видимому, четыре) вещи:

  1. Магия рефакторинга.Наличие полного набора тестов означает, что вы можете совершать безумные трюки с рефакторингом, манипулируя всей структурой вашего приложения, не пропуская ни одного из двухсот сумасшедших тонких побочных эффектов, которые возникают в результате этого.Даже лучшие программисты неохотно проводят рефакторинг своих основных классов и интерфейсов без хорошего (модульного) тестового покрытия, потому что без них практически невозможно отследить все небольшие "волновые эффекты", которые это вызывает.

  2. Раннее выявление подводных камней.Если вы пишете тесты правильно, это означает заставлять себя рассматривать все второстепенные случаи.Часто это приводит к лучшему выбору дизайна после начала фактической разработки, поскольку программист уже рассмотрел некоторые из более сложных ситуаций, которые могут потребовать другой структуры наследования или более гибкого шаблона проектирования.Необходимость этих изменений часто неочевидна - или интуитивно понятна - во время первоначального планирования и анализа, но именно эти изменения могут значительно упростить расширение и обслуживание приложения в дальнейшем.

  3. Обеспечение того, чтобы тесты были написаны.TDD требует, чтобы вы написали тесты перед написанием кода.Конечно, это может быть занозой в заднице, поскольку написание тестов утомительно по сравнению с написанием фактический кодирование - и к тому же часто занимает больше времени.Однако это единственный способ убедиться, что тесты вообще будут написаны.Если вы думаете, что не забудете написать тесты, как только код будет готов, вы почти всегда ошибаетесь.

  4. Заставляя вас писать лучший код.Поскольку TDD делает весь код тестируемым (вы не пишете код до того, как для него будет проведен тест), это требует от вас написания более разобщенного кода, чтобы вы могли тестировать компоненты изолированно.Таким образом, TDD заставляет вас писать лучший код.(Спасибо, Эско)

Погуглите, прежде чем спрашивать своего коллегу и прерывать его кодирование.

Меньше кода лучше, чем больше, при условии, что в нем больше смысла, чем в большом количестве кода.

Привычки ленивого программиста

В первый раз, когда вас попросят что-то сделать, сделайте это (правильно).

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

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

(не следует воспринимать слишком серьезно)

Будьте катализатором перемен

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

через Прагматичный Программист

Не паникуйте При Отладке

Сделай глубокий вдох и ПОДУМАЙ!о том, что могло быть причиной ошибки.

через Прагматичный Программист

Вы можете скопировать и вставить, чтобы заставить его работать, но вы не можете оставить все как есть.

Дублированный код - это промежуточный этап, а не конечный продукт.

Важно и то, что Ты Говоришь, и то, как Ты это говоришь

Нет смысла выдвигать отличные идеи, если вы не умеете эффективно их излагать.

через Прагматичный Программист

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

От: Кодирующий Ужас

Разрушитель Построек Покупает Обед

Публикуйте рано, Публикуйте часто

Сначала постройте его правильно.Сделай это быстро, во-вторых.

Часто проводите проверки кода

Проверка кода и, следовательно, рефакторинг - это постоянная задача.Вот несколько полезных советов о проверке кода, на мой взгляд:

  1. Это улучшает качество кода.
  2. Это помогает реорганизовывать повторно используемые коды в повторно используемые библиотеки.
  3. Это поможет вам учиться у ваших коллег-разработчиков.
  4. Это поможет вам учиться на своих ошибках и освежить в памяти гениальный код, который вы написали раньше.

Все, что может повлиять на работу приложения, должно рассматриваться как код, а это означает передачу его в систему управления версиями.Особенно для создания скриптов, схемы базы данных и файлов данных (.sql).

Примите участие в разработке с открытым исходным кодом

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

Разберитесь в инструментах, которые вы используете

Не используйте шаблон, пока не поймете, зачем вы его используете;не используйте инструмент, не зная зачем;не полагайтесь на то, что ваш фреймворк или языковой дизайнер всегда подходят для вашей ситуации, но и не предполагайте, что они ошибаются, пока это не будет доказано!

Соглашение о конфигурации

Особенно там, где сильны условности и некоторой гибкостью можно пожертвовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top