Steps to solving programming problems

Jun 04, 2014 | Comments

If you are looking for a systematic approach to solving programming problems, i have one for you here. This is my variation from the Problem analysis coding execution cycle that typical computer science class will teach. Hope it will be of use to you!

Problem analysis coding execution cycle

1. Analyse the problem

a. Problem specification

What is the problem asking for?

b. Requirements

What are the constraints and requirements?

c. Assumptions

What are the underlying assumptions on the question?

Is there any assumptions which could be challenged?

d. Sample test cases

Identify at least 1 sample test case.

How many test cases should there be minimally?

e. Determine input & output

Determine the input and output and their corresponding data types

f. Identify input boundary cases

List out all boundary cases for inputs and logic flows.

2. Implement the algorithm

a. Algorithm structure

What is the best data structure and data types for this problem?

b. Design Algorithm

Write algorithm in plain english or pseudo code.

Identify repeated patterns if any.

c. Testing algorithm correctness

Verbally run through the algrithm with pre-defined test cases

d. Write code

Write code incrementally with adequete tests at each step.

e. Test code correctness

Run the code with sample inputs to test for desired outputs.

f. Testing boundary cases

Run the code with boundary cases and lookout for unexpected behaviors.

d. Verify program correctness

Re-visit the question and and lookout for inconsistencies and redundancies.

3. Program maintenance

a. Determine time complexity

What is the average case complexity?

What is the worst case complexity?

b. Determine space complexity

Are there redundant or unused variables?

c. Refactoring

Can the code be refactored to improve readability?

Can the algorithm be redesigned to improve efficiency?

d. Documentation

Leave comments where the abstraction logic is unclear.

Are there any trivial comments?

Write formal documentations if the program is expected to be used by people.

programming, web development