Форум программистов, компьютерный форум, киберфорум
CoderHuligan
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Бритва Оккама

Запись от CoderHuligan размещена 26.06.2019 в 15:09
Показов 19149 Комментарии 268

Бритва оккама - известный методологический принцип в философии, который гласит примерно следующее: "Не следует привлекать новые сущности без крайней на то необходимости.". Оккам писал:
…множественность никогда не следует полагать без необходимости… [но] всё, что может быть объяснено из различия материй по ряду оснований, — это же может быть объяснено одинаково хорошо или даже лучше с помощью одного основания.
Из вики:
"Принцип «бритвы Оккама» состоит в следующем: если некое явление может быть объяснено двумя способами: например, первым — через привлечение сущностей (терминов, факторов, фактов и проч.) А, В и С, либо вторым — через сущности А, В, С и D, — и при этом оба способа дают одинаковый результат, то следует предпочесть первое объяснение. Сущность D в этом примере лишняя, и её привлечение избыточно. "
Применительно к нашей теме программирования данный принцип часто нарушается. Игнорирование же его приводит к переусложнению языков и компиляторов, сложности образовательного процесса и т.п.
Индустрия должна зарабатывать деньги и её не интересуют какие-то принципы и философия.. К сожалению. Индустрия создаёт свои собственные инструменты. Индустрия создаёт своих собственных специалистов, которые её будут обслуживать.. Тут уже философией и не пахнет. Если чувствуется аромат денег, то всё остальное отступает на второй план. Во главу угла ставится конкуренция, конкуренция во всём: в отсеве специалистов, в стилях программирования, соглашениях и пр.
Так как я пропагандирую "народное программирование", то с обычным нам не по пути. Я обьясню.
Не говоря уже о том, что структурная парадигма (СП) крайне усложнила воплощение в код достаточно сложных алгоритмов, она ещё к тому же не следует принципу Оккама.
Если какую-либо сущность можно обьяснить более простыми средствами, то не нужно привлекать дополнительные.
Если полную условную конструкцию можно выразить через :
C
1
2
3
4
5
if (/*логич_выражение*/) goto L1;
/*выражение/я;*/ goto L2;
L1:
//выражение/я;
L2:
то не следует эмулировать её при помощи дополнительных сущностей:
C
1
2
3
4
5
6
7
8
if (/*логич_выражение*/) 
{
   // выражение/я;
}
else 
{
    //выражение/я;
}
первое к тому же более понятно.
Для эмулирования циклов создали аж до трёх разных их разновидностей. Цикл for, while, do while. Пришлось к тому же вводить новые сущности: continue, break. В разных языках по разному. А ведь циклы реализуются на goto гораздо проще, чем даже полная условная конструкция. Причём, заметьте, что завершение тела цикла гораздо понятнее именно применяя goto:
C
1
2
3
4
Loop1:
if (/*логич_выражение*/) goto L2;
/* выражение/я;*/ goto Loop1;
L2:
Встретив goto Loop1 мы сразу понимаем где искать его "голову", особенно если эта голова где-то на другой странице листинга.
А в такой конструкции "правильного" цикла мы встречаем не метку, а безликую скобку:
C
1
2
3
4
while (/*условие*/) 
{
    // тело цикла
}
поэтому здесь не понятно где начинается цикл. Отступы помогают не всегда. Да и эти пресловутые отступы не являясь частью языка в принципе, на практике ими являются, что уже как-то настораживает, ибо без них ну, очень трудно разобраться в нагромождениях структурных конструкций(прямо скажем: чисто искусственных).
Попытка приблизить язык, который понимает компьютер, к языку, на котором разговаривают люди обречена на провал потому, что чем ближе к естественному для человека языку мы приближаемся, тем все менее возможной становится способность выражать на нём алгоритмические построения.. Мы приближаемся к тупику, и только совсем мало думающий человек не видит этого.. Принцип "каждая кухарка может управлять государством" на практике не подтверждается..
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 268
Комментарии
  1. Старый комментарий
    Цитата Сообщение от CoderHuligan
    Смотрите, у меня в коде при переходе из состояния в состояние процесс переходов циклически может переходить длительное время между двумя-тремя-четырьмя состояниями безотносительно к другим(просто мы туда не попадаем). У вас всё через один флаг. Естественно что это не эффективный подход. Это я ещё не использовал циклические алгоритмы в отдельных состояниях, а также возможность перехода из состояния в состояние в результате предыстории.. Ну, ладно, не будем тратить время, тем более, что морской бой стоит колом.
    И что? Зато я, как программист точно знаю в какой момент где я и как туда попал. Это для вас, да и то на отстраненной от реалии задаче ваш эффективнее. Более того, даже мой первый код можно еще упростить. Про "предисторию" ну и что будет другая задача будет и решение, в чем проблема то?
    Запись от voral размещена 28.06.2019 в 16:35 voral вне форума
  2. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от voral
    в чем проблема то?
    Проблема в том, что вы не можете воспроизводить оптимальные алгоритмы.
    Запись от CoderHuligan размещена 28.06.2019 в 16:41 CoderHuligan вне форума
  3. Старый комментарий
    При этом изначально шла о точности алгоритма. Изначально: если утро, то покарась забор, а не если утро то - пойди красить - покрась забор....

    Т.е. вы в алгоритм добавили еще одну команду. Для робота: идти красить и красить это две разные команды. так что, чтобы наиболее точно пвоспроизвести алгоритм вам еще не каждое прсутсвующее действие (при этом в фразе "иди красить", возможно не будет информации о действии последующем, в вашем изначально коде "иди на L111" там ждет тебя инструкция.
    Запись от voral размещена 28.06.2019 в 16:41 voral вне форума
  4. Старый комментарий
    Цитата Сообщение от CoderHuligan
    Проблема в том, что вы не можете воспроизводить оптимальные алгоритмы.
    Давайте уточним.
    1.Вы обычным способом не можете этого сделать
    2. У нас разные критерии оптимальности. Вас не заботят вопросы поддержки кода, и вообще возможность участия в нем других программистов. А именно в этой части у ГОТО серьезные проблемы. С учетом того, что профита значимого вашш метод не способен дать. (ну тест в котором выигрыш 4% гед нет ни чего больше кроме цикал по минимально необходмиому коду - это не серьезно) в реальной ПО будет: обращение к файлам, к памяти, к базе... И на фоне реальной задачи, это будет вообще пшик...
    Запись от voral размещена 28.06.2019 в 16:44 voral вне форума
  5. Старый комментарий
    Аватар для Avazart
    Цитата Сообщение от нтч
    А разве обычный цикл не заставляет ваш мозг напрягаться? Однако я вас хорошо понимаю. И так же хорошо понимаю ТС.

    Суть дела в том, что заголовок обычного цикла (без гото)
    1. даёт больше информации о коде
    2. его легче найти и он выделяется на фоне обычного кода
    3. в этом смысле простая метка тут здорово проигрывает
    4. иными словами, Метка, с которой начинается цикл, должна говорить, что здесь Цикл, его Начало.


    Я хочу понять логику обеих сторон в этом противостоянии.

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

    В принципе не всегда речь про цикл. Это может быть подпрограмма т.е. современным языком функция которые ТС кстати тоже не использует.

    Кроме того проблема с goto очевидна, но не использование goto не означает отсутствие подобных проблем
    например c break и continue: когда код прост и у Вас только один цикл то все просто, так как Вы держите в голове только его, но если у Вас к примеру несколько for то возникает затык в вспоминании о каком именно речь.
    Естественно в таких случаях стоит во первых не стараться не делать тучу вложенных циклов или хотя бы само тело циклов упрощать опять же используя функции.
    А ф-ции это как бы те же прыжки типа goto только именованные, говорящие сами за себя.
    (но опять же если давать осмысленные имена)
    Запись от Avazart размещена 28.06.2019 в 19:38 Avazart вне форума
  6. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от voral
    Давайте уточним.
    1.Вы обычным способом не можете этого сделать
    .
    Ни я, ни вы.
    Цитата Сообщение от voral
    Вас не заботят вопросы поддержки кода, и вообще возможность участия в нем других программистов. А именно в этой части у ГОТО серьезные проблемы.
    Заботят. Опять же повторяю: выход в использовании документации по Шалыто. Дело не в goto. С goto в разы легче программировать.
    Запись от CoderHuligan размещена 29.06.2019 в 11:42 CoderHuligan вне форума
  7. Старый комментарий
    Аватар для Usaga
    Цитата Сообщение от CoderHuligan
    выход в использовании документации по Шалыто.
    Выход - писать самодокументируемый код, который не требует внешней документации.
    Запись от Usaga размещена 29.06.2019 в 12:34 Usaga на форуме
  8. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от Usaga
    Выход - писать самодокументируемый код, который не требует внешней документации.
    Мне легче написать с goto, а потом уже сделать на это документацию, чем писать самодокументируемый код, который я буду создавать 5 раз дольше.
    Запись от CoderHuligan размещена 29.06.2019 в 13:39 CoderHuligan вне форума
  9. Старый комментарий
    Аватар для liv
    Надо делать, не как легче, а как правильно, т.е. так, чтобы было понятно тем, кто будет работать с Вашим кодом.
    Если, конечно, Вы не ставите целью всех запутать... Ну или пишите исключительно только для себя...
    Запись от liv размещена 29.06.2019 в 14:53 liv вне форума
  10. Старый комментарий
    Аватар для liv
    А вообще, надо изучать все возможности языка, тогда мысли о том, что только с goto можно реализовать любой алгоритм, уйдут сами....
    Запись от liv размещена 29.06.2019 в 14:57 liv вне форума
  11. Старый комментарий
    Аватар для Avazart
    Выход - писать самодокументируемый код, который не требует внешней документации.
    Документация все равно желательна.
    Просто не будет необходимости писать ее в стиле КО и описывать каждую строчку кода, а сконцентрироваться на примерах использования и прочем.
    Запись от Avazart размещена 29.06.2019 в 14:59 Avazart вне форума
  12. Старый комментарий
    Цитата Сообщение от CoderHuligan
    Мне легче написать с goto, а потом уже сделать на это документацию, чем писать самодокументируемый код, который я буду создавать 5 раз дольше.
    Вот в этом весь и корень ваших проблем. И вообще возникновения всей этой дискуссии. Лично вам проще писать с goto, и вы не понимаете как писать самодокументируемый код. (на который вам потребуется во столько раз больше времени).

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

    Да по началу действительно сложно писать имя переменной "blockCaption" вместо "a" (тем более что на том этапе мы же помним и понимаем весь наш код)... Только вот с опытом приходит понимание что это уродство, а не код. Хотя только на написание одного имени этой переменной мы сэкономили бы аж целых 12 нажатий на кнопочки.

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

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

    Вы слышали какогда либо понятие "CodeStyle"? вы думаете его ради забавы придумывают? Нет. Это практика и желание сделать код легким для понимания новому программисту, и как следствие (и основная причина) снижение себестоимости поддрежки кода.

    Я могу взяться за поддержку кода после вас, мне не особо сложно "привыкнуть" тем более я писал на goto когда то очень давно.... Только вот платить за это (время, которое мне понадобится чтоб понять что тут вообще происходит) будет заказчик.
    Запись от voral размещена 29.06.2019 в 15:01 voral вне форума
  13. Старый комментарий
    Аватар для Avazart
    Мне легче написать с goto, а потом уже сделать на это документацию, чем писать самодокументируемый код, который я буду создавать 5 раз дольше.
    Только другим программистам на это ложить, и они будут проявлять к Вам и Вашему коду неуважение и презрение.
    Запись от Avazart размещена 29.06.2019 в 15:02 Avazart вне форума
  14. Старый комментарий
    Цитата Сообщение от Avazart
    Документация все равно желательна.
    Просто не будет необходимости писать ее в стиле КО и описывать каждую строчку кода, а сконцентрироваться на примерах использования и прочем.
    Это безусловно. Одно другое не исключает...

    Только вот в варианте с гото. Эта документация вообще должна стать настольной книгой. И уж точно не возможен подход.. Сегодня я напишу всю программу, а завтра уж за документацию сяду. Только: написал строчку кода (метку поставил новую) - пишем сразу доку по ней.
    Запись от voral размещена 29.06.2019 в 15:05 voral вне форума
  15. Старый комментарий
    Цитата Сообщение от CoderHuligan
    Мне легче написать с goto, а потом уже сделать на это документацию, чем писать самодокументируемый код, который я буду создавать 5 раз дольше.
    То, что вам что-то легче, это понятно. Не понятно другое. С чего вы решили, что имеете право называть все остальное, что вы не осилили, дерьмом?
    Запись от Катафалк размещена 29.06.2019 в 15:09 Катафалк вне форума
  16. Старый комментарий
    Кстати, о не понимании кода новым программистом. Недавно мне попался проект. Код там написали не "по негласным стандартам" в этой сфере... Если смотреть в отрыве от всего: код как код, почему бы нет... Но вот заплатил мне заказчик (прикидочно) тысяч на 30 больше только из-за этого. (не говоря уж о том, что если бы договор был по предоценке, а не почасовка по фактическому времени, я бы вообще отказался или бы умножил свой прогноз раз в 5-6)....
    Запись от voral размещена 29.06.2019 в 15:10 voral вне форума
  17. Старый комментарий
    Аватар для CoderHuligan
    Цитата Сообщение от liv
    Ну или пишите исключительно только для себя...
    А и пишу исключительно для себя. То есть я работаю самостоятельно, как мне лично удобно.

    Цитата Сообщение от Катафалк
    То, что вам что-то легче, это понятно. Не понятно другое. С чего вы решили, что имеете право называть все остальное, что вы не осилили, дерьмом?
    Обычно дерьмом называют код с goto. Не замечали?. Или только с пеленок?.

    Цитата Сообщение от voral
    Вот в этом весь и корень ваших проблем. И вообще возникновения всей этой дискуссии. Лично вам проще писать с goto, и вы не понимаете как писать самодокументируемый код. (на который вам потребуется во столько раз больше времени).
    У меня лично никаких проблем нет. У вас с вашими оопами может и есть, а у меня нет. И я умею писать в вашем любимом стиле.

    Цитата Сообщение от voral
    Иначе вам придется доказать, что все программисты работавшие профессионально и не очень, с того момента как гото подход стал уходить "в прошлое" это полные идиоты с каждым днем усложняющие себе жизнь и постоянно жующие кактус.
    Профессиональные программисты это жертвы условностей. Они будут писать всё что угодно и как угодно лишь бы деньги платили. А я программирую ради чистого искусства. Что им доказывать? Они и так прекрасно знают, что так писать нельзя. Многие просто догадываются, но молчат боясь потерять работу. Мне не нужно ничего никому доказывать. Мое доказательство это рабочий код, без багов, умнее вашего в 1000 раз и хорошо работающий, а не виснущий через каждый час. "По плодам их узнаете".

    Цитата Сообщение от voral
    Вы слышали какогда либо понятие "CodeStyle"? вы думаете его ради забавы придумывают? Нет. Это практика и желание сделать код легким для понимания новому программисту, и как следствие (и основная причина) снижение себестоимости поддрежки кода.
    Я даже, вы не поверите, читал книжку "Совершенный код".
    Цитата Сообщение от Avazart
    Только другим программистам на это ложить, и они будут проявлять к Вам и Вашему коду неуважение и презрение.
    А я что как писанная красавица хочу всем нравится? Значит мне с ними не по пути. Найдём других.
    Запись от CoderHuligan размещена 29.06.2019 в 16:28 CoderHuligan вне форума
  18. Старый комментарий
    Аватар для CoderHuligan
    Ладно, пока спорить некогда, надо хотя бы игру доделать и показать законченный продукт, а там разберемся в его возможностях и как это можно реализовать в вашем стиле.
    Запись от CoderHuligan размещена 29.06.2019 в 16:31 CoderHuligan вне форума
  19. Старый комментарий
    Аватар для Avazart
    А я что как писанная красавица хочу всем нравится? Значит мне с ними не по пути. Найдём других.
    Если хотите быть фотомоделью на обложке - да.

    А если ты засранка с небритыми подмышками то хотя бы не стоит других учить жизни.
    Запись от Avazart размещена 29.06.2019 в 16:32 Avazart вне форума
  20. Старый комментарий
    Цитата Сообщение от CoderHuligan
    А и пишу исключительно для себя. То есть я работаю самостоятельно, как мне лично удобно.
    Ну вот и точка.


    Цитата Сообщение от CoderHuligan
    У меня лично никаких проблем нет.
    Да отчего ж тогда в 5 раз дольше?

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

    Цитата Сообщение от CoderHuligan
    Что им доказывать? Они и так прекрасно знают, что так писать нельзя.
    Совершенно точно. И вам пытаются сказать, что делать как делаете вы не надо. По крайней мере если вы это начинаете преподносить как уроки программирования. Можете погубить в ком то потенциального программиста.

    Цитата Сообщение от CoderHuligan
    Мое доказательство это рабочий код, без багов, умнее вашего в 1000 раз и хорошо работающий, а не виснущий через каждый час. "По плодам их узнаете".
    Угу только результаты ваших работ оцениваете только вы и ни кто больше... Ага.. А знаете я много кратный чемпион мира по всем видам спорта... (судьей на всех чемпионатах был я)... А уж балет какой крутой я танцую...

    Цитата Сообщение от CoderHuligan
    А я что как писанная красавица хочу всем нравится? Значит мне с ними не по пути. Найдём других.
    Да всем плевать лично на вас. И на то как вы код пишите. Но как только вы начинаете себя позиционировать как преподаватель, готовьтесь к критике основанной на реальном опыте, а не как у вас.
    Запись от voral размещена 29.06.2019 в 16:37 voral вне форума
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru