Could you give a couple examples of specific things that you’d like to understand?
Without that, a classic that might match what you’re interested in is Structure and Interpretation of Computer Programs. It starts as an introduction to general programming concepts and ends as an introduction to writing interpreters.
I’ve been having a bit of a hard time coming up with specifics, because it’s more a general sense that I’m lacking a lot of the basics. Like the professor will say something and it’ll obliquely reference a concept that he seems to expect I’m familiar with, but I have no idea what he’s referring to. So then I look it up on Wikipedia and the article mentions 10 other basic-sounding concepts that I’ve never heard of either. Or for example when the programming assignment uses a function that I don’t know how to use yet. So I do the obvious thing of googling for it or looking it up in the documentation. But the documentation is referencing numerous concepts that I have only a vague idea of what they mean, so that I often only get a hazy notion of what the function does.
After I made my original post I looked around for a while on sites like Quora. I also took a look at this reddit list. The general sense I got was that to learn programming properly you should go for a thorough computer science curriculum. Do you agree?
The suggestion was to look up university CS degree curricula and then look around for equivalent MOOCs / books / etc. to learn it on my own. So I looked up the curricula. But most of the universities I looked at said to start out with an introductory programming language course, which is what I was doing before anyway. I’ve taken intro courses in Python and R, and I ran into the problems I mentioned above. The MITx Python course that I took was better on this score, but still not as good as I would have hoped. There are loads of resources out there for learning either of those languages, but I don’t know how to find which ones fit my learning style. Maybe I should just try out each until I find one that works for me?
The book you mentioned kept coming up as well. That book was created for MIT’s Intro to CS course, but MIT itself has since replaced the original course with the Python course that I took (I took the course on edX, so probably it’s a little dumbed-down, but my sense was that it’s pretty similar to the regular course at MIT). On the other hand, looking at the book’s table of contents it looks like the book covers several topics not covered in the class.
There were also several alternative books mentioned:
If you want a fundamentals-first perspective, I definitely suggest reading SICP. I think the Python course may have gone in a slightly different direction (I never looked at it) but I can’t think of how you could get more fundamentals-first than the book.
Afterward, I suggest out of your list Concepts, Techniques, and Models of Computer Programming. That answers your question of “where do I go to learn about each of the different paradigms.”
This is more background than you will strictly need to be a useful data scientist, but if you find it fun and satisfying to learn, then it will only be helpful.
Could you give a couple examples of specific things that you’d like to understand?
Without that, a classic that might match what you’re interested in is Structure and Interpretation of Computer Programs. It starts as an introduction to general programming concepts and ends as an introduction to writing interpreters.
I’ve been having a bit of a hard time coming up with specifics, because it’s more a general sense that I’m lacking a lot of the basics. Like the professor will say something and it’ll obliquely reference a concept that he seems to expect I’m familiar with, but I have no idea what he’s referring to. So then I look it up on Wikipedia and the article mentions 10 other basic-sounding concepts that I’ve never heard of either. Or for example when the programming assignment uses a function that I don’t know how to use yet. So I do the obvious thing of googling for it or looking it up in the documentation. But the documentation is referencing numerous concepts that I have only a vague idea of what they mean, so that I often only get a hazy notion of what the function does.
After I made my original post I looked around for a while on sites like Quora. I also took a look at this reddit list. The general sense I got was that to learn programming properly you should go for a thorough computer science curriculum. Do you agree?
The suggestion was to look up university CS degree curricula and then look around for equivalent MOOCs / books / etc. to learn it on my own. So I looked up the curricula. But most of the universities I looked at said to start out with an introductory programming language course, which is what I was doing before anyway. I’ve taken intro courses in Python and R, and I ran into the problems I mentioned above. The MITx Python course that I took was better on this score, but still not as good as I would have hoped. There are loads of resources out there for learning either of those languages, but I don’t know how to find which ones fit my learning style. Maybe I should just try out each until I find one that works for me?
The book you mentioned kept coming up as well. That book was created for MIT’s Intro to CS course, but MIT itself has since replaced the original course with the Python course that I took (I took the course on edX, so probably it’s a little dumbed-down, but my sense was that it’s pretty similar to the regular course at MIT). On the other hand, looking at the book’s table of contents it looks like the book covers several topics not covered in the class.
There were also several alternative books mentioned:
How to Design Programs
Concepts, Techniques, and Models of Computer Programming
Essentials of Programming Languages
Modern Programming Languages: A Practical Introduction
Programming Language Pragmatics
Programming Languages: Application and Interpretation
Any thoughts on which is the best choice to start off with?
If you want a fundamentals-first perspective, I definitely suggest reading SICP. I think the Python course may have gone in a slightly different direction (I never looked at it) but I can’t think of how you could get more fundamentals-first than the book.
Afterward, I suggest out of your list Concepts, Techniques, and Models of Computer Programming. That answers your question of “where do I go to learn about each of the different paradigms.”
This is more background than you will strictly need to be a useful data scientist, but if you find it fun and satisfying to learn, then it will only be helpful.