Primeiro, quero dizer que estou acostumado a fazer Programação Procedimental como meu hobby - estou tentando aprender OOP em algumas línguas e entender a teoria , mas não a prática.
Eu tenho um projeto de estimação que eu queria construir, especificamente em PHP com um back-end de banco de dados (não ligava para qual). Meu principal motivo foi o uso do aplicativo em qualquer dispositivo; portanto, um WebApp parecia a escolha lógica.
Entendo que, para criar PHP WebApps sustentável, ele deve usar OOP, Classes, Frameworks, Bibliotecas, etc. Isso parece lógico, então decido experimentar alguns dos mais populares. No entanto, depois de um fim de semana inteiro tentando e tentando passar pelos tutoriais, fico confuso e frustrado tentando adaptar os tutoriais ao meu pequeno projeto.
Decidi, principalmente para uma prova de conceito, criar o aplicativo em outro programa (Microsoft Access) e atingi meus principais objetivos em apenas algumas horas - exceto a Web Part.
Minha pergunta é: devo seguir o caminho do que sei e tentar implementar práticas de codificação corretas ou devo começar com as boas práticas de codificação e tentar abrir caminho? Para este projeto, eu gostaria que fosse Open Sourced no GitHub, para que eu estivesse aberto a outras pessoas que usem e alterem meu código, mas também sei que, se o código for mal escrito, seria difícil reunir codificadores para ajudar.
fonte
Respostas:
As melhores práticas são principalmente sugestões e propostas reunidas com a experiência para ajudar a tornar os projetos mais fáceis *.
Os principais aspectos deste IMHO são a parte da experiência. Embora essas práticas recomendadas sejam boas maneiras de as pessoas com mais experiência compartilharem com os iniciantes, acho que ainda precisamos de um nível mínimo de experiência para entender realmente o que torna essa prática recomendada. Fazer o contrário equivale a segui-los cegamente como o estado de direito que, no final, acho que vai atrasar seu aprendizado, à medida que você lentamente deixa os outros pensarem por você.
De qualquer forma, a coisa mais importante absoluta que um projeto de software faz para mim é ... bem ... finalizá-lo, enviá-lo ... enfim, fazê-lo funcionar!
Qualquer coisa antes desse ponto é vaporware, uma invenção da sua imaginação. Somente quando você tem algo que funciona, você pode realmente avaliar se é lento, difícil de manter, difícil de testar etc. de uma maneira que facilite alcançar esse objetivo.
Então, sim, comece com o que você sabe primeiro, tome nota das coisas difíceis que você faz. Quando você bate em uma parede, dê um passo para trás e olhe para a parede, aprenda do que ela é feita. Em muitos casos, você perceberá que VOCÊ é a raiz do problema. Sua falta de compreensão de alguma parte do problema que você está tentando resolver, sua falta de conhecimento sobre como aproveitar melhor as ferramentas que possui ou sua ignorância de outras ferramentas que ficam bem debaixo do seu nariz o tempo todo, mas não estavam prontas para inicie seu domínio.
Ao mesmo tempo, continue lendo sobre novas maneiras de fazer as coisas. Leia essas práticas recomendadas e tente verificar se elas se aplicam a algo que você está achando difícil em seu projeto. Caso contrário, lembre-se da existência deles e revise-os de tempos em tempos. Fique curioso. Com o tempo, você verá que as observações feitas acima apenas clicam naturalmente com o conhecimento adquirido aqui.
Por fim, experimente o que aprendeu e veja se isso simplifica as coisas. continue assim e, eventualmente, você lerá as melhores práticas para o que elas são. Apenas conselhos simples de pessoas que sofreram e aprenderam uma maneira de facilitar. Você pode até discordar de alguns deles e ver que seu caminho realmente funciona melhor para você. Mas sem o conhecimento você está apenas andando cego.
boa sorte
fonte
TL; DR
Você nunca saberá tudo. Sempre há mais profundidade e amplitude em cada "coisa" individual que você pode conhecer. Aprenda à medida que avança. Aplique as "melhores práticas" que você acha relevantes agora. Cometer erros. Apenas tente evitar cometer erros realmente caros . Encontre mentores se o seu projeto pode levar a erros dispendiosos.
E agora a resposta longa ...
1. "O software de trabalho é a principal medida de progresso." ( Manifesto ágil )
Se você pode ver as margens do seu conhecimento, isso é incrível! Prossiga pelas bordas! Continue aprendendo! Mas lembre-se, você pode aprender e analisar para sempre .
Construa algo.
2. Aprenda e cometa erros; mas não faça coisas "ruins". *
Continue empurrando os limites do seu conhecimento / habilidade. Você vai cometer erros. Você pode aprender com eles. Mas você não precisa ser imprudente .
O tempo gasto em busca e trabalho com desenvolvedores e mentores mais experientes deve aumentar proporcionalmente ao valor comercial e ao perfil de risco do projeto.
Se você está criando uma pequena CLI para si mesmo : faça com que funcione da maneira que quiser.
Se você está escrevendo o portal da web de um banco: rodeie-se de desenvolvedores muito experientes.
3. "Boas práticas" devem ser escritas entre aspas e faladas com uma piscadela.
As "práticas" são promovidas para as "melhores práticas" quando elas são bem-sucedidas na realização do X em pelo menos alguns casos. Alguém reconhece o benefício da Prática A por obter o Benefício X e declara que é uma "melhor prática" na Internet. Outros concordam - geralmente por um bom motivo. Mas, a partir desse ponto, geralmente perdemos de vista por que algumas práticas são "melhores práticas" e outras são "antipadrão" ou "fedido".
O problema é que uma "melhor prática" nunca é egoísta. Os "antipadrão" não são diabólicos por si só. E, mesmo um "fedor" às vezes vem da podridão. Às vezes, esse fedor é apenas um queijo chique e delicioso ...
Você não pratica coisas como "injeção de dependência" (DI) porque "injeção de dependência" é inerentemente valiosa para os negócios. Não é nem remotamente essencial para criar um produto funcional. Realiza algo que você talvez queira no seu produto final. Mas também pode fazer com que seu trabalho demore mais, sem nenhum benefício ...
Hmm...
Então, você deve seguir as "melhores práticas"? Mesmo se você não os entender? ... Err ... sim. Eu quero dizer não. Mas sim. Porém, somente aqueles que realmente se aplicam a você e ao seu software e a sua finalidade.
Invoque o POAP ! (Sim. Meu blog.)
Portanto, você pode não entender completamente todas as nuances da DI, por exemplo. Mas, se você entender a intenção, saberá se "deve" usar o DI e entenderá implicitamente melhor o DI.
E, depois de lançar o produto, você pode refletir se o DI (ou o que seja) foi realmente benéfico. Se sim, articule o porquê por escrito. Se não, articule por que, por escrito ...
Leitura de bônus / um pouco relevante:
A paralisia da análise é uma coisa. Você precisa analisar e aprender; mas você também precisa fazer as coisas. Saldo.
Você pode sempre se sentir como um programador de cowboys .
* Você realmente vai cometer erros ruim se você fizer alguma coisa digna de nota. Mas você é humano, presumo. Então, perdoamos você antes do tempo ... Ou, pelo menos, eu o faço. Talvez. ... Bem ... Vamos ver.
fonte
Talvez tente o seu melhor, mas ainda envia alguma coisa? Existem duas forças diferentes entre como os usuários avaliam a qualidade e o apelo de um produto e como os desenvolvedores por trás dele avaliam a qualidade do código. Tente tornar essas duas forças o mais harmoniosas possível. Focar demais um em detrimento do outro é geralmente como você acaba com as rotas mais contraproducentes.
fonte
Bem, antes de tudo, eu sugeriria que a adoção de boas práticas de codificação não é uma farsa ... O truque é entender o objetivo de cada prática e como implementá-la adequadamente.
Os ambientes de desenvolvimento rápido de aplicativos são sedutores, porque você pode fazer muito em pouco tempo. Criei um sistema de contabilidade inteiro no Access uma vez. Mas você mesmo disse: não é possível levar um aplicativo como esse para a Web sem ser reescrito, e as ferramentas necessárias são realmente diferentes.
Há razões pelas quais ninguém mais usa ferramentas de design visual como o Access ou Visual Basic. Eles tendem a isolar você do código que realmente realiza alguma coisa. O acesso é uma ferramenta excelente, mas requer exatamente o que os aplicativos da Web foram projetados especificamente para evitar: instalação. A personalização de sua aparência pode ser difícil; mesmo se você não precisar dele na Web, um aplicativo do Access sempre se parecerá com qualquer outro aplicativo do Access. A maioria das pessoas que escrevem seu primeiro aplicativo do Access não sabe o suficiente para escrever um bom aplicativo, e o Access facilita a gravação de um aplicativo ruim.
Então, agora você está resignado a aprender uma nova tecnologia para colocar seu aplicativo na web. Você deve construí-lo da maneira certa desde o início? Claro. Mas aprender um novo ambiente de desenvolvimento e filosofia é como aprender qualquer outra coisa; você precisa agitar por um tempo para acertar as coisas.
Por isso acho que você colocou uma falsa dicotomia. Ninguém aprende todas as "melhores práticas" primeiro. Eles os aprendem à medida que avançam. Mas, para ser produtivo em qualquer linguagem de POO, acho que você precisará conhecer um pouco de POO, ou pelo menos como as aulas funcionam fundamentalmente.
Pelo que vale, não acho que o PHP seja sua melhor escolha. O PHP é atraente porque é "superficial", o que significa que você não precisa saber muito para escrever um programa de trabalho. As melhores práticas são deixadas em grande parte para o desenvolvedor, o que significa que o PHP não irá ajudá-lo a escrever programas "bons". Isso não é uma coisa ruim necessária, mas significa que, como o Access, você também pode estar deixando o PHP para uma plataforma mais robusta.
fonte
Considere OOP como apenas outro padrão que você pode aplicar no momento certo. OOP não é uma estrutura que possa resolver metodicamente todas as tarefas. Tal coisa não existe na engenharia de software.
Observe também que o que as pessoas afirmam ser boas práticas às vezes é questionável. Eu sempre vi desenvolvedores inexperientes adotarem padrões de programação muito complicados, desnecessários para o problema em questão. A complexidade do código deve ser apropriada para a complexidade do problema. Simplicidade é um valor importante.
Artigos na web, declarações de especialistas do setor e conselhos de colegas seniores podem muito bem estar errados. Eu já vi isso muito.
Portanto, recomendo que você aplique a solução mais simples que resolva seu problema. Provavelmente, isso abrangerá o uso de uma das estruturas populares em seu espaço. Dentro dessa restrição, você pode escolher livremente que tipo de código deseja. Não pense simplesmente que a maneira de fazê-lo é apropriada para o seu caso.
Além disso, entenda por que certas técnicas são recomendadas. Por exemplo, OOP é sobre encapsulamento. Você pode encapsular de outras maneiras (os procedimentos também são sobre encapsulamento).
Um exemplo negativo: às vezes as pessoas escrevem uma camada de acesso a dados para abstrair o banco de dados. Aqui, a essência desse padrão é tornar-se independente do armazenamento de dados concreto e expor uma interface mais simples a camadas mais altas de código. Mas se você não precisar desses benefícios, não precisará de uma camada de acesso a dados e poderá salvar o trabalho. No entanto, muitos especialistas recomendam sempre fazer um DAL, que é uma recomendação incorreta.
Acho que é bom trabalhar com um bom código. É divertido porque você trabalha com requisitos reais em vez de atender a preocupações de infraestrutura. Se você achar que o que está fazendo é um trabalho pesado demais, é provável que tenha escolhido o conjunto errado de padrões.
fonte