Pull to refresh

Comments 33

я бы добавил еще интуитивный багфикс — когда нужно что-то пофиксить в проекте, к которому недавно присоединился. Особенно это чувствуется в проекте без тестов — нужно починить то, не знаю что.
Или же это применимо когда баг не в твоей зоне ответственности, но каким-то чудом знаешь где косяк
… а потом выясняется, что дефолты у этих «censored» были нетрадиционные — и вся интуиция летит к чертям…
1, 3, 5, 7, 9, 11, ...

Сначала показалось, что это последовательность простых чисел.

Уже единица — не простое число
9 = 3*3 никак не является простым числом

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

На правах занудства
Интуитивно понятно, что в этом ряду следующим членом может быть вообще что угодно:
image

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

calculate(4, 2, divide) — это не интуиция, а самодокументируемый код. Интуиция — это когда написано calc(4,2,d) — а тебе все равно очевидно, что там деление.

Да, соглашусь с Вами. В контексте интуиции лучше было бы использовать имена c, d, s, m
Завелась просто дурная привычка выбирать понятные имена функций :)
Использование b, d, s, m ещё более интуитивно.
А вот это интересно. Что лучше: calculate(4, 2, divide) или divide(4, 2)?

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

Языки программирования различаются по синтаксису, и какой-то синтаксис может оказаться более интуитивно понятным. Вызов divide(4, 2) короче, но он заставляет помнить о том, в каком порядке должны располагаться аргументы функции. Вызов calculate(4, 2, divide) не добавляет никакой новой информации по этому поводу, появляется, по сути, только, дополнительный оператор «вызов функции», позволяющий изменять вызываемую функцию (в зависимости от контекста).

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

В пределе, мы получаем, по существу, текст на естественном языке, потому что именно он даёт интуитивно понятное описание (того чего нужно). Например, фраза «разделить 4 на 2» сразу сообщает нам, что на что делится, что является числителем, а что — знаменателем.
Зачем Вы пишете эту чушь? Займитесь лучше осознанным программированием, вместо интуитивного бреда.
Интуитивно чувствую, что вы не программист.
Это называется «вуду-программирование». Ничем хорошим кончиться не может по определению.
P.S. Плохо, что интуиция не подсказала автору, что пишется «прийти».
никто не говорит о том хорошо или плохо это — это скорее констатация факта, который происходит в разработке. Лично я согласен с Вами, что хорошим это вряд ли кончиться.

P.S. Спасибо, исправлено :)
Интуиция как иррациональное
Основой такого суждения, является то, что часто интуиция рождается как просто ощущение чего-то, неподкреплённое какими-либо выводами, логикой или опытом.

При этом «интуиция как иррациональное» полностью соответствует двум из трех определений интуиции в начале статьи.

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

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

Именно! Поэтому тема эвристических ошибок более чем полностью раскрыта в статьях Элиезера Юдковского, работах Канемана и Тверски, и частично у Нассима Талеба.

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

Спасибо за ссылку на Науера.

Интуиция в программировании ограниченно хороша для построения алгоритмов и абстракций, но не для реального кода, который должен формализоваться по логике. Иначе получается в комментариях "сильное колдунство", "шаман, однако", "магия"… багфикс через неё быстрый иногда, но его качество?

Оставьте интуицию литературным критикам. Самодокументирующийся код — это просто прилично написанный код.

То, что называют интуитивным прозрением, — это просто результат успешного сопоставления с некоторым нетривиальным паттерном. Никакой магии в этом нет. Более того, сопоставление с ранее известным паттерном — это вообще единственная операция, которую мозг может выполнять нативно. И он выполняет её очень быстро даже для очень сложных паттернов. Потому что это делается "аппаратно". А вот как раз все эти логические рассуждения происходят в режиме эмуляции при помощи "софта", загруженного в мозг через образование. Именно поэтому логические рассуждения столь мучительны. Так что получается, что статья о том, что мозг можно применять по прямому назначению и в программировании тоже. Ну, обалдеть теперь...

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

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

Ах если бы… И было бы нам ну не щастье, но полущастье точно :)

Как это неизвестно? А Алексей Редозубов для кого свои статьи на Хабре пишет?


Конечно, под словом "просто" имеется в виду не то, что это "не сложно". В данном случае слово использовано в качестве слова-паразита.


