En computació, una subrutina o subprograma, com a idea general, es presenta com un subalgorisme que forma part de l'algorisme principal, el qual permet resoldre una tasca específica. Alguns llenguatges de programació, com Visual Basic, .NET o Fortran, utilitzen el nom "funció" per referir-se a subrutines que retornen un valor.
En llenguatges programació diferents una subrutina pot ser anomenada procediment, una funció, una rutina, un mètode, o un subprograma. A vegades s'utilitza el terme genèric unitat exigible.[1]
Una subrutina en ser cridada dins d'un programa fa que el codi principal es detingui i es dirigeixi a executar el codi de la subrutina, en canvi quan es parla d'una macro, el compilador pren el codi de la macro i l'implanta al lloc on va ser escrita la macro, augmentant així el codi font i per tant l'objecte.
Maurice Wilkes, David Wheeler, i Stanley Gill se'ls atribueix la invenció d'aquest concepte, que van denominar-lo com una subrutina tancada,[2][3] en contrast de la subrutina oberta o macro.[4]