Articles

Como ensinar a si próprio a informática: A viagem de 100 horas de um programador

Interroguei-me durante bastante tempo: será que só conhecendo o básico da informática ajuda a tornar-se um programador melhor? E poderia trazer valor a um programador?

Se também se fizer estas perguntas, e não quiser investir tempo (ainda) na aprendizagem da informática, aqui está a história da minha experiência. Neste artigo, vou responder às seguintes perguntas:

  • Porquê aprender informática?
  • Qual foi o meu plano de estudo?
  • Que recursos utilizei?
  • li>li>Ihe aprendi algo útil que pode ser transferido para o meu trabalho diário como programador?

Comecei com esta fantástica lista de recursos: ensine-se a si próprio a informática. É basicamente uma orientação sobre como estudar informática como engenheiro de software, sem gastar muito dinheiro a tentar entrar no MIT.

Então, porquê aprender informática sozinho?

Essa é uma questão simples mas importante: porque é que o faríamos em primeiro lugar?

Para cada projecto que requer uma boa dose de motivação, tento primeiro definir objectivos adequados:

  1. Ser capaz de aprender uma nova língua / nova tecnologia mais rapidamente, conhecendo alguns conceitos centrais que se podem aplicar a cada língua / tecnologia.
  2. Melhorar a minha compreensão de níveis de abstracção mais baixos. Compreender um pouco melhor “como funciona sob o capô” poderia melhorar a minha compreensão e, portanto, a minha eficiência para resolver bugs ou conceber algoritmos.
  3. Melhorar a minha capacidade de raciocínio lógico para tornar o meu código também mais lógico.
  4. Credito que a compreensão dos conceitos subjacentes é uma chave para inovar no campo do desenvolvimento.
  5. Compreendendo a história da indústria: porque estamos onde estamos agora, o que podemos fazer para melhorar o mundo da informática?

Ciência da informática 101: o plano de estudo

Não estou interessado em tentar ler todos os livros sobre ciência da computação. Deve pelo menos dar-me algum sentido de compreensão.

