Подумал ещё об одной проблеме ошибки на 1цу - это расчёт количества дней между 2мя датами. Очень часто в языках готовые функции работают не так как мы привыкли считать в реальной жизни.
стратегия инварианта и тестов интересна до тех пор, пока не возникает необходимости в инварианте для инварианта и теста на тесты... то есть, никто не гарантирует верность тестов и безошибочность инварианта, а особо, когда это нетривиальные наборы. это ставит под сомнение актуальность применения стратегии.
Увы, однозначного ответа нет и, вероятно, не будет - все зависит от критериев приемки и стоимости затрат. Что же касается темы - Вы описываете теорию программирования по контракту, которая имеет, к примеру, на дотНет практическое выражение - некую библиотеку Contracts... а вот то, что библиотека практически мертвая, говорит о применимости вполне обоснованной теории на практике.
@@sergnochevny ну так тесты на то и были придуманы чтобы отсеять совсем глупые ошибки. Писать без багов пока еще никто не умеет. Да и ни один тест не заменит брейкпойнты и next step- next step-next step или console.printf("I got here");
Может тогда и в total нужно заменить n на n-1? Хотя раз в total определяется n уже с учетом того, что считаем от нуля, то может вообще никакой ошибки нет? Ведь нет условия, что |c| < 5, а только что n < 5
очень интересно ваше мнение про такое вычислительное/computer мышление? в моем понимании это как решать быстро информац. задачи. Опять же таки думаю что в основе это знание алгоритмов, структуры данных..и многое многое что-то еще
Как по мне, тут допущена логическая ошибка: индексы сравниваются с количеством. И индексы совсем не подряд могут идти. Поэтому, если этого не делать (не сравнивать логически разные вещи), то ошибка выродится. Но моё замечание именно о случае в видео. Ошибку на единицу при расчёте индексов никто не отменял)))
Совершенно верно - я использовал i в значении cart.length, т.е. i < n - 1 должно быть L < n - 1, где L - cart.length и тогда все встанет на свои места. В случае видео n - максимальное значение индекса, оно же фигурирует как ограничение i в формуле. Поэтому как раз n логичнее сравнивать с i. Но инвариант удобнее формировать от понятия "количество товаров". Тогда рассуждение про L лучше воспринимаются. Но опять же при таком подходе нужно показать как верхнюю границу n связать с "количеством товаров". Ну и про то что индексы идут не подряд, то в мат. модели это невозможно, так как индекс в данном случае - порядковый номер элемента в массиве. В реализации - да, но там уже не мат. смысл у индекса.
@@S0ERDEVS про мат. модель и нет речи, т.к. там порядковые номера переходят в индексы. А вот реализации часто делают наоборот, что не является корректным. Про инварианты также спору нет. Спасибо за ответ.
Что-то вообще не понял, что значит: "при тройке - четыре". А вообще, изи контрится, главное только понимать разницу между Size (кол-во элементов) и Limit (границы допустимых значений включительно). 0
Поэтому давайте не будем использовать подобного рода императивные циклы (с итератором и выходом по условию) там, где в этом нет необходимости. Есть замечательный map-ы, zip-ы, fold-ы и прочее добро (не во всех языках, но можно ручками сделать), чтобы не промахиваться с {1;-1}.
Я хотел бы спросить банальный вопрос ..что нужно знать программисту? Да, я смотрел твое видео 2019 года за март - (в основном говориться о мотивации) . Но если рассматривать на уровне базовых дисциплин ? То есть допустим я хочу заниматься Веб- программированием .. И всегда такой ответ : JS , основ БД, html, css и прочих несколько прикладных вещиц ... Но какие трансдисциплины/ базовые предметы будут для вот этих прикладных вещей? Математика, физика, электротехника - это оооочень низкий уровень и может даже не надо сюда заглядывать... Assembler - ну это как язык машинных кодов, но ни как дисциплина, описывающая основы программирования (грубо говоря) Что надо знать чтобы не быть говнокодером? "знание принципов освобождает от знания фактов" .. что надо знать чтобы так было? Первое что приходит на мой непрофессиональный взгляд.. - основ алгоритмов и структур данных -основы логики - информатика - основы программирования ( то есть в принципе где речь идет об абстрагированном от конкретных языков описании) - архитектура компьютера - администрирование сетей/основы компьютерных сетей что-нибудь еще?
Я пока не уверен, что достиг понимания инварианта. Поправьте меня, пожалуйста, если неправ. Насколько понимаю сейчас - в инварианте может быть не одно, а комплекс условий, которым должно соответствовать решение. И да, сами условия могут зависеть от других. Таким образом, в частном случае инвариант может быть константой (допустим, площадь фигуры при геометрических преобразованиях не должна изменяться), но в общем случае инвариант назвать константой нельзя.
В каком-то роде. Логическое выражение, истинность которого не должна меняться при выполнении программы. Что-то незыблемое в вашей программе, на что вы можете опереться.
Вот это реально интересно смотреть... спасибо
Подумал ещё об одной проблеме ошибки на 1цу - это расчёт количества дней между 2мя датами. Очень часто в языках готовые функции работают не так как мы привыкли считать в реальной жизни.
спасибо. Познавательно. И верно не только для программирования.
Соер спецом ошибся, чтобы доказать необходимость инварианта.
Спецом ошибся, чтоб тема была для видео
стратегия инварианта и тестов интересна до тех пор, пока не возникает необходимости в инварианте для инварианта и теста на тесты... то есть, никто не гарантирует верность тестов и безошибочность инварианта, а особо, когда это нетривиальные наборы. это ставит под сомнение актуальность применения стратегии.
@Serhii Nochevnyi а какой способ предлагаете вы? Довериться интуиции разработчика?
Увы, однозначного ответа нет и, вероятно, не будет - все зависит от критериев приемки и стоимости затрат.
Что же касается темы - Вы описываете теорию программирования по контракту, которая имеет, к примеру, на дотНет практическое выражение - некую библиотеку Contracts... а вот то, что библиотека практически мертвая, говорит о применимости вполне обоснованной теории на практике.
@@sergnochevny ну так тесты на то и были придуманы чтобы отсеять совсем глупые ошибки. Писать без багов пока еще никто не умеет.
Да и ни один тест не заменит брейкпойнты и next step- next step-next step или console.printf("I got here");
Может тогда и в total нужно заменить n на n-1? Хотя раз в total определяется n уже с учетом того, что считаем от нуля, то может вообще никакой ошибки нет? Ведь нет условия, что |c| < 5, а только что n < 5
очень интересно ваше мнение про такое вычислительное/computer мышление? в моем понимании это как решать быстро информац. задачи. Опять же таки думаю что в основе это знание алгоритмов, структуры данных..и многое многое что-то еще
Теперь осталось узнать что такое инвариант.
Это человек достойный патрон.
Видео трансляции по архитектуре для патронов доступны?
Самая жизненная ошибка. Когда её допускаешь, сразу начинаются пляски с бубном
Как по мне, тут допущена логическая ошибка: индексы сравниваются с количеством. И индексы совсем не подряд могут идти. Поэтому, если этого не делать (не сравнивать логически разные вещи), то ошибка выродится.
Но моё замечание именно о случае в видео. Ошибку на единицу при расчёте индексов никто не отменял)))
Совершенно верно - я использовал i в значении cart.length, т.е. i < n - 1 должно быть L < n - 1, где L - cart.length и тогда все встанет на свои места.
В случае видео n - максимальное значение индекса, оно же фигурирует как ограничение i в формуле. Поэтому как раз n логичнее сравнивать с i.
Но инвариант удобнее формировать от понятия "количество товаров". Тогда рассуждение про L лучше воспринимаются. Но опять же при таком подходе нужно показать как верхнюю границу n связать с "количеством товаров".
Ну и про то что индексы идут не подряд, то в мат. модели это невозможно, так как индекс в данном случае - порядковый номер элемента в массиве. В реализации - да, но там уже не мат. смысл у индекса.
@@S0ERDEVS про мат. модель и нет речи, т.к. там порядковые номера переходят в индексы. А вот реализации часто делают наоборот, что не является корректным.
Про инварианты также спору нет.
Спасибо за ответ.
Что за планшет на котором ты рисуешь?
блин, а что здесь под инвариантом имеется в виду? вроде математическое определение знаю, но никак в данный контекст его связать не смог((
Ты проверяешь какое-то логическое выражение на каждых этапах работы с какими-то данными, где это логическое выражение может поменяться.
Вижу как у Жени мозг прям чешится, ну как им объяснить на практике инвариант?! 😄👍
А что такое вообще инвариант ? И вот это add с квадратной скобкой.
здравствуйте.Узнал про канал благодаря "Голой правде про программистов".Будут еще ролики подобного плана?
Что-то вообще не понял, что значит: "при тройке - четыре".
А вообще, изи контрится, главное только понимать разницу между Size (кол-во элементов) и Limit (границы допустимых значений включительно).
0
О, у вас, оказывается, есть более продвинутый канал!
А и Б сидели на трубе....и задымились.
на фоне майки 0 и 1 плохо видно было
топчик
лайк не глядя
Поэтому давайте не будем использовать подобного рода императивные циклы (с итератором и выходом по условию) там, где в этом нет необходимости.
Есть замечательный map-ы, zip-ы, fold-ы и прочее добро (не во всех языках, но можно ручками сделать), чтобы не промахиваться с {1;-1}.
Я хотел бы спросить банальный вопрос ..что нужно знать программисту? Да, я смотрел твое видео 2019 года за март - (в основном говориться о мотивации) . Но если рассматривать на уровне базовых дисциплин ?
То есть допустим я хочу заниматься Веб- программированием .. И всегда такой ответ : JS , основ БД, html, css и прочих несколько прикладных вещиц ... Но какие трансдисциплины/ базовые предметы будут для вот этих прикладных вещей? Математика, физика, электротехника - это оооочень низкий уровень и может даже не надо сюда заглядывать... Assembler - ну это как язык машинных кодов, но ни как дисциплина, описывающая основы программирования (грубо говоря)
Что надо знать чтобы не быть говнокодером? "знание принципов освобождает от знания фактов" .. что надо знать чтобы так было?
Первое что приходит на мой непрофессиональный взгляд..
- основ алгоритмов и структур данных
-основы логики
- информатика
- основы программирования ( то есть в принципе где речь идет об абстрагированном от конкретных языков описании)
- архитектура компьютера
- администрирование сетей/основы компьютерных сетей
что-нибудь еще?
мммм... Моя любимая ошибка! )))
инвариант === константа?
Я пока не уверен, что достиг понимания инварианта. Поправьте меня, пожалуйста, если неправ.
Насколько понимаю сейчас - в инварианте может быть не одно, а комплекс условий, которым должно соответствовать решение.
И да, сами условия могут зависеть от других.
Таким образом, в частном случае инвариант может быть константой (допустим, площадь фигуры при геометрических преобразованиях не должна изменяться), но в общем случае инвариант назвать константой нельзя.
В каком-то роде. Логическое выражение, истинность которого не должна меняться при выполнении программы. Что-то незыблемое в вашей программе, на что вы можете опереться.
@@РайанКупер-э4о Как три закона робототехники
@@dann1kid, это которые Азимов придумал?
@@РайанКупер-э4о ага, просто как пример инварианта. То есть некоей абстрактной среды со своими невзаимоисключающими правилами.
И на старуху бывает проруха. - как говорила подруга моего детства польская красавица Инга Зайёнц
Достаточно было бы сделать
и получилась бы ошибка на две единицы 🤣🤣🤣🤣