Answers.Body: <h2>Relational Databases and SQL.</h2>
  
  <p>The Relational Database came from very arcane foundations in Mathematics which I still do not understand. But I have reduced the description and steps for the first 3 Normal Forms (which took a decade to develop) down to a few sentences! I hand that out to my students.</p>
  
  <p>If there is anything more math-y in computing than databases, I have yet to see it. "<em>A minute to learn, a lifetime to master.</em>" It is the most useful thing you can become an expert at, and largely uncontroversial. (Except for Nulls. Maybe you can help smooth that one out for us!)</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2018-08-16T18:57:48.200Z
Answers.LastActivityDate: 2018-08-16T18:57:48.200Z
Answers.UserDisplayName: Scott Rowe
Answers.Body: <p>Be careful of what you wish for. Assuming you want rigorous self study, I'll recommend a few books. They are fairly old, but are classics. </p>
  
  <p><a href="https://rads.stackoverflow.com/amzn/click/0321751043" rel="nofollow noreferrer">The Art of Computer Programming</a>. Knuth is a mathematician at heart. The link is to the boxed set, but you can buy individual volumes. </p>
  
  <p><a href="https://rads.stackoverflow.com/amzn/click/0132624788" rel="nofollow noreferrer">Elements of the Theory of Computation</a>. This is as rigorous as you want to be and addresses directly the question of run-time bounds of various sorts. </p>
  
  <p>Similar is</p>
  
  <p><a href="https://rads.stackoverflow.com/amzn/click/113318779X" rel="nofollow noreferrer">Introduction to the Theory of Computation</a> by Sipser</p>
  
  <p>A somewhat different view of computation is found in</p>
  
  <p><a href="https://rads.stackoverflow.com/amzn/click/0262510871" rel="nofollow noreferrer">Structure and Interpretation of Computer Programs</a>: A classic introduction to functional programming in Scheme - yet quite deep. </p>
  
  <p>For what it's worth, I have a doctorate in Mathematics and taught CS for over 40 years. </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2018-08-16T14:29:44.847Z
Answers.LastActivityDate: 2018-08-16T14:29:44.847Z
Answers.UserDisplayName: Buffy
Body: <p>I'm interested both mathematics and computer science. I like math because one can formalize it rigorously and I have seen that many things can be defined by sets. Is there similar thing in computer science, as for example asymptotic notation is sometimes defined in very odd way, see <a href="https://math.stackexchange.com/questions/2731290/how-one-can-define-rigorously-the-time-and-space-complexities-of-algorithms">https://math.stackexchange.com/questions/2731290/how-one-can-define-rigorously-the-time-and-space-complexities-of-algorithms</a> ? I'm looking way to learn CS in a very rigorous way.</p>
  
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2018-08-16T10:45:05.967Z
Comments.Text: Give some more context. What level are you? Why only self-learning as a tag? Why do you think the run time estimates are _not_ rigorous?
Comments.UserDisplayName: Buffy
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2018-08-16T16:40:55.893Z
Comments.Text: I'm not entirely sure what you mean by a "rigorous way." On the flip side, it seems you're looking for ways to "define" things in CS rigorously, not "learn" CS rigorously.
Comments.UserDisplayName: Gypsy Spellweaver
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2018-08-21T10:47:56.970Z
Comments.Text: I have been asked to review this question (should I close). There are two comments that you need to address. Please improve the question, or it may be closed.
Comments.UserDisplayName: ctrl-alt-delor
Comments.ContentLicense: CC BY-SA 4.0
Comments.CreationDate: 2018-08-24T15:23:32.523Z
Comments.Text: By "rigorous" I'm assuming you mean in a way that can be formally proven (in the mathematical proof sense) to be correct or incorrect. Most programs which can be rigorously demonstrated to be correct are trivial.  As real world complexities creep in it gets harder and harder to create formal proofs of correctness.
Comments.UserDisplayName: Onorio Catenacci
Tags: <self-learning>
Title: Where one can learn CS in very rigorous way?
ThreadText: # Where one can learn CS in very rigorous way?
  
  (Asked by: username_0 on 2018-08-16)
  
  I'm interested both mathematics and computer science. I like math because one can formalize it rigorously and I have seen that many things can be defined by sets. Is there similar thing in computer science, as for example asymptotic notation is sometimes defined in very odd way, see <https://math.stackexchange.com/questions/2731290/how-one-can-define-rigorously-the-time-and-space-complexities-of-algorithms> ? I'm looking way to learn CS in a very rigorous way.
  
  **Tags:** self-learning
  
  > **Comments:**
  > **username_1**: Give some more context. What level are you? Why only self-learning as a tag? Why do you think the run time estimates are _not_ rigorous?  
  > **username_2**: I'm not entirely sure what you mean by a "rigorous way." On the flip side, it seems you're looking for ways to "define" things in CS rigorously, not "learn" CS rigorously.  
  > **username_3**: I have been asked to review this question (should I close). There are two comments that you need to address. Please improve the question, or it may be closed.  
  > **username_4**: By "rigorous" I'm assuming you mean in a way that can be formally proven (in the mathematical proof sense) to be correct or incorrect. Most programs which can be rigorously demonstrated to be correct are trivial.  As real world complexities creep in it gets harder and harder to create formal proofs of correctness.  
  
  ---
  
  ## 2 answers
  
  ### Answer by username_1 on 2018-08-16. Score: 4
  
  Be careful of what you wish for. Assuming you want rigorous self study, I'll recommend a few books. They are fairly old, but are classics.
  
  [The Art of Computer Programming](https://rads.stackoverflow.com/amzn/click/0321751043). Knuth is a mathematician at heart. The link is to the boxed set, but you can buy individual volumes.
  
  [Elements of the Theory of Computation](https://rads.stackoverflow.com/amzn/click/0132624788). This is as rigorous as you want to be and addresses directly the question of run-time bounds of various sorts.
  
  Similar is
  
  [Introduction to the Theory of Computation](https://rads.stackoverflow.com/amzn/click/113318779X) by Sipser
  
  A somewhat different view of computation is found in
  
  [Structure and Interpretation of Computer Programs](https://rads.stackoverflow.com/amzn/click/0262510871): A classic introduction to functional programming in Scheme - yet quite deep.
  
  For what it's worth, I have a doctorate in Mathematics and taught CS for over 40 years.
  
  
  ---
  
  ### Answer by username_5 on 2018-08-16. Score: 1
  
  ## Relational Databases and SQL.
  
  The Relational Database came from very arcane foundations in Mathematics which I still do not understand. But I have reduced the description and steps for the first 3 Normal Forms (which took a decade to develop) down to a few sentences! I hand that out to my students.
  
  If there is anything more math-y in computing than databases, I have yet to see it. "*A minute to learn, a lifetime to master.*" It is the most useful thing you can become an expert at, and largely uncontroversial. (Except for Nulls. Maybe you can help smooth that one out for us!)
  
  
  ---
  
  