Executando verificação de segurança...
7

[Dúvida] - big O

Fala pessoal, há um tempo escuto falar de bigO. Atualmente estou cursando o 3 semestre da faculdade de ADS e voltei a ver assuntos relacionados a algoritmos e estrutura de dados. Também assisti um vídeo no canal do lucas montano sobre o assunto e me surgiu uma dúvida…

Até que ponto é importante um desenvolvedor júnior saber ou se preocupar com bigO?

Por exemplo, minha linguagem mais forte é javascript, como muitos que começaram na programação de 2019 para cá, acredito que a grande maioria foi se direcionando para o frontend.

Porém, resolvi somente agora aprender PHP e estou treinando alguns algoritmos para treinar minha lógica de programação enquanto aprendo a sintaxe da linguagem. O mais interessante é que mesmo em um desafio de encontrar números primos estou tentando aplicar os conceitos de bigO, criando um código de O(n) ou O(sqrt(n)) e por aí vai.

Então gostaria que algum dev mais experiente me ajudasse com essa dúvida. Vale a pena se preocupar em fazer um algoritmo de qualidade ou por agora isso não é tão importante? Considerando, ser um dev que ainda nem conseguiu seu primeiro trampo.

E outra, quando é melhor começar a se preocupar com isso?

Carregando publicação patrocinada...
3

Big O é fundamento, não é algo avançado como alguns acham. É simples, fácil e aprende rápido. Se a pessoa não der conta disso, ela terá sérios problemas na área, não por isso, mas já mostra que ela não consegue priorizar e aprender outras coisas. Não tem porque deixar de lado. O erro "aceitável" é a pessoa nunca ter ouvido falar.

Eu conto uma anedota sobre quando fui palestrar há 5 anos em um evento e ao final em mesa de bar o coordenador falou pra mim "em 15 anos trabalhando na área nunca usei essa tal de complexidade de algoritmo que você falou na palestra", desdenhando como se isso não fosse importante, e eu respondi "em 35 na área eu nunca deixei de usar um dia sequer". Claro que só depois que aprendi. Claro que isso ficou tão intuitivo que eu mal penso, é automático, a não ser em algum caso excepcional.

Em alguns casos faz diferença brutal. Por isso eu coleciono histórias sobre como fiz sistemas ficaram centenas ou milhares de vezes mais rápido, como uma mudança muito pequena. Sou gênio? Não, só fiz o arroz com feijão, que muita gente não sabe e faz errado.

Hoje é mais fácil errar, porque o computador está tão rápido que em vez de fazer em uma fração de segundo leva alguns segundos e a pessoa está bem com isso. Ou em vez de levar segundo leva 1 hora e a pessoa diz que não tem como fazer melhor que isso, e acaba sendo "aceitável".

Obviamente que se o júnior falha nisso, o sênior de verdade perto dele, se existir, vai corrigir (dizem que aquele cara da anedota  acima era sênior). Mas é melhor se ele não errar. E é assim que logo ele será pleno, porque não tem um marco que determina isso, ele vai construindo o conhecimento e ganhando experiência para aproveitar melhor o que aprende.

Se está na sua frente, por que não aprende logo?

Não precisa dominar academicamente, eu não sei nesse nível, mas ninguém precisa saber tanto assim na maioria dos casos, é para ser engenheiro, não para ser cientista.

Mesmo que esteja fazendo algo que seja um "tanto faz", faz certo, treine o certo, não o erro. Até porque quem estuda isso sabe que para volumes de dados pequenos importa pouco, e até o que a matemática mostra pode não ser a realidade por ter variáveis demais que afetam o resultado final (a matemática pode mostrar certo, mas é tão complicado que quase ninguém faz, engenheiros nunca fazem, até por ser irrelevante nesses casos).

No mínimo você terá um diferencial. Não quero nem responder isso, mas se pergunte, por que vai deixar de aprender algo que pode ser útil, que pode mostrar que sabe mais que os outros? De mostrar que tem atitude e vai atrás de conhecimento, independente dele ser mais ou menos útil.

O tempo que gastou pensando e perguntando sobre isso já podia ter aprendido boa parte do que precisa.

Um onte de gente entrando na fila para aprender a última ferramenta e 1 pessoa para aprender algoritmos

Faz sentido para você?

Espero ter ajudado.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

em 15 anos trabalhando na área nunca usei essa tal de complexidade de algoritmo que você falou na palestra"

Sempre tem um que solta uma perola dessa. Incrível.

2

Sobre esse assunto, já escrevi com mais detalhes aqui, mas vale citar um trecho relevante:

Complexidade de algoritmos é uma daquelas coisas que vc só percebe que faz diferença quando vc conhece. Quem não conhece não vai perceber, na verdade sequer vai chegar a conceber que aquilo pode fazer alguma diferença. Exagerando um pouco, é como se o Tarzan dissesse que pode ir de cipó pra qualquer lugar e isso é o suficiente, pois ele não conhece nenhum outro meio de transporte, e portanto não consegue nem imaginar que há como ir mais rápido.

E complementando o que já disseram, isso é fundamento (conhecimento básico, e não avançado). É importante pelo menos ter uma noção. Uma "vantagem" é que hoje o nível está tão baixo, e o desprezo pelos fundamentos é tão grande, que só de saber um pouco sobre o assunto já te deixa acima da média...