É por isso que o meu plano de estudo se centrou na retenção da memória, compreensão e construção de uma referência rápida sobre o que aprendi, para poder voltar facilmente a ele.

  1. Estudei cerca de 2 a 3 horas por semana, dependendo das minhas prioridades. Não queria fazer muito e sentir-me esgotado e cansado pela informática. O mais importante para mim era estudar regularmente, independentemente da quantidade de tempo. Deveria ser algo que eu gostasse de fazer.
  2. li>Ao estudar material novo, escrevi resumos sobre ele sob a forma de mapas mentais. Isto tem duas vantagens: escrever ajuda a recordar o que aprendi e posso facilmente recordar alguns conceitos-chave quando preciso deles, num instante.li>O meu tempo de estudo está dividido em duas categorias:

    li>Nova aprendizagem (novo capítulo num livro, ver um novo curso em vídeo, fazer exemplos e exercícios) O que eu chamo “recordação da base de conhecimentos”. É principalmente fazer (mais) exercícios sobre o novo material que li/vi na semana anterior, ler os meus mapas mentais, e tentar lembrar-me do que escrevi nele.
  • No que diz respeito aos exercícios, tento não gastar mais de 30min em cada um deles. O objectivo é lutar o suficiente para me lembrar do conceito, mas não demasiado para me sentir queimado. É um equilíbrio delicado.
  • Tento refazer alguns exercícios que não consegui fazer da primeira vez, dias (mesmo semanas) após as diferentes tentativas, para ver se a minha compreensão melhorou.
  • Estou a tentar aplicar alguns princípios de aprendizagem activa, fazendo o maior número possível de exercícios, e fazendo-me perguntas a mim próprio ao rever os meus mapas mentais.

    Revisitar o que aprendi de uma semana para a outra é realmente, realmente benéfico para melhorar a minha retenção de memória e a minha compreensão.

    O que fiz até agora

    motivação para aprender Matemática discreta/p>p>P>Aqui o que fiz precisamente durante estas (quase) 100 horas de estudo da informática, em ordem cronológica.

    I. Programação (32 horas 55m)

    graph pomodoro done overtime programming part
    Pomodoro (25 min) done per week for the Programação parte

    O artigo intitulado “ensine-se a si mesmo a informática” especificava que eu deveria seguir “aproximadamente” a ordem de estudo que eles propõem, começando pelo campo da programação.

    Recursos principais: Estrutura e Interpretação de Programas de Computador (SICP)

    Este livro é considerado por muitos como a bíblia que todo o programador deve ler. É gratuito e pode encontrar as melhores versões epub e PDF aqui.

    Pode encontrar as soluções dos exercícios aqui.

    P>P>Eu consegui fazer quase todos os exercícios até 1.2.5 Greatest Common Divisors.

    Recurso Complementar: Berkeley Videos

    Os vídeos estão disponíveis aqui. As notas do curso estão aqui. Se procurar alguns exemplos de exames de Berkeley, está aqui.

    Estes são um complemento muito bom do livro: os conceitos são explicados sem lhe perguntar muito sobre Matemática, em contraste com o livro. Se quiser estudar o SICP mas a sua formação matemática não for suficientemente forte, basta seguir este curso. As minhas notas e exercícios estão aqui.

    O que aprendi com o SICP até agora

    • O início deste livro é muito interessante para compreender realmente as raízes da programação funcional e das recorrências.
    • Define muitos termos que os programadores usam todos os dias, de uma forma muito precisa. Perfeito para ser ainda mais preciso durante as discussões técnicas.
    • O livro empurrou as minhas capacidades analíticas e de resolução de problemas com os seus exercícios.

    O que posso usar na vida real?

    Toda a discussão sobre recursividade no livro ajudou-me bastante a escrevê-los facilmente. É um tema com o qual sempre me esforcei um pouco. Agora é uma brisa passar por qualquer problema que eu queira resolver com a recursividade.

    Que dificuldades encontrei?

    Este livro não é para odiosos da matemática. Foi escrito para estudantes do MIT que já têm bastantes conhecimentos matemáticos. Sem este conhecimento prévio, os exercícios podem ser bastante difíceis e frustrantes no momento.

    Foi a causa de outro problema: gastei demasiado tempo com os exercícios. Consegui resolver a maioria deles, mas demorei horas em alguns casos.

    Decidi a partir daí que não passaria mais de 30 minutos nos exercícios para manter a frustração baixa sem descartar o enorme benefício de os fazer.

    II. Matemática Discreta (50 horas)

    graph pomodoro done overtime programming part
    Pomodoro (25min) done per week for discrete Mathematics

    quanto mais lia o SICP, mais me foi difícil fazer os exercícios, especialmente porque se tratava de alguns conceitos matemáticos que eu não conhecia. Portanto, decidi avançar e começar a estudar o Mathematics assunto.

    Recurso principal: A matemática discreta e as suas aplicações

    Ensino em informática aconselha-o a ler as notas da palestra de László Lovász, livremente disponíveis aqui como um documento ps. Converti-o para PDF aqui para aqueles que não sabem o que é um documento do ps. Também não sabia.

    No entanto, escolhi outro recurso principal de estudo, aparentemente mais amigável para principiantes: Discrete Mathematics and its Application de Kenneth H. Rosen. É um livro bastante grande, bastante barato nas suas edições anteriores.

    Em 50 horas consegui terminar o primeiro capítulo (lógica proposicional) e alcançar 54 exercícios.

    Recurso complementar: MIT 6.042J mathematics for computer science, Outono 2010

    Estes vídeos do MIT são cursos mais avançados sobre Matemática Discreta. Mais uma vez, eles assumem que se conhece bastante em Matemática. No entanto, são muito interessantes, embora eu tenha tido dificuldades em segui-los.

    No pior dos casos, pelo menos dar-lhe-á uma boa visão do que é a Matemática Discreta.

    Um professor (Tom Leighton) tem melhores capacidades de ensino do que os outros. Contudo, todos eles têm um conhecimento muito profundo das suas respectivas disciplinas.

    O que aprendi até agora

    • O livro ensinou-me as noções básicas de lógica, uma habilidade muito boa para ter como desenvolvedor. Afinal, o nosso trabalho é baseado em lógica própria.
    • Lógica proposicional com quantificadores e regra de inferência. Basicamente, é a forma de escrever afirmações lógicas, verificando que as afirmações lógicas fazem sentido e provando os seus valores de verdade.
    • Basics of sets and graph theory, graças aos vídeos. É muito interessante e é bastante útil para muitas coisas: máquinas de estado, redes…

    O que posso usar na vida real?

    • tabelas de verdade podem ser muito úteis para ordenar afirmações condicionais complexas ou para as refactorizar.
    • Recentemente poderia aplicar as leis DeMorgan para melhorar a legibilidade de algumas declarações condicionais.
    • Expressar especificações confusas e curtas com previsões, conjunções e disjunções (a linguagem da lógica proposicional) pode mostrar contradições e os detalhes em falta. Pode resumir especificações muito sucintamente complexas de forma precisa. Pode ser uma boa ponte entre as especificações e o código em si.

    Que dificuldades encontrei?

    • Compreender como escrever uma prova matemática é difícil, especialmente quando ninguém o pode ajudar ou corrigir a sua prova.
    • Ainda me faltam algumas noções básicas de Matemática, especialmente necessárias para os vídeos do MIT.

    III. Voltar ao básico da Matemática (11 horas 15)

    graph pomodoro done overtime programming part
    Pomodoro (25 min) feito por semana para os conhecimentos básicos de Matemática

    Após ter alguns outros (menores) problemas com os meus conhecimentos de Matemática em Matemática Discreta, Decidi voltar ao básico.

    Outra razão importante que orientou a minha escolha: Gostei muito de fazer um pouco de Matemática. Sem isso, não teria continuado a estudar informática.

    Não se confunda: a Matemática relacionada com a informática é diferente da que estudou (e talvez odiasse) na escola. Aconselho-o a experimentar.

    Nesse ponto decidi alternar entre o estudo da Matemática Discreta e o básico da Matemática.

    Maior recurso: Como aprender aritmética básica rapidamente

    Este vídeo de 4 horas é realmente bom para refrescar muitas coisas, desde as somas e produto até às percentagens, expoentes, logaritmos… Cobre muito terreno muito rapidamente com muitos exercícios.

    As dicas dadas são muito boas também para compreender e resolver problemas básicos rapidamente.

    P>É possível ver no youtube uma pré-visualização do vídeo com uma hora de duração. Se gostar, pode comprá-lo no Vimeo.

    O que aprendi até agora

    • As minhas capacidades de cálculo mental melhoraram muito bem. Se tiver dificuldades em calcular rapidamente percentagens ou mesmo fazer multiplicações simples sem uma calculadora, este curso ajudá-lo-á muito.
    • Basics para manipular fracções, expoentes, raízes quadradas, logaritmos e assim por diante.

    O que posso usar na vida real?

    • Ser capaz de calcular mentalmente é muito útil para muitas coisas na vida real. Calculando rapidamente promoções, mais ou menos quão caro será um carrinho de compras completo…
    • Posso aplicar todo este conhecimento enquanto estudo informática.

    Que dificuldades encontrei?

    Após estudar o SICP e a Matemática Discreta, foi muito relaxante finalmente compreender tudo com um pouco de trabalho. Não tive muitas dificuldades.

    Os meus conselhos para principiantes em informática

    basic-mathematic-illustration

    p> se pudesse voltar ao início desta aventura, teria estudado os diferentes temas por esta ordem:

    • I. Matemática Básica
    • II. Matemática Discreta
    • III. O SICP

    Eu teria estudado Matemática Básica e Matemática Discreta em paralelo e depois teria passado para o SICP, tentando obter os conhecimentos de Matemática que ainda me escapava pelo caminho.

    p>continuarei a aprender as noções básicas de Matemática e Matemática Discreta durante pelo menos 150 horas:

    • O pouco que sei sobre isso já me ajudou bastante na minha vida diária de programador.
    • li> sinto (e leio) que é uma base para todos os outros campos da informática.li>Gosto de o estudar! Mais uma vez, é um componente essencial para me manter motivado.

    Em suma: uma experiência muito boa, subjacente a muitas das minhas fraquezas mas também a ensinar-me fundamentos sólidos que me faltavam.

    Cuidado, no entanto: se espera ser um super programador feiticeiro ao estudar informática, pode ficar desapontado. A ciência da computação é difícil de estudar. Tem fortes aspectos teóricos e mesmo que já tenha encontrado alguma utilização no meu trabalho diário, não é de todo estonteante.

    Atravessar esta jornada exige trabalho, paciência e dedicação. Ter objectivos claros, um plano de estudo concreto e desfrutar do processo são obrigatórios.

    Este artigo foi escrito por Matthieu Cneude e foi originalmente publicado no The Valuable Dev, um blogue centrado nos conceitos importantes e intemporais no desenvolvimento de software. Pode ler o artigo aqui.

    Publicado a 1 de Outubro de 2020 – 12:46 UTC

    Deixe uma resposta

    O seu endereço de email não será publicado. Campos obrigatórios marcados com *