Что вы считаете 1-й принцип (ы) программирования?

59

Мне всегда нравилось спрашивать себя "каков первый принцип (ы) этого?" после того, как я изучил основные вещи чего-то (например, программирование). IMO, это вдохновляющий вопрос, который может заставить вас задуматься о самом важном принципе (ах), стоящем за чем-то, особенно о таких навыках, как программирование.

Итак, что вы думаете, это первый принцип (ы) программирования? Я дам свой ответ чуть позже.

Weipeng L
источник
Мы не говорим о бойцовском клубе.
Работа

Ответы:

97
  1. ПОЦЕЛУЙ - Делай это просто глупо
  2. СУХОЙ - не повторяйся
  3. ЯГНИ - Тебе это не понадобится
Билл
источник
ПОЦЕЛУЙ должен быть Keep It Simple Smart. В первый раз, когда вам придется переписывать большой кусок кода, потому что вы не разрабатывали умный и расширяемый код, вы соглашаетесь с этим. :)
8
Я думаю, что ПОЦЕЛУЙ должен быть "Сохраняй это простым, глупый!"
Деннис С
На самом деле я работаю над сообщением в блоге о том, как эти двое являются самыми близкими и дорогими для программистов и как в то же время они немного оксюмороны, как часто вам придется выбирать одно против другого
10
Я бы тоже добавил ЯГНИ.
3
Инструмент @Programmin - я не думаю, что "глупо" излишне. Я думаю, что это говорит о том, что у нас есть тенденция хотеть быть «умными», и это проявляется как ненужная сложность. На мой взгляд, «глупый» пытается напомнить нам об этой тенденции, помогая нам вспомнить то, что мы изначально считаем «умным», обычно это не так.
Codekaizen
37

Напишите код, как если бы вы были тем, кто должен был поддерживать этот код.

Патрик Дежарден
источник
Это очень практичная эвристика, 3х :)
19
Напишите код, как будто его должен поддерживать психопат, владеющий топором. FTFY.
забытая точка с запятой
10
... и владеющий топором психопат знает, где ты живешь.
CAD
2
.., и он только что заточил свой топор ...
Roalt
1
... и он работает на вашей стороне.
Broken_Window
29

Будьте как можно ленивее.

Престон Гильо
источник
2
Опять же, вообще, ИМО. Возникает вопрос: «Насколько ленивым является соответствующее количество лени, действительно?», Потому что очевидно, что «неряшливый» - это то, чего вы тоже не хотите.
Это ссылка на Perl «Лень, нетерпение и гордыня»
То есть мы говорим о разной лени? Я думал, что «ленивый» Боб означает «не беспокойтесь об организации вашего кода, пока он не запутался»: D
2
Слишком генерал. По этой аналогии все переменные и функции будут состоять из 1 буквы, потому что мне «лень» печатать что-то значимое. Если предположить, что я должен был поддерживать это также, тогда, возможно, вы правы, потому что я сделал бы это настолько легко обслуживаемым, насколько это возможно.
Кайл Баллард
3
@ Кайл: Да, в этом все дело. «Истинная лень» делает вещи проще как для себя, так и в будущем. Который оказывается таким же, как все делать правильно. Если вы выполняете меньше работы сейчас, но больше работы позже, вы не настолько «ленивы, насколько это возможно» :)
23

Дзен, часть I: Программирование - это только дорога, а не путь.

Программирование - это всего лишь методика обучения компьютера тому, что он должен делать. Быть успешным в создании быстрого и надежного программного обеспечения означает знать ваши алгоритмы, лучшие практики и все остальное, что не обязательно связано с вашим программированием (языком).

Дзен, часть II: Если вы спешите, идите медленно. Если вы действительно торопитесь, сделайте объезд.

Звучит глупо, но не позволяйте себе идти на компромиссы, которые (действительно) могут потом вас беспокоить. У меня есть правило: если вы находитесь в центре программы, постарайтесь быть максимально точным и хорошим. Если вы используете методы из глубины своего программного обеспечения, постарайтесь быть быстрее в кодировании. Если вы кодируете выше этих двух, вы даже можете получить немного более небрежно.

Ошибки проектирования труднее всего найти и / или исправить. Следующим шагом являются ошибки программирования в тех частях, на которые опирается каждый, а затем «настоящие демонстративные части программного обеспечения». Если вам нужно исправить ошибку дизайна в конце проекта, ммм, это нехорошо ... ;-)

Дзен, часть III: Знай свой путь, Нео.

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

Георгий
источник
Ну, а потом еще раз: я приземлился на земле дзен, говоря о программировании :)
@ часть III - не добавляйте «модные новинки», если вам не платят за это!
Джейсон
+1 для ссылки на матрицу. Я хорош для хорошего (это и дзен. Заставляет меня думать о Python)
19

ПОЦЕЛУЙ (будь проще, глупый).

Это действительно напрашивается вопрос "Как вы определяете простой?" А также "Когда что-то слишком простое для поставленной задачи?" Вот почему вы не можете стать хорошим программистом, просто зная первый принцип программирования.

Дима
источник
Я думаю, что это слишком общее правило. Напрашивается вопрос «как вы определяете« простой », действительно».
3
и если вы глупы, как бы вы узнали, если бы это было просто?
Стивен А. Лоу
Это хорошо, Стивен :)
1
«Вот почему вы не можете стать хорошим программистом, просто зная первый принцип программирования» - любите его.
1
@Dima: вы правы, я имею в виду, что качество и простота (в данном случае, по крайней мере) не поддаются определению, но мы знаем это, когда видим это, если наши глаза обучены.
Адриано Вароли Пьяцца
18

