Почему ум считается вредным в программировании?


89

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

Итак, мой вопрос: люди, которые думают, что определенные методы абстракции слишком умны, чем умные как таковые , или есть какая-то другая причина для возражения?

РЕДАКТИРОВАТЬ: Этот комбинатор синтаксического анализатора является примером того, что я считаю умным кодом. Я скачал это и просмотрел это в течение приблизительно получаса. Затем я шагнул по макрокоманде на бумаге и увидел свет. Теперь, когда я это понимаю, он выглядит намного элегантнее, чем комбинатор синтаксического анализа Haskell.


116
Я думаю, что, возможно, вы неправильно понимаете: ум в человеке - это добродетель, а ум в системе - порок. Системы и код не должны быть умными, они должны быть четкими, как кристалл. Часто требуется умный человек, чтобы создать такие вещи.
Nlawalker


15
@nlawalker: я думаю, я понял это сейчас. Люди используют слово «умный», когда ссылаются на код как антоним «чистый» или «простой», потому что они действительно хотят использовать слово, которое является антонимом «чистый» или «простой».
Ларри Коулман

2
@ Ларри: я не уверен, что это будет означать. Умный, как изобретательный, оригинальный, изобретательный и косвенно использующий вещи так, как вы никогда раньше не видели. Иногда это замечательно (многие шаблоны дизайна умны), но чуждость решения также может затруднить работу.
doppelgreener

2
Ни один комментарий больше не код? Вот где вы объясняете ум, так что последующие могут понять. Как и вы через 6 месяцев.
Фил Лелло

Ответы:


207

Простые решения лучше для длительного обслуживания. И это не всегда только из-за знания языка. Сложная линия (или линии) требует времени, чтобы понять, даже если вы являетесь экспертом в данном языке. Вы открываете файл и начинаете читать: «Хорошо, просто, просто, понял, да, WTF ?!» Ваш мозг замирает, и теперь вам нужно остановиться и расшифровать сложную линию. Если не было измеримой, конкретной причины для такой реализации, она «слишком умна».

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

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


7
+1 Красиво сказано. Я думаю, что это вещь баланса. Если я могу ожидать, что кто-то с достаточным количеством знаний, чтобы понять код, немного подумав о себе, вы можете пойти на умный и, возможно, добавить комментарий. Если для понимания кода требуется в четыре раза больше времени только потому, что кто-то хотел доказать свои навыки кодирования - нет! Если кто-то достаточно умен, чтобы придумать умное решение, он должен быть достаточно умен, чтобы решить, понятно оно или нет. В противном случае это просто хвастовство.
Анна Шесслер

Последний абзац мне нравится. В остальном это правда, но неудачно.
Orbling

Похоже, вы видели исходный код Zend PHP :)
Тим Пост

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

3
Как человек, которому приходилось оправдывать выполнение чего-то «умного», когда это действительно было «минимально, ортогонально правильным», я хотел бы добавить, что в вопросе о том, что именно является умным, есть некоторая субъективность. Например, некоторые люди всегда хотят писать if FuncX() then return true, else return false, и никогда не захотят, чтобы вы просто писали return FuncX(). Я не шучу, у меня буквально был этот разговор. Потому что люди хотят где-то повесить свои контрольные точки или что-то в этом роде. :-)
Уоррен П

102

Принцип поцелуя

Держать его просто глупо. Умные решения - это здорово, но часто самое простое прямое решение - лучшее.

«Отладка в два раза сложнее, чем писать код в первую очередь. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы, по определению, недостаточно умны для его отладки ».

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


8
С другой стороны, если вы пишете код настолько умно, насколько это возможно, вы должны научиться отлаживать его, и при этом вы становитесь более умным. Или что-то типа того.
Джеймс МакНеллис

11
@James: Или ты просто провалился. ;)
Джош К

10
@Josh K: я всегда знал, что KISS "Keep It Simple, Stupid!" - ru.wikipedia.org/wiki/KISS_principle
Orbling

1
@ Orbling: я вспомнил это по-другому, ну, теперь я знаю.
Джош К

1
«Сохраняйте это простым и будьте глупым» , согласно Википедии ? :) Означает ли это, что держать это простым - глупо, или, чтобы держать это простым, вы должны быть глупым ? : P
Матин Улхак

83

Дураки игнорируют сложность; прагматики терпят это; эксперты избегают этого; гении удаляют это. - Алан Перлис