"Нативно" в данном случае означает, что сам алгоритм сопоставления реализован "аппаратно". Сами паттерны, которые распознаются, конечно, хранятся в памяти в виде данных (это опыт). Та же самая способность к освоению языка — это тоже частный случай сопоставления с шаблоном. Особенно очевидным это становится, когда мы видим как легко и непринуждённо человек распознаёт разные смыслы одного и того же слова в различных контекстах. Компьютеру такая непринуждённость и не снилась, потому что он связан необходимостью использовать логику.

Редозубов пишет статьи для всех. Выводы у всех разные. Это всего лишь модель. Когда вы, согласно этой модели, соберете когнитивный аппарат, который будет работать идентично человеческому, тогда можно будет утверждать, что это известно. Или из-за невозможности собрать такой аппарат на теперешнем этапе технических возможностей человека (т.е., к примеру, для этой деятельности убейся как нужен именно биохимический конструктор с определенным набором белков, и без этого работать не будет), будете предсказывать с точностью до ...-ой доли процента человеческое поведение и мышление — тогда да.

В этом-то и вся магия, что неизвестно, как это происходит.

Это не утверждение «есть ли жизнь на Марсе, нет ли жизни на Марсе — науке это не известно», не лирическая метафора, и не дань мракобесию.

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

Не думаю, что это работает именно так… Типа, до тех пор, пока не удастся воссоздать идентичный когнитивный аппарат, следует считать, что нам о когнитивных процессах вообще ничего не известно. Знание квантовано намного мельче. Всё-таки кое-что об этом мы уже знаем, несмотря на то, что воссоздать не можем. Более того, я вам открою маленький секрет. Воссоздать не удастся вообще никогда. Основная проблема даже не в том, чтобы собрать аппарат, а скорее в том, чтобы его включить. Дело в том, что мозг представляет собой динамическую систему, процессы в которой происходят непрерывно. Его нельзя выключить, а потом включить. Выключение необратимо. А в случае искусственного воссоздания по-любому должен быть момент включения. Ведь сборку так или иначе придётся производить в выключенном состоянии. Вот такие дела.


Но в любом случае это всё не более, чем отступление от темы. Мой основной поинт в том, что то, какие принципы лежат в основе работы мозга, известно более-менее точно. Конкретный механизм, возможно, и не такой, какой описан у Редозубова. Но общий принцип, безусловно, состоит в том, что мозг непрерывно только тем и занимается, что распознаёт шаблоны. Самые разные. Визуальные, когда анализирует видеопоток… звуковые, когда анализирует звуки… речевые, когда распознаёт речь… даже, черт возьми, шаблоны проектирования, когда пытается понять чужой код. Вообще абсолютно любая задача, решаемая мозгом, так или иначе сводится к задаче на распознавание шаблона. Это давно было подмечено. Именно поэтому появились тесты на IQ. При том, что они всего лишь измеряют способность к обучению третьего уровня, они позволяют получить хорошее представление о том, насколько эффективно работает мозг конкретного человека.

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

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

Не стоит забывать, что каждая новая теория всегда претендовала на общий принцип, а в итоге всегда оказывалась частным случаем. Яркий пример тому классическая механика и механическая картина мира Декарта. Давайте оставим себе лазейку для новых возможностей, а не только для уточнения уже реализованных.
Надо разделить:
  • Интуиция которая говорит нам о правильности архитектурного решения или красоте кода это полезная интуиция и её стоит использовать, пытаться рационализировать нужно если интуиция других членов команды противоречит вашей.
  • Интуиция которая говорит — «поправь тут и оно заработает», это плохая интуиция, на неё можно ориентироваться для ускорения, но без понимания использовать нельзя.
ИМХО интуитивно понимать чужой код это рулез.

Но интуитивно кодить… Код должен быть строго понятен хотябы :) автору.

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

Куда тут интуицию приткнуть?
так в статье идёт речь как раз об интуитивном понимании кода, а не написании, не совсем понял почему у вас такая мысль возникла
Возможно из-за примерно таких строк?

>это — проявление интуиции в процессе разработки и программировании.
>Интуитивное программирование
>позитивном влиянии интуиции на процесс создания кода
я интуицию рассматривал в основном в контексте отладки написанного кода.

Вы согласны, что большая часть срздания кода и разработки — это не чисто его написание и проектирование, а отладка написанного?
Sign up to leave a comment.

Articles