Por onde começar em desenvolvimento de software? - Parte 2
Tags: beginners, learning, career
Published: 2021-03-11 03:09:46

# Por onde começar?

Você já deve ter ouvido falar disso e é verdade, antes de começar a estudar qualquer linguagem de programação, é muito importante estudar lógica de programação. Algo que me ajudou muito foi criar dezenas de fluxogramas e também criar “programas” utilizando Portugol (Portugês estruturado). São temas que te ajudam a abrir a mente sobre como montar a lógica de um programa. Você consegue encontrar vários conteúdos sobre isso na internet.

Após ter compreendido a lógica de programação é hora de começar a aprender sobre Estruturas de dados e Algoritmos. Eu comecei estudando estrutura de dados utilizando a linguagem C, mas sinta-se à vontade de escolher outra, vou deixar a indicação de um livro em JavaScript de uma autora que eu gosto muito. Lembrando que você pode estudar da maneira que se sentir mais confortável, seja por vídeos, livros e etc.

> Estruturas de Dados e Algoritmos com JavaScript: Escreva um Código JavaScript Complexo e Eficaz Usando a Mais Recente ECMAScript — Por Loiane Groner

Muitos dos exemplos que você encontrará sobre programação, no início parecerão que não são úteis, por ser um projeto simples e ou que ninguém usaria, mas lembre-se que você precisa entender como funciona a estrutura de um programa, e esses exemplos são importantes.

# Paradigmas

Após ter compreendido as estruturas de um programa, acho que podemos seguir para um paradigma de programação. Caso você tenha estudado uma linguagem de programação baseada no conceito de Programação Orientada a Objetos(POO), você pode seguir estudando mais a fundo sobre esse tema. Existem outros paradigmas, como por exemplo a Programação Funcional que você pode estudar também, caso tenha interesse. Eu foquei sobre POO, então vou deixar a dica de uma apostila que me guiou sobre esse assunto.

> [Apostila C# E ORIENTAÇÃO A OBJETOS — CAELUM](https://www.caelum.com.br/apostila-csharp-orientacao-objetos)

Existe essa apostila em outras linguagens de programação também, caso prefira.

*Dica: Crie projetos, implemente alguma ideia que você ou um amigo tenha em mente e explore muito os conceitos do paradigma que escolheu, esses projetos te ajudarão muito no futuro. Você poderá utilizá-los como exemplo e ou até mesmo compará-los no futuro para acompanhar o seu progresso.*

# Controle de versão de código

Esse é um assunto que eu só fui conhecer quando comecei a trabalhar e não conheci na faculdade. É basicamente a forma de armazenar e controlar o seu código. Hoje existem diversas plataformas que hospedam o seu código, para que você não o perca e possa ter um controle melhor, uma bem conhecida é o GitHub. O GitHub utiliza por trás o Git, que é um sistema de controle de versões, que pode ser utilizado para controlar versões de qualquer tipo de arquivo. Ele é gratuito para projetos pessoais e open source. Lembrando que Git e Github são coisas diferentes. Você pode buscar mais sobre eles para entender melhor. Vou deixar o link do Github abaixo:

> [Conheça mais sobre o GitHub](https://github.com)

*Dica: Caso você já tenha criado algum programinha é muito importante você armazenar esse código, use ele para aprender um pouco mais sobre essas ferramentas de controle de código.*

# Boas Práticas

Nesse ponto, você já compreendeu muitos assuntos e talvez esteja mais confiante em relação a programação e então é hora de conhecer algumas boas práticas de desenvolvimento. Esse é um momento do seu estudo em que você ficará muito surpreso com as soluções apresentadas e ficará pensando “como eu nunca pensei nisso antes”. Eu vou citar alguns livros e conceitos que me ajudaram sobre isso, alguns que eu vou citar são mais voltados para orientação a objetos, mas que podem ser úteis pra você também.

## Clean Code

Quando eu estudei sobre Clean Code a primeira vez, eu fiquei impressionado com a quantidade de coisas que eu poderia fazer para melhorar o meu código. Como por exemplo não duplicar o código, criar boas funções, boas classes, bons nomes, uma boa legibilidade e etc. Diversas soluções são simples mas que nem sempre enxergamos. O livro que estudei sobre o assunto foi:

> Código Limpo: Habilidades Práticas do Agile Software — Por Robert C. Martin

Alguns pontos do livro podem ser mais complicados de entender, você pode pular essas partes e voltar quando se sentir mais confortável.

## Princípios SOLID

SOLID é o acrônimo para cinco princípios que te ajudam a melhorar o design do seu código, e modelá-lo de uma forma melhor. Esses são os princípios:

* [S]ingle Responsibility Principle (Princípio da responsabilidade Única)
* [O]pen/Closed Principle (Princípio aberto/fechado)
* [L]iskov Substitution Principle (Princípio substituição de Liskov)
* [I]nterface Segregation Principle (Princípio segregação de interfaces)
* [D]ependecy Inversion Principle (Princípio da inversão de dependências)

Vou deixar a dica de dois livros, um contém outros temas além de SOLID:

> Arquitetura Limpa: o Guia do Artesão Para Estrutura e Design de Software — Por Robert C. Martin (Esse contém outros conteúdos além de SOLID e pode ser um pouco mais complexo)
> Orientação a Objetos e SOLID para Ninjas: Projetando classes flexíveis — Por Mauricio Aniche

## Design Patterns

Design Patterns, assim como o nome diz, é conjunto de padrões para resolver da melhor forma determinados problemas relacionados ao design do seu código, lembrando que é voltado para Programação Orientada a Objetos. Eu estudei esse tema através de um Curso da Plataforma Alura, ele é pago, mas você encontra conteúdos grátis facilmente sobre o tema. Vou deixar o link do curso que realizei.

> [Design Patterns C# I: Boas práticas de programação](https://www.alura.com.br/curso-online-design-patterns-dotnet)

## Teste de Unidade

Esse é um assunto muito interessante e é muito importante conhecer os conceitos por trás dos testes de unidade. Eu vou deixar a dica de um livro que eu li e que fala sobre testes, porém ele é voltado para TDD (Test-Driven Development) que é uma técnica de desenvolvimento guiada por testes, onde o conceito é você implementar o teste antes de criar o código, pode ser um pouco confuso de entender no início. Eu não aplico essa técnica no meu dia-a-dia(TDD), mas sinta-se livre de tirar suas conclusões sobre o tema. TDD e Teste de unidade são coisas distintas, mas uma complementa a outra. Você pode buscar por vídeos também para entender melhor sobre o assunto.

> Test-Driven Development — Por Mauricio Aniche

# Conclusão

O meu objetivo com esse texto é tentar ajudar quem está começando na área e se sente um pouco perdido. Esses conteúdos foram a base do meu aprendizado e para mim são conceitos essenciais. Existem milhões de outros assuntos e tecnologias para estudar, mas eu creio que essa base te ajudará a resolver muitos problemas.

Esse é o meu primeiro texto sobre desenvolvimento de software, eu espero que tenha te ajudado em algo e sinta-se livre para compartilhar a sua opinião e caso precise de alguma ajuda é só me contatar.

Aqui o link do meu [Linkedin](https://www.linkedin.com/in/brandonmenezes)!