Philosophical Connections
Let me throw my humble opinion. In computer programming, we are in the business of devising abstractions to solve the problems of the domain. Besides programming, you have computer science that builds, let's say, theoretical abstractions. Geometry is also about building abstractions to solve problems of space-time and similarly you have mathematics that builds theoretical abstractions. The use of abstraction in these related fields differ though.
Let me give an example. Suppose you have a problem, you want to find best first order approximation to a function. You simply start in terms of your observations and direct models. This leads you to tangent lines and approximation by tangent lines and to a simple version of Taylor's theorem. You can now devise an approximate solution to your problem at hand. There is a bigger opportunity lurking around here though. With your new geometric insight, you can now come up with more general abstractions, theoretical abstractions I called these. Trying harder to organize your thoughts, you come up with Taylor's theorem in full generalization and along the way you refine your approximation method to come up with a better strategy: Newton's method for finding numeric roots. So you started with the problem at hand, geometric insight led to ideas of further general abstractions, you devised more powerful abstractions and you went back and refactored your initial solution with the language of your new abstractions. In the end, you solved your problems and devised mathematical analysis techniques to increase your confidence in your theories.
This ties naturally with the relationship between programming and computer science, I guess. Think about how we ended up with all the tools of computer science. Suppose you are writing a program that responds to changing sensor outputs for different types of sensors. You solve your problem using the algorithmic insights you have but with the help of your algorithmic insight, you then devise new abstractions. Let's say you came up with message-passing style of communicating processes along the way. You devise the language of this new kind of abstraction and go back to refine your initial solution in terms of this language.
So, here is how I can summarize things. Both mathematics and computer science are iterative processes of elevating a language towards richer and richer abstractions. One is a declarative language and the other is an imperative language, one is about "what is" and the other is about "how". This part is explained in Structure and Interpretation of Computer Programs by Abelson and Sussman. Of course, we refine our languages through talking and using them on daily basis, just like how natural languages evolved through centuries. Talking mathematics is called geometry, talking computer science is programming. In a sense, geometry is what is known as applied mathematics and programming is what is known as applied computer science. I believe, all these things are tied together in constructive mathematics.
Let's stretch this analogy further to philosophize needlessly, to the point that it becomes absurd. Geometry and mathematics as explained above is what we call physics. Computer science and programming as explained above is what we call metaphysics.
But aside from this useless philosophical things, I think getting into the mindset of a geometer thus is helpful to a programmer. Couple of suggested books would be:
- Numbers and Geometry, John Stillwell
- Calculus, by Spivak
- Theodore Shifrin's lectures on Youtube, on multivariable calculus
- Introudction to Tensor Analysis and Calculus of Moving Surfaces, by
Pavel Grinfeld
- Elements of Programming, by Alexander Stepanov
- Space, Time and Stuff, by Frank Arntzenius for further philosophy
- The Road to Reality, by Roger Penrose maybe if you had the time
Direct Connections
There is a field called computational geometry. You can think of this as Euclid's ruler and compass constructions on steroids. The techniques devised here are used in polygon processing, computer graphics, machine learning and clustering through proximity analysis etc. I think computational geometry is a splendid subject to apply and strengthen your algorithms and data structures knowledge. With a little bit software rendering, you can easily visualize your results which might be a bonus if you like to concretely see the results of your computations.
Vectors used to do geometry and maps between vector spaces are used immensely in computer graphics. Numerical and other optimization problems are often geometric in nature.