Olá Habr!
Trago à sua atenção uma tradução do artigo “
Três Paradigmas ”, de Robert C. Martin (tio Bob).
Nos últimos 40 anos, as tecnologias de hardware aumentaram o poder de computação de nossos dispositivos em mais de vinte ordens de magnitude. Agora, jogamos o Angry Birds em nossos telefones, que têm o poder de processamento de um supercomputador refrigerado a freon dos anos 70 do século passado.
Mas, nos mesmos 40 anos, a tecnologia de software não mudou muito. No final, ainda usamos os operadores if, while e loops de atribuição que usamos nos anos 60. Se eu pegasse um programador de 1960 e o trouxesse aqui para que ele pudesse sentar no meu laptop e escrever código, levaria 24 horas para se recuperar do choque, mas ele poderia escrever esse código. Os princípios não mudaram muito.
No processo de escrever programas, três coisas mudaram. Não estou falando de hardware, nem de velocidade do computador nem das incríveis ferramentas que temos. Eu quero dizer o próprio código. Três coisas mudaram no código. Você pode chamá-los de paradigmas. E todos foram "descobertos" há mais de uma década, mais de 40 anos atrás.
* 1968 -
Programação estrutural .
Edsger Dijkstra escreveu seu artigo: “Sobre os perigos do operador Go To” e vários outros documentos e artigos que propõem abandonar a abordagem Go To desenfreada, substituindo-a por ferramentas como if / then / else e while loops.
* 1966 -
Programação orientada a objetos .
Ole-Johan Dahl e
Kristen Nyugor , estudando a linguagem
Algol , “Descubra” objetos e criam a primeira linguagem orientada a objetos, Simula-67. Apesar de essa conquista ter muitas perspectivas, ela não trouxe novos recursos ao nosso código. Além disso, ele removeu um. Afinal, com o advento do polimorfismo, a necessidade de ponteiros para funções desapareceu, mas na verdade desapareceu.
* 1957 -
Programação funcional .
John McCarthy cria o Lisp, a primeira linguagem funcional. Lisp foi baseado no
cálculo lambda criado pela Igreja Alonzo nos anos 30. Embora existam muitas perspectivas de programação funcional, há uma enorme limitação em todos os programas funcionais. Eles não usam atribuição.
Três paradigmas. Três limitações. A programação estrutural define as regras para a transferência direta de controle. A programação orientada a objetos introduz regras para a transferência indireta de controle. A programação funcional introduz restrições na atribuição. Todos esses paradigmas tiraram algo. Nenhum deles adicionou novos recursos. Cada um deles aumentou os requisitos e reduziu as oportunidades.
Podemos criar outro paradigma? Há mais alguma coisa que possa ser removida?
Por 40 anos, não houve novo paradigma, então talvez este seja um bom sinal de que não há mais nada a procurar.
Devemos usar todos esses paradigmas, ou podemos escolher?
Com o tempo, decidimos implementá-los. A introdução da primeira programação estruturada foi possibilitada pela abolição do princípio Ir para (como recomendado por Dijkstra em seu artigo). OOP foi implementado com sucesso, substituindo ponteiros por funções em nossas linguagens modernas usando polimorfismo (por exemplo, Java, C #, Ruby). Portanto, pelo menos para esses dois, a resposta a essa pergunta é que DEVEMOS usá-los. Todas as outras opções foram excluídas ou pelo menos severamente limitadas.
Mas e a programação funcional? Devemos usar idiomas que não possuem um operador de atribuição? Provavelmente sim! Já estamos escrevendo código que deve funcionar bem em vários núcleos, e esses núcleos se multiplicam como coelhos. Meu laptop possui 4 núcleos. Meu próximo provavelmente terá 8. O após 16. Como você escreverá um código confiável com 4096 processadores lutando pelo direito de acessar o barramento?
Dificilmente conseguimos trabalhar com dois threads paralelos, sem mencionar 2 ^ n processadores.
Por que a programação funcional é uma parte importante da solução desse problema? Como esses programas não usam atribuição, o que significa que eles não têm efeitos colaterais e, portanto, não têm problemas associados à capacidade de atualização - pelo menos essa é a teoria.
Falaremos mais sobre programação funcional em futuros blogs. O que me impressiona nos três paradigmas mencionados acima são suas datas. Eles são antigos, quase mais velhos que eu. E desde que completei 16, 42 anos atrás, não havia mais novos.