Привет!
Начал читать
Code That Fits in Your Head, пока прочитал только 50 страниц, но книга уже нравится.
В частности там есть очень крутой заход на важность локальности рассуждений/исключения скрытых эффектов через Систему 1 Канемана из
Думай медленно… Решай быстро, который получил нобелевскую премию за исследования описанные в этой книге.
Так вот, Канеман говорит, что у нас есть два режима мышления - Система 1 и Система 2.
Система 1 - это то как мы размышляем обычно - на автомате, без затрат усилий
Система 2 - это когда мы целенаправленно прикладываем усилия для размышлений.
И так как Система 2 требует значительных энергозатрат, мы не можем постоянно работать на ней и большую часть времени работаем "спинным мозгом" - Системой 1.
А Система 1 "строит истории"
только на основе того, что она видит прямо сейчас.
Соответственно, если взять видимый кусочек кода, которым я
иллюстрировал проблемы побочных эффектов:
fun main() {
val els: ArrayList<Int> = arrayListOf(2, 2)
val sum = sum(els)
println("Сумма ${els[0]} + ${els[1]} = $sum")
}То глядя на него Система 1 быстро придумает историю, что sum вернёт значение, не поменяв els и выводом программы будет
"Сумма 2 + 2 = 4". А это не так.
В общем минимизируйте количество изменяемого состояния в ваших программах, чтобы истории ваших Систем 1 чаще были правдоподобными:)
#why_fp@ergonomic_code #books@ergonomic_code