The idea of subprograms is crucial in procedural languages and to a lesser extent in object-oriented languages. This is useful because the subprogram makes programming more structural: a subprogram to accomplish a specific task can be written once but called many times, just like predefined procedures in the programming language.