A flowchart is a diagram displaying a program's logic "flow" by using different boxes for decisions, statements, operations and routines which are connected by arrows. This tag is for questions related to the teaching of flowcharts. Structured flowcharts are a separate mechanism, also used for design, but with little resemblance to the classic flowchart.
Flowcharts were invented in the early days of programming to try to capture the logic flow of a program. They were deemed necessary when languages had only low-level statements, closely modeling the actual machine operations. It was too difficult to develop programs at the time, due to the limitations of human thinking - memory especially. The key element of a flow chart is a decision "box" that notes the details of some logic operation. Depending on the evaluation of the logical expression, the "flow", represented by arrows, moves to some other element of the computation, perhaps a process or another decision.
When languages developed higher level features such as
while-do, it was discovered that flowcharts have too many degrees of freedom to be truly reliable. While originally developed as a methodology of creating a program design, they later evolved into an automatically generated documentation of a design created otherwise.
Flow charts may be used in limited cases for small and relatively simple things, but for large programs they are now less used. The danger of unrestrained flow charts is in the degrees of freedom they embody, making it possible, even easy, to create designs beyond human comprehension and hence programs that are unreliable and unmaintainable.
When structured languages such as Pascal and (arguably) C were created, a diagramming method called Structured Flowcharts was also created, but it bears little resemblance to the classic flowchart. By design, structured flowcharts have many fewer degrees of freedom than the original, hence are safer to use.