There are probably as many ways to learn computer programming and theoretical computer science as there are individuals wanting to learn such things. For me, it all came down to mathematics, believe it or not. It was easy enough to learn the syntax and so on for the Python language, but as soon as I wanted to do anything worthwhile with Python, there suddenly were a dozen branches of mathematics I felt I needed to brush up on.
I am willing to concede; maybe it’s not absolutely necessary to teach computer programming to kids in school. But the fact that they never taught us any really interesting and useful mathematics, for that I hold them guilty. They had what, twelve years to teach us math? And in over a decade the furthest they could take us was basic trigonometry? Are you kidding me?
In the last two years, I was able to teach myself more math than I could shake a stick at. The same goes for theoretical computer science. What were they trying to do, anyway, teach us or just waste our time? In any case, that’s unimportant now. The point is that I felt the need to learn some more or less "advanced" math because I quickly learned that the better I got at general "mathematical thinking", the easier it would be to write computer programs.
That is, if my goal was to write interesting computer programs. And by "interesting", I mean short programs that help me do insane calculations I couldn’t otherwise do on paper. Why else would I want to program a computer? I want to push it to its computational limits. It’s not complicated. I’m not in this for the entertainment value of reading error messages all the livelong day. I’m in this to break my computer, always was, always will be. I want to break the bounds of human thought. Maybe I’m funny that way.
I like problems that quickly become intractable. I like to think the impossible and then go forward with the idea that I can do the impossible. It doesn’t always work, but sometimes, every so often, the impossible happens. And, fortunately or unfortunately, in order to augment my ability to make the impossible happen, I had to learn a whole bunch of math.
Why does this matter? It matters in a more or less non-trivial way. I think that the sooner one realizes that computer science and mathematics are not only related but are more or less the same thing, one is a branch of the other, the quicker one can advance in either of those sciences. What people aren’t realizing is that there is currently a revolution in mathematics. The entirety of the mathematical apparatus is currently being rewritten in terms of Type Theory, for one. What this basically means is that you can learn the entirety of the mathematical apparatus starting from the new perspective of Type Theory. You can actually start there, you don’t need the rest. This is the new normal. You can start teaching kids basic arithmetic in terms of types and so on. No need to teach them 20th century mathematics, it’s all being rewritten as we speak anyway.
The beauty of that is that finally computers and mathematicians will be speaking the same language. Finally, after over a hundred years of speaking foreign tongues, mathematicians and computers will be speaking the same language more and more. I stumbled upon this entirely by accident. I only wanted to brush up on a little math to make more sophisticated kinds of programming easier for myself. Then oops, I accidentally crunched most of modern mathematics in my head, one concept after another, in a two-year math crusade.. and developed a full-blown mathematical ontology, again, entirely by accident. Then when I came out of my stupor, I learned that that’s exactly what the top 30 or so mathematicians in the world were currently working on.
They had come to the same conclusions, except I only had high school math, barely understood basic trigonometry. Anyhow, I will get back to this, but tell me about it, I spent two years learning Python when I could have spent two years at Princeton at the Institute of Advanced Study doing just about the same darn thing! So IAS School of Mathematics, you know where to reach me. I am being more or less facetious, but I definitely wouldn’t refuse an all-expenses-paid voyage to the IAS in Princeton, New Jersey. It should only take me a couple of months to get my math up to date, at par with the other researchers. 😉