When I took CS61A over 8 years ago with Prof. Hilfinger, one of the revelations was how few primitives you need to make a powerful language. Using define, cons, cond, and a couple other functions (but no loops and no assignment), you can write an evaluator for Scheme that can interpret any other Scheme program (excluding I/O, strings). I learned how powerful a first-class function is from that class.
Python has a wealth of syntax and data structures that make it great for real programs but is perhaps not as good at building abstractions from the ground up.
Python has a wealth of syntax and data structures that make it great for real programs but is perhaps not as good at building abstractions from the ground up.