Sempre programei em linguagens processuais e atualmente estou me movendo em direção à orientação a objetos. O principal problema que enfrentei é que não vejo uma maneira de praticar a orientação a objetos de maneira eficaz. Eu vou explicar o meu ponto. Quando aprendi PHP e C, foi muito fácil praticar: era apenas uma questão de escolher algo e pensar em um algoritmo para isso.
No PHP, por exemplo, era importante sentar e pensar: "bem, apenas para praticar, deixe-me criar um aplicativo com uma área de administração onde as pessoas possam adicionar produtos". Isso foi bastante fácil, era questão de pensar em um algoritmo para registrar algum usuário, fazer login no usuário e adicionar os produtos. Combinando esses recursos com o PHP, foi uma boa maneira de praticar.
Agora, na orientação a objetos, temos muitas coisas adicionais. Não se trata apenas de pensar em um algoritmo, mas de analisar os requisitos mais profundamente, escrever casos de uso, descobrir diagramas de classes, propriedades e métodos, configurar injeção de dependência e muitas outras coisas.
O ponto principal é que, na maneira como aprendi a orientação a objetos, parece que um bom design é crucial, enquanto nas linguagens processuais uma idéia vaga era suficiente. Eu estou não dizer que em linguagens procedurais podemos escrever bom software sem projeto, só que por causa da prática é viável, enquanto em orientação a objetos não parece viável para ir sem um bom design, até mesmo para a prática.
Isso parece ser um problema, porque, a cada vez que vou praticar, preciso descobrir vários requisitos, casos de uso e assim por diante, parece não ser uma boa maneira de melhorar a orientação a objetos, porque isso exige para que eu tenha uma idéia inteira de um aplicativo toda vez que vou praticar.
Por isso, qual é uma boa maneira de praticar a orientação a objetos?