
I was taught high school "new math" from an English (O-level?) text that started with sets and was not divided into algebra, trig, geometry, etc. but provided an integrated approach that covered topics as they naturally arose. My teacher (Eric Turner, now deceased, so I was unable to let him know how much he affected my life) probably had much to do with it. He also taught physics, so perhaps he really understood both the abstract and the practical.
I have two only complaints about my mathematics education: the knowledge of how to construct and deconstruct proofs, and no statistics (too much calculus).
My kids, 17 and 15, don't grok mathematics the way I think they should. Tis a pity since underneath it all is mathematics.
By the way, there are some really excellent mathematics video channels on YouTube: 3 Blue 1 Brown comes to mind.
* 1) Functions and Graphs and 2) The Method of Coordinates by I.M.Gelfand et. al. - These give you the basics on functions and how to visualize them which is crucial for understanding.
* Introductory Logic and Sets for Computer Scientists by Nimal Nissanke - Nice succinct introduction to various required topics for Comp. Sci.
* Compared To What?: Introduction to the Analysis of Algorithms by Gregory Rawlins - This is a classic book which takes you by hand and walks you through Algorithm Analysis and the reqd. mathematics. You will find this more approachable than most other text books and well worth a study.
* How to Think about Algorithms by Jeff Edmonds - Practical techniques without too much mathematical formalism.
* Data Structure Techniques by Thomas Standish - A Classic text; good adjunct to more modern texts.
* Advanced Data Structures by Peter Brass - Nice succinct text but not necessarily "advanced".
One final point; try to get a Algorithms and Data Structures book with code in the language with which you are most familiar. That way you understand the mapping from "Abstract Algorithm" to "Concrete Language Implementation" which is not always trivial.
The first thing is to understand FSMs and State Transition Tables using a simple two-dimensional array. Implementing a FSM using a while/ifthenelse code vs. Transition table dispatch will really drive home the idea behind data-driven programming. There is a nice explanation in Expert C Programming: Deep C secrets.
SICP has a detailed chapter on data-driven programming.
An old text by Standish; Data Structure Techniques.
Also i remember seeing a lot of neat table based data-driven code in old Data Processing books using COBOL. Unfortunately i can't remember their names now. Just browse some of the old COBOL books in the library.