Бритва Оккама
Запись от CoderHuligan размещена 26.06.2019 в 15:09
Показов 19149
Комментарии 268
Бритва оккама - известный методологический принцип в философии, который гласит примерно следующее: "Не следует привлекать новые сущности без крайней на то необходимости.". Оккам писал:
"Принцип «бритвы Оккама» состоит в следующем: если некое явление может быть объяснено двумя способами: например, первым — через привлечение сущностей (терминов, факторов, фактов и проч.) А, В и С, либо вторым — через сущности А, В, С и D, — и при этом оба способа дают одинаковый результат, то следует предпочесть первое объяснение. Сущность D в этом примере лишняя, и её привлечение избыточно. " Применительно к нашей теме программирования данный принцип часто нарушается. Игнорирование же его приводит к переусложнению языков и компиляторов, сложности образовательного процесса и т.п. Индустрия должна зарабатывать деньги и её не интересуют какие-то принципы и философия.. К сожалению. Индустрия создаёт свои собственные инструменты. Индустрия создаёт своих собственных специалистов, которые её будут обслуживать.. Тут уже философией и не пахнет. Если чувствуется аромат денег, то всё остальное отступает на второй план. Во главу угла ставится конкуренция, конкуренция во всём: в отсеве специалистов, в стилях программирования, соглашениях и пр. Так как я пропагандирую "народное программирование", то с обычным нам не по пути. Я обьясню. Не говоря уже о том, что структурная парадигма (СП) крайне усложнила воплощение в код достаточно сложных алгоритмов, она ещё к тому же не следует принципу Оккама. Если какую-либо сущность можно обьяснить более простыми средствами, то не нужно привлекать дополнительные. Если полную условную конструкцию можно выразить через :
Для эмулирования циклов создали аж до трёх разных их разновидностей. Цикл for, while, do while. Пришлось к тому же вводить новые сущности: continue, break. В разных языках по разному. А ведь циклы реализуются на goto гораздо проще, чем даже полная условная конструкция. Причём, заметьте, что завершение тела цикла гораздо понятнее именно применяя goto:
А в такой конструкции "правильного" цикла мы встречаем не метку, а безликую скобку:
Попытка приблизить язык, который понимает компьютер, к языку, на котором разговаривают люди обречена на провал потому, что чем ближе к естественному для человека языку мы приближаемся, тем все менее возможной становится способность выражать на нём алгоритмические построения.. Мы приближаемся к тупику, и только совсем мало думающий человек не видит этого.. Принцип "каждая кухарка может управлять государством" на практике не подтверждается.. | |||||||||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 268
Комментарии
-
И что? Зато я, как программист точно знаю в какой момент где я и как туда попал. Это для вас, да и то на отстраненной от реалии задаче ваш эффективнее. Более того, даже мой первый код можно еще упростить. Про "предисторию" ну и что будет другая задача будет и решение, в чем проблема то?
Сообщение от CoderHuligan
Запись от voral размещена 28.06.2019 в 16:35
-
Запись от CoderHuligan размещена 28.06.2019 в 16:41
-
При этом изначально шла о точности алгоритма. Изначально: если утро, то покарась забор, а не если утро то - пойди красить - покрась забор....
Т.е. вы в алгоритм добавили еще одну команду. Для робота: идти красить и красить это две разные команды. так что, чтобы наиболее точно пвоспроизвести алгоритм вам еще не каждое прсутсвующее действие (при этом в фразе "иди красить", возможно не будет информации о действии последующем, в вашем изначально коде "иди на L111" там ждет тебя инструкция.Запись от voral размещена 28.06.2019 в 16:41
-
Давайте уточним.
Сообщение от CoderHuligan
1.Вы обычным способом не можете этого сделать
2. У нас разные критерии оптимальности. Вас не заботят вопросы поддержки кода, и вообще возможность участия в нем других программистов. А именно в этой части у ГОТО серьезные проблемы. С учетом того, что профита значимого вашш метод не способен дать. (ну тест в котором выигрыш 4% гед нет ни чего больше кроме цикал по минимально необходмиому коду - это не серьезно) в реальной ПО будет: обращение к файлам, к памяти, к базе... И на фоне реальной задачи, это будет вообще пшик...Запись от voral размещена 28.06.2019 в 16:44
-
Сообщение от нтч
Да именно. Я знаю что "вижу" цикл а не что либо другое, именно по этому мозг не напрягается в переборе вариантов и догадках, не нужно заглядывать вперед по коду что бы убедиться в этом, а затем возвращаться глазами назад.
В принципе не всегда речь про цикл. Это может быть подпрограмма т.е. современным языком функция которые ТС кстати тоже не использует.
Кроме того проблема с goto очевидна, но не использование goto не означает отсутствие подобных проблем
например c break и continue: когда код прост и у Вас только один цикл то все просто, так как Вы держите в голове только его, но если у Вас к примеру несколько for то возникает затык в вспоминании о каком именно речь.
Естественно в таких случаях стоит во первых не стараться не делать тучу вложенных циклов или хотя бы само тело циклов упрощать опять же используя функции.
А ф-ции это как бы те же прыжки типа goto только именованные, говорящие сами за себя.
(но опять же если давать осмысленные имена)Запись от Avazart размещена 28.06.2019 в 19:38
-
Запись от CoderHuligan размещена 29.06.2019 в 11:42
-
Запись от Usaga размещена 29.06.2019 в 12:34
-
Запись от CoderHuligan размещена 29.06.2019 в 13:39
-
Запись от liv размещена 29.06.2019 в 14:53
-
Запись от liv размещена 29.06.2019 в 14:57
-
Запись от Avazart размещена 29.06.2019 в 14:59
-
Вот в этом весь и корень ваших проблем. И вообще возникновения всей этой дискуссии. Лично вам проще писать с goto, и вы не понимаете как писать самодокументируемый код. (на который вам потребуется во столько раз больше времени).
Сообщение от CoderHuligan
Между тем написание самодокументированного кода не требует ни от кого каких либо дополнительных затрат. Вам же удобно доносить свои мысли на русском языке? Вот точно так же опытный программист пишет самодокументируемый код. Точно так же и все мы сначала не могли внятно говорить на русском. А кто то и до зрелого возраста: то говорит нечленораздельно, то коверкает слова, то дикция хромает - как итог понять его сложно, ну и ему сложно выучится уже....
Да по началу действительно сложно писать имя переменной "blockCaption" вместо "a" (тем более что на том этапе мы же помним и понимаем весь наш код)... Только вот с опытом приходит понимание что это уродство, а не код. Хотя только на написание одного имени этой переменной мы сэкономили бы аж целых 12 нажатий на кнопочки.
В конце концов вполне возможно, что при прочих равны (квалификации, опыте, уровне знаний и т.п.) одному будет легче писать с гото, другом без... Но для программирования в профессиональном случае индивидуальные предпочтения не важны, нужно делать так как удобно подавляющему большинству. Как и в этом конкретном случае.
Иначе вам придется доказать, что все программисты работавшие профессионально и не очень, с того момента как гото подход стал уходить "в прошлое" это полные идиоты с каждым днем усложняющие себе жизнь и постоянно жующие кактус.
Вы слышали какогда либо понятие "CodeStyle"? вы думаете его ради забавы придумывают? Нет. Это практика и желание сделать код легким для понимания новому программисту, и как следствие (и основная причина) снижение себестоимости поддрежки кода.
Я могу взяться за поддержку кода после вас, мне не особо сложно "привыкнуть" тем более я писал на goto когда то очень давно.... Только вот платить за это (время, которое мне понадобится чтоб понять что тут вообще происходит) будет заказчик.Запись от voral размещена 29.06.2019 в 15:01
-
Запись от Avazart размещена 29.06.2019 в 15:02
-
Это безусловно. Одно другое не исключает...
Сообщение от Avazart
Только вот в варианте с гото. Эта документация вообще должна стать настольной книгой. И уж точно не возможен подход.. Сегодня я напишу всю программу, а завтра уж за документацию сяду. Только: написал строчку кода (метку поставил новую) - пишем сразу доку по ней.Запись от voral размещена 29.06.2019 в 15:05
-
То, что вам что-то легче, это понятно. Не понятно другое. С чего вы решили, что имеете право называть все остальное, что вы не осилили, дерьмом?
Сообщение от CoderHuligan
Запись от Катафалк размещена 29.06.2019 в 15:09
-
Кстати, о не понимании кода новым программистом. Недавно мне попался проект. Код там написали не "по негласным стандартам" в этой сфере... Если смотреть в отрыве от всего: код как код, почему бы нет... Но вот заплатил мне заказчик (прикидочно) тысяч на 30 больше только из-за этого. (не говоря уж о том, что если бы договор был по предоценке, а не почасовка по фактическому времени, я бы вообще отказался или бы умножил свой прогноз раз в 5-6)....Запись от voral размещена 29.06.2019 в 15:10
-
А и пишу исключительно для себя. То есть я работаю самостоятельно, как мне лично удобно.
Сообщение от liv
Обычно дерьмом называют код с goto. Не замечали?. Или только с пеленок?.
Сообщение от Катафалк
У меня лично никаких проблем нет. У вас с вашими оопами может и есть, а у меня нет. И я умею писать в вашем любимом стиле.
Сообщение от voral
Профессиональные программисты это жертвы условностей. Они будут писать всё что угодно и как угодно лишь бы деньги платили. А я программирую ради чистого искусства. Что им доказывать? Они и так прекрасно знают, что так писать нельзя. Многие просто догадываются, но молчат боясь потерять работу. Мне не нужно ничего никому доказывать. Мое доказательство это рабочий код, без багов, умнее вашего в 1000 раз и хорошо работающий, а не виснущий через каждый час. "По плодам их узнаете".
Сообщение от voral
Я даже, вы не поверите, читал книжку "Совершенный код".
Сообщение от voral
А я что как писанная красавица хочу всем нравится? Значит мне с ними не по пути. Найдём других.
Сообщение от Avazart
Запись от CoderHuligan размещена 29.06.2019 в 16:28
-
Запись от CoderHuligan размещена 29.06.2019 в 16:31
-
Запись от Avazart размещена 29.06.2019 в 16:32
-
Ну вот и точка.
Сообщение от CoderHuligan
Да отчего ж тогда в 5 раз дольше?
Сообщение от CoderHuligan
Вы заложниг этой ситуации. Вам не приходило в голову, что предмет искусства становится дейстительно чем то хорошим, интересным только до тогда, когда это кто то признает со стороны. И чем больше это признают, тем в большей степени это будет действительно шедевром. Если я буду малевать для себя, очень может быть, что лично мне это будет нравится... Но вот если я пойду "уроки" давать кому то.... То тут я должен быть готов, что оценка лично моя вообще ни чего не стоит...
Сообщение от CoderHuligan
Совершенно точно. И вам пытаются сказать, что делать как делаете вы не надо. По крайней мере если вы это начинаете преподносить как уроки программирования. Можете погубить в ком то потенциального программиста.
Сообщение от CoderHuligan
Угу только результаты ваших работ оцениваете только вы и ни кто больше... Ага.. А знаете я много кратный чемпион мира по всем видам спорта... (судьей на всех чемпионатах был я)... А уж балет какой крутой я танцую...
Сообщение от CoderHuligan
Да всем плевать лично на вас. И на то как вы код пишите. Но как только вы начинаете себя позиционировать как преподаватель, готовьтесь к критике основанной на реальном опыте, а не как у вас.
Сообщение от CoderHuligan
Запись от voral размещена 29.06.2019 в 16:37



