Наскільки "простий" - це справжнє рішення KISS? [зачинено]


12

Зізнаюсь : у мене є проблема "тримати це просто і коротко" більшу частину часу, тому що намагання зробити це відповідно до прочитаних книг, моделей дизайну, які я чув і т. Д. Викликає в мене такий ентузіазм - захоплення відчуття того, що я на вірному шляху до ймовірної досконалості.

З іншого боку, так, це додає мені додаткового навантаження з точки зору виконання термінів іноді ...

Але кожен раз, коли я кажу собі: "Наступного разу будь просто, ти дурний!" Мені здається, що тихо важко зробити це "простим", коли настане наступний раз, тому що він починає відчувати себе дивно ... і незручно після точки.

Тоді я починаю судити про своє розуміння "простого" ...

Чи означає SIMPLE занадто короткий, що працює, але важко підтримувати та розширювати?

Чи ПРОСТО означає порушення багатьох принципів OOP?

Чи ПРОСТО означає обман?

Чи ПРОСТО означає просто дотримання термінів без жодних домовленостей? тощо.

Власне, що це?

Питання : Чи можете ви написати точне визначення ПРОСТО в термінах принципу KISS? -якщо є.

Дякую!


4
Це "Тримай просто, дурне!", Не коротке. і написавши це, я побачив, що ви насправді це знаєте, але немає жодного посилання для видалення коментарів на мобільному p.se ...
yannis

4
Я ніколи не знайшов щось таке коротке, що важко було продовжити. Я знайшов багато речей, які були величезними жахливими явищами, які були майже нездійсненні, оскільки зміна однієї речі порушила все інше.
Бен Брокка

1
Я думаю, що помилка більшості людей, намагаючись зрозуміти KISS, полягає в тому, що вони думають, що рішення повинно бути таким простим, це очевидно . Правда полягає в тому, що знайти просте рішення - це все, але просто. Це справді важко !!! Після того, як ви знайшли його, всі думають, "о, це так очевидно , чому я цього раніше не бачив?"
Треб

2
Хороший KISSing важко пояснити або визначити точно, але як тільки ви це зрозумієте, ви дізнаєтесь. Просто продовжуйте займатися!
Каскабель

1
Вибачте, що це було перенесено сюди замість просто закритого прямо, але це тут весело поза темою.

Відповіді:


35

Давайте вивчимо французький KISS:

La удосконалення є відвідувачами, не пасти лорск'іл плюс риен j ajouter, mais lorsqu'il n'y плюс rien à пенсіонер. - Антуан де Сент-Екзюпері

Що перекладається на:

Досконалість досягається не тоді, коли більше нічого не можна додати, а коли не залишається нічого, щоб забрати. - Антуан де Сент-Екзюпері


2
Повинно бути «Досконалість - це коли нічого не можна видалити»
нормантноерідка

2
Це відмінна цитата, але їй не вистачає практичних порад.
c_maker

2
Ви можете зробити цю відповідь більш простою (він же більш досконалий), якщо ви видалите французьку частину. :)
Філ

1
@Phil: Au contraire, mon ami.
Гілберт Ле Бланк

14

Сценарій

Потрібно вирізати і прищипувати.

Рішення A: Не KISS

введіть тут опис зображення

Рішення B: KISS

введіть тут опис зображення введіть тут опис зображення


Що стосується точного визначення: важко визначити абсолютну шкалу для вимірювання простоти. Переважно тому, що справжня простота виключає справжнє розуміння існуючої проблеми, і це рідко можливо досягти. Але скажімо, що рішення A і B ілюструють різницю між рішеннями, що мають тенденцію до надмірно ускладнення і простоти відповідно.


Це змусило мене посміхнутися.
c_maker

Дуже жорстоко, чи не так!
NoChance

2
Це не. Моє кошеня спить з ним. Тому це ненасильницьке.
Томас Едінг

11

"Зробіть речі максимально простими, але не простішими" -Ейнштейн

Збереження коду максимально просто, але не простіше, залежить від проблеми, яка вирішується. Поки проблема, яка вирішується, як правило, змінюється, так і KISS.

Існує баланс між надвиробничою технікою (о, людина, це виглядає як чудове місце, щоб показати свої навички дизайну!) Та недостатньою інженерією (якби тільки я використовував фабрику, у мене не було б цього з’єднання, яке змусило мене зробити 20 зміни коду ...). Мета - ремонтопридатність.


1
"Зберігайте свою цикломатичну складність такою, якою вона повинна бути, і ніякої іншої цінності". "Купуйте будинок із співвідношенням позики та вартості настільки низьким, наскільки ви розумно можете, але не нижче". "Снідайте як можна краще, але не краще". "Купуйте якнайменше і продайте якнайбільше, але не нижче / вище". "Зростайте настільки високими, але не вище". Msgstr "Зробіть назви змінних якомога більш значущими, але без значення". "Прикладіть максимально високий відсоток зусиль, але не вище". "У" команді "немає" я ", але є" у вищому "". "Зупиніться і понюхайте троянди, але лише тоді, коли троянди є". "Пишіть коментарі
psr

11

Просте не означає порушення принципів хорошого програмування. Насправді це означає більше навпаки.

Чи означає SIMPLE занадто короткий, що працює, але важко підтримувати та розширювати?

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

Чи ПРОСТО означає порушення багатьох принципів OOP?

Ні. Більшість принципів OOP розроблені для того, щоб зберегти чистіший та організованіший код, що, врешті-решт, простіше.

Чи ПРОСТО означає обман?

Ні. Писати важко, щоб підтримувати код і хаки під виглядом дотримання строків.

