When I was in college I intented to major in Mathematics. Computer science was supposed to be my minor and support my interests in math. In my first semestor I took a formal math class and was completely lost. Meeting with my professor I discovered that my interests were in his terms "messy math" and not "pure math". Dissalusioned with this notion of being interested in "messy math" I decided to shift my focus to Computer Science which I felt would allow me to reason through problems in the "messy way" I liked.
To graduate I still needed to fulfil a Calculus requirement. The class I took was full of Engineering majors who inevitably in every class asked for the pratical application of the principles we were being taught. This has always stuck out in my mind and has been a question I have constanlty asked myself throughout my career. Why learn something if it doesn't have practical applications?
Yet recently I have felt a pull in another direction. The complications and limitations that I encounter in my job are often due to the messy nature of my work. Ignorantly I used to believe that this was just the nature of programming and just tried to deal with it through better engineering practices. Over time I have become more enamored by the theortical aspects of Computer Science by reading about functional programming and typed languages; following their roots in Mathematics through lambda calculus, type theory, set theory and this whole branch of computer science called computational theory.
This exposure has helped rekindle my love for math in a "pure" way. Messy applications have shown me the beauty in the theory.
Recently I read an article about "Tribes of programmers" and it contrasts "Engineers" from "Mathematicians" and stated that often developers fall into one category. Even if this is true I believe that a well rounded developer will have an understanding of both and try to learn and grow as much as they can through continued learning.