I confess. During the holidays, I binged. Not only did I binge, I ignored some work required for an upcoming presentation, I didn’t write or blog, I didn’t shave, and I didn’t get regular meals for almost four days. As you might have guessed, I was profoundly indulgent in writing and testing software.
I know what you’re thinking. I could have said no, I could have more self control, I could have asked for help. But I saw my new laptop sitting there, Visual Studio Community Edition 2013 looking sleek and installed and all, and an engaging hobby project at the ready. “I’ll try just a few experiments for feasibility”, I told myself. “It won’t take long.”
I created my first project and successfully embedded Google Maps on the web page. “Wow”, I thought, “this is easier than I thought.” I opened another project to explore the use of a web service for retrieving data I could place on my map. All I had to do was port some code I already had (no one would know and I would save time).
I copied the code into my web service project and gave it a try. Working. I added more code to accommodate the web service and gave it a try. Working. I needed more, these small successes are great. More is good, right? After a few iterations of coding and testing, it was working well enough to integrate with the first project. “This is going pretty well – why stop now since I’m so close?”
I had my web site call the web service. Error. I Googled the error and found a feasible resolution. A small success. More, I need more. I added a secure call, a database connection, and some simple UI interaction. Working.
A welcome development buzz was setting in. After weeks of thinking about this project, planning its construction, designing an interface, the pent up creativity was released. The cycles of build and test fueled my desire to continue and laser-focused my attention. The total design was becoming clear and I had to pursue it.
I had enough code working that I could deploy to my website. “This was it!”, I realized, “I would see my dream a reality.” I elevated all the files and navigated to the page with the map. I entered my information and submitted it. I had such anticipation to see the data on the map.
The failure was frustrating. My ISP did not allow web services on shared accounts. I should have known but I didn’t care. I was already considering alternative solutions. Somewhere through my thoughts, I recalled the Raspberry Pi my son had. “You could run a website on it, Dad,” echoed in my head.
I investigated the Pi and ordered my own. “I can experiment with his – he won’t miss it.” Suddenly, I was working, most clumsily I might add, in Linux (download a TTY application; I tested and coded). The web service could be written in Java (download an editor; I coded and tested). It had to be deployed through something called Tomcat (install on the Pi; I coded. I tested.). The database (pant, pant), I need a database (install MySQL on the Pi; I tested. I coded.).
In the quiet twilight of a Sunday afternoon and with the benefit of my favorite (caffeinated) tea, I navigated to the page with the map. I entered my information and submitted it. In the brief milliseconds awaiting a response, the world was still and my eyes focused on a blinking cursor. With the innate agility of a cat, the browser displayed my data on the map. The final code/test/deploy cycle was successful and I was breathless. I sat there looking at the map and my data. “Wow!”, I whispered to only our cat.
I started programming as a product engineer and moved into IT 15 years ago. The joy in my programming has often been matched or exceeded by testing my code. The initial creative impulse coupled with the quick feedback of a running program makes for some long and satisfying weekend afternoons.
If you code, I encourage you to test. There is certainly a very satisfying quality in implementing business requirements in short, organized, syntactically appealing and patterned phrases. But, like music, the real beauty is in when code plays and plays well.