Recently I have been working on a project that I need to prepare some maps. I had to go back to use some code I wrote almost 5 years ago. Then I realized that this happened to me many times.
I once read a line saying “If you think you are going do this again in the future, you should write a code for it”. This is pretty much the major reason that drivers me to write lots of codes.
Sometimes I write code for fun, to demonstrate or test some ideas. (Which I plan to share some example in another post). For example, I wrote a program to test different method for carbon cycle using Explicit method or matrix method (Link).
But for most time, I wrote code so I don’t have to manually do something. Just image if you have to open 10k excel files to do some simple math!
(I never wanted to write a programming language, at least for now. Most of my codes work to solve a real world problem.)
And more importantly, I always look ahead.
For example, if I decide to write a program to calibrate model, I try NOT to write one just for one model. I will write one such program for ALL models. So that in the future, if I work on a different model, I can re-use the program I wrote. (I actually have already finished a PEST based Python tool for all model calibration.)
That pretty sums up my my status: I constantly rely on efforts that I spent many years ago.
Because when you invented something, you don’t know when will you use it in the future.
But reality does not work that way. You may change institutes, universities, projects.
A project usually lasts for a couple of years, how can we justify that what we are doing right now ONLY supports the project we are working on? Apparently that the benefit of some effort might be much longer than we originally expected.
In another way, the training of a profession lasts for a long time. What we do right may not contribute directly to our current projects and institute, only if you stay for a long period of time. For example, lots of work I do right now benefit from my work in PhD, Purdue University.
As a researcher, I want to build my knowledge tree/pyramid around my field. In Earth science, that basically means I have to acquire lots of skills: ecosystem, biology, hydrology, geology, GIS, remote sensing, computation, HPC, etc. And that is a lifetime task. But definitely as I patch the map piece by piece, the big picture becomes clearer and clearer.
To summarize, if you plan to do something in the long run, build it not just for now, but for the foreseeable future.