Three Steps in Solving Real-Life Problems Using Software Debugging Techniques

I was struggling to speak. No words were coming out from my mouth. It’s 8 am, and my desktop was still on after working overnight with my brother. It was interesting to experience my vocal cords collapsing after a 24-hour work to debug a complex problem.

The challenge at that time was how to convert the existing users of our accounting software from multi-database to single database/multi-tenant model. There were about 30 company subscribers we need to migrate in a software-as-a-service (SAAS) or application service provider (ASP) model that was the term at the time around the year 2004.

What is Debugging? According to Wikipedia, Debugging is the process of finding and resolving defects or problems within a computer program that prevent correct operation of computer software or a system.

Debugging tactics can involve interactive debugging, control flow analysis, unit testing, integration testing, log file analysis, monitoring at the application or system level, memory dumps, and profiling.

To me, the most effective way to debug is bug isolation. It is a technique where you break down the big problem into small chunks or small modules, then solving it one at a time. In the problem I mentioned above, we isolated the problem by identifying which part of the program can we modify with the least effort because we were also pressured in time.

So how do you apply debugging techniques in real life? Here’s my take:

Step 1 – Simulate the bug. When the bug is reported, you have to ask the reporter how did the bug occur. What was the user input, what was the process, function or the button pressed and what was the output vs. the expected result?

In real life, you have to define the problem first clearly. A money problem, for example, may not be the real problem. The real question is the person who doesn’t make efforts to find a job or business and make money.

Step 2 – Isolate the bug. Breakdown the functions or methods line-by-line and see where the problem occurred. Was it when the button was pressed? Was it the data type the user inputted, was it when the button press signals the function to proceed or was it when the function returned the value? In coding, we put breakpoints to see exact behaviors or return values each line.

In real life, we can break down the problem as well. Going back to the money problem, we can iterate the possible causes like, am I spending more than I earn? Why am I not motivated to find a job? Is it depression? Am I an impulsive buyer? Once you have identified the cause, then it is easier to find a solution.

Step 3 – Solve and test. Solutions mostly are theories at first. In coding, you have to test your work by simulating the problem again and see if it still happening. In real life, if the cause of your money problem is being an impulsive buyer or spending much, then the solution is to devote efforts to analyze the budget and follow it. There are a lot of free apps where you can set a budget monthly, track it and forecast what happens to your cash balance if I buy this piece of equipment using my credit card and pay it in installment. That’s where testing happens.

These are just very few examples. Other real-life problems like relationships, business, health can be solved using these techniques. The most important thing is you don’t tolerate your problem when you see it.

Ways to Start a Software Development Career

softwaredevelopment

Whether you are a fresh graduate of any computer studies, maybe computer science, computer engineering or BS. Information Technology or you are passionate in software programming & development, then you have all the options and sky is the limit.

First of all, you have to decide whether you want to start as an employee or you want to do business of your own.  Some may try employment initially as their training ground and then eventually shift to their own venture.  But in any case, its not always about software programming and problem solving.  One should be business & marketing-oriented, meaning focus on the end-users’ need than product features because most likely those features aren’t needed at all.

So what are the ways to start a software development career?  Below are some suggestions:

1. Join an MIS team – this is probably the easiest.  Many of newly graduates opt to work and join an MIS department of a company or industry not necessarily in IT/software business.  You will work on in-house development projects, desktop and server support and even hardware troubleshooting, they may enroll you to some skills training and use you to develop internal software applications or middleware and application support.  This maybe ideal as a training ground but you might want to consider other options especially if the company you will work for do not innovate enough to have a sustainable MIS team.

2. Work for an IT software company – Many talented Filipinos prefer to work in an IT company after graduation for the obvious reason of working in an industry related field.  But instead of developing applications for internal use, you will have to work for their clients.  Depending on the company’s culture and methodology, for small companies, you’ll be a jack of all trades, meaning your tasks will vary from requirements gathering, to analysis and design, development, testing and deployment.  For bigger companies, you’ll be assigned of a specific task or module alone.  I suggest that if you are confident in your programming skills, one should pursue working in a smaller company because not only you will learn a lot, you’ll be a pioneer and when the company meets its breakthrough then stock options will most likely happen.

On the other hand, bigger companies will give you formal training, by-the-book software methodology and will make your CVs attractive then working outside the country is the next step, which I discourage because of the lack of senior analyst in the Philippines.

3. Work as a freelance programmer or your own company – this one is too risky but just like in any other risky actions, the rewards and opportunities are infinite.  This occasionally happens when a friend of a friend owns a business, then will offer you to work on a project that will give you instant $$$.  The thing here is, assuming you are successful with the first project, but most of the time its not with lack of experience and naivety, there’s no guarantee that you’ll get a new project.

Being knowledgeable in software development doesn’t mean you can design an accounting program.  In working for yourself, we suggest that you have a niche, there are lots of options: ERP, CRM, front-end solutions, middleware, programming tools, your own database, your own web server, a web-portal, a social-networking site, web design, SEO, cloud computing, etc but ensure that you are also thinking the business side of things.

The good side here is that this may give you the opportunity to be the next great software company specially if you invent something extraordinaire.  You may opt to selling the product’s intellectual property or the company itself after a long run or pursue it as a built to last company.

Just don’t be confused between software development and software implementation.  If you want to be a hardcore developer then be in a software development job.  Software implementation is fundamentally the delivery of the end-product, it involves implementation planning, installation, training which is a totally different thing.
So that’s it, you might try one or all but in the end, its the journey and living your dream and passion that matter.