I'm going to disagree with most of the commenters here.
Start with Haskell.
"Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming."
-Rob Pike
Sicp is great. But sicp won't elucidate the above fact to you which is central to modern programming. Modern programming is about managing things that are complex beyond the ability for a human to comprehend completely.
Too many programmers are concerned with the details. What's even more alarming is that most programmers say they test for how detailed a person is in a time limited programming interview.
Your ability to be detailed will never be able to scale with the complexity of programs so greater ability to be detailed doesn't lead to any benefites in the long run.
To build robust applications you must be able to ignore details.
Learning Haskell will teach you how to ignore details by eliminating detail as a rule. Counterintuitively, Haskell is much less detailed then scheme, python or almost every other popular language out there. I am not referring to syntax here, I am referring to the amount of ways to go from A to B. Haskell makes this dichotomy more evident and the algorithm that takes you from A to B less relevant. Haskell is more restrictive and less expressive, and restriction is power.
Haskell does have issues though, that being the nature of side effects. The abstractions to deal with such things are so mind bending that it might not be good to dive too deep into the world of categories. It depends. But the main point you want get from learning Haskell has to do with the Rob Pike quote above. Once you understand that you'll be better then 99 percent of other programmers on the things that are relevant to modern programming. Then if you're interested you can continue further into Haskell or jump to Sicp as you got the main point.
The study of Haskell eventually leads to category theory which almost looks like a formal theory of abstraction of systems and modules which alludes to the possibility of 'deriving' programs rather then using our gut to 'design' them. It's mind opening to go further but not critical.
Ironically Rob Pike is part of the golang team which is a language that hinders your ability to express all forms of data structures. Json cannot be properly described by the type system of that language so while his quotation is correct I don't agree with many of his decisions.
Comments
I'm going to disagree with most of the commenters here.
Start with Haskell.
"Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming." -Rob Pike
Sicp is great. But sicp won't elucidate the above fact to you which is central to modern programming. Modern programming is about managing things that are complex beyond the ability for a human to comprehend completely.
Too many programmers are concerned with the details. What's even more alarming is that most programmers say they test for how detailed a person is in a time limited programming interview.
Your ability to be detailed will never be able to scale with the complexity of programs so greater ability to be detailed doesn't lead to any benefites in the long run.
To build robust applications you must be able to ignore details.
Learning Haskell will teach you how to ignore details by eliminating detail as a rule. Counterintuitively, Haskell is much less detailed then scheme, python or almost every other popular language out there. I am not referring to syntax here, I am referring to the amount of ways to go from A to B. Haskell makes this dichotomy more evident and the algorithm that takes you from A to B less relevant. Haskell is more restrictive and less expressive, and restriction is power.
Haskell does have issues though, that being the nature of side effects. The abstractions to deal with such things are so mind bending that it might not be good to dive too deep into the world of categories. It depends. But the main point you want get from learning Haskell has to do with the Rob Pike quote above. Once you understand that you'll be better then 99 percent of other programmers on the things that are relevant to modern programming. Then if you're interested you can continue further into Haskell or jump to Sicp as you got the main point.
The study of Haskell eventually leads to category theory which almost looks like a formal theory of abstraction of systems and modules which alludes to the possibility of 'deriving' programs rather then using our gut to 'design' them. It's mind opening to go further but not critical.
Ironically Rob Pike is part of the golang team which is a language that hinders your ability to express all forms of data structures. Json cannot be properly described by the type system of that language so while his quotation is correct I don't agree with many of his decisions.