O que o senhor acha que é a maior invenção da ciência da computação? Além do próprio computador, quero dizer.
Sério, antes de continuar lendo, o senhor pode parar por um momento e refletir sobre a pergunta.
Já falei antes sobre o como as chamadas linguagens modernas de programação de computadores são realmente jovense vale a pena repeti-lo para fins de contexto.
O C é mais ou menos tão antigo quanto eu; o FORTRAN é tão antigo quanto meus pais. Mas o que dizer das novas crianças do pedaço? O software TIOBE Página de métricas do TCPI fornece alguns dados sobre a popularidade das linguagens desde o ano de 2001. Considere a tenra idade de muitas das linguagens de programação mais novas e modernas:
Ruby é apenas um adolescente. O JavaScript e o PHP ainda não são atingido a adolescência ainda.
Apesar de toda a nossa conversa sobre os novos recursos sofisticados das linguagens de programação, às vezes acho que nos esquecemos de um elemento fundamental subjacente a todos eles: a humilde rotina. Veja o que diz Steve McConnell, que nos incentiva a Usar rotinas, de forma rotineira:
Além da invenção do computador, a rotina é, sem dúvida, a maior invenção da ciência da computação. Ela torna os programas mais fáceis de ler e entender. Isso os torna menores (imagine o quanto seu código seria maior se o senhor tivesse que repetir o código para cada chamada a uma rotina em vez de invocar a rotina). E os torna mais rápidos (imagine como seria difícil fazer melhorias de desempenho em um código semelhante usado em uma dúzia de lugares em vez de fazer todas as melhorias de desempenho em uma única rotina). Em grande parte, são as rotinas que tornam possível a programação moderna.
Se o senhor não tem idade suficiente para se lembrar da vida antes das rotinas, acho que James Shore deu um ótimo exemplo da diferença gritante em seu excelente artigo Qualidade com um nome:
Antes da programação estruturada:
1000 NS% = (80 - LEN(T$)) / 2 1010 S$ = "" 1020 IF NS% = 0 GOTO 1060 1030 S$ = S$ + " " 1040 NS% = NS% - 1 1050 GOTO 1020 1060 PRINT S$ + T$ 1070 RETURN
Depois da programação estruturada:
public void PrintCenteredString(string text) { int center = (80 - text.Length) / 2; string spaces = ""; for (int i = 0; i < center; i++) { spaces += " "; } Print(spaces + text); }
A humilde rotina é a espinha dorsal de toda a programação em qualquer linguagem moderna. Tenho certeza de que o senhor é o próprio modelo de um programador moderno, portanto não vou aborrecê-lo com uma longa explicação sobre por que as rotinas são uma boa ideia. O artigo original do IEEE McConnell de 1998 de 1998, aborda muito bem os fundamentos por trás das rotinas. Há também uma versão bastante ampliada desse material no Capítulo 7 do Code Complete 2.
As rotinas são tão fundamentais para a programação atual que são essencialmente invisíveis. Esse é o problema das rotinas: elas levam apenas um minuto para serem aprendidas, mas uma vida inteira para serem dominadas. Se a programação não estruturada ruim era possível, a programação estruturada ruim também é. O senhor pode escrever FORTRAN em qualquer linguagem. Lutar com a essência inefável de uma rotina é, quase que em uma primeira aproximação, o que a programação atual é:
- Qual deve ser a duração dessa rotina? Quanto tempo é muito longo? Quão curta é muito curta? Quando um código é “simples demais” para estar em uma rotina?
- Quais parâmetros devem ser passados para essa rotina? Quais estruturas de dados ou tipos de dados? Em que ordem? Como eles serão usados? Quais serão modificados como resultado da rotina?
- Qual é um bom nome para essa rotina? É difícil dar nomes. Realmente difícil.
- Como essa rotina está relacionada a outras rotinas próximas? Elas acontecem ao mesmo tempo ou na mesma ordem? Elas compartilham dados comuns? Elas realmente pertencem uma à outra? Em que ordem elas deveriam estar?
- Como saberei se o código dessa rotina foi bem-sucedido? Ele deve retornar um código de sucesso ou de erro? Como serão tratadas as exceções, os problemas e as condições de erro?
- Essa rotina deve deveria sequer existir?
Os bons programadores – independentemente da linguagem em que estejam trabalhando – entendem a importância de elaborar cada rotina com o máximo de cuidado. As rotinas em seu código devem ser tratadas como diamantes minúsculos e altamente polidos, cada um deles mais requintadamente polido e finamente lapidado do que o anterior.
Reconheço que essa não é uma visão particularmente profunda. Nem mesmo é um conselho original. Mas, se o senhor acredita, como eu, em uma praticar os fundamentos, o senhor nunca deixará de dominar a arte de escrever a rotina perfeita.
Afinal de contas, essa é a maior invenção da ciência da computação.