Como eu deveria estruturar as pastas de um projeto de software?
Tags: softwareengineering, beginners, webdev, programming
Published: 2023-12-26 19:52:56

Bom, 26/12, e provavelmente você não está interessado em código.

Mas hoje, fiz uma piada sobre a **estrutura de pastas/arquivos**, e houve quem não entendeu a referência. Então, decidi soltar uma opinião disfarçada de regra, especialmente para **VOCÊ** que tem dúvidas sobre como organizar projetos de software.

{% embed https://twitter.com/oprimodev/status/1739654510547501135 %}

### ✨ TL;DR (~~nao li e nao lerei em PT-BR~~)

_revire o GitHub de projetos famosos (tem muito no OpenSource), pra entender como devs experientes organizam o código._

### Como poderia ser resolvido?

Tudo o que penso resume-se à **prática** e **experimentação**, simplesmente porque, a menos que você esteja trabalhando com um framework altamente opinativo, dificilmente essa estrutura reflete no **desempenho** do seu aplicativo, mas sim na **experiência de desenvolvimento** ou, para falar bonito, **DX**.

As pessoas que mais têm essa dúvida são aquelas com pouca experiência prática no mundo real do desenvolvimento de software, e não estou dizendo isso por preconceito; é compreensível. E pensando nisso, por que não atacar a raiz do problema? A **experiência**.

Sempre que estou em uma conversa com algum desenvolvedor e esse assunto surge, tento esclarecer que na verdade não importa tanto o nome ou a estrutura que **EU** uso para organizar meus projetos, mas sim o quão compreensível isso é para a **minha equipe**.

Afinal, usar a mesma estrutura que o **@dan_abramov** nos projetos não significa que ele esteja perfeito agora. E não é nada contra o Dan, mas sim contra seguir cegamente receitas de bolo sem ao menos entender o que cada coisa faz.

### Ainda não entendi Primo.

Vou resumir porque isso aqui vai virar o velho testamento se deixar: seu problema não é saber a **estrutura ideal de pastas** para o seu projeto, e sim a falta de **experiência real**. Então, proponho um exercício: quer entender como os **profissionais de renome** organizam seus projetos?

Vou resumir para não virar o velho testamento: seu problema não é saber a **estrutura ideal de pastas** para o seu projeto, e sim a falta de **experiência real**. Então, proponho um exercício: quer entender como os **profissionais de renome** organizam seus projetos? **REVIRE O GIT DELES!!!**

Olhe como o **Erick Wendel**, o **Soutinho**, o **Regazio**, o **Cu & Codigo**, o **Akita** e tantos outros organizam os próprios projetos, e você vai observar padrões em comum.

Alguns desses padrões podem ser considerados **convenções**, ou seja, um conjunto de regras definido pela própria **comunidade de software**, que não afeta o funcionamento do software em si. Muitos desses padrões também são influenciados por **design patterns** e afins, mas lembre-se:

Eles não necessariamente alteram o funcionamento do código, mas simplificam a sua compreensão para o seu "eu" do futuro que vai ler esse código e, como já foi dito anteriormente, para o seu time que vai precisar dar manutenção nesse "quiabo" que você deu push direto na main.

PS.: só a titulo de exemplo, vou deixar uns repos de projetos em ReactNative aqui, pq foi o que originou esse post, mas  isso vale pra qualquer linguagem/framework ok?

https://github.com/showtime-xyz/showtime-frontend/tree/staging

https://github.com/Expensify/App

https://github.com/vanGalilea/react-native-testing

https://github.com/obytes/react-native-template-obytes

https://github.com/bluesky-social/social-app


---

🎄✨ Se você chegou até aqui, feliz festas e um 2024 de muita oportunidade e conhecimento e se precisar falar comigo, é só me procurar [escolhendo um dos meus métodos de contato](https://www.oprimo.dev/links)

Photo by <a href="https://unsplash.com/@clemhlrdt?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Clément Hélardot</a> on <a href="https://unsplash.com/photos/black-and-silver-laptop-computer-on-table-95YRwf6CNw8?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash">Unsplash</a>