What is a good route for a math student to self study computer science systematically and efficiently? [on...












5














I'm aware that this kind of question should be asked in Computer Science Stack Exchange. But I decided to ask here because there should be more effective answers here with more experienced people with solid math background that might have taught themselves some computer science.



I decided to ask this question after being attracted by how much one can do with the knowledge in computer science, including iOS application development, game(or mods) development, website creating, etc., but having trouble with matching what I learned with what I really understood.



Realizing the lack of knowledge in programming, I once decided to learn programming in a specific language, like Objective-C and Swift. After I tried every single textbook on OC programming, I found myself wasting time in the "explanation" part and getting lost with the real "theoretical" part. It seems to me that those textbooks prefer a long and loose explanation in describing a concept without telling me what exactly it is(Like the notion of "Object" and "Pointer") and skip the real important "thinking" before the implementation of the code. Although after many times of reading I could create a very simple application(like a simple calculator), I was still very lost in how it really works.



That reminds me how I began to learn mathematics. In middle school "function" is just "$y=f(x)$", where $f(x)$ can be $x^2$, $sin(x)$, and other operations about $x$. However, now for me $f$ is a set of tuples satisfying the unique mapping property, or an arrow with domain and codomain. More generally, I can give a affirmative response to every question like "what is (the definition of) this?(in a math sentence.)" So I asked myself, "what is most basic among all subjects in computer science"?



Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic. Where is the code for my programming environment?(For me, Xcode) and how can I understand it? What is a computer made of (up to the transistors), and how do them work together?
But then I found out that there is no book with the name similar to "how a computer works" that reach my satisfaction, which I thought is my vocabulary problem.



I hope that in the book I'm looking for, every keyword is rigorously defined, and without any waste of time in explaining what a notion "means" or how it is developed stage by stage historically. I expect that it gives only the goals(like the adding machine) and how to build it from the given definitions(a graph with the nodes of value "0" or "1"). Every textbooks in mathematics(like the GTM series) reach this goal, and for me, that is MUCH easier to read and understand. I think most of the math student like me will prefer this style of learning.



What is a good (book) route for a math student to self study computer science from the basic? I wish there are some theoretical textbooks that build the whole operation system, compiler, or some of this kind, that is readable to math students. Any answer would be much appreciated. Thank you.










share|cite|improve this question















put on hold as primarily opinion-based by Derek Elkins, Lord Shark the Unknown, KReiser, Abcd, user91500 2 days ago


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.















  • It sounds vaguely like what you want is a computer architecture textbook.
    – Henning Makholm
    Jan 2 at 0:20










  • I would start here if you have never programmed.
    – John Douma
    Jan 2 at 0:27






  • 2




    This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
    – John Douma
    Jan 2 at 0:31










  • Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
    – Telastyn
    2 days ago












  • How is this a math question?
    – Asaf Karagila
    2 days ago
















5














I'm aware that this kind of question should be asked in Computer Science Stack Exchange. But I decided to ask here because there should be more effective answers here with more experienced people with solid math background that might have taught themselves some computer science.



I decided to ask this question after being attracted by how much one can do with the knowledge in computer science, including iOS application development, game(or mods) development, website creating, etc., but having trouble with matching what I learned with what I really understood.



Realizing the lack of knowledge in programming, I once decided to learn programming in a specific language, like Objective-C and Swift. After I tried every single textbook on OC programming, I found myself wasting time in the "explanation" part and getting lost with the real "theoretical" part. It seems to me that those textbooks prefer a long and loose explanation in describing a concept without telling me what exactly it is(Like the notion of "Object" and "Pointer") and skip the real important "thinking" before the implementation of the code. Although after many times of reading I could create a very simple application(like a simple calculator), I was still very lost in how it really works.



That reminds me how I began to learn mathematics. In middle school "function" is just "$y=f(x)$", where $f(x)$ can be $x^2$, $sin(x)$, and other operations about $x$. However, now for me $f$ is a set of tuples satisfying the unique mapping property, or an arrow with domain and codomain. More generally, I can give a affirmative response to every question like "what is (the definition of) this?(in a math sentence.)" So I asked myself, "what is most basic among all subjects in computer science"?



Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic. Where is the code for my programming environment?(For me, Xcode) and how can I understand it? What is a computer made of (up to the transistors), and how do them work together?
But then I found out that there is no book with the name similar to "how a computer works" that reach my satisfaction, which I thought is my vocabulary problem.



I hope that in the book I'm looking for, every keyword is rigorously defined, and without any waste of time in explaining what a notion "means" or how it is developed stage by stage historically. I expect that it gives only the goals(like the adding machine) and how to build it from the given definitions(a graph with the nodes of value "0" or "1"). Every textbooks in mathematics(like the GTM series) reach this goal, and for me, that is MUCH easier to read and understand. I think most of the math student like me will prefer this style of learning.



What is a good (book) route for a math student to self study computer science from the basic? I wish there are some theoretical textbooks that build the whole operation system, compiler, or some of this kind, that is readable to math students. Any answer would be much appreciated. Thank you.










share|cite|improve this question















put on hold as primarily opinion-based by Derek Elkins, Lord Shark the Unknown, KReiser, Abcd, user91500 2 days ago


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.















  • It sounds vaguely like what you want is a computer architecture textbook.
    – Henning Makholm
    Jan 2 at 0:20










  • I would start here if you have never programmed.
    – John Douma
    Jan 2 at 0:27






  • 2




    This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
    – John Douma
    Jan 2 at 0:31










  • Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
    – Telastyn
    2 days ago












  • How is this a math question?
    – Asaf Karagila
    2 days ago














5












5








5







I'm aware that this kind of question should be asked in Computer Science Stack Exchange. But I decided to ask here because there should be more effective answers here with more experienced people with solid math background that might have taught themselves some computer science.



I decided to ask this question after being attracted by how much one can do with the knowledge in computer science, including iOS application development, game(or mods) development, website creating, etc., but having trouble with matching what I learned with what I really understood.



Realizing the lack of knowledge in programming, I once decided to learn programming in a specific language, like Objective-C and Swift. After I tried every single textbook on OC programming, I found myself wasting time in the "explanation" part and getting lost with the real "theoretical" part. It seems to me that those textbooks prefer a long and loose explanation in describing a concept without telling me what exactly it is(Like the notion of "Object" and "Pointer") and skip the real important "thinking" before the implementation of the code. Although after many times of reading I could create a very simple application(like a simple calculator), I was still very lost in how it really works.



That reminds me how I began to learn mathematics. In middle school "function" is just "$y=f(x)$", where $f(x)$ can be $x^2$, $sin(x)$, and other operations about $x$. However, now for me $f$ is a set of tuples satisfying the unique mapping property, or an arrow with domain and codomain. More generally, I can give a affirmative response to every question like "what is (the definition of) this?(in a math sentence.)" So I asked myself, "what is most basic among all subjects in computer science"?



Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic. Where is the code for my programming environment?(For me, Xcode) and how can I understand it? What is a computer made of (up to the transistors), and how do them work together?
But then I found out that there is no book with the name similar to "how a computer works" that reach my satisfaction, which I thought is my vocabulary problem.



I hope that in the book I'm looking for, every keyword is rigorously defined, and without any waste of time in explaining what a notion "means" or how it is developed stage by stage historically. I expect that it gives only the goals(like the adding machine) and how to build it from the given definitions(a graph with the nodes of value "0" or "1"). Every textbooks in mathematics(like the GTM series) reach this goal, and for me, that is MUCH easier to read and understand. I think most of the math student like me will prefer this style of learning.



What is a good (book) route for a math student to self study computer science from the basic? I wish there are some theoretical textbooks that build the whole operation system, compiler, or some of this kind, that is readable to math students. Any answer would be much appreciated. Thank you.










share|cite|improve this question















I'm aware that this kind of question should be asked in Computer Science Stack Exchange. But I decided to ask here because there should be more effective answers here with more experienced people with solid math background that might have taught themselves some computer science.



I decided to ask this question after being attracted by how much one can do with the knowledge in computer science, including iOS application development, game(or mods) development, website creating, etc., but having trouble with matching what I learned with what I really understood.



Realizing the lack of knowledge in programming, I once decided to learn programming in a specific language, like Objective-C and Swift. After I tried every single textbook on OC programming, I found myself wasting time in the "explanation" part and getting lost with the real "theoretical" part. It seems to me that those textbooks prefer a long and loose explanation in describing a concept without telling me what exactly it is(Like the notion of "Object" and "Pointer") and skip the real important "thinking" before the implementation of the code. Although after many times of reading I could create a very simple application(like a simple calculator), I was still very lost in how it really works.



That reminds me how I began to learn mathematics. In middle school "function" is just "$y=f(x)$", where $f(x)$ can be $x^2$, $sin(x)$, and other operations about $x$. However, now for me $f$ is a set of tuples satisfying the unique mapping property, or an arrow with domain and codomain. More generally, I can give a affirmative response to every question like "what is (the definition of) this?(in a math sentence.)" So I asked myself, "what is most basic among all subjects in computer science"?



Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic. Where is the code for my programming environment?(For me, Xcode) and how can I understand it? What is a computer made of (up to the transistors), and how do them work together?
But then I found out that there is no book with the name similar to "how a computer works" that reach my satisfaction, which I thought is my vocabulary problem.



I hope that in the book I'm looking for, every keyword is rigorously defined, and without any waste of time in explaining what a notion "means" or how it is developed stage by stage historically. I expect that it gives only the goals(like the adding machine) and how to build it from the given definitions(a graph with the nodes of value "0" or "1"). Every textbooks in mathematics(like the GTM series) reach this goal, and for me, that is MUCH easier to read and understand. I think most of the math student like me will prefer this style of learning.



What is a good (book) route for a math student to self study computer science from the basic? I wish there are some theoretical textbooks that build the whole operation system, compiler, or some of this kind, that is readable to math students. Any answer would be much appreciated. Thank you.







reference-request computer-science






share|cite|improve this question















share|cite|improve this question













share|cite|improve this question




share|cite|improve this question








edited 19 hours ago

























asked Jan 2 at 0:08









William Sun

471111




471111




put on hold as primarily opinion-based by Derek Elkins, Lord Shark the Unknown, KReiser, Abcd, user91500 2 days ago


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.






put on hold as primarily opinion-based by Derek Elkins, Lord Shark the Unknown, KReiser, Abcd, user91500 2 days ago


Many good questions generate some degree of opinion based on expert experience, but answers to this question will tend to be almost entirely based on opinions, rather than facts, references, or specific expertise. If this question can be reworded to fit the rules in the help center, please edit the question.














  • It sounds vaguely like what you want is a computer architecture textbook.
    – Henning Makholm
    Jan 2 at 0:20










  • I would start here if you have never programmed.
    – John Douma
    Jan 2 at 0:27






  • 2




    This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
    – John Douma
    Jan 2 at 0:31










  • Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
    – Telastyn
    2 days ago












  • How is this a math question?
    – Asaf Karagila
    2 days ago


















  • It sounds vaguely like what you want is a computer architecture textbook.
    – Henning Makholm
    Jan 2 at 0:20










  • I would start here if you have never programmed.
    – John Douma
    Jan 2 at 0:27






  • 2




    This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
    – John Douma
    Jan 2 at 0:31










  • Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
    – Telastyn
    2 days ago












  • How is this a math question?
    – Asaf Karagila
    2 days ago
















It sounds vaguely like what you want is a computer architecture textbook.
– Henning Makholm
Jan 2 at 0:20




It sounds vaguely like what you want is a computer architecture textbook.
– Henning Makholm
Jan 2 at 0:20












I would start here if you have never programmed.
– John Douma
Jan 2 at 0:27




I would start here if you have never programmed.
– John Douma
Jan 2 at 0:27




2




2




This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
– John Douma
Jan 2 at 0:31




This is the gentlest computer architecture book I know of but I still think it requires a programming background to fully appreciate and finish the computer.
– John Douma
Jan 2 at 0:31












Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
– Telastyn
2 days ago






Did your math courses involve logic and formal languages, or are those courses in CS (or philosophy)?
– Telastyn
2 days ago














How is this a math question?
– Asaf Karagila
2 days ago




How is this a math question?
– Asaf Karagila
2 days ago










3 Answers
3






active

oldest

votes


















3















Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic.




It's a bit arrogant to stick too tightly to such a belief when you're still learning the field don'tcha think?



Some areas of computer science can be called "completely theoretical". Computability theory and complexity theory come close, as do some of the more wild-eyed branches of programming language research. They merge into parts of logic and category theory that could be called "computer science by conquest" because computer scientists are interested in them -- though at the best conferences you will also find people with Dept. of Mathematics affiliations, and some even use blackboards for their talks!



However, in most of computer science as a field, the lifeblood of the science is the tension between nice theoretical models on one hand, and the need to build systems that work on actual physical devices that can be produced economically on the other hand. To insist on studying only the theoretical side amounts to throwing out not just half of the field, but the entire crunchy middle too.



In your position you probably ought to start by a computer architecture textbook, and then learn (really learn) a low-level programming language such as C. Though this will offer you copious opportunity to shoot yourself in the foot, it might also be the only way to satisfy your (in itself laudable) desire to understand the entire stack of abstractions all the way down. And the mistakes you'll make with C might help you understand the point of the more abstract concepts of more modern languages.






share|cite|improve this answer





















  • I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
    – John Douma
    2 days ago










  • Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
    – kimchi lover
    2 days ago










  • @kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
    – Henning Makholm
    2 days ago










  • @JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
    – Henning Makholm
    2 days ago










  • @HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
    – John Douma
    2 days ago



















3














If you are at a university offering computer science degrees, you could find out the names of a few courses that are required for 2nd or 3d year students, get a copy of the text book for one of them, and try to read it.



One thing making your task harder is that computer science is a very wide field, and no one book covers everything important. In part because "computer science" is an amalgam of computer engineering, of computer practice, of applied mathematics, and so on: unlike (say) linear algebra, there is no small set of basic axioms that can be neatly explained and exploited in a few hundred pages. Rather, imagine you wanted to systematically and efficiently learn automobile science. You might find a book that explains car engines and the related chemistry of combustion and pollution control, but says nothing about motion planning or an automobile's HVAC system, etc.



Added, after a few minutes. The comments following Henning Makholm's completely reasonable answer seem to me to illustrate the point I made above: computer science is so complex a subject that it is hard to agree what is most essential.



Let me add a particular recommendation: I have noticed that some of my colleagues do not know about the connection between DFAs and regular languages. This seems to me to be as fundamental a result in theoretical CS as (say) the Pythagorean theorem is in geometry, or as integration by parts
in calculus. And more important than many computer hardware implementation details. If you don't know that, you don't know squat. So your goal might be, read enough of Aho, Hopcroft, and Ullman (or equivalent textbook) to understand this important result.






share|cite|improve this answer























  • ... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
    – Henning Makholm
    2 days ago



















1















I wish there are some theoretical textbooks that build the whole
operation system, compiler, or some of this kind, that is readable to
math students.




I highly recommend reading The Elements of Computing Systems by Nisan and Schocken, and doing all the projects. You make a computer from scratch, starting with NAND gates. Along the way you make a compiler and a simple operating system. In the end you make a simple video game such as Tetris that can run on the computer you've designed. The book's companion website is www.nand2tetris.org.



It is my favorite textbook on any subject.



You might also be interested in Knuth's The Art of Computer Programming, though I haven't read it myself.






share|cite|improve this answer



















  • 2




    IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
    – kimchi lover
    2 days ago










  • The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
    – John Douma
    2 days ago










  • @kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
    – John Douma
    2 days ago












  • I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
    – kimchi lover
    2 days ago


















3 Answers
3






active

oldest

votes








3 Answers
3






active

oldest

votes









active

oldest

votes






active

oldest

votes









3















Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic.




It's a bit arrogant to stick too tightly to such a belief when you're still learning the field don'tcha think?



Some areas of computer science can be called "completely theoretical". Computability theory and complexity theory come close, as do some of the more wild-eyed branches of programming language research. They merge into parts of logic and category theory that could be called "computer science by conquest" because computer scientists are interested in them -- though at the best conferences you will also find people with Dept. of Mathematics affiliations, and some even use blackboards for their talks!



However, in most of computer science as a field, the lifeblood of the science is the tension between nice theoretical models on one hand, and the need to build systems that work on actual physical devices that can be produced economically on the other hand. To insist on studying only the theoretical side amounts to throwing out not just half of the field, but the entire crunchy middle too.



In your position you probably ought to start by a computer architecture textbook, and then learn (really learn) a low-level programming language such as C. Though this will offer you copious opportunity to shoot yourself in the foot, it might also be the only way to satisfy your (in itself laudable) desire to understand the entire stack of abstractions all the way down. And the mistakes you'll make with C might help you understand the point of the more abstract concepts of more modern languages.






share|cite|improve this answer





















  • I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
    – John Douma
    2 days ago










  • Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
    – kimchi lover
    2 days ago










  • @kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
    – Henning Makholm
    2 days ago










  • @JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
    – Henning Makholm
    2 days ago










  • @HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
    – John Douma
    2 days ago
















3















Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic.




It's a bit arrogant to stick too tightly to such a belief when you're still learning the field don'tcha think?



Some areas of computer science can be called "completely theoretical". Computability theory and complexity theory come close, as do some of the more wild-eyed branches of programming language research. They merge into parts of logic and category theory that could be called "computer science by conquest" because computer scientists are interested in them -- though at the best conferences you will also find people with Dept. of Mathematics affiliations, and some even use blackboards for their talks!



However, in most of computer science as a field, the lifeblood of the science is the tension between nice theoretical models on one hand, and the need to build systems that work on actual physical devices that can be produced economically on the other hand. To insist on studying only the theoretical side amounts to throwing out not just half of the field, but the entire crunchy middle too.



In your position you probably ought to start by a computer architecture textbook, and then learn (really learn) a low-level programming language such as C. Though this will offer you copious opportunity to shoot yourself in the foot, it might also be the only way to satisfy your (in itself laudable) desire to understand the entire stack of abstractions all the way down. And the mistakes you'll make with C might help you understand the point of the more abstract concepts of more modern languages.






share|cite|improve this answer





















  • I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
    – John Douma
    2 days ago










  • Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
    – kimchi lover
    2 days ago










  • @kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
    – Henning Makholm
    2 days ago










  • @JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
    – Henning Makholm
    2 days ago










  • @HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
    – John Douma
    2 days ago














3












3








3







Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic.




It's a bit arrogant to stick too tightly to such a belief when you're still learning the field don'tcha think?



Some areas of computer science can be called "completely theoretical". Computability theory and complexity theory come close, as do some of the more wild-eyed branches of programming language research. They merge into parts of logic and category theory that could be called "computer science by conquest" because computer scientists are interested in them -- though at the best conferences you will also find people with Dept. of Mathematics affiliations, and some even use blackboards for their talks!



However, in most of computer science as a field, the lifeblood of the science is the tension between nice theoretical models on one hand, and the need to build systems that work on actual physical devices that can be produced economically on the other hand. To insist on studying only the theoretical side amounts to throwing out not just half of the field, but the entire crunchy middle too.



In your position you probably ought to start by a computer architecture textbook, and then learn (really learn) a low-level programming language such as C. Though this will offer you copious opportunity to shoot yourself in the foot, it might also be the only way to satisfy your (in itself laudable) desire to understand the entire stack of abstractions all the way down. And the mistakes you'll make with C might help you understand the point of the more abstract concepts of more modern languages.






share|cite|improve this answer













Based on the belief that computer system and programming can be completely theoretical, I decided to learn from the very basic.




It's a bit arrogant to stick too tightly to such a belief when you're still learning the field don'tcha think?



Some areas of computer science can be called "completely theoretical". Computability theory and complexity theory come close, as do some of the more wild-eyed branches of programming language research. They merge into parts of logic and category theory that could be called "computer science by conquest" because computer scientists are interested in them -- though at the best conferences you will also find people with Dept. of Mathematics affiliations, and some even use blackboards for their talks!



However, in most of computer science as a field, the lifeblood of the science is the tension between nice theoretical models on one hand, and the need to build systems that work on actual physical devices that can be produced economically on the other hand. To insist on studying only the theoretical side amounts to throwing out not just half of the field, but the entire crunchy middle too.



In your position you probably ought to start by a computer architecture textbook, and then learn (really learn) a low-level programming language such as C. Though this will offer you copious opportunity to shoot yourself in the foot, it might also be the only way to satisfy your (in itself laudable) desire to understand the entire stack of abstractions all the way down. And the mistakes you'll make with C might help you understand the point of the more abstract concepts of more modern languages.







share|cite|improve this answer












share|cite|improve this answer



share|cite|improve this answer










answered Jan 2 at 0:44









Henning Makholm

238k16303538




238k16303538












  • I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
    – John Douma
    2 days ago










  • Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
    – kimchi lover
    2 days ago










  • @kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
    – Henning Makholm
    2 days ago










  • @JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
    – Henning Makholm
    2 days ago










  • @HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
    – John Douma
    2 days ago


















  • I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
    – John Douma
    2 days ago










  • Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
    – kimchi lover
    2 days ago










  • @kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
    – Henning Makholm
    2 days ago










  • @JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
    – Henning Makholm
    2 days ago










  • @HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
    – John Douma
    2 days ago
















I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
– John Douma
2 days ago




I have been calling $C$ a low level language for years for its close relationship to the instruction set architecture. I believe the convention is to call $C$ a high level language in which you can program at a low level.
– John Douma
2 days ago












Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
– kimchi lover
2 days ago




Or an algorithms textbook, maybe? In the days of good king Charlemagne there was a book by Aho, Hopcroft, and Ullman; nowadays there is one by Corman, Leiserson, Rivest, and Stein.
– kimchi lover
2 days ago












@kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
– Henning Makholm
2 days ago




@kimchilover: Perhaps? To my disgrace, I've never read a dedicated algorithms textbook, so I don't know how much practical familiarity with Von Neumann machines they tend to assume.
– Henning Makholm
2 days ago












@JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
– Henning Makholm
2 days ago




@JohnDouma: C was high-level in 1980, simply by virtue of not being assembler. But the goalposts have shifted considerably since then.
– Henning Makholm
2 days ago












@HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
– John Douma
2 days ago




@HenningMakholm Do you have a source for that? I have been a software developer for a long time and have not received that update until now. Is this because it doesn't run on a VM like Java?
– John Douma
2 days ago











3














If you are at a university offering computer science degrees, you could find out the names of a few courses that are required for 2nd or 3d year students, get a copy of the text book for one of them, and try to read it.



One thing making your task harder is that computer science is a very wide field, and no one book covers everything important. In part because "computer science" is an amalgam of computer engineering, of computer practice, of applied mathematics, and so on: unlike (say) linear algebra, there is no small set of basic axioms that can be neatly explained and exploited in a few hundred pages. Rather, imagine you wanted to systematically and efficiently learn automobile science. You might find a book that explains car engines and the related chemistry of combustion and pollution control, but says nothing about motion planning or an automobile's HVAC system, etc.



Added, after a few minutes. The comments following Henning Makholm's completely reasonable answer seem to me to illustrate the point I made above: computer science is so complex a subject that it is hard to agree what is most essential.



Let me add a particular recommendation: I have noticed that some of my colleagues do not know about the connection between DFAs and regular languages. This seems to me to be as fundamental a result in theoretical CS as (say) the Pythagorean theorem is in geometry, or as integration by parts
in calculus. And more important than many computer hardware implementation details. If you don't know that, you don't know squat. So your goal might be, read enough of Aho, Hopcroft, and Ullman (or equivalent textbook) to understand this important result.






share|cite|improve this answer























  • ... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
    – Henning Makholm
    2 days ago
















3














If you are at a university offering computer science degrees, you could find out the names of a few courses that are required for 2nd or 3d year students, get a copy of the text book for one of them, and try to read it.



One thing making your task harder is that computer science is a very wide field, and no one book covers everything important. In part because "computer science" is an amalgam of computer engineering, of computer practice, of applied mathematics, and so on: unlike (say) linear algebra, there is no small set of basic axioms that can be neatly explained and exploited in a few hundred pages. Rather, imagine you wanted to systematically and efficiently learn automobile science. You might find a book that explains car engines and the related chemistry of combustion and pollution control, but says nothing about motion planning or an automobile's HVAC system, etc.



Added, after a few minutes. The comments following Henning Makholm's completely reasonable answer seem to me to illustrate the point I made above: computer science is so complex a subject that it is hard to agree what is most essential.



Let me add a particular recommendation: I have noticed that some of my colleagues do not know about the connection between DFAs and regular languages. This seems to me to be as fundamental a result in theoretical CS as (say) the Pythagorean theorem is in geometry, or as integration by parts
in calculus. And more important than many computer hardware implementation details. If you don't know that, you don't know squat. So your goal might be, read enough of Aho, Hopcroft, and Ullman (or equivalent textbook) to understand this important result.






share|cite|improve this answer























  • ... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
    – Henning Makholm
    2 days ago














3












3








3






If you are at a university offering computer science degrees, you could find out the names of a few courses that are required for 2nd or 3d year students, get a copy of the text book for one of them, and try to read it.



One thing making your task harder is that computer science is a very wide field, and no one book covers everything important. In part because "computer science" is an amalgam of computer engineering, of computer practice, of applied mathematics, and so on: unlike (say) linear algebra, there is no small set of basic axioms that can be neatly explained and exploited in a few hundred pages. Rather, imagine you wanted to systematically and efficiently learn automobile science. You might find a book that explains car engines and the related chemistry of combustion and pollution control, but says nothing about motion planning or an automobile's HVAC system, etc.



Added, after a few minutes. The comments following Henning Makholm's completely reasonable answer seem to me to illustrate the point I made above: computer science is so complex a subject that it is hard to agree what is most essential.



Let me add a particular recommendation: I have noticed that some of my colleagues do not know about the connection between DFAs and regular languages. This seems to me to be as fundamental a result in theoretical CS as (say) the Pythagorean theorem is in geometry, or as integration by parts
in calculus. And more important than many computer hardware implementation details. If you don't know that, you don't know squat. So your goal might be, read enough of Aho, Hopcroft, and Ullman (or equivalent textbook) to understand this important result.






share|cite|improve this answer














If you are at a university offering computer science degrees, you could find out the names of a few courses that are required for 2nd or 3d year students, get a copy of the text book for one of them, and try to read it.



One thing making your task harder is that computer science is a very wide field, and no one book covers everything important. In part because "computer science" is an amalgam of computer engineering, of computer practice, of applied mathematics, and so on: unlike (say) linear algebra, there is no small set of basic axioms that can be neatly explained and exploited in a few hundred pages. Rather, imagine you wanted to systematically and efficiently learn automobile science. You might find a book that explains car engines and the related chemistry of combustion and pollution control, but says nothing about motion planning or an automobile's HVAC system, etc.



Added, after a few minutes. The comments following Henning Makholm's completely reasonable answer seem to me to illustrate the point I made above: computer science is so complex a subject that it is hard to agree what is most essential.



Let me add a particular recommendation: I have noticed that some of my colleagues do not know about the connection between DFAs and regular languages. This seems to me to be as fundamental a result in theoretical CS as (say) the Pythagorean theorem is in geometry, or as integration by parts
in calculus. And more important than many computer hardware implementation details. If you don't know that, you don't know squat. So your goal might be, read enough of Aho, Hopcroft, and Ullman (or equivalent textbook) to understand this important result.







share|cite|improve this answer














share|cite|improve this answer



share|cite|improve this answer








edited 2 days ago

























answered Jan 2 at 0:23









kimchi lover

9,66131128




9,66131128












  • ... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
    – Henning Makholm
    2 days ago


















  • ... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
    – Henning Makholm
    2 days ago
















... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
– Henning Makholm
2 days ago




... not to mention road design, congestion modeling or predictive models for used-car prices, or policy debates about speed limit enforcement -- all of which would be part of our hypothetical analogue to computer science too.
– Henning Makholm
2 days ago











1















I wish there are some theoretical textbooks that build the whole
operation system, compiler, or some of this kind, that is readable to
math students.




I highly recommend reading The Elements of Computing Systems by Nisan and Schocken, and doing all the projects. You make a computer from scratch, starting with NAND gates. Along the way you make a compiler and a simple operating system. In the end you make a simple video game such as Tetris that can run on the computer you've designed. The book's companion website is www.nand2tetris.org.



It is my favorite textbook on any subject.



You might also be interested in Knuth's The Art of Computer Programming, though I haven't read it myself.






share|cite|improve this answer



















  • 2




    IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
    – kimchi lover
    2 days ago










  • The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
    – John Douma
    2 days ago










  • @kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
    – John Douma
    2 days ago












  • I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
    – kimchi lover
    2 days ago
















1















I wish there are some theoretical textbooks that build the whole
operation system, compiler, or some of this kind, that is readable to
math students.




I highly recommend reading The Elements of Computing Systems by Nisan and Schocken, and doing all the projects. You make a computer from scratch, starting with NAND gates. Along the way you make a compiler and a simple operating system. In the end you make a simple video game such as Tetris that can run on the computer you've designed. The book's companion website is www.nand2tetris.org.



It is my favorite textbook on any subject.



You might also be interested in Knuth's The Art of Computer Programming, though I haven't read it myself.






share|cite|improve this answer



















  • 2




    IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
    – kimchi lover
    2 days ago










  • The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
    – John Douma
    2 days ago










  • @kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
    – John Douma
    2 days ago












  • I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
    – kimchi lover
    2 days ago














1












1








1







I wish there are some theoretical textbooks that build the whole
operation system, compiler, or some of this kind, that is readable to
math students.




I highly recommend reading The Elements of Computing Systems by Nisan and Schocken, and doing all the projects. You make a computer from scratch, starting with NAND gates. Along the way you make a compiler and a simple operating system. In the end you make a simple video game such as Tetris that can run on the computer you've designed. The book's companion website is www.nand2tetris.org.



It is my favorite textbook on any subject.



You might also be interested in Knuth's The Art of Computer Programming, though I haven't read it myself.






share|cite|improve this answer















I wish there are some theoretical textbooks that build the whole
operation system, compiler, or some of this kind, that is readable to
math students.




I highly recommend reading The Elements of Computing Systems by Nisan and Schocken, and doing all the projects. You make a computer from scratch, starting with NAND gates. Along the way you make a compiler and a simple operating system. In the end you make a simple video game such as Tetris that can run on the computer you've designed. The book's companion website is www.nand2tetris.org.



It is my favorite textbook on any subject.



You might also be interested in Knuth's The Art of Computer Programming, though I haven't read it myself.







share|cite|improve this answer














share|cite|improve this answer



share|cite|improve this answer








edited 2 days ago

























answered 2 days ago









littleO

29.1k644109




29.1k644109








  • 2




    IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
    – kimchi lover
    2 days ago










  • The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
    – John Douma
    2 days ago










  • @kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
    – John Douma
    2 days ago












  • I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
    – kimchi lover
    2 days ago














  • 2




    IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
    – kimchi lover
    2 days ago










  • The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
    – John Douma
    2 days ago










  • @kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
    – John Douma
    2 days ago












  • I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
    – kimchi lover
    2 days ago








2




2




IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
– kimchi lover
2 days ago




IMHO, Knuth's book is a wonderful recreational read for someone who already knows what's what, but not a good introductory textbook.
– kimchi lover
2 days ago












The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
– John Douma
2 days ago




The jump from "The Elements of Computing Systems" to Knuth is like going from building circuits from a STEM kit to attending a graduate program in Electrical Engineering.
– John Douma
2 days ago












@kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
– John Douma
2 days ago






@kimchilover For most of us there is nothing recreational about Knuth. Bill Gates had his to say about it. "If you think you're a really good programmer... read (Knuth's) Art of Computer Programming... You should definitely send me a résumé if you can read the whole thing," Here is my source.
– John Douma
2 days ago














I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
– kimchi lover
2 days ago




I meant recreational in the sense that free climbing is recreational: if you are an expert in (say) sorting, you will find his chapter on sorting very hard and very insightful and lots of fun; similarly for random number generation, for floating point arithmetic, and so on. I suspect that DEK's selection of topics was based on his own personal taste rather than on a judgement of importance of topics.
– kimchi lover
2 days ago



Popular posts from this blog

If I really need a card on my start hand, how many mulligans make sense? [duplicate]

Alcedinidae

Can an atomic nucleus contain both particles and antiparticles? [duplicate]