Чи ПРОСТО означає просто дотримання термінів без жодних домовленостей? тощо.

Ні. Терміни та простота вашого коду - це два окремих питання. Написання простого коду не потребує часу більше часу для написання (хоча це поширена помилка).


Можливо, ви думаєте, що я страждаю від цієї помилки, але я думаю, що ідеальне просте рішення - це не завжди перше, що трапляється до нас, тому іноді спочатку потрібно більше часу, щоб написати простіший код - потім пізніше ви складаєте цей час і більше не маючи справу зі складністю.
Каскабель

6

Це дуже складно пояснити, оскільки просте не означає те саме для всіх.

Приклад. Деякі розробники вважають, що ?:це просто, але інші вважають, що ifтвердження є кращим. Коли його знизиться до цього рівня, ви не можете порадувати всіх.

Взагалі прості засоби без складності . Щоб зрозуміти простоту, нам потрібно зрозуміти складність.

Існує два типи складності:

Суттєва складність стосується ситуації, коли всі розумні рішення проблеми повинні бути складними (і, можливо, заплутаними), оскільки "прості" рішення не могли б адекватно вирішити проблему. - Вікіпедія

Випадкова складність - це складність, яка виникає в комп'ютерних програмах або в процесі їх розвитку (комп'ютерне програмування), що не є суттєвим для вирішуваної проблеми. - Вікіпедія

Ви можете перевірити істотну складність за допомогою наступних питань:

Це рішення просте? Чи можу я пояснити це своєму одноліткові за проміжок часу за пару хвилин, і вони отримають його? Чи є більш просте рішення проблеми? Якщо так, то чи є компроміси між складним рішенням порівняно з простим? Чи можемо ми жити з тими вигідними? Наприклад, багато програмістів роблять помилку мікро-оптимізації всього, і їх рішення (і код також) стає надмірно складним.

Перевірка випадкової складності:

Чи простий код? Якщо я повернусь до нього через три місяці, скільки часу знадобиться мені, щоб побудувати контекст у моєму мозку, щоб я зміг внести зміни, які мені потрібно внести? Чи все в моєму вихідному коді має чітке призначення, і воно ефективно передає цю мету мені та іншим розробникам ? Наскільки важко перевірити свій код? Зазвичай, чим складніший ваш код, тим складніше його одиничне тестування, тому я зазвичай використовую це як міру складності. Зазвичай ви хочете невеликих, добре названих та зосереджених занять та методів. Моделі дизайну зазвичай допомагають вам і цього досягти.

Якщо ви виявите, що хочете використовувати шаблон дизайну лише тому, що ви тільки що читали про нього, це, ймовірно, введе в собі випадкові складності. Якщо ви виявите, що хочете щось вкласти, тому що ви думаєте "його розумним", це, ймовірно, введе в себе випадковість.

Я сподіваюся, що це допомагає і не забувайте: Просте не означає ЛЕГКО .


1
+1 для визначення простоти з точки зору суттєвої та випадкової складності.
Зак

2

Я завжди відчував, що принципи, які стоять за X11 ( http://en.wikipedia.org/wiki/X_Window_System#Principles ), варто було б дотримуватися. Мені не завжди вдається досягти цієї мети.

Зокрема, мені постійно нагадувати про себе ... "Не додайте нових функціональних можливостей, якщо ви не знаєте якогось реального додатка, який цього вимагатиме". Та "Якщо ви зможете отримати 90 відсотків бажаного ефекту за 10 відсотків роботи, скористайтеся більш простим рішенням ".


1

Питання: Чи можете ви написати точне визначення ПРОСТО в термінах принципу KISS? -якщо є.

Немає.


3
Не впевнений, що це має бути відповідь. Якщо ви не можете дати таке визначення, то вам не слід відповідати на ІМХО. Якщо ви вважаєте, що точне визначення загалом неможливо, слід детальніше пояснити причини.
back2dos

Що мені подобається у цій відповіді, це те, що вона відповідає принципу KISS до листа! +1
Треб

простий може бути часом дуже складним.
GSto

@ back2dos його сильніша претензія; Я не обійдусь, публікуючи відповіді "не знаю".
Джеремі

0

Просте - у цьому конкретному контексті є прямо протилежним до складного. Просте не обов'язково означає: Кожна дурно налаштована людина повинна це розуміти - але ви повинні переконатися, що ви могли це зрозуміти, навіть якщо ви самі цього не написали.

Складності можна було б досягти важкими посиланнями - позбудьтесь цих! Багато файлів / класів пов'язані один з одним - ніяк! І складний код (що означає: ланцюгові петлі, декілька шарів ITE тощо) - ніхто не хоче цього читати.

На мою думку: додати ще одну функцію дуже просто, в класи ви також можете додавати приватні функції, так що ви не псуєтесь з інтерфейсом. Тож чому б не скористатися цією перевагою і обмежити функції / процедури 50 рядками. Можливо, навіть менше. Отримайте кілька значущих імен. Таким чином ви робите більшість коментарів застарілими. Таким чином ваші функції легко читати, легко змінювати / розширювати.

Звичайно ... останні кілька речень спрацювали б так: У класах є доступність для визначення приватних функцій, просто використовуйте цю можливість, щоб розділити функції на 50 вкладишів, щоб це було набагато читабельніше (не забувайте хороших імен, тому не потрібно так коментувати).

АЛЕ: Набагато простіше (!) Прочитати все, якщо є повний стоп, який показує: я закінчив думку, продовжимо з наступною.

Ось що я б визначив як простий.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.