I would recommend understanding computer architecture first. The basics of CPUs, memory, I/O and instruction sets. Once you understand the "host" environment which is very real, being cast into silicon, you are in a better position to understand how languages provide you with abstractions for using those resources.
Personally I would recommend SICP since it will introduce you to concepts which are also in the Haskell book. But SICP with Scheme covers a far wider range of abstractions.
Python is a good first language because you can program in pure functional or pure object-oriented forms and by combining the two recognise where one or the other is the most effective abstraction to employ.
In practice I like to define objects which I then use in a functional manner. If you read the specifications for Scheme, you will discover that the functional operations on objects is the most fundamental paradigm that is being used. cf pages 3 & 5 "The Scheme of Programming Language - second edition".
Comments
I would recommend understanding computer architecture first. The basics of CPUs, memory, I/O and instruction sets. Once you understand the "host" environment which is very real, being cast into silicon, you are in a better position to understand how languages provide you with abstractions for using those resources.
Personally I would recommend SICP since it will introduce you to concepts which are also in the Haskell book. But SICP with Scheme covers a far wider range of abstractions.
Python is a good first language because you can program in pure functional or pure object-oriented forms and by combining the two recognise where one or the other is the most effective abstraction to employ.
In practice I like to define objects which I then use in a functional manner. If you read the specifications for Scheme, you will discover that the functional operations on objects is the most fundamental paradigm that is being used. cf pages 3 & 5 "The Scheme of Programming Language - second edition".