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

Dúvida: Quais são os fundamentos da programação?

learn the fundamentals to become a better programmer, > um bom programador sabe bem os fundamentos

Ok, está entendido, porém, quais são esses fundamentos que todo sênior de YouTube falam, sou um estagiário front-end um futuro programador Rust que está desesperado em se tornar um bom, ou melhor um exemplar programador que domina os fundamentos, ops, eu não sei eles...
Algoritmos? Estruturas de dados ? design patterns?, alguém me fala quais são os fundamentos.
Por um bom tempo da minha carreira ( 1 aninho), tentava buscar o máximo de conhecimento em um curto espaço de tempo para aplicar o que eu aprendi, dominei o Next.js Vue.js e você sabe o resto da Stack, porém sempre com um vazio de não saber os fundamentos, será que e como saber alocar memória ? , deixar o front não consumir muita memória além do esperado?, será que e remover as classes inúteis do css ?, sinceramente... , não sei, talvez será que e usar as estruturas de dados para deixar tudo mais liso, não sei..., já sei..., não verdade não esquece.
ah sim!, talvez seja dominar uma linguagem low level, talvez possa ser.
alias quais são os fundamentos?

Carregando publicação patrocinada...
13

Vou começar dando uma informação que as pessoas não entendem sobre esses títulos, e isso não deixa de ser um fundamento de carreira. Fundamento não é só aprender programação.

Ao contrário da crença popular, ser júnior não é saber quase nada. É saber quase tudo. Ainda com falhas, e sem a experiência necessária para aplicar bem, sem ser produtivo, precisando de apoio. Mas não é não saber, quem não sabe é no máximo trainee, talvez até aprendiz.

Como o próprio nome diz, fundamento é algo básico, não é avançado. É algo de baixo, algo que começa antes da pessoa aprender programação. Sênior é um título que se dá para pessoas experientes, que estão na parte de cima da carreira, não na de baixo. Fundamento é algo que tem chance menor de usar diretamente, que serve para sustentar outras coisas.

O fundamento é saber o que vem antes da computação. É saber os termos corretos das coisas  (as pessoas não sabem o que é uma API, muito menos ABI). Não deixa de ser fundamento ter comprometimento com o acerto e não com o erro. Fundamento é também a atitude certa.

Eu já vi gente falando que o termo certo não importa (atitude errada). Mas se a pessoa usa o termo atributo onde não cabe ou pelo menos não sabe que está usando em contexto errado e que faz sentido em outro, ela vai usar errado aquilo (outro exemplo). E ela vai programar mal porque ela não dá valor para ontologia, taxonomia, dialética (viu como comunicação e expressão é importante?). Sem isso a pessoa não dá nome certo para as coisas. Não entende bem o que é aquilo que ela está criando. Não cria seus objetos de forma coerente, que é todo o propósito de um paradigma (secundário, outro erro por falta de fundamento) inteiro. Não é piada que uma das coisas mais difíceis da computação é dar nomes para as coisas. O termo correto ajuda a entender o problema.

Mas eu sei que as pessoas querem lista. Um dia eu farei uma lista, mas preciso de tempo e cuidado para errar pouco.

Vou te dar um exemplo do que muita gente coloca como fundamento e não é: orientação a objeto. Não é fundamento porque é avançado, não é fácil fazer certo, precisa de experiência e dá para viver sem, por exemplo não é usado em Rust. Se começar aprender cedo demais, vai aprender errado, vai treinar esse erro, e adivinha o que vai acontecer no futuro?

Vão colocar na lista a "lógica de programação". Eu entendo isso, tem até livros com esse título. Mas em inglês sequer têm esse termo e nos livros daqui não definem claramente o que é isso, ou define o que é construir algoritmos, o que é programar. Percebe como é fácil ter falhas e sem todos os fundamentos, até o que vem antes da programação, a pessoa deixa de ser questionadora e aceita receitas de bolo? Quem segue receitas de bolo, que alguns chamam de "boa prática" despreza os fundamentos. O conceito é fundamento. O termo é equivocado.

