- Patience is key ... do NOT panic
- Don't be afraid to ask for help.
The Art of Debugging

The thing that still surprises me to this day about software development is it really isn't about the coding. It's really all about the DEBUGGING!
Unless you're somehow perfect and never make mistakes, your software application will have DEFECTS, LOGIC ERRORS, or just plain WON'T WORK. And since our computers aren't self sufficient, A.I. aware thinking machines (yet), your software code won't fix itself...you, as a software programmer, will need to roll up your sleeves and try to figure out what went wrong.
I can't stress enough just how important the ability to debug a program really is. It's probably the most important tool in a programmer's belt.
It can also be one of the most frustrating aspects of software development. When I first started out in my professional programming career, I was IMPATIENT. Maybe it's the general nature of YOUTH. You want instant gratification. For things to work right the first time ... yeah, wouldn't that be a nice world to live in?
Sometimes I would get so frustrated by debugging my early programs, I would sometimes wonder if software engineering was really the right career path for me.
Eventually I learned the single most powerful tool in debugging.
PATIENCE.
It's vitally important to keep a cool and calm head when debugging. A computer does not have emotions. It doesn't CARE if your code works or not. It will cheerfully fail to run your code a million times.
We humans, unfortunately, don't have the infinite patience levels of computers. We have to constantly keep our emotions in check lest we end up emotional wrecks.
Easier said that done, for sure. When you've got a production bug that's causing your company lost revenue and your customers are breathing down your neck and your manager is asking you for a status update every 2 minutes, the need for PATIENCE is key.
It happened to me during my third professional programming job. I was under the gun to integrate and activate one of our bank customers to one of our core company products, and it wasn't going well. It was probably a combination of my inexperience with both the customer's system AND the core product of my company.
From morning till late in the evening, I was pretty much doing nothing but trying to figure out HOW to integrate our customer's banking mainframe system to one of our sub-systems of our core company product (one of the first commercial online banking systems).
It seemed like a straightforward project. Or so I thought. I naively thought it was going to be a piece of cake. I kept reassuring my project manager that I was close to finishing the integration point. Day after day. Week after week.
Yet I just couldn't integrate the two systems together. My code would simply fail to establish a connection to the external banking mainframe system.
Each additional day of delay added that much more stress. I wasn't employed at that company for very long when this project landed on my lap. That project could literally make or break my chance for success at that company.
I eventually did manage to figure out how to integrate the two systems together. And I came out of the experience with two important nuggets of truth.


