
Russ P. answered 01/28/15
Tutor
4.9
(135)
Patient MIT Grad For Math and Science Tutoring
Harsha,
To iterate means to repeat with changes to better achieve some objective e.g., understanding, totaling data, developing software, etc.
Thus, a loop in a piece of software code does the same or similar processing with somewhat different data or controlling indices on each pass. The controlling indices or logical expression determine when the iteration starts and stops. So you could set up a loop to accumulate the revenues of thousands of individual sales. Or a loop can be set up to come up with a better approximation (i.e., more decimal places) to say the constant "pi" for a circle's circumference.
The loop saves programmer time and effort: write and debug code once, then re-use as appropriate. This is attractive for common, frequently used procedures. Similarly for software objects. That's why code libraries exist. Iterative coding makes source code shorter, easier to read and understand, and therefore, easier to debug. It allows the programmer to build more complex programs by re-using familiar and already tested sub components, like using various lego blocks to construct more complex structures. The downside is you have to understand subcomponent capabilities and usage connections to use them properly. It also takes time to find suitable ones for a given application. As always, there is a tradeoff between rolling your own versus making an existing thing work in your particular circumstances.
More globally, iterative software development starts with a rapid prototype of the system to demonstrate and better understand what the software system could be and how it would fit into the current IT environment and the users' work cycle. Users can play with it and modify their requirements to make the final system more usable. Each iteration of the system would add more functionality, detail, error detection/correction, etc, until the systems' objectives are satisfied. Usage of each iteration ferrets out bugs. Basically, it is a learning process that discards requirements, code, etc., that don't work and enhances those things that do work to better satisfy users.
The advantages are that users are more likely to get software that is more usable, involved users will require less training since they have been brought along with each iteration, other users will benefit from a more "logical" and more stable software product, user-developer communications are better, and corrections can be made along the way. The disadvantages are: how many iterations is it going to take and when to cut off trivial changes, it is an evolving project so its definition is less firm at the outset (makes management queasy since it is harder to plan in detail and they exercise less control), it may lose sponsorship as user and developer personnel turn over, it may appear as a waste of time & money to upper management (why can't they do it in one or two iterations?).
In sum, the smaller the project and the better known the requirements are at the outset, the more the iterative approach seems like an unnecessary waste. But where there is much ambiguity or size, the more attractive a learning-based approach makes sense to resolve those ambiguities in an acceptable manner to users.