It's incredibly easy to learn how to hack, and not how to abstract good design in a problem.<p>Anyone who opened a 1980s PC mag could be shown how to implement basic FOR or WHILE or if/then/else expression logic in BASIC and achieve huge outcomes: playable games, interesting solutions.<p>Learning how to craft code so its "better" is really hard. Abstraction is a distinct skill.<p>The mathematical underpinnings of code lie in things like logic, and group theory, higher order functions, recursion, you name it. These are not things to acquire by asking your kid next door to show you how his mod-scene ASM works.<p>I studied CS over 40 years ago. I think I'm still deficient, at the end of my career. CS is hard.<p>Understanding the implications of code on memory, performance, critical paths, safety, provability, type-safe all come with rules of thumb (engineering) which can often be acquired by the kid-next-door path, and fundamentals in their theory which really cannot.<p>FP is at the extreme end of hard-to-acquire, especially if your entry was imperative hacking.