Um Guia completo para se Tornar um autodidata Programador
Parte II: Pensar, Planejar e Executar Como um Programador
Agora que você sabe como resolver problemas, raciocinar sobre a solução, e comunicar suas idéias fluentemente, é hora de você colocar essas habilidades em prática, como um programador faz.
nesta parte, há três coisas que você precisa aprender. Em primeiro lugar, você vai aprender C++ como uma segunda língua, que está mais perto de descrições de nível de máquina em comparação com Python. O Python está mais perto do espectro do inglês simples, enquanto o C++ está mais perto do fim do espectro de 0s e 1s. aprender C++ irá familiarizá-lo com mais construções de programação, como ponteiros. Em segundo lugar, irá melhorar a sua velocidade de codificação praticando intensivamente, lendo documentação e aperfeiçoando ainda mais as suas capacidades de depuração. Finalmente, você aprenderá a recursão, que são os programadores mágicos e os cientistas da computação usam para aproveitar o poder da computação.
Aprenda C++ e comece a escrever programas simples
você já aprendeu Python na parte anterior. Python é uma linguagem amiga do programador, uma vez que esconde muitos detalhes de baixo nível do programador para facilidade de uso. No entanto, se você quiser progredir, é absolutamente necessário aprender os fundamentos da programação em C++.
no que se deve concentrar: Escrever código em c++ vai fazer você se sentir mais programador, porque você está indo mais para descrições de nível de máquina. Aprenda a diferença entre sintaxe e semântica. Passar o tempo aprendendo a digitação estática e dinâmica, gerenciamento de memória e ponteiros. Aprenda a implementar condicionalismos, loops, Funções, tipos de dados, e coisas que você aprendeu em Python novamente em C++. Se tudo isto parece grego e latim, não te preocupes. A secção de recursos vai deixar tudo claro para si.erros de manipulação: sempre que tiver um erro, não desanime. Mesmo os programadores mais experientes têm erros e bugs em seus programas. Tudo o que você tem a fazer é ler o erro, fazer uma pesquisa rápida no Google, e corrigir o problema em seu código. Enquanto fazes isto, entende onde cometeste um erro, corrige a tua compreensão e prossegue. Às vezes você pode ter que ler um pouco de documentação. Verifica a próxima secção.
a documentação de leitura deve ser de segunda natureza para você
assim como fazer uma pesquisa no Google, a habilidade de um programador é decidida pelo quão bem ele pode entender a documentação e escrever programas úteis. À medida que você aprende a ler documentação, Você também vai aprender a comentar o seu código, escrever código legível e escrever documentação para o código que você escreve.por que você deveria aprender isso? Muitas pessoas lutam com a aprendizagem de novas tecnologias e procuram cursos prontos para aprender. Enquanto isso é bom nos estágios iniciais, como o seu conhecimento se aprofunda, você não vai encontrar tutoriais prontos para se alimentar com colher. Você terá que ler a documentação e pegar o que você precisa. Mais uma vez, Aprenda a filtrar a informação e tomar exatamente o que você precisa para fazer o trabalho feito.
prática. Repetir. Praticar.
Agora você só tem que continuar praticando. Vá até Hackerrank e resolva todos os problemas fáceis na seção de aquecimento e implementação lá. Se há um problema que você não pode resolver, leia as discussões, leia o editorial, e veja como você mesmo pode resolvê-lo. Se há algo que você não entende, use o Google.
Se você fez as leituras na parte anterior, você não deve ter um problema aqui. Se está com dificuldades, sugiro que volte e reveja essas secções. Deves ser bom a escrever código, por isso não saltes esta parte. A idéia é ser fluente em expressar suas soluções em inglês puro em seus equivalentes de programação. Uma vez que você não está atolado por detalhes da linguagem, você pode prosseguir. Pega em todos os programas que escreveste em Python e codifica-os em C++.
Você pode se deparar com a hype em torno de programação competitiva, eu recomendo que você fique longe dele nesta fase, porque ele vai fazer mais mal do que bem. Uma vez que você terminar a parte III, você pode experimentar com ele e, se feito corretamente, ele pode melhorar suas habilidades de resolução de problemas tremendamente.
Entender a recursividade bem
o coração de um cientista da computação reside na capacidade de entender a recursão. Repetir significa expressar algo em termos de si mesmo. Tudo o que você pode fazer usando loops pode ser feito recursivamente e de maneiras muito elegantes. Tente entender isso intuitivamente e assistir os vídeos que eu tenho fornecido nos recursos. Se você é um desenvolvedor de software que não entende bem a recursão, eu recomendaria fazê-lo imediatamente.
resumo
até agora, você conhece uma linguagem de baixo nível e alto nível e pode apreciar suficientemente as diferenças no “controle” que você tem sobre seus programas. Neste momento, você deve ser capaz de escrever programas simples usando Python e C++ e apreciar a diferença entre as duas linguagens.a partir daqui, muitas pessoas vão para a rotina de aprender mais línguas, o que não é nada mais do que um exercício inútil por si só. Uma das perguntas mais comuns que recebo de Iniciantes é ” quantas línguas você conhece?”, o que me leva a perceber o quão mal orientados os principiantes geralmente são quando relacionam proezas de programação com o conhecimento de mais linguagens. Programação não é sobre saber muitas linguagens. A linguagem que você usa é apenas uma forma de expressar e resolver o seu problema de forma eficaz. Nesta fase, você é um “programador”, mas isso não é suficiente. Agora você precisa aprender ciência da computação para levar seu skillset para o próximo nível.
Parte III: A sua experiência com ciência da Computação
uma compreensão sólida dos recursos nesta fase irá torná-lo melhor do que a maioria dos programadores do seu grupo de pares. Você pode até se tornar melhor do que a maioria dos estudantes de engenharia do 2º/3º ano na Índia. O seu progresso a partir daqui depende da sua sede pelo material desta secção. Concentra-te.
A maior parte dos tópicos desta secção estão cobertos no segundo ano de um curso de Engenharia de computação. Abordei – os de forma um pouco diferente para melhor se adequar aos objectivos deste guia.como é que isto difere de um currículo de graduação regular? Os currículos regulares de graduação são fortemente carregados de teoria. Os cursos que sugeri na seção de recursos têm uma boa mistura de teoria e prática. Embora isto possa ser bom para os aspirantes a engenheiros, para o leigo lá fora, não é muito útil. Perdes a noção de onde a teoria acaba e a prática começa. Vou dizer-te exactamente o que precisas de aprender em teoria para que possas praticar. A teoria é apenas uma ferramenta para ajudá-lo a escrever um código melhor nesta fase, por isso não fique atolado por ela muito.fato engraçado: no meu 2º semestre de engenharia, tivemos um tema chamado DBMS (Database Management Systems). Fiquei surpreso ao encontrar pessoas que desenhavam os melhores diagramas das urgências para os seus desenhos de base de dados, mas quando se tratava de criar uma base de dados para aplicações práticas, eles falham miseravelmente. Eles estavam tão focados em acertar os detalhes do diagrama, que se esqueceram da razão pela qual eles estavam fazendo isso em primeiro lugar. Eu não os culpo, porque eles nunca foram ensinados que o diagrama está lá para eles construir melhores bases de dados, não melhorar suas habilidades de desenho.
Matemática Discreta
você já tem usado matemática discreta sem saber. Matemática discreta é uma combinação de áreas na Matemática Aplicada que foram repetidamente usadas na ciência da computação. Os especialistas no campo decidiram juntar tudo e colocar um nome — que agora chamamos de matemática discreta.
Quando a aprendizagem de matemática discreta, siga o mesmo princípio eu descritos na Parte I. a Pensar em termos de estruturas matemáticas e os procedimentos utilizados para manipulá-los. A matemática discreta simplesmente aumenta o número de ferramentas à sua disposição para resolver problemas. Se você superou seu medo da matemática, você vai desfrutar completamente do curso que eu tenho ligado na seção de recursos.
estruturas de dados e algoritmos
esta é a espinha dorsal de toda a sua jornada. Na verdade,você já tem usado estruturas de dados e algoritmos todo este tempo-novamente sem saber. Agora vamos formalizá-lo e estudá-lo mais em detalhe.
Como um programador experiente, você estará usando estruturas de dados e algoritmos em todos os lugares. Entendê-lo bem o suficiente irá estender suas habilidades matemáticas e ferramentas para construir estruturas computacionais eficazes para enfrentar problemas comuns. Você também vai aprender diferentes técnicas de design de algoritmos, que são como plantas para resolver alguns temas em Ciência da computação.
muitos tutoriais lhe dirão para começar a aprender algoritmos e estruturas de dados diretamente. A razão pela qual eu não fiz isso é porque você entraria em Einstellung, que está tendo uma mentalidade fixa e abordagem aos problemas. Confia em mim, isso faz-te pensar mal porque não pensas fora da caixa. No final, você será um grande solucionador de problemas e programador.
Best Practises
Writing software is not just about haphazardly put together code to get things done. Na maioria dos ambientes profissionais, Você não será o único programador trabalhando em uma base de código. É importante para você seguir certas diretrizes e convenções para tornar a programação a base de código mais fácil para todos na equipe. Isso torna mais fácil de entender o código escrito por outra pessoa e, posteriormente, torna mais fácil para os outros para entender o seu código. Se você é um desenvolvedor de software Júnior, concentre-se nesta seção.o que pode fazer? Passe o tempo entendendo e colocando o princípio seco (não se repita) na prática. Não escreva código repetitivo, já que isto o atrasa e o torna mais propenso a erros. Escreva comentários e documentação úteis onde puder. Quando comecei, pensei que era uma coisa estúpida de se fazer até que, um dia, abri um projeto antigo e percebi que todo o meu código era ininteligível. Como programador, não precisa de memorizar muito. Memoriza o que é importante e procura o que é preciso.
Controle de versão (Git)
isto é algo que eu comecei a fazer cedo e ajuda tremendamente em manter o código organizado. Você rastreia suas alterações e sabe exatamente quais mudanças você precisa para implementar certas características. Você também aprende como prevenir e corrigir bugs rapidamente. Vejo muitos jovens engenheiros que nem sabem o que é Git, e isso é extremamente triste. Vão passar toda a carreira a usar o controlo de versões, se fores um deles, vai directamente para os recursos abaixo.
Programação Orientada a objetos
Uma Introdução a uma forma completamente nova de programação. Até agora, temos feito programação processual. Agora mudamos para a programação orientada a objetos, que é um novo paradigma completamente. Uma introdução à encapsulação e abstração de dados irá ajudá-lo ainda mais a apreciar a forma como este guia foi projetado. Em OOP, tudo é um objeto e a idéia é separar claramente sua interface e implementação. Você vai aprender aulas e herança também. No final, você vai começar a projetar soluções orientadas a objetos e aprender a construir caixas pretas inteligentes para resolver problemas. Aprender Java é uma boa maneira de começar com este novo paradigma de programação. Python suporta OOP também, então tente explorar isso!
practice Hard
practice every skill/concept / algorithm in this section by writing code snippets. Reescrever o código antigo com o novo conhecimento que adquiriu. Continue escrevendo pequenos programas e aprenda algo novo a partir dele em cada etapa.
continue aprendendo à medida que avança. Eu construí Calculadoras, sistemas de gerenciamento de bibliotecas, scripts de computação numérica de tantas maneiras diferentes, e cada vez, eu aprendi algo diferente. Você acabará por perceber que não há nenhuma bala de ouro para consertar tudo. A vida está cheia de compromissos. Essa é a beleza da imperfeição.
resumo
você sabe mais do que o suficiente para construir software de mudança de jogo. Você deve internalizar tudo até aqui para ir para o próximo passo. Daqui, mais teoria não te servirá de nada. Você só deve investir tempo na prática e construção de projetos úteis. A programação é uma ciência aplicada-siga a regra 80/20, o que significa gastar 80% do tempo praticando e 20% da teoria da leitura do tempo.
Parte IV: É Hora de Você Criar Algumas Coisas legais
Se você seguiu o guia até aqui para o T, você está bem equipado para ir em frente e construir alguns projetos excelentes que você pode colocar em seu CV, mostrar para seus amigos, ou até mesmo gerar receitas a partir de seu trabalho. Nesta fase, quero ensinar-te a aprender as coisas pelo caminho. Cada novo projeto que você toma ou é designado para vai exigir aprender algo novo. É importante que abordes isto com a atitude certa.
Existem algumas diretrizes que você pode seguir, sempre que você pegar qualquer projeto. Desenvolvi esta rubrica para mim e apercebi-me que seria útil para vocês fazerem novos projectos.
- identifique o problema em que está a trabalhar e seja muito específico sobre os detalhes. Seja claro sobre seus objetivos e metas.
- procure projetos existentes ou similares e identifique onde eles se destacam e onde eles faltam. Veja onde a sua ideia se encaixa, como o projeto se alinha com os objetivos e metas que você tem em mente e tome nota de tudo.
- Faça uma lista de todas as habilidades que você precisa aprender para fazer o projeto e a medida em que você precisa desenvolver a habilidade para fazer o projeto. Conheça os seus pontos fortes e fracos.crie um plano para aprender as habilidades necessárias. Identifique as pessoas certas para ajudá-lo e os tutoriais necessários para começar. Concentre-se exclusivamente no desenvolvimento da habilidade para fazer o seu projeto. É fácil deixar-se levar para ir em profundidade. Lembre-se, você está aprendendo a habilidade para completar o projeto e não escrever uma tese de doutorado sobre ele. A não ser que seja esse o teu objectivo.
- comece com o projeto, atualize suas metas e objetivos, e seja muito claro sobre seus pontos fortes e fracos. Dividir o projeto em sub-tarefas executáveis e atribuir uma métrica de objetividade para cada. Isto significa que você precisa saber quando parar de perseguir a perfeição e se concentrar no quadro geral.
- Execute impacientemente. Repita até que todos os seus objetivos sejam cumpridos.
Leia isto para dicas e truques sobre como se tornar um melhor aluno.
dado o seu conhecimento existente, você pode aprender a construir websites, aplicações móveis, jogos, pequenos scripts, plugins Chrome, aplicativos de desktop e software de análise de dados. Vou dar mais informações sobre isto no próximo post. Uma vez que você tem alguns projetos concluídos sob o seu cinto, você será um bom desenvolvedor o suficiente para freelancer e ganhar dinheiro de lado, o que é uma grande fonte de renda se você é um estudante. Se você é de outro campo, isso lhe dá uma base sólida o suficiente para ser capaz de aumentar o seu trabalho atual com tecnologia. O que você pode com seu conjunto atual de habilidades é interminável, mesmo um blog-post inteiro não pode fazer justiça a isso.