历史

理论基础

结构化程序理论可做为结构化编程的理论基础,结构化程序理论中提到利用循序、选择及重复这三种组合程序的方式,可以表示所有可计算函数。上述的三种结构已足以表示CPU中的指令周期,也可以表示图灵机的运作,以此观点来看,处理器所运行的指令可视为是某种“结构化程序”,虽然整个程序可能不是一个结构化程序。一般都认为结构化程序理论是归功于伯姆和贾可皮尼于1966年发表的论文,其中一个原因可能是戴克斯特拉引用过此论文。结构化程序理论未提及如何撰写结构化程序,也没有提到结构化程序的分析,后来1960至1970年代时,戴克斯特拉、罗伯特·弗洛伊德、东尼·霍尔等计算机科学家在此领域有许多的贡献。

争议

结构化编程中一项重要的原则是减少甚至禁止goto指令的使用,不过不是所有计算机科学家都赞成禁止使用goto指令。高德纳赞成编程时需考虑可读性,但他不赞成禁用goto指令。在其1974年发表的论文《使用goto指令的结构化编程》(Structured Programming with Goto Statements)中,他提出了一些程序,使用goto指令可以使得程序更清楚而有效率,也不会牺牲程序的可读性。高德纳提出了一个较松的结构限制要求:将程序以流程图表示,前进的分支在流程图的左侧,倒退的分支在流程图的右侧,所有分支均不得交叉。

结构化编程在1970年有很大的进展,IBM的研究员哈伦·米尔斯(英语:Harlan Mills)将结构化编程应用在某报研究文件索引系统的开发,此计划相当成功,因此许多公司开始使用结构化编程,不过戴克斯特拉评论米尔斯使用的方式和一些已发表论文中的方式不同。

到1987年时在计算机科学领域仍有针对结构化编程的争论,弗兰克·鲁宾发表了一篇论文《“goto有害论”是有害的》("GOTO considered harmful" considered harmful),引发许多的反对,戴克斯特拉本人也批评鲁宾及其追随者的论点。

影响

在二十世纪末时绝大多数的计算机科学学者均已同意使用结构化编程的好处,原来缺乏程序结构的高级编程语言(如FORTRAN、COBOL及BASIC)也都已加入此特性。