I enjoy programming and I find that the projects that I program directly support my mathematical interests. I first programmed seriously to generate examples for conjectures that I proved in my dissertation. It's been 35 years and I still turn to programming to surpass what I can do with paper and pencil.
For most of that time I have been influenced by a methodology known as Test-Driven Development. For ill-defined or non-obvious problems, it can be difficult to articulate what parts or all of a program should do. It becomes difficult to see a path forward, and you never really know if what you are doing is correct when correct itself is ill-defined.
My understanding of TDD is that for parts and wholes of programs, I start my articulating what I want to achieve and then write a clear-cut test that tells me if I succeeded. Then and only then do I try to write code that will accomplish that goal. Goal first, supporting work second.
Almost all of my programming has been with Object-Oriented Programming, where self-contained pieces of data are implemented together with the actions that are performed with the data, forming nice modular separation. The languages that I use have been OOP languages all these year.
I think it has only been in the past few years that I have started focusing intently on a cleaner separation between the objects, really making a clear distinction between the interface of an object (its behavior in relation to other objects) and how that behavior is implemented.
One of the joys of my career has been identifying certain areas where I can know with certainty that I have gotten better; teaching, service, leadership from time to time, ombuds work. In programming I do believe that I write code better and better with each passing year. Health permitting, I will probably continue programming long after I stop teaching.
Comments
Post a Comment