Os Principais Fundamentos da Programação
Quanto mais focamos em bibliotecas e frameworks, mais nos afastamos dos fundamentos que originaram estas abstrações e muitas vezes nerfamos os frameworks ao ponto de ficar sem chão quando para estes não há mais suporte e/ou ficam ultrapassados.
Não saber de tudo é uma dádiva de mentes saudáveis no mundo atual, pois quanto mais o tempo passa, mais informações são geradas e mais devemos tomar a decisão de dizer não pra muitas coisas. Vide -> Decisões, Dicas e Contribuições para Uma Carreira Melhor.
Porém, há momentos que não dizemos não, logo somos atropelados por uma avalanche de informações diárias, buscando consumir mais e mais conteúdos, correndo o risco de entrar no famoso "tutorial hell" e se sentir com a síndrome do "não sei de nada".
Entendo perfeitamente se você estiver passando por isso... acontece com todos experientes ou inexperientes, pois é muito comum nas áreas de tecnologia.
Eu preciso fazer um disclaimer: Não Sei Todos Os Fundamentos da Programação e Talvez Nunca Saiba, Contudo, Por Saber Que Eles Existem, Sempre Irei Buscar Aprender Cada Vez Mais! 😉
Por isso, não leve esta publicação como verdade absoluta, pondere, avalie e compare com outras publicações, com certeza você achará valores importantes aqui e também lá, pois você tem liberdade de escolha :)
Mas no quesito programação talvez o pensamento ideal é contra-intuítivo, pois o melhor a se fazer é focar nos fundamentos, mais do que nos resultantes destes principios.
Não saber os fundamentos pode te limitar a crescer e causar diversas dificuldades que você não saberá responder as razões disso.
De acordo com o @ThiagoPompeu em seu artigo Caro programador iniciante, fundamentos!:
O que estava me limitando era uma deficiência nos fundamentos!
Não buscar saber sobre os fundamentos é fatal para te estagnar e se parar de evoluir é o que você quer, não aprenda os fundamentos!
Deixa eu exemplifcar o que quero dizer, com o seguinte cenário:
- Uma pessoa quer resolver um problema de traduzir tudo que lê na internet.
- Daí um desenvolvedor (nós) se propõe a resolver essa dor.
- Logo este dev vai pesquisar tutoriais/cursos/stack overflow/referência na internet pra isso.
- Ele vai encontrar uma solução que pode ser criar um plugin para o browser.
- Este dev simplesmente vai copiar e colar o código e resolver o problema do cliente.
- A pessoa terá sua necessidade resolvida, mas será que o dev de fato terá a sensação de evolução? Será que a solução é boa o bastante para não quebrar em nenhum dos casos?
- Mas aí este mesmo dev ficou pensando nisso e não conseguia nem dormir direito pensando nessa situação.
- Logo este dev tomou a decisão de correr atrás dos fundamentos do que ele criou.
- Ele entendeu o que de fato é uma extensão de browser. Ele entendeu de fato o que é um browser. Entendeu mais a fundo os fundamentos do HTML/CSS/JS.
- A partir dos fundamentos, ele percebeu que existem certos limites que uma extensão deveria respeitar.
- Além disso se precisasse melhorar a extensão, trazer mais recursos ou aplicar manutenção, este dev saberia exatamente pra onde deveria olhar.
- Os fundamentos o fez dominar melhor todo o problema.
Essa é uma história minha um pouco diferente, que de fato estava com muito problema pra criar uma extensão pra mim mesmo, mas pouco sabia dos princípios que eu precisava pra que essa dor tivesse uma solução.
Foi difícil entender, mas depois que fiquei remoendo isso, tive que parar tudo que achava que sabia (frameworks, básico do básico, copiar e colar) e passei pra olhar com carinho para as coisas importantes (princípios, básico bem entendido, prática, prática, prática).
Outra coisa, saiba que os fundamentos são conceitos que se atualizam, porém com menos frequência do que as outras partes do conhecimento, por isso, os conceitos aqui descritos podem ter atualizações melhores, podem estar incompletos ou não atender o sue contexto, com isso mais uma vez deixo claro: Não leve tudo como verdade absoluta, cada caso é um caso, pegue os conhecimentos aqui e adapte a sua realidade!
O @FelipeDeschamps disse aqui que a tecnologia é como se fosse uma cebola de 3 camadas, que quanto mais próxima da camada externa (Frameworks, Abstrações, etc), mais rápida ela fica, porém, quanto mais pelo centro da cebola (Fundamentos, Princípios, etc), mais lenta e reaproveitável para outros contextos.
Vantagens em Buscar Saber os Fundamentos
- Menos alterações, mais domínio.
- Facilitar a migração entre diferentes linguagens de programação.
- Expandir suas habilidades programando.
- Se adaptar a novas tecnologias.
- Aprender a criar soluções mais robustas, eficientes e escaláveis.
- Entender como os sistemas funcionam por trás dos panos.
- Menor curva de aprendizado é igual a mais tempo sobrando! Vide -> Dicas Que Te Fazem Ganhar Tempo.
Fundamentos
-
Prática
- É fato que tecnologia tem muito do virtual, mas aprender na prática é a melhor maneira de aprender, é trazer o virtual para o real. Vide Aprender a Aprender.
-
Computador
- União da unidade física (Hardware) e a unidade lógica (Software).
-
Terminal
- Interface para comunicação via comandos entre humano e computador.
-
Sistema Operacional
- Software de controle do computador como interface para humanos.
-
- É a compreensão dos diferentes tipos de problemas e seus domínios.
-
Lógica de Programação
- É a capacidade de pensar de forma analítica para resolver problemas.
-
Algoritmos
- Conjuntos de instruções que nos permitem resolver problemas e a realizar tarefas específicas na programação.
-
Pseudocódigo
- É pseudo-linguagem de programação que está mais próxima da linguagem humana.
-
Paradigmas de Programação
- São diferentes abordagens para resolver problemas e escrever os códigos.
-
Linguagens de Programação
- São conjuntos de regras sintáticas e semânticas utilizadas para dar instruções padronizadas a um computador.
-
Gerenciamento de Memória
- São estratégias para cuidar da memória disponível, seja alocando espaços, "apagando" dados não mais utilizados, maximizando uso da memória, etc.
-
Variáveis e Constantes
- São posições nomeadas da memória usadas para guardar um valor que pode ser acessado e/ou modificado pelo programa.
-
Tipos de Dados
- São os tipos dos dados que serão armazenadas, como números, textos, lógicos, etc.
-
Entrada e Saída
- É a ideia de interação com o programa por meio de entrada de dados via alguma interface de entrada e a saída dos dados via alguma interface de saída.
-
Estrutura de Dados
- São maneiras de armazenar e organizar informações de maneira eficiente e acessível.
-
Operações Matemáticas
- São as operações matemáticas com valores númericos.
-
Operações Relacionais
- São comparações diferentes entre valores numéricos.
-
Operadores Lógicos
- São comparações entre valores lógicos.
-
Precedência de Operadores
- É a regra de precedência de acordo com a hierarquia de cada operador e a possibilidade de escolha da ordem de precedência das operações.
-
Condicionais
- É um comando ou mais comandos serem executados se uma ou mais condições forem atendidas.
-
Repetições
- Estrutura onde um conjunto de instruções é executado enquanto determinada condição é satisfeita.
-
Funções, Procedimentos, Rotinas e Métodos
- São trechos reaproveitáveis de códigos que podem extender seu código e podendo retornar e/ou alterar valores.
-
Classes
- São modelos do mundo real e com suas interações, como um carimbo por exemplo.
-
Manipulação de Arquivos
- São maneiras de trabalhar com os diferentes tipos de arquivos, como arquivos com extensão txt, json, xml, etc.
-
Erros, Falhas, Bugs, Exceções
- São exceções por qualquer tipo de fator interno ou externo e que - se possível - deverá ser tratado ou prevenido em seu código.
-
Depuração
- É averiguar o comportamento de cada parte do seu código quando em execução.
-
Testes
- São tipos diversificados de testes para prevenir ações indevidas e garantir a qualidade.
-
Segurança
- É escrever código seguro, evitando ao máximo as vulnerabilidades.
-
Boas Práticas
- São boas práticas de codificação que nascem com a maturidade ao longo do tempo.
-
Versionamento
- É versionar seus arquivos e pastas para organização e controle.
-
Módulos, Bibliotecas, Frameworks
- São formas diferentes de aproveitar códigos e acelerar o desenvolvimento.
Lembre-se
Uma casa até pode ser construída sem o fundamento e independente do material que a casa foi criada, qualquer interpérie a derrubará! - Eu mesmo hehehe.
Bora Agir?
Você tem outra ideia de fundamentos? O que funcionou/funciona pra você? Deixa aqui nos comentários e compartilhe suas experiências conosco! Se tiver sugestões de melhoria desta publicação, serão muito bem vindas!!! Muuuito obrigado por ler até aqui e espero que você possa ter aprendido os fundamentos do sucessinho aqui 💎
Edições
- 08.04.2023
- Removi dos fundamentos Objetos (É a estrutura que agrupa atributos e comportamento como representação de objeto no mundo real, ou seja, a instância de uma classe é um objeto.), pois conforme @maniero bem disse nos comentários:
...é uma definição avançada e específica para uma área e não o fundamental da computação.
- Removi dos fundamentos Objetos (É a estrutura que agrupa atributos e comportamento como representação de objeto no mundo real, ou seja, a instância de uma classe é um objeto.), pois conforme @maniero bem disse nos comentários:
Referências
- Caro programador iniciante, fundamentos!
- Síndrome do “não sei de nada”
- Liberdade na Tecnologia
- Como Aprender a Aprender
- Dicas Que Te Fazem Ganhar Tempo
- PROGRAMAR - A Matemágica Mística de Solucionar Problemas
- Decisões, Dicas e Contribuições para Uma Carreira Melhor
- A Importância dos Fundamentos de Programação
- Fundamentos de Programação - 01 - Introdução
- Fundamentos de Programação - 02 - Variáveis
- Fundamentos de Programação - 03 - Operadores e Expressões
- Fundamentos de Programação - 04 - Precedência de Operadores
- Fundamentos de Programação - 05 - Estrutura Condicional
- Fundamentos de Programação - 07 - Estrutura de Repetição
- Conhecimentos Básicos para Iniciantes em Programação | Série "Começando aos 40"
- Lógica de programação, por onde começar ? (Guia RÁPIDO de estudos completo para INICIANTES)