Silas,
A primeira forma de se escrever programas de computador era através de comandos pelos quais se dizia o que e como fazer as etapas de um algoritmo, tendo sido denominada de paradigma imperativo.
O termo subprograma é um termo antigo e geral que caracteriza um trecho de código que pode ser referenciado/acionado por um nome e receber valores diferentes a cada ativação (parâmetros ).
Esses subprogramas podem ser classificados em procedimentos ou funções.
Um procedimento tem um uso mais associado a reutilização de código e a ideia de dividir um programa em módulos, que é uma das características da programação imperativa chamada de modularização. Um procedimento não tem obrigação de retornar valores para o programa principal, fazendo-o pela comunicação através de variáveis globais ou mecanismos de passagem de parâmetros. Um procedimento sempre retorna para a instrução seguinte a sua instrução de chamamento ou ativação.
Uma função é mais flexível e pode ser ativada em expressões e em conjunto com outros comandos, tendo a obrigação de sempre retornar um valor para o seu ponto de retorno.
Algumas linguagens mais antigas eram baseadas em procedimentos e funções, como era o cado da linguagem Pascal, por exemplo. Linguagens como Java só usam funções.
O termo método é mais recente e surgiu com o paradigma de programação orientada a objetos, estando associada a parte de uma classe que contém a lógica do que fazer, em termos de operações dentro da classe.
Em geral, método será sinônimo de uma função que está associada a uma classe ou objeto.
Severino Paiva