Чому розумність вважається шкідливою в програмуванні деякими людьми?


89

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

Отже, моє запитання: чи люди, які вважають, що певні методи абстрагування занадто розумні, протистоять розуму як такої , чи є якась інша причина заперечення?

EDIT: Цей комбінатор парсера є прикладом того, що я вважаю б розумним кодом. Я завантажив це і передивився близько півгодини. Потім я переступив через розширення макросів на папері і побачив світло. Тепер, коли я це розумію, здається набагато елегантнішим, ніж комбінатор парного аналізу Хаскелла.


116
Я думаю, можливо, ти нерозумієш - кмітливість в людині - це чеснота, але розумність у системі - порок. Системи та код не повинні бути розумними, вони повинні бути чіткими як кришталеві. Для створення таких речей часто потрібна розумна людина.
nlawalker


15
@nlawalker: Я думаю, я зараз це зрозумів. Люди використовують слово "розумний", коли посилаються на код як антонім на "ясний" або "простий", оскільки вони дійсно мають на увазі використовувати слово, яке є антонімом для "ясного" або "простого".
Ларрі Коулман

2
@Larry: Я не впевнений, що це означатиме. Розумний, як у винахідливому, оригінальному, геніальному і , маючи на увазі, використовуючи речі таким чином, якого ви ніколи не бачили. Іноді це чудово (багато дизайнерських моделей розумні), але сторонність рішення також може ускладнити роботу.
doppelgreener

2
Більше ніхто не коментує код? Ось тут ви пояснюєте розумність, щоб ті, хто слідує, могли зрозуміти. Як ти за 6 місяців.
Філ Лелло

Відповіді:


207

Прості рішення краще для тривалого обслуговування. І не завжди йдеться лише про знайомство з мовою. Складна лінія (або лінії) потребує часу, щоб зрозуміти, навіть якщо ви знавець даної мови. Ви відкриваєте файл і починаєте читати: "нормально, просто, зрозуміло, так, WTF ?!" Ваш мозок зупиняється, і тепер вам доведеться зупинитися і розшифрувати складну лінію. Якщо не було вимірної, конкретної причини для цього впровадження, вона "занадто розумна".

Зрозуміти, що відбувається, стає прогресивно складніше, оскільки складність зростає від розумного методу до розумного класу до розумного шаблону. Окрім відомих підходів, ви повинні розібратися з мислительним процесом, який перейшов у створення «розумного» рішення, що може бути досить складно.

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


7
+1 Приємно сказано. Я думаю, що це рівновага. Якщо я можу очікувати, що хтось із пристойною кількістю знань зрозуміє код, трохи подумавши про себе, ви можете піти на розум і, можливо, додати коментар. Якщо для розуміння коду потрібно чотири рази, тому що хтось хотів довести свої навички кодування - так! Якщо хтось досить розумний, щоб придумати розумне рішення, він повинен бути досить розумним, щоб вирішити, зрозуміло це чи ні. Інакше це просто показ.
Енн Шусслер

Останній абзац, який мені подобається. Решта правда, але прикро.
Увімкнення

Схоже, ви бачили вихідний код на Zend PHP :)
Tim Post

+1 Простий візерунок може не працювати так добре, як розумний візерунок, і як ви вже говорили, ми, як розробники, продовжуємо штовхати конверт "розумних", розуміючи його.
Стівен Фурлані

3
Як хтось, кому довелося виправдовувати щось «розумне», коли це було справді просто «мінімально, ортогонально правильно», я хотів би додати, що є певна суб’єктивність у питанні, що саме розумно. Наприклад, деякі люди завжди захочуть виписати if FuncX() then return true, else return false, і ніколи не захочуть, щоб ви просто писали return FuncX(). Я не жартую, я буквально провів цю розмову. Тому що люди хочуть десь повісити свої точки прориву, чи щось. :-)
Warren P

102

Принцип KISS

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

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

Брайан Керніган


8
З іншого боку, якщо ви пишете код настільки розумно, наскільки це можливо, ви повинні навчитися його налагоджувати, і роблячи це, ви стаєте розумнішими. Або щось подібне.
Джеймс Мак-Нілліс

11
@James: Або ти просто не вдається. ;)
Джош К

10
@Josh K: Я завжди знав KISS як "Тримай просто, глупо!" - en.wikipedia.org/wiki/KISS_principle
Увімкнення

1
@Orbling: Я згадував про це інакше, ну добре, тепер я знаю.
Джош К

1
"Зробити просто та бути дурним" , згідно з Вікіпедією ? :) Це означає, що зберігати його просто - це нерозумно, чи щоб ти був простим, ти повинен бути дурним ? : P
Mateen Ulhaq

83

Дурні ігнорують складність; це страждають прагматики; експерти уникають цього; генії видаляють його. - Алан Перліс


5
+1 за приємну цитату і за те, що це перша відповідь без неявного припущення, що щось не може бути простим і розумним
Ларрі Коулман

15
Важливо те, що програміст повинен бути розумним, а не кодом.
Крістофер Джонсон

Шлях краще цитувати, ніж ідіот, що неправильно вживає слово розумний.
Дерек Літц

30

Найкраще рішення - це не завжди найрозумніше рішення. Іноді прості рішення однаково хороші.

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


3
Просте вирішення складної проблеми є настільки ж розумним, як і будь-хто.
JeffO

хоча завжди є застереження, яке ви не хочете надмірно спрощувати лише тому, що сервіс не може кодувати (чи читати).
Кен Хендерсон

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

1
@Michael, обмеження в роботі можуть вимагати, щоб ваш код був розумним. Тоді завдання технічного обслуговування - навчитися, а якщо вони не зможуть - найняти нових технічних працівників.
Стівен Фурлані

@Stephen, якщо код ПОТРІБНИЙ, щоб бути розумним, програміст повинен дуже уважно пояснити, ЧОМУ це потрібно, тому технічному обслуговувачу не потрібно починати з нуля.

26

Щоб цитувати Брайана Керніган:

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


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

Я думаю, залежить від того, який словник ви великим пальцем. На мій досвід, будь-який «розумний» код - легко зрозуміти чи ні - все ще використовує вдале сполучення у специфікації. Навіть якщо це очевидно, його слід позначити, якщо таке припущення може змінитися і не повинно просочуватися до різних частин коду.
peterchen

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

Не заперечую проти цього :)
peterchen

22

кмітливість - це інструмент; само по собі це не шкідливо. Це стає шкідливим лише в умовах, коли це не потрібно.


16

"Розумний", коли застосовується до коду, майже завжди є лише евфемізмом для "непотрібних складних".

Читання хорошого, зрозумілого, простого коду досить важке. Читання "розумного" коду - це як би вивчати латинську поезію заново.

Плутанина виникає через те, що «розумний» як атрибут людини має зовсім інше значення. Цей випадок також можна розглядати як приклад того, чому розробляти програмне забезпечення для реальних людей важко: Тому що вони неоднозначні.

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


5
Я б відмовився від цього, якби ви не проповідували про соціальні протоколи та про "людей, які [sic]".
Джейсон Бейкер

2
Це добре, і дякую, що нагадали. Я схильний занадто проповідувати. Але мене дратують нездатність деяких (багатьох?) Програмістів і / або небажання розбиратися зі звичайною поведінкою людини та загальною відсутністю співпереживання та самоаналізу, яку я бачу в нашій галузі. Можливо, я мав би поставити "люди людей" у лапках замість курсиву. Англійська мова не є моєю першою мовою, я просто не знав, як коротше зрозуміти, що для того, щоб бути чудовим розробником, ви повинні розуміти не тільки код, але й людей. ІМХО.
fzwo

Відредагував мою відповідь. Чіткіший / менш образливий зараз?
fzwo

+1 за перше речення, яке я насправді уклав після отримання перших кількох відповідей.
Ларрі Коулман

Так, дякую, що ви пояснили, наскільки розумним в цьому контексті користуються дурні люди!
Дерек Ліц

9

Більшість людей зосереджуються на кмітливості з аспекту "Код вимагає занадто багато розшифровки, щоб зрозуміти, що він робить", і всі погані речі, які йдуть разом із тим, як

  1. Ніхто більше не може це зрозуміти, не кажучи вже про підтримку / налагодження.
  2. Людина, яка написала, навіть не знає, що робить.
  3. Насправді це може бути не все так блискуче
  4. тощо.

Усі добрі моменти, але є ще один негативний аспект кмітливості, і це стара проблема Его. Це спричиняє проблеми в порядку

  1. Хтось занадто "розумний", щоб використовувати рішення інших. Навіщо шукати те, що зробили інші люди, коли ви можете придумати свій власний спосіб зняття тієї самої кішки?
  2. Хтось, хто думає, що винайшов найкрутіше рішення проблеми, часто відмовляється брати будь-який внесок.
  3. Ніхто не дозволить змінювати "свій" код навіть тоді, коли є очевидні проблеми або потрібні дрібниці.
  4. Дещо навпаки, вони думають, що вони розумні, і їм потрібно використовувати "найновішу" техніку, щоб довести, наскільки вони розумні, але не в змозі отримати хорошу справу з цим ні в особистих проектах, ні в іншому випадку невиробничим кодом, перш ніж передати його на критичні частини система.

Ми всі іноді винні в занадто великому егої, але коли це стає на шляху команди, це проблема.


8

Хороший розумний - високе співвідношення між розумними лініями коду та рядками в не розумній альтернативи. 20 рядків коду, які рятують вас від написання 20000 - це надзвичайно добре. Good Clever - це заощадити на роботі.

Bad Clever - низьке співвідношення між рядками написаного коду, написаним проти рядків збереженого коду. Один рядок розумного коду, який рятує вас від написання п'яти рядків коду, - це поганий розум. Поганий розумний - це про "синтаксичну мастурбацію".

Зауважу лише: поганий розумний майже ніколи не називається «поганий розумний»; вона часто буде подорожувати під псевдонімами "красивий", "елегантний", "лаконічний" або "лаконічний".


Цікава відповідь, але чи називається код, який ви називаєте «поганий розумний», насправді називають «красивим» тощо, будь-хто, окрім людини, яка написала відповідний код?
Ларрі Коулман

2
Залежить. У Objective-C / C ++ / C явище, як правило, обмежується людиною. У Perl and Ruby часто все співтовариство матиме спільне значення про те, що Bad Clever є "красивим", "елегантним" тощо
user8865

1
@ user8865: також "Good Clever" код стає набагато простішим для налагодження, ніж оригінал, оскільки, за вашим визначенням, на 3 порядки менше.
Ларрі Коулман

2
Так, програми Perl - зараз майже за визначенням - Надзвичайно хороший розумний :) Приємно знати!

7

Мені потрібно замислитися над визначенням розумних у кожного.

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

tl; dr. Я відчуваю себе розумним, коли під час огляду коду моя рецензентка каже: "ух, це було простіше, ніж я думав, що це буде", на відміну від "wtf - це все".


1
LOL про tl; dr, як повільно, на вашу думку, читають програмісти? Так, я абсолютно зневажаю зловживання тут розумним, щоб означати протилежне тому, що воно є насправді. Німі / невігласи / злі розробники та менеджери насправді використовують це, щоб виправдати не наймати когось, кого вони вважають, може бути "занадто розумним".
Дерек Ліц

6

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

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

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


Відмінно: "занадто розумний часто базується на тому, з чим можуть працювати розумно найменш кваліфіковані члени команди"
Orbling

залежно від вашого місця часом це дещо менше, ніж "відмінно" :-)
Білл

Хто дбає про найменш кваліфікованого члена команди? Практично в кожній команді (хоча я впевнений, що є кілька винятків) є щонайменше один член, який абсолютно не має жодної справи, називаючи себе програмістом.
dimimcha

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

@Bill: функції лямбда ??? Кожен, хто не може зрозуміти щось таке просте, навіть після того, як явно попросили піти, дізнатися про них, не може бути професійним програмістом.
dimimcha

6

Іноді я був настільки розумний, що помилявся.


1
Це може статися. І іноді щось не так, це правильно.
bobobobo

Вони називають ці теорії Іваном. Теорії можуть і повинні помилятися раз і на час :), це не означає, що ми повинні перестати бути розумними і прагнути бути максимально розумними. Як ще ми станемо лідерами у цьому світі! "Ах, але охорона людини повинна перевищувати його розуміння - чи для чого це небо?"
Дерек Ліц

4

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


+1 за використання "дешевого" як позитивного в плані розвитку
Гері Роу

Я бачив занадто багато "розумного" коду, який не є виконавцем!
HLGEM

Є більш цінні показники, але вони можуть бути хорошими залежно від проекту, і часто вони суперечать один одному, тому для досягнення успіху вам потрібно наголосити один на інший.
Дерек Ліц

3

Якщо розумний код + кількість коментарів, необхідних для того, щоб зробити його зрозумілим кодом <= простий код, то я кажу про перехід на розумний код. Кожного разу.

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


Ну, або тому, що вони просто не замислюються про наступного хлопця, чи ще. Я не впевнений, що я б приписував інтелектуальному егоїзму те, що можна адекватно пояснити недумним лінивістю та шкідливою звичкою. Але факт полягає в тому, що якщо ваш код неможливо зрозуміти на перший погляд, йому потрібні коментарі, і якщо код + коментарі довші (за LOC або час), ніж іншим способом, ви працюєте більше, ніж вам потрібно.
Дан Рей

Хороша відповідь (не можу +1, не залишиться пізніше). Якщо люди не витрачають часу на написання розумного коду, а інші не витрачають часу на його розуміння, вважаючи за краще менш складний простий код, навіть якщо він менш ефективний. Тоді ніякого просування в майстерності не відбудеться.
Увімкнення

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

Якщо я вважаю, що ви користуєтеся розумним способом збитку, я особисто написав якийсь заплутаний код, який став зрозумілим за допомогою журналу. Поки я не планував писати складний код, на той час це заощадило мені деякий час, але я додав # TODO, що він, ймовірно, повинен бути переписаний, щоб бути простим, якщо нам потрібно його значно змінити.
Дерек Ліц

3

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

Перефразовуючи:

Будь-яка розумна людина може зробити простий складний, для того, щоб зробити простий, потрібен геній.

Прийняття складної ідеї та спрощення її настільки зрозумілою демонструє розумність конструктора, але прийняття простої ідеї та ускладнення її показує, що конструктор хоче сприйматись як розумний.


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

2

Якщо «розумне» рішення важко з'ясувати, його не слід використовувати. Наприклад, якщо через побічні ефекти ви можете зав'язати складний обчислення на один рядок, це розумно. Але якщо хтось інший потребує години, щоб зрозуміти, що у світі ти зробив, це занадто розумно.


2
Досить справедливо, але чи змінюється ваша відповідь, якщо людина, яка не може з'ясувати код, не знайома з усіма особливостями мови?
Ларрі Коулман

2
Це інакше, принаймні ІМО. Якщо людина не знайома з особливостями мови, то вона не в змозі судити про те, що розумно чи ні.
Джо D

@Larry: Не обов'язково. Я б припустив, що людина, яка її читає, знаходиться на базовому / низькому просунутому рівні. І якщо він починає отримувати безповоротний комплекс, тоді настав час помістити в блочний коментар пояснення, що повинен робити код, який допоможе встановити орієнтир для розуміння того, що він насправді робить. Коментар повинен бути високим рівнем - випишіть розрахунок, поясніть процес; не повторюйте код. Людина в бажанні повинна (в ідеалі) вміти розуміти код під час його читання. У цьому і є мета.
Майкл К

2

На мою думку, кмітливість сама по собі не є проблемою. Зазвичай ми можемо робити плутанину щодо "розумного" (без сарказму) та "проникливого" коду. Я вважаю проблемою той факт, що зазвичай "розумний" (з сарказмом) код містить неявні невидимі вимоги, що ускладнює його налагодження та підтримку протягом часу.

Існує кілька відомих алгоритмів, які розумні. Quicksort - це один, ІМО.

"Розумний" (з сарказмом) код зазвичай робить припущення щодо встановлення змінних та станів системи, які практично відключаються від "розумного" коду (як файли, відкриті раніше, мережеві з'єднання, бази даних тощо ...).

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


1

"Розумний код" - це будь-який код, над яким програмісту довелося подумати дуже важко або використати якийсь передовий навик, щоб написати його. Проблема в тому, що вона ігнорує необхідність певного "кмітливості", найкраще висловленого Брайаном В. Керніган:

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


1

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

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

За винятком, звичайно, якщо є виправдання розумності. І якщо є добра документація, яка додається разом із затуманеною річчю, яку ви тільки що написали. Ви прокоментували цей розумний фрагмент коду, правда? Поясніть, що це задум, чому воно має бути таким, як воно поводиться?

Якщо немає обґрунтування, то, мабуть, це просто передчасна оптимізація, надмірна інженерія або проблема ЯГНІ. Якщо потрібно 15 рівнів непрямості, щоб зробити щось просте, то є хороший шанс потрапити і під попередні категорії. А якщо це не задокументовано, то це просто біда.

Великий код не повинен вимагати, щоб утримувач постійно був на 100%, щоб зрозуміти це. Хороший код розумний. Великий код може бути майже таким же ефективним, але кращим у багатьох інших аспектах. Великий код не повинен вимагати IDE з 15 переглядами, щоб відповідати дизайну вашої програми.

Примітка: ага, я написав кілька речей, які я вважав розумними, але це притягнуло WTF? з - якщо не моїх співавторів - рот мого менеджера. Доводиться дивитись на це з їхньої точки зору.


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

1

Я схильний бути розумним , але прагну бути елегантним .

Розробіть код зараз, коли інші не намагатимуться їх уникати пізніше .


1
Давай ... розумний - синонім елегантного, ваш мозок проданий на ринку. Так, я склав це слово, це означає, що на мозок впливає маркетинг, а не правда.
Дерек Ліц

Елегантний: простий і розумний. @DerekLitz +1 для хромулентного будь-чого.
kevpie

1

Це моє розуміння питання, виходячи з мого досвіду та інших відповідей:

  1. Код, який вимагав розумності в написанні, але виходить читабельним і ремонтопридатним, не вважається шкідливим. Однак більшість розробників не називали б такий код "розумним"; вони можуть вживати інший термін, як "елегантний". Може бути, а може і не бути дебатів щодо того, чи існує такий код.
  2. Виробничий код, який вимагає значного часу та зусиль для розуміння навіть досвідченого розробника, знайомого з мовою, "розумний" і вважається шкідливим для всіх.
  3. Виробничий код, який вимагає значних витрат часу та зусиль недосвідченими розробниками, дехто вважає шкідливим. Я бачив відповіді так чи інакше, і я працював з розробниками, які чітко сказали, що вважають за краще зберегти все "найнижчий загальний знаменник".

Цілість сучасної західної культури - це LCD, я думаю, що це означає, що програмування теж повинно бути; не добре.
Увімкнення

@Orbling: Так, але не забувайте миттєвого задоволення.
Ларрі Коулман

Мені подобаються твої точки досвіду. Сумно, що люди не прагнуть до ітеративного вдосконалення та інвестування один у одного, обмінюючись знаннями та розумінням. Натомість вони вважають за краще, щоб ми були гвинтиками на колесі, щоб ми могли їх легко замінити, коли прийде час. Цим ми перешкоджаємо прогресу. Ми також продаємо себе короткими ...
Дерек Ліц

1

Я знаю хлопця; він, мабуть, найяскравіша людина, яку я коли-небудь зустрічав. Він, безумовно, неймовірний кодер, мабуть, кращий, ніж я коли-небудь буду в усьому своєму житті, з точки зору чистого відбивання програмування. Він пише код так, як він набирає текст документа і може скасувати пов'язаний список, як ви б не повірили. Якщо ви хочете поговорити про написання якогось серйозно складного коду, він ваш чоловік, і якщо я зіткнувся з неймовірно важкою проблемою, я завжди звертаюся до нього. Однак робота над проектом з ним у командній обстановці неприємна. Він не в змозі безпосередньо націлити бізнес-проблему і надати логічне, ефективне та стисле її вирішення. Для нього перелік коду з 1000 рядків був би кращим, ніж 100. Замість використання інструментів, наданих йому через IDE або фреймворк, він прокрутить власний супероптимізований інструмент.

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


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

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

1

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

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


0

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

Я пам’ятаю, що одного разу я використав 1 список замість 3 та створив одну велику функцію, яку було дуже важко підтримувати / змінювати.

У сучасному світі нам не потрібно жертвувати чіткістю коду для продуктивності (крім c ++, вони не повинні, але вони будуть).


0

Зазвичай, коли вам потрібно бути «розумним», щоб вирішити проблему в коді. Якщо вирішення проблеми не дуже просте, тоді ви отримаєте безліч плутаних облич чи інших дивних побічних ефектів при допущенні певних умов (що може бути на 100% правильним на момент написання коду)

Таким чином розумний == заплутаний == поганий :( Але це також приголомшливо, оскільки я використовував їх для практичного вирішення обмежених проблем.


0

Повторне цитування контексту та легшого розуміння:

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

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

"Налагодження вдвічі складніше, ніж написання коду в першу чергу. Тому, якщо ви пишете код якомога [згорнувшись], ви, за визначенням, недостатньо розумні, щоб налагодити його."

Звиток:

A thing that is complex and difficult to follow.

Розумний:

Showing intelligence or skill; ingenious

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

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

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

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

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

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

  • Розмова Гвідо Ван Россума про петлі подій та те, як він зрозумів їх
  • Співробітник GitHub, який заявив, що вони уникають найму розумних людей на Y-Combinator
  • Значна частина дискусій та знань, які тривають у спільноті Python. Спільнота Python особливо критично ставиться до нових ідей, але не відкидає нових ідей, які вони не розуміють поза рукою, і типово ти можеш бачити функції, які спочатку розглядалися як перекручені, бачать світло дня як основну особливість / пакет мови.
  • Мій власний досвід та професійна думка, заснована на моїх 10000 спостереженнях. Я не можу реально побачити особливості просвітитись з усієї дороги там, хоча :( Сподіваємось, ваш досвід та спостереження скажуть вам те саме, і хтось ще може прокоментувати нижче, щоб дати цій відповіді певну заслугу.

Не соромтеся додавати власні цитати! Також сміливо додайте коми до мого тексту. Я не оновив свої знання щодо використання коми через англійську мову за досить довгий час ...


-1

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

Це не кмітливість. Це знання.


2
Я, звичайно, не згоден з цим (хоча не варто -1). За цим аргументом ви можете сказати, що ви не будете реалізовувати шаблон команди для обробки стеку транзакцій Undo / Redo, оскільки технічні працівники були поза школою і не розуміли, що відбувається. У якийсь момент ви повинні просто сказати, що якщо вони цього не знають, їм потрібно це навчитися.
Кен Хендерсон

@confusedGeek Цілком правильно, де ви проводите межу на незнанні?
Включення

@ Орлінг, чесно кажучи, це важка частина і певною мірою залежить від ситуації. Загальне керівництво, яке я, як правило, використовую, це якщо розумно досвідчений розробник (добре обізнаний у використаних технологіях) може його обробляти, мабуть, це нормально. Якщо вони не в змозі, то його потрібно відновити (або переглянути методи найму).
Кен Хендерсон

@confusedGeek Еге, звучить чуйно. Тест на лакмус, мабуть, може розробник того ж калібру, що й ти сам, легко зрозуміти, що ти зробив досить швидко. Якщо ні, і є простіший шлях, то його потрібно змінити. Іноді не існує простішого шляху.
Увімкнення

-1. Не кодуйте найменший загальний знаменник. Непотрібна складність погана, але якщо деяка кмітливість робить код істотно більш СУХОМОМ і т. Д., Можливо, варто.
dimimcha

-1

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

Розумний розробник - це гарна річ.

Однак перед розумністю приходять інші риси. Як ви могли зрозуміти, я поговорю про дисципліну . Розумний і недисциплінований розробник може бути дуже поганим для довгострокової ремонтопридатності системи.

Припустимо, що виникає помилка або надходить нова вимога. Розумний розробник може незабаром зрозуміти, що пара локальних виправлень виконає роботу за 2 хвилини. Якщо цей розробник буде дисциплінований, він утримається від застосування цих виправлень до вихідного коду і натомість знайде змістовний спосіб скласти бажану поведінку в системі. Таким чином, наступного разу, коли виникатиме потреба змінити конкретні фрагменти коду, у сервісного сервісу буде легкий час зрозуміти код та реалізувати нові зміни, нічого не порушуючи. Якщо ні, то ви отримаєте картину.


"Побої триватимуть, поки Мораль не покращиться"
гнат

@gnat Значення? Щоб трохи прояснити речі; Я не сприймаю дисципліну як щось, що примушує розробників. Це хороша риса особистості. Той, який зазвичай розробляють розумні люди через деякий час обслуговування програмного забезпечення. Проблема виникає з розумними людьми, які недостатньо перебувають на посаді обслуговуючого персоналу та залишають розумні бомби скрізь, щоб їх могли знайти інші.
dkateros
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.