Por onde devo começar na programação?
- #Estrutura de dados
- #Informática Básica
- #Lógica de Programação
Olá, devs!
Após um longo tempo sem escrever artigos (o último foi em novembro passado, leia: Estou com covid, e agora?), estou de volta aqui para compartilhar as minhas impressões com algum tema que gosto e acho que é do interesse de todos os programadores, principalmente dos iniciantes.
Eu vi algumas postagens em grupos da DIO e em artigos publicados aqui falando sobre planejamento de carreira e mostrando a preocupação dos usuários, principalmente dos iniciantes, sobre por onde começar, quais são os pré-requisitos, se é obrigatório aprender antes matemática, lógica, estatística, inglês, e outras matérias não necessariamente ligadas à programação, e gostaria de dar minha opinião sobre o assunto, relacionado a alguns dos temas tratados.
Sumário
- Introdução
- Saber matemática é obrigatório?
- Onde se usa a matemática na programação?
- É preciso ter um diploma de graduação?
- A escolha da escola
- Devo fazer uma graduação para cada área que eu quero seguir?
- Qual área eu devo seguir?
- Conclusão
1 – Introdução
Pois é, pessoal.
Eu tenho visto muita gente aqui preocupada com os caminhos que deve seguir no seu aprendizado de programação, principalmente os iniciantes e aqueles em transição de carreira.
Eu tenho 61 anos e já passei por muita coisa nessa área de programação, já tive todas estas dúvidas e fiz muitas escolhas, algumas repetiria sem problema, em outras, faria tudo diferente.
Portanto, o que eu vou escrever daqui em diante se trata das minhas experiências pessoais e minhas opiniões sobre os assuntos tratados.
Muita coisa deu certo pra mim, mas cada um tem suas próprias bagagens, modo de agir e metas, portanto, as opiniões podem ser bem diferentes das minhas.
2 - Saber matemática é obrigatório?
Se o planejamento da carreira envolve trabalhar com desenvolvimento ou programação, é bom que o foco da preparação seja este, sem perder tempo com conteúdos desnecessários ou superdimensionados para a área.
Vou dar um exemplo: tem gente perguntando se precisa saber ou fazer um curso de matemática antes de começar a aprender programação. Alguns usuários acham que é preciso saber antecipadamente funções, álgebra, cálculo, estatística, lógica matemática, gráficos, essas coisas, para facilitar o aprendizado.
Na verdade, a matemática necessária para se aprender a programar é muito básica, do ensino médio mesmo. Não é preciso fazer antes uma graduação em matemática (que dura 4 anos e foca em muita teoria desnecessária para a programação), a não ser que você deseje ensinar a matéria (Licenciatura) ou seguir carreira de pesquisa acadêmica em matemática (Bacharelado).
Agora vou dar meu exemplo. Eu me graduei em Engenharia Elétrica em 1985 e em Ciências da Computação em 1995. Os dois cursos exigem uma base matemática muito pesada (com muitas disciplinas de Cálculo, Álgebra, Estatística e Física), mas isso tudo é necessário para a base teórica destes cursos.
No caso de programação (ou desenvolvimento), os cursos são mais leves, a base é mais prática e voltada para a implementação do sistema com a solução do problema codificada.
3 - Onde se usa a matemática na programação?
A programação é cheia de elementos associados com estes conceitos, mas o entendimento deles vem no tempo certo, de acordo com cada funcionalidade aprendida.
O uso mais comum da matemática na programação são as operações aritméticas básicas (soma, subtração, multiplicação e divisão) além de potenciação, porcentagem e outras simples assim.
Outro conceito da matemática muito usado em programação é o de função. Só que não é preciso saber tudo sobre funções matemáticas para entender uma função de programação, bastando apenas o conceito básico de receber um parâmetro, realizar um processamento sobre ele e retornar um resultado.
No caso de gráficos de funções, é só dar valores para uma variável e plotar em um plano cartesiano o valor resultante da aplicação da função.
A operação entre matrizes já envolve conceitos de álgebra linear, mas isso pode ser aprendido no momento em que for preciso e é no nível “massinha 1”, ou seja, conceitos de matrizes vistos no Ensino Médio.
No caso da matemática usada para análise de algoritmos, é só a parte de análise da sua ordem de complexidade, ou seja, do crescimento do tempo de execução (linear, quadrático, exponencial, logarítmico, etc.), que pode ser estudado quando for necessária esta avaliação, muitas vezes comparando-se algoritmos semelhantes.
Mesmo nas áreas em que a base matemática é mais forte, como em Ciências de Dados e IA, cuja base é a estatística, o nível exigido é aquela básico (média, moda, mediana, análise e predição linear, etc.), não sendo necessária a teoria matemática pesada da estatística, a não ser que você vá criar seu próprio modelo de deep learning, o que nunca é o caso, pois usamos ferramentas prontas com os modelos embutidos. No caso de predições, é preciso conhecer conceitos de interpolações de funções (lineares, cúbicas, etc.).
A coisa começa a ficar mais complexa quando vai se trabalhar com jogos, mesmo os mais simples, pois nesse caso, é preciso desenhar os elementos do jogo em um ambiente 2D, calcular movimentos e trajetórias, colisões, etc.
E no caso de jogos 3D, subimos vários degraus no uso da matemática na programação, pois é preciso ter um bom conhecimento de álgebra linear e espacial 3D, além de técnicas de Computação gráfica para a movimentação dos elementos do jogo, das câmeras e da iluminação.
O mesmo conhecimento pode ser necessário para a programação de robôs articulados, pois é preciso calcular os movimentos precisos das articulações dos robôs, quando é preciso ter um grande conhecimento de álgebra linear e espacial 3D.
O ápice do uso da matemática em programação é usado para enviar um foguete ao espaço para atingir um determinado astro, realizar operações lá e retornar à Terra.
Neste caso, é bom ter todas as bases matemáticas possíveis e mais algumas!
No caso dos jogos, robôs e aeronáutica, além da matemática, é necessário ter um bom conhecimento de Física, pois nos movimentos é preciso simular velocidade, aceleração, gravidade e colisões de forma bem realista para o jogo não ficar esquisito nem ocorrerem acidentes, no caso de robôs e foguetes.
A Simulação Digital é a área que modela e cria ambientes digitais para se fazer testes simulando a realidade antes de se construir um protótipo real de alguma coisa (processo, edifício, carro, avião, foguete, etc.). Aí, também é preciso muita matemática e física!
4 – É preciso ter um diploma de graduação?
Atualmente, um diploma de graduação (ou até pós-graduação) pode não ser exigido para a contratação de um bom profissional em desenvolvimento, mas é um bom diferencial, principalmente em grandes empresas de renome internacional, como as do DIO Global.
Muitas vezes, bastam certificados de comprovação de cursos requeridos realizados, bom portfólio, uma prova prática e uma boa entrevista para o candidato ganhar a vaga.
5 – A escolha da Universidade
Primeiro, a gente deve procurar as oportunidades gratuitas de ensino de qualidade, caso não encontre, se procuram aquelas de qualidade e pagas.
Em geral, as faculdades e universidades pagas são muito caras para o estudante comum e existem alternativas excelentes de instituições de ensino gratuito que são semelhantes (e até melhores) às pagas mais conhecidas.
Exemplos bons são as Universidades Federais (as UFs) e os Institutos Federais de Educação (os IFs).
Eu me graduei e fiz Pós-graduação em Engenharia Elétrica na UFCG (Universidade Federal de Campina Grande) e ela sempre foi muito bem conceituada nacionalmente nestes 2 cursos (e em outros), desde quando ainda fazia parte da UFPB (Universidade Federal da Paraíba). Garanto que esta universidade (e a maior parte das federais) não fica devendo nada às universidades pagas do Brasil.
Além disso, o fato de ela (e muitas outras) estar fora do eixo Sul/Sudeste não a torna menos importante ou eficiente do que as instituições mais conhecidas nacionalmente
6 – Devo fazer uma graduação para cada área que eu quero seguir?
Eu já fui professor e é senso comum (e recomendável!) que o aluno dedique de 1 a duas horas de estudo fora da sala de aula para cada hora de aula na escola, seja revendo os conceitos ou realizando atividades práticas.
Fazer, ao mesmo tempo, mais de um curso de graduação, pode não ser uma boa escolha de foco. Fazer 2 cursos em paralelo pode resultar em pouco tempo fora da escola para embasar os conhecimentos vistos em aula em um curso ou em ambos. Além disso, o tempo fora da sala usado para um dos cursos pode reduzir o tempo de aula do outro curso, ou seja, um deles vai atrasar o outro.
Na minha opinião, é melhor levar só um deles adiante, concluir, e depois iniciar o outro. Assim, pode-se ter a chance de terminar um deles, arranjar um trabalho com a profissão obtida, até para custear um segundo curso.
Melhor ainda, ao invés de investir em uma segunda graduação, seria fazer uma pós-graduação que associasse o assunto do primeiro curso ao do segundo. Por exemplo: concluir o curso de Sistemas de informação (ou Análise e Desenvolvimento de Sistemas - ADS) e fazer uma pós em Segurança da Informação ou em Ciência de Dados.
Conseguir a aprovação em um curso não é difícil, basta ser um aluno aplicado nas aulas e nos estudos fora da sala, acompanhar o conteúdo e tarefas regularmente, sem deixar acumular e escolher um curso que traga motivação e case com as habilidades e interesses. E isso mesmo nas instituições consideradas mais difíceis!
Por isso, a escolha do curso é importante! Afinal, ao virar profissional, você vai trabalhar com aquele assunto pelo resto da vida!. Passar 4 anos na Universidade tentando aprender a fazer o que não gosta não é o maior problema, mas sim passar o resto da vida fazendo o que não gosta!
Desde a época de colégio (incluindo alfabeti\zação!), eu nunca fui reprovado em nenhuma disciplina dos cursos que fiz na vida e só fiz prova final em 1 delas - mas foi para saber como era! :-)
E não sou diferenciado em nada. Apenas escolhi os cursos que me empolgavam, para os quais eu tinha extrema facilidade (com os cálculos e a lógica) e sempre fui um aluno muito aplicado!
Basta isso!
7 – Qual área eu devo seguir?
Uma das primeiras preocupações do iniciante ou de quem está fazendo transição de carreira é sobre qual área deve seguir.
A programação tem tantas áreas e todas parecem tão legais e tão fáceis de dar dinheiro rápido que muita gente trava nessa escolha, sem saber qual área seguir ou se deve seguir várias. Ou todas!
As áreas principais são: Frontend, Backend, Fullstack, Mobile, Dados, IA, Jogos, Cloud, Q&A, UX/UI, Infra e muitas outras subáreas. Ufa!
Eu não vou explicar cada uma delas aqui, pois os cursos da própria já explicam tudo muito bem. Mesmo assim, de forma resumida:
- Frontend: implementa a parte visível do sistema, a interface com o usuário;
- Backend: implementa a parte dos servidores do sistema
- Fullstack: implementa o frontend e o backend juntos;
- Mobile: desenvolvimento para aparelhos móveis (celular, etc.);
- Dados: Trabalhar com captura, processamento e visualização de dados;
- IA (Inteligência Artificial): uso de redes neurais e aprendizado de máquina;
- Jogos: desenvolvimento de jogos digitais (para computador e celular);
- Cloud: uso de ferramentas de armazenamento de dados em nuvem;
- Q&A (Question & Answer): atendimento ao cliente;
- UX/UI (User Experience/User Interface): Planejar a experiência do usuário com um produto e a interface com ele;
- Infra (infraestrutura): cuidar do hardware de execução dos sistemas.
O programador deve escolher uma ou mais áreas a seguir, de acordo com a sua facilidade e interesse na área. Algumas pessoas gostam mais de trabalhar com a parte visual (eu!), outros com o processamento nos bastidores (backend), muitos com os dados (eu também!), muitos também com o hardware.
Aí, vai do gosto de cada um! Tem campo pra todo mundo!
No meu caso, as áreas que eu priorizo na DIO é a de Dados, mas também estudo Frontend e Mobile.
Mas uma coisa é certa! Para quem está começando, independente da área escolhida, é melhor começar o aprendizado em programação por uma linguagem mais fácil, com uma curva de aprendizado mais suave, como Javascript ou Python. Depois, o caminho a seguir para qualquer área pode ficar mais fácil para aprender uma linguagem puramente orientada a objetos, como Java, por exemplo.
E a forma de começar a aprender uma linguagem de forma leve é investir tempo e prática na Lógica de Programação e nas Estruturas de Dados.
A Lógica de Programação pode ser resumida na forma de se codificar os comandos de um programa de computador para que o equipamento entenda as instruções que ele tem que executar.
E isso sempre resulta em um algoritmo, que é a sequência de passos informados ao computador para que ele execute o programa. Um passo não é necessariamente uma instrução, um comando, mas uma ação, que pode ser implementada por várias instruções ou comandos.
E essa implementação pode ser feita de diversas formas, que são os paradigmas de programação (estruturada, orientado a objetos, funcional, etc.)
Em geral, o algoritmo utiliza estruturas de controle de fluxo, como estruturas de seleção e de repetição. Também são conceitos básicos e importantíssimos da programação.
As estruturas de dados são os diversos tipos de variáveis fornecidos por cada linguagem de programação para armazenar os dados de um programa, Os tipos mais conhecidos são os inteiros, decimais, booleanos; já as estruturas mais complexas são vetores, matrizes, listas, pilhas, filas, árvores, grafos, etc.
Aprendendo estes dois conceitos para uma linguagem de programação, você estará pronto para aprender qualquer outra linguagem. O que vai mudar é a sintaxe de cada uma, ou seja, suas regras de construção de comandos, seu vocabulário e regras.
A DIO oferece dezenas de formações, bootcamps e projetos práticos que podem acelerar o aprendizado, tanto conceitual como prático, de vários nichos da programação e/ou desenvolvimento: Frontend, Backend, Mobile, Fullstack, Nuvem, Dados, UX/UI, IA e muitos outros.
E isso vale para iniciantes, com toda a base da programação (lógica de programação, estruturas de controle, estruturas de dados) como devs mais experientes (áreas de UX, IA, Cloud, novos frameworks, etc).
Além das vagas em grandes empresas de renome internacional, claro!
8 – Conclusão
A partir da minha observação diária em grupos da DIO e em artigos publicados na DIO, eu vi postagens falando sobre planejamento de carreira e preocupação sobre por onde começar, se era obrigatório já saber matemática e que área seguir no início, se era necessário ter diploma de graduação e quais escolas escolher e me senti tentado a dar a minha opinião sobre o assunto e compartilhar a minha experiência de vida relacionada a estas escolhas.
Resumindo o conteúdo deste artigo em tópicos:
- Saber matemática não é obrigatório, aliás a matemática exigida na programação é a básica do Ensino Médio, a não ser para áreas como jogos 3D e robótica;
- Siga o fluxo básico e, quando a necessidade de usar a matemática aparecer, estude na hora certa;
- O diploma de graduação ou certificação não é obrigatório para todas as áreas da programação, mas em algumas é importante e pode ser um grande diferencial para a contratação, principalmente em empresas globais de renome;
- Caso você queira ter um diploma, comece a escolha da universidade ou faculdade pelas muitas alternativas de escolas federais de ensino gratuito, como as Universidades Federais (UFs) ou Institutos de Educação (IFs), antes de procurar por faculdades e universidades pagas;
- Além disso, procure primeiro aquelas perto de onde você mora, não precisa se deslocar para o eixo Sul/Sudeste para encontrar bons cursos na área de programação/desenvolvimento;
- Não recomendo fazer mais de um curso ao mesmo tempo, pois um tomará tempo do outro. É melhor fazer um primeiro e concluir, depois, caso deseje se especializar, faça outro ou, ainda melhor, uma pós-graduação que associe os dois cursos;
- Escolha a área que seja mais parecida com o que você gosta de fazer, aquela em que você trabalharia até de graça no futuro, se já tivesse salário garantido por outra fonte!
- E comece por uma linguagem de programação de aprendizado fácil, focando em lógica de programação (algoritmos), estruturas de controle, estruturas de dados; depois passe para outras linguagens;
- E não se esqueça que a DIO oferece dezenas de cursos, conceituais e práticos, sobre praticamente todas as áreas modernas de programação.
Para quem é iniciante, deixo os links para alguns dos artigos que eu já escrevi para a DIO, que podem ajudar nesse caminho inicial em programação:
Iniciantes 4 - Algoritmos e Estruturas de Dados
Algoritmos x Algoritmos Computacionais
Até o próximo artigo!