Por que você acha que ultimamente surge tanta coisa nova mal definida e até com nome errado (tipo serverless, NoSQL, responsivo, etc.)? Falta ter gente que se dedica aos fundamentos para tornar essas coisas fundamentadas. O mercado não entende de fundamentos.

Pela falta de fundamento as pessoas adotam web onde poderia fazer algo melhor. Ok, não é só por isso, mas ajuda. Muitas vezes falta completo entendimento do fundamento e saber aplicá-lo corretamente, algo que muita gente com título de sênior não sabe, o que faz-se questionar o título.

Fundamento se aprende um passo de cada vez. Um que aprende puxa o outro.

Eu dei uma resposta falando sobre isso.

Também será útil: https://pt.quora.com/Quais-conhecimentos-complementares-al%C3%A9m-de-l%C3%B3gica-de-programa%C3%A7%C3%A3o-voc%C3%AA-recomendaria-para-algu%C3%A9m-que-est%C3%A1-aprendendo-a-programar. E mais uma: https://pt.quora.com/Qual-%C3%A1rea-da-programa%C3%A7%C3%A3o-voc%C3%AA-acha-que-%C3%A9-mais-adequada-a-um-iniciante/answer/Antonio-Maniero.

E se quiser mais veja o que tem de mais votado no SO e SOpt (nem tudo mais votado é o melhor, mas tem pouco erro lá, não é como o Reddit que o mais votado você faz o contrário). O meu perfil é de respostas principalmente sobre fundamentos. Pode ser pelo menos um começo.

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).

2

Ja dei uma estrela no seu repo, sua resposta foi uma maravilha, esse vai ser o meu começo obrigado amigo, serei um bom programador Rust no futuro que domina bem os fundamentos <3

4
3
3

Programe de verdade!!! Deixe de ser um desenvolvedor web e se torne um programador de computadores!

Aqui está uma pequena lista de livros para começar a explorar os fundamentos. Você vai ver a maioria durante um curso de computação.
Você pode encontrar todos eles por ai na internet. Na internet você também pode consultar a grade dos melhores cursos de computação do Brasil e do Mundo, muitas inclusive com a bibliografia sugerida.
Estas são algumas suegestões recorrentes!

  1. Abelson & Sussman, Structure and Interpretation of Computer Programs
  2. Knuth, The Art of Computer Programming && CLRS, Introduction to Algorithms
  3. K&R, The C Programming Language
  4. Stevens, TCP/IP Illustrated
  5. Stevens, Advanced Programming in the UNIX Environment
  6. Tanenbaum, Modern Operating Systems
  7. Brooks, The Mythical Man-Month: Essays on Software Engineering
  8. Hennessy & Paterson, Computer Organization And Design
  9. Okasaki, Purely Functional Data Structures
2

Olha @LucasLeao, já tivemos uma série de excelentes respostas aqui que concordo totalmente, mas deixo meus 50 centavos também que uma lista que construi com base em várias outras fontes: Os Principais Fundamentos da Programação.
Leve em consideração a publicação que escrevi e todos os comentários dela, lá tem diversos esclarecimentos (como o ponto do maniero sobre Lógica de Programação).

Mas entenda, fundamentos precisam ser entendidos, levados em conta, mas nem sempre é o que você irá trabalhar. Entenda que você entende o que faz com os fundamentos, sem os fundamentos você só faz. E só fazer não significa que é fazer certo. A pior sensação é só fazer copiando da internet por que alguém falou pra fazer ou pior é você falar que não dá pra fazer algo porque você não entendeu e este algo não existe por aí. Entender os fundamentos, levar eles a sério e a partir daí você passar a trabalhar melhor no que faz, é realmente por aí o caminho do crescimento no mundo do desenvolvimento.

Espero ter contrbuído mais um pouco depois de tantas outras grandes contribuições aqui!