Преждевременная оптимизация - корень всего зла. - Дональд Кнут

Рышард Сзопа
источник
Будь в реализации ИЛИ дизайн.
16

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

Патрик Дежарден
источник
Правильный ответ на вопрос о том, нужно ли заново изобретать колесо, - это всегда «это зависит». Так что «не изобретай велосипед» заходит так далеко. Это может служить хорошей эвристикой большую часть времени, но не каждый раз.
5
Некоторые «колеса» нужно заново изобрести.
Скажи это Данлопу. Он изобрел пневматическую шину. Если бы не он заново изобретал колесо, у нас была бы довольно ухабистая поездка.
Кибби
3
Как насчет: изобретать велосипед только в том случае, если выгоды будут стоить затрат
e.James
16

Сначала поймите проблему!

OscarRyz
источник
Ах, наконец, кто-то с этим. Ты можешь поцеловать, ягни, высушить все, что вы хотите. Бесполезно, если вы программируете что-то бесплатно.
@ е-сат: Да, это то, что я думал, когда я впервые отвечу на это. Я прокручиваю все ответы и на удивление никто не писал раньше.
OscarRyz
Хороший ответ. Часы и часы тратятся впустую, когда программисты не понимают в полной мере требования проблемы.
Стив Уортэм
Проблема в том, откуда вы знаете, что понимаете проблему?
CamelCamelCamel
13

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

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

Брайан М. Хант
источник
12

Зная, когда не программировать.

ctrlShiftBryan
источник
что на земле это должно означать?
А когда это?
Иногда вам нужно по-другому решать проблему пользователей, а не просто кодировать решение.
Человеческое суждение и принятие решений являются частью всего; иногда нет смысла пытаться автоматизировать суждение.
S.Lott
1
Он имеет в виду, что многие проблемы программирования могут быть решены дешевле и быстрее благодаря приобретению готовых приложений, компонентов или библиотек.
Гордон Белл
11

Кофе в, код выход.

user9282
источник
3
Чай в моем случае =)
+1 хммм больше похоже на "Coffee In, Code + много перерывов на отдых?" :) Я люблю и кофе, и чай, я качаю в обе стороны ...
Темная ночь
10

Если это не было проверено, это сломано.

Raz
источник
Я согласен с этим
7

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

- Чарльз Энтони Ричард Хоар

Крис Вест
источник
6
  1. Различают причину и следствие (работа с компьютерами)

  2. Различают факт и мнение (работа с людьми)

  3. Как можно проще, но не проще (дизайн)

Майкл Пасха
источник
5

Программирование - это средство, а не цель. Или, может быть, «Может не значит, должен».

CrashCodes
источник
5
  1. Поймите, почему программа сделает кого-то счастливым (иначе, почему вы не играете на улице со всеми другими детьми?). (Этот человек может быть вами.)
  2. Разработайте концептуальную модель бизнес- сферы, которая охватывает все необходимые сложности и не более.
  3. Разработайте концептуальную модель архитектуры программного обеспечения, которая охватывает всю необходимую сложность и не более.
  4. Безжалостно избегать всех других сложностей.
Дов Вассерман
источник
хорошо сказано! не могу согласиться больше
Энтони
5

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

Это включает в себя

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

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

тк
источник
4

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

Следствие этому: Докажите, что вы понимаете проблему, которую вы пытаетесь решить, хорошо назвав свои переменные, функции и классы!

ториальную
источник
4

это не работает, пока вы не показали это в тесте

Audun
источник
6
Это неправда, я написал тонны кода, который работает и не тестируется! : D
1
«Я не проверял это, я только доказал, что это правильно» :)
Даниэль Даранас
4

Подумайте сначала, код позже.

Ты далеко не такой умный, как ты думаешь. Задавать вопросы. Научитесь ценить своих сверстников.

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

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

Майк Хофер
источник
3

Любая проблема может быть решена с помощью другого уровня косвенности.

Джошуа
источник
На самом деле, наличие слишком большого количества косвенных указаний само по себе является проблемой, ожидающей выявления и решения. Итак ..
решен ... другим слоем косвенности! =)
Эрик Форбс
Как ни странно, это правда. Посмотрите на весну ...
3

Принцип: Программное обеспечение - Захват Знаний .

Последствия: многие методы представления знаний, все основанные на абстракции . Дает нам слои, уровни, инкапсуляцию, разделение проблем.

Множество техник для представления процедур, все они основаны на последовательности , выборе , повторении .

С. Лотт
источник
3

Напишите код для следующего парня.

Габриэль Изенберг
источник
3

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

Кроме того, никогда не думайте, что знаете все о программировании, продолжайте учиться

Эми
источник
2

Я начал заниматься программированием, изучая цифровую электронику, поэтому я думаю, что для меня основные логические элементы (а не, или, как предполагается, xor) были первыми принципами программирования.

Билл Ящерица
источник
2

Это все о пользователе.

Брайан Оукли
источник
2

Мусор на входе - Мусор на выходе Неважно, насколько хорош ваш пользовательский интерфейс, если данные плохие.

HLGEM
источник
2

СУХОЙ, почти все остальное порождает это. KISS - это еще один конец действия по балансировке, чтобы вы не преследовали элегантность программного обеспечения до уровня безумия.

Quibblesome
источник
2

Начните с вывода и работайте задом наперед.

теа
источник