5
+1 за хорошую цитату и за первый ответ без неявного предположения, что что-то не может быть одновременно и простым, и умным
Ларри Коулман

15
Важно то, что умным должен быть программист, а не код.
Кристофер Джонсон

Лучше цитировать, чем идиот, неправильно использующий слово «умный».
Дерек Лиц

30

Лучшее решение не всегда самое умное решение. Иногда простые решения одинаково хороши.

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


3
Простое решение сложной проблемы настолько умно, насколько это возможно для любого.
Джефф

хотя всегда есть предостережение, которое вы не хотите упрощать просто потому, что сопровождающий не может кодировать (или читать).
Кен Хендерсон

@confusedGeek - но если вы знаете, что программист по обслуживанию не может справиться с этим, то умное решение превращается в бомбу замедленного действия. Здесь важен баланс - и это применимо только в том случае, если вы знаете команду обслуживания. Если вы понятия не имеете, то лучшее, что вы можете сделать, - это быть ясным в своем уме.
Майкл Кохне

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

@ Стефан, если код ДОЛЖЕН быть умным, программист должен очень внимательно объяснить, ПОЧЕМУ он должен быть, чтобы сопровождающему не пришлось начинать с нуля.

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 - низкое соотношение между написанными строками кода и сохраненными строками кода. Одна строка умного кода, которая избавляет вас от написания пяти строк кода, - это Bad Clever. Плохо умный о "синтаксической мастурбации".

Просто чтобы заметить: Bad Clever почти никогда не называют «Bad Clever»; он часто путешествует под псевдонимами «красивый», «элегантный», «лаконичный» или «лаконичный».


Интересный ответ, но действительно ли кто-то, кроме человека, который написал этот код, называет код, который вы называете «Плохим умным», «красивым» и т. Д.?
Ларри Коулман

2
Зависит. В Objective-C / C ++ / C это явление обычно ограничивается человеком. В Perl и Ruby часто все сообщество будет иметь общее мнение о том, что Bad Clever - «красивый», «элегантный» и т. Д.
user8865

1
@ user8865: также, «Хороший Умный» код оказывается намного легче отладить, чем оригинал, так как по вашему определению его на 3 порядка меньше.
Ларри Коулман

2
Ах, так что программы на Perl - теперь почти по определению - очень хорошие умные :) Приятно знать!

7

Я должен задаться вопросом об определении каждого умного.

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

Я чувствую себя умно, когда во время проверки кода мой рецензент говорит: «Ух ты, это было проще, чем я думал, что это будет», в отличие от «Уфф это все…»


1
LOL о tl; dr, как вы думаете, как медленно программисты читают? Да, я абсолютно презираю злоупотребление умным здесь, чтобы означать противоположность того, что это на самом деле. Разработчики и менеджеры глупых / невежественных / злых людей фактически используют это, чтобы не нанимать кого-то, кто, по их мнению, может быть "слишком умным".
Дерек Лиц

6

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

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

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


Отлично: «слишком умный часто основан на том, с чем менее умелые члены команды могут работать разумно»
Orbling

в зависимости от вашего местоположения это иногда бывает несколько хуже, чем «отлично» :-)
Bill

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

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

@ Билл: лямбда-функции ??? Любой, кто не может понять что-то такое простое, даже после того, как его явно попросили узнать о них, не имеет права быть профессиональным программистом.
Дсимча

6

Иногда я был настолько умен, что ошибался.


1
Это может случиться. И иногда что-то не так, это правильно.
Бобобобо

Они называют эти теории Джоном. Теории могут и должны быть неверными время от времени :), это не значит, что мы должны перестать быть умными и стремиться быть настолько умными, насколько это возможно. Как еще мы станем лидерами в этом мире! «Ах, но охват человека должен превышать его хватку - или для чего рай?»
Дерек Лиц

4

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


+1 за использование «дёшево» в качестве позитива в отношении развития
Гари Роу

Я видел слишком много «умного» кода, который не работает!
HLGEM

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

3

Если умный код + количество комментариев, необходимых для того, чтобы сделать его понятным, <код простого кода, то я говорю: «Умный код». Каждый раз.

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


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

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

Лучший ответ. Мантра: пиши простую базовую линию, начальный код, который становится все медленнее и медленнее, когда все встают ... и затем делай это комментарием, когда сводишь его к нечитаемой однострочности. Вот как вы учите все грязные трюки на вашем языке!
Дрооганс

