Posts Tagged ‘programming’


Tuesday, 16 March, 2010

In many fields, there is certain level of abstraction you need to do with your knowledge in order to apply it at a more advanced level.

As an example, consider computer programming. The most basic level is manipulating variables and control flow with branches and loops. A level of abstraction comes when you write callable functions to encapsulate repeated tasks. There’s another level when you learn about pointers and references. And then you can fling around references to functions and pass those in as parameters to other functions. Further abstraction comes with function templating, design patterns, and so on. And at some point you get to wrangling large chunks of code that are standardised enough that you can write other code to generate those chunks of code from some sort of code definition files.

When you’re writing computer code whose purpose is not to calculate some value, but to generate other computer code, then you’ve climbed a fair way up the abstraction pyramid.

I used to have a job cutting code. I’m a competent programmer. But when the people around me started writing code to parse XML files into other, more complex code, I began feeling out of my depth. It was a level of abstraction too far for me to comfortably work with. I understand the concept of code generation, and can see the benefits, but actually doing it requires mental gymnastics that don’t quite come easily enough for me.

I’ve found I have similar trouble with more advanced mathematics. I’m fine with stuff that I can link directly to practical applications, like vectors and calculus to give simple examples. But these days I get thrown all sorts of matrix algebra and graph theory and classification trees and stuff which seems one layer too far removed from reality for me to fully comprehend. At some point along the way, I reached my abstraction threshold, and everything beyond that just seems like symbol pushing, with no underlying meaning.

I’m beginning to think that my strengths in the mathematical sciences lie not in the greater realms of abstraction, but in the solid application of what I know to the real world. I’m a visual person. I understand Fourier transforms and quantum mechanics and differential equations in an intuitive way, by thinking of them in terms of how they are represented by physical systems, and feeding that back in to figure out how the mathematics must behave. I don’t work from the mathematical equation manipulating and then map that on to the physical system.

Sometimes this seems like a limitation. Other people clearly have higher abstraction limits than I do, and are comfortable applying matrix operators in a purely mathematical way when they’re three or four steps removed from representing something, while I ask questions in their presentations about what it actually means. But maybe the lower abstraction threshold allows me to make deeper connections to describing physical systems, since many people have commented on my ability to describe complex scientific principles in terms that make them readily comprehensible. To me that just seems natural, as that’s the way I understand them. I need to see all those deep connections before I feel I really understand something.

Maybe that’s why I feel uncomfortable with higher abstraction. The connections are more tenuous, or fewer, and I feel like I’m working without a safety net, a reality anchor. In my heart I feel that the strong connections must be there, but they feel elusive, ghostly – and so I don’t feel that I fully understand what’s going on.

I don’t have a snappy conclusion to this line of thought. I only really thought about it last week, and I’m still digesting it and trying to see if it helps me. I think it might be the reason I have a breadth-first approach to knowledge. Any one field becomes more abstract as you learn more about it. If my abstraction threshold is lower than average (for science/research-minded people), it could explain why I diverge into looking at something different before I have an “expert” knowledge of any one subject.