Если я понимаю, что вы используете «умный» как «замысловатый», я лично написал некоторый замысловатый код, который стал понятным благодаря ведению журнала. Хотя я не планировал писать сложный код, в то время это сэкономило мне некоторое время, но я добавил # TODO, который, вероятно, следует переписать так, чтобы он был простым, если нам нужно значительно его изменить.
Дерек Лиц

3

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

Перефразировать:

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

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


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

2

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


2
Достаточно справедливо, но изменится ли ваш ответ, если человек, который не может разобраться в коде, не знаком со всеми функциями языка?
Ларри Коулман

2
Это другое, по крайней мере, ИМО. Если человек не знаком с особенностями языка, он не может судить, что умно или нет.
Джо Д

@Larry: не обязательно. Я предположил бы, что человек, читающий это, находится на базовом / низком продвинутом уровне знания. И если он начинает становиться непоправимым, сложным, тогда пришло время добавить в комментарий к блоку, объясняющий, что должен делать код, что поможет установить систему координат для понимания того, что он на самом деле делает. Комментарий должен быть высокоуровневым - выписать расчет, объяснить процесс; не повторяйте код Человек должен (в идеале) быть в состоянии понять код, когда он его читает. В любом случае это цель.
Майкл К

2

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

Есть несколько известных алгоритмов, которые являются умными. Быстрая сортировка одна, ИМО.

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

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


1

«Умный код» - это любой код, для которого программист должен был серьезно задуматься или использовать какой-то продвинутый навык для его написания. Проблема в том, что он игнорирует необходимость определенного «запаса умного подхода», лучше всего выраженного Брайаном У. Керниганом:

«Во-первых, отладка вдвое сложнее, чем написание кода. Поэтому, если вы пишете код настолько умно, насколько это возможно, вы, по определению, недостаточно умны для его отладки».


1

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

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

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

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

Хороший код не должен требовать от сопровождающего быть постоянно на все 100%, чтобы понять его. Хороший код умный. Отличный код может быть почти таким же эффективным, но лучше во многих других аспектах. Хороший код не должен требовать интегрированной среды разработки с 15 представлениями, чтобы соответствовать дизайну вашего приложения.

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


Спасибо за ответ. Вы, кажется, соглашаетесь с другими, которые говорят, что «умный» не означает, что я думал, что это сделал.
Ларри Колман

1

Я склонен быть умным , но стараюсь быть элегантным .

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


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

Элегантный: простой и умный. @DerekLitz +1 за что-нибудь громкое.
kevpie

1

Это мое понимание проблемы, основанное на моем опыте и других ответах:

  1. Код, который требует умения писать, но который читается и поддерживается, не считается вредным. Однако большинство разработчиков не назвали бы такой код «умным»; они могут использовать другой термин, как «элегантный». Могут или не могут быть некоторые дебаты о том, существует ли такой кодекс.
  2. Рабочий код, который требует значительного времени и усилий для понимания даже опытным разработчиком, знакомым с языком, является «умным» и считается вредным для всех.
  3. Производственный код, который требует значительных затрат времени и усилий неопытных разработчиков, считается вредным для некоторых. Я видел ответы в любом случае, и я работал с разработчиками, которые прямо сказали, что они предпочли бы оставить все "наименьшим общим знаменателем".

Я полагаю, что полнота современной западной культуры - это ЖК-дисплей; фигово.
Orbling

@ 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). Этим аргументом можно сказать, что вы не реализуете шаблон Command для обработки стека транзакций Undo / Redo, потому что сопровождающие были только что окончили школу и не понимали, что происходит. В какой-то момент вы должны просто сказать, что если они этого не знают, им нужно это изучить.
Кен Хендерсон

@confusedGeek Совершенно верно, где вы проводите черту по незнанию?
Orbling

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

@confusedGeek Да, звучит разумно. Лакмусовый тест, вероятно, может ли разработчик такого же уровня, как и вы, легко понять, что вы сделали достаточно быстро. Если нет и есть более простой способ, то его нужно изменить. Иногда нет более легкого пути.
Orbling

-1. Не используйте самый низкий общий знаменатель. Ненужная сложность - это плохо, но если какая-то хитрость делает код существенно более СУХИМ и т. Д., Это может стоить того.
дсимча

-1

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

Умный разработчик - это хорошо.

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

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


«Избиения будут продолжаться до тех пор, пока не улучшится боевой дух»
комнат

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