Guia com boas práticas recomendadas para qualquer projeto de Desenvolvimento de Software

Guia de Desenvolvimento de Software

Marcelo Junior
24 min readSep 12, 2023

Um compilado de dicas e macetes que eu como desenvolvedor me daria se pudesse voltar ao passado no início da minha carreira há quase uma década atrás e, que todo Estudante da área deve saber!

Sumário
- Processos de Desenvolvimento
- Metodologias Ágeis
- Como criar uma Documentação

- Extras

1 — Processos de Desenvolvimento

Etapas de Desenvolvimento de Software — Modelo Cascata

O desenvolvimento de software é um processo complexo que envolve várias etapas para criar um produto de software funcional e de alta qualidade. Embora existam várias metodologias de desenvolvimento de software, as etapas básicas costumam ser semelhantes em muitos projetos. Aqui estão as etapas típicas do desenvolvimento de software:

1. Definição de Requisitos:
— Esta fase envolve a identificação e documentação dos requisitos do sistema. Os requisitos podem ser funcionais (o que o software deve fazer) ou não funcionais (requisitos de desempenho, segurança, usabilidade, etc.).

2. Análise:
— Nesta etapa, os analistas de sistemas analisam os requisitos para entender completamente o que o software deve fazer. Isso inclui a criação de diagramas, modelos de dados e outras representações para ajudar a visualizar o sistema.

3. Projeto:
— Com base na análise de requisitos, os arquitetos de software projetam a estrutura do sistema. Isso envolve a criação de diagramas de arquitetura, escolha de tecnologias, design de banco de dados e planejamento geral do sistema.

4. Implementação (Codificação):
— Os desenvolvedores escrevem o código-fonte real do software com base nos designs e especificações definidos nas etapas anteriores. Esta é a fase em que o software ganha vida.

5. Testes:
— Os testadores realizam testes para garantir que o software funcione conforme o esperado. Isso inclui testes de unidade, testes de integração, testes de sistema e testes de aceitação.

6. Integração e Depuração:
— Os componentes individuais do software são integrados e os erros (bugs) são identificados e corrigidos.

7. Implantação:
— O software é lançado em um ambiente de produção, pronto para uso pelos usuários finais. Isso pode ser feito em uma escala menor para testes iniciais (implantação em ambiente de pré-produção) antes da implantação completa.

8. Manutenção e Atualização:
— Após o lançamento, o software requer manutenção contínua para corrigir problemas, adicionar novos recursos e fazer atualizações de segurança. Esta é uma fase contínua ao longo do ciclo de vida do software.

9. Avaliação e Melhoria:
— Após o uso do software pelos usuários, é importante avaliar como ele está funcionando em um ambiente de produção real e considerar melhorias contínuas com base no feedback e nas necessidades em evolução dos usuários.

10. Encerramento (Opcional):
— Em alguns casos, quando o software não é mais necessário, a fase de encerramento pode ser necessária para desativar o sistema de forma controlada, arquivar dados e documentação e finalizar formalmente o projeto.

Essas são as etapas típicas do desenvolvimento de software, mas é importante notar que muitos projetos adotam metodologias ágeis, como Scrum ou Kanban, que enfatizam a flexibilidade e a colaboração contínua, permitindo que as etapas se sobreponham e se ajustem de acordo com as necessidades do projeto.

2 — Metodologias Ágeis

Scrum

O Scrum é uma metodologia ágil de gerenciamento de projetos que visa aumentar a eficiência, flexibilidade e colaboração no desenvolvimento de software e em outros tipos de projetos. Aqui está um resumo das principais características do Scrum:

Principais Personagens do Scrum

Papéis no Scrum:

1. Product Owner: Responsável por definir e priorizar o backlog do produto, representando os interesses dos stakeholders e garantindo que a equipe esteja construindo o que é mais valioso para o negócio.

2. Scrum Master: Facilita o processo Scrum, ajuda a equipe a entender e aderir aos princípios do Scrum, remove obstáculos e promove uma cultura de melhoria contínua.

3. Equipe de Desenvolvimento: Composta por profissionais multifuncionais que são responsáveis por planejar, projetar, desenvolver, testar e entregar incrementos de produto funcionais.

Etapas de Desenvolvimento no Scrum

Artefatos do Scrum:

Exemplo de Product Backlog

1. Product Backlog: Uma lista de todas as funcionalidades, requisitos e melhorias desejadas para o produto, priorizadas pelo Product Owner. É basicamente a ideia principal do Projeto logo após a Etapa de Levantamento e Análise de Requisitos.

2. Sprint Backlog: Uma lista de tarefas selecionadas a partir do Product Backlog para serem realizadas durante uma Sprint específica.

3. Incremento de Produto: A versão funcional do produto que é desenvolvida ao longo das Sprints. Deve ser potencialmente e
ntregável ao final de cada Sprint.

Eventos do Scrum:

Resumo do funcionamento de uma Sprint

1. Sprint: Um período de tempo fixo (geralmente 2 a 4 semanas) durante o qual a equipe de desenvolvimento trabalha para entregar um incremento de produto funcional.

2. Reunião de Planejamento da Sprint: No início da Sprint, a equipe seleciona as tarefas a serem realizadas durante a Sprint e cria o Sprint Backlog.

3. Reunião Diária (Daily Scrum): Uma reunião curta diária na qual a equipe compartilha o progresso, identifica obstáculos e planeja as próximas etapas.

4. Revisão da Sprint (Sprint Review): No final da Sprint, a equipe apresenta o incremento de produto concluído aos stakeholders para obter feedback.

5. Retrospectiva da Sprint: Após a Revisão da Sprint, a equipe realiza uma retrospectiva para analisar o que funcionou bem e o que pode ser melhorado no processo.

Princípios do Scrum:

Princípios da Metodologia Scrum

1. Transparência: Todas as informações relevantes devem ser visíveis para todas as partes envolvidas.

2. Inspeção: O progresso e o incremento do produto devem ser inspecionados regularmente para identificar desvios do plano.

3. Adaptação: Com base nas inspeções, ajustes contínuos são feitos para melhorar o processo e o produto.

O Scrum promove a entrega iterativa e incremental de software, enfatiza a colaboração, incentiva a comunicação constante e permite uma resposta rápida às mudanças de requisitos. Ele é amplamente utilizado em desenvolvimento de software, mas também pode ser aplicado em uma variedade de outras áreas, tornando-se uma abordagem valiosa para a gestão de projetos ágeis.

Kanban

O Quadro Kanban serve para o gerenciamento das tarefas

O Kanban é uma metodologia de gestão visual que se originou no Japão, inicialmente na Toyota, como parte do Sistema Toyota de Produção. A palavra “Kanban” em japonês significa “cartão visual” ou “sinalização visual”. Essa abordagem é amplamente utilizada não apenas na fabricação, mas também em diversos setores, incluindo desenvolvimento de software, gerenciamento de projetos e muito mais.

O Kanban é projetado para melhorar a eficiência, a visibilidade do trabalho em andamento e a capacidade de resposta às mudanças. Funciona através do uso de um quadro Kanban, que é uma representação visual de um processo de trabalho, geralmente dividido em colunas que representam etapas do processo. Cartões ou post-its são usados para representar tarefas ou itens de trabalho.

Principais características e conceitos do Kanban:

1. Quadro Kanban: O quadro Kanban é dividido em colunas que representam o fluxo de trabalho, geralmente incluindo colunas
como “A fazer”, “Em andamento” e “Concluído”.

2. Cartões Kanban: Cada tarefa ou item de trabalho é representado por um cartão Kanban que contém informações sobre o que deve ser feito, quem é responsável e quaisquer detalhes relevantes.

3. Limites de Trabalho em Andamento (WIP — Work in Progress): O Kanban estabelece limites para o número de cartões que podem estar em uma coluna “Em andamento” de cada vez. Isso ajuda a evitar sobrecarregar a equipe e a manter um fluxo de trabalho constante.

4. Sinalização Visual: O Kanban utiliza sinais visuais, como cartões coloridos ou marcadores, para indicar o status e a prioridade das tarefas.

5. Gestão do Fluxo: O objetivo do Kanban é otimizar o fluxo de trabalho, minimizando o tempo de espera e maximizando a eficiência.

Melhoria contínua (Mercado Livre)

6. Melhoria Contínua: O Kanban promove a melhoria contínua do processo, incentivando a equipe a identificar oportunidades de aprimoramento à medida que o trabalho é realizado.

7. Flexibilidade: O Kanban é altamente adaptável e pode ser aplicado a uma ampla variedade de cenários e processos, desde o desenvolvimento de software até a manutenção de TI, suporte técnico, gerenciamento de projetos e muito mais.

O Kanban é especialmente útil em ambientes onde a demanda pode variar e as prioridades mudam com frequência. Ele fornece visibilidade em tempo real do trabalho em andamento, permite que a equipe se concentre em tarefas de maior prioridade e ajuda a evitar gargalos e desperdícios no processo. Essa abordagem é uma ferramenta eficaz para melhorar a eficiência e a agilidade em uma variedade de contextos de trabalho.

3 — Como criar uma documentação

1. Tipos de Documentação
-
Briefing
- Protótipos, wireframes & layouts
- Repositório Git
- Quadro Kanban
- Transcrição com detalhes sobre o andamento do projeto no Word
- Manuais do projeto

Modelo de Briefing
Um briefing é um documento ou reunião que fornece informações detalhadas sobre um projeto, a fim de orientar a equipe de projeto ou os fornecedores sobre os objetivos, requisitos e expectativas do cliente. Abaixo, apresento um exemplo de documentação de briefing para um projeto fictício de criação de um site para uma empresa de roupas chamada “FashionStyle”:

Briefing do Projeto — Website FashionStyle

Informações Gerais

Cliente: FashionStyle

Data: 10 de setembro de 20XX

Contato: Joana Silva, Diretora de Marketing

Equipe Responsável: Equipe de Desenvolvimento Web da XYZ Agency

Visão Geral do Projeto

A FashionStyle é uma empresa de moda em rápido crescimento que deseja criar uma presença online sólida por meio de um novo site. O objetivo principal do projeto é destacar nossa coleção de roupas e acessórios, promover nossa marca e proporcionar uma experiência de compra online excepcional aos nossos clientes.

Objetivos

1. Apresentação de Produtos: Destacar nossa coleção atual de roupas e acessórios com imagens de alta qualidade e descrições detalhadas.

2. Experiência de Compra: Criar uma plataforma de comércio eletrônico fácil de usar, com um processo de compra simples e seguro.

3. Promoção da Marca: Reforçar a imagem de marca da FashionStyle por meio de um design elegante e consistente com nossa identidade visual.

4. Contato e Suporte: Fornecer informações de contato claras e opções de suporte ao cliente para melhorar a comunicação com nossos clientes.

Requisitos Técnicos

- Desenvolvimento em WordPress.
- Responsivo para dispositivos móveis e tablets.
- Integração com sistema de pagamento online (ex.: PayPal).
- Funcionalidade de pesquisa de produtos.
- Seção de blog para compartilhar novidades e tendências da moda.
- Integração com redes sociais.
- Páginas de Política de Privacidade e Termos de Uso.

Público-Alvo

Nosso público-alvo é composto por homens e mulheres entre 18 e 45 anos, interessados na moda contemporânea e dispostos a fazer compras online.

Estilo e Design

Queremos um design moderno, minimalista e elegante que reflita a identidade da FashionStyle. As cores principais devem ser preto, branco e rosa. Anexamos algumas imagens de referência que gostaríamos que fossem consideradas.

Orçamento e Prazo

O orçamento alocado para este projeto é de até $15.000. O prazo de entrega desejado é de 10 semanas a partir do início do projeto.

Equipe Envolvida

- Joana Silva (Cliente)
- Maria Santos (Gerente de Projeto)
- Ana Rodrigues (Designer)
- Pedro Alves (Desenvolvedor)
- Luísa Costa (Redatora de Conteúdo)

Contato

Para quaisquer dúvidas ou esclarecimentos adicionais, entre em contato com Joana Silva, Diretora de Marketing da FashionStyle, pelo e-mail joana@fashionstyle.com ou pelo telefone (123) 456–7890.

Este é um exemplo simples de um briefing de projeto para um site, e pode ser adaptado de acordo com as necessidades específicas do projeto e da empresa. É importante que todas as partes envolvidas entendam claramente os objetivos, requisitos e expectativas para garantir o sucesso do projeto.

Protótipos, wireframes & layouts
Protótipo e wireframe são dois conceitos relacionados ao design de produtos, incluindo sites, aplicativos e outros projetos de interface de usuário. Eles são usados para representar visualmente o layout, a estrutura e a funcionalidade de um projeto antes que seja desenvolvido completamente. No entanto, eles servem para diferentes propósitos e têm níveis de detalhes distintos:

Exemplo de wireframe [Balsamiq Wireframes]

1. Wireframe:

Um wireframe é uma representação visual básica e esquemática de uma interface de usuário. Ele é usado para esboçar a estrutura geral de uma página ou tela, incluindo a disposição dos elementos, como botões, menus, imagens e texto. Os wireframes são tipicamente simples, em preto e branco (ou em tons de cinza), sem detalhes de design ou cores.

O objetivo principal de um wireframe é comunicar a estrutura e o fluxo de informações, ajudando a equipe a visualizar a organização do conteúdo e a hierarquia dos elementos na interface. Wireframes são úteis nas fases iniciais de planejamento e design, antes de se comprometer com detalhes de aparência e interatividade.

2. Layout:

Layout do projeto (web & Mobile) Santander Dev Week 2023 [Figma]

Layouts são componentes fundamentais no design de interfaces de usuário (UI) e desempenham um papel crucial na forma como as informações e os elementos visuais são organizados em uma página, tela ou documento. Os layouts podem variar significativamente com base no contexto e no tipo de projeto, mas em geral, eles se referem à estrutura visual e à disposição dos elementos em um espaço designado. Abaixo, vou explicar mais sobre o conceito de layouts:

1. Estrutura Visual: Um layout é a estrutura visual que define onde diferentes elementos de uma interface serão posicionados, incluindo texto, imagens, botões, menus, formulários e outros componentes interativos.

2. Organização do Conteúdo: O layout determina como o conteúdo será organizado e apresentado aos usuários. Ele deve ser projetado de forma lógica, de modo que os usuários possam entender facilmente a hierarquia e a relação entre os elementos.

3. Composição Estética: O layout também é responsável por criar uma composição esteticamente agradável. Isso inclui considerações de equilíbrio, proporção, alinhamento, contraste, uso de cores e tipografia, entre outros princípios de design.

4. Responsividade: Em projetos digitais, como sites e aplicativos, os layouts precisam ser responsivos, o que significa que eles se adaptam a diferentes tamanhos de tela e dispositivos. Isso envolve a reorganização dos elementos para garantir uma experiência de usuário consistente em dispositivos móveis, tablets e desktops.

5. Flexibilidade: Os layouts devem ser flexíveis para acomodar diferentes quantidades de conteúdo e para permitir atualizações e expansões futuras sem grandes revisões no design.

6. Direcionamento do Fluxo de Usuário: Um layout bem projetado pode influenciar a maneira como os usuários interagem com uma interface, direcionando o fluxo de usuário para ações específicas ou áreas de interesse.

7. Branding e Identidade Visual: O layout também desempenha um papel importante na representação da marca, incorporando elementos de identidade visual, como logotipos, cores e estilos.

8. Experiência do Usuário: O layout é um fator essencial na experiência do usuário (UX). Uma disposição eficaz pode tornar a navegação intuitiva e agradável, enquanto um layout desorganizado ou confuso pode criar frustração.

Existem vários tipos de layouts, como layouts de grade, layouts de lista, layouts de mosaico e muitos outros, cada um adequado para diferentes tipos de conteúdo e objetivos de design. A escolha do layout adequado depende do contexto e dos requisitos do projeto.

Em resumo, layouts desempenham um papel fundamental no design de interfaces de usuário, influenciando a organização, a estética e a experiência do usuário. Eles são uma parte essencial do processo de design e desempenham um papel importante na comunicação eficaz de informações e funcionalidades aos usuários.

3. Protótipo:

Protótipo Funcional

Um protótipo é uma versão interativa e funcional de um design de interface de usuário. Ele vai além do wireframe, incluindo elementos de interação, como cliques em botões, navegação entre telas e até mesmo simulação de funcionalidade (como formulários de preenchimento). Protótipos podem ser estáticos (com links clicáveis) ou dinâmicos, dependendo do nível de detalhe desejado.

Os protótipos são usados para testar a usabilidade do design, permitindo que os usuários ou partes interessadas experimentem a interface de forma prática. Eles são valiosos para coletar feedback, identificar problemas de usabilidade e validar o conceito antes de investir recursos no desenvolvimento completo.

Em resumo, enquanto um wireframe é uma representação estática e simplificada da estrutura de uma interface, um protótipo é uma
representação mais avançada e interativa que inclui funcionalidades básicas. Ambos são ferramentas essenciais no processo de design de produtos digitais, ajudando a garantir que a interface final atenda às necessidades dos usuários e aos objetivos do projeto. A escolha entre usar um wireframe ou um protótipo depende do estágio do projeto e dos objetivos específicos de design e testes.

Repositório Git

Git é uma ferramenta de controle de versão de código

Um repositório Git é um local onde você armazena e gerencia seus arquivos de código-fonte e rastreia as alterações feitas nesses arquivos ao longo do tempo. O Git é um sistema de controle de versão distribuído amplamente utilizado que permite que várias pessoas colaborem em projetos de software, mantendo um histórico completo das alterações feitas nos arquivos. Aqui estão algumas características importantes dos repositórios Git:

Com um repositório Git possibilita o acesso em outros workspaces

1. Histórico de Versões: O Git mantém um histórico completo de todas as alterações feitas nos arquivos, permitindo que você reverta para versões anteriores, compare alterações e entenda como o código evoluiu ao longo do tempo.

2. Branching e Merging: O Git permite que você crie ramificações (branches) do código para desenvolver novos recursos ou corrigir bugs sem afetar a versão principal (branch principal). Você pode então mesclar (merge) suas alterações de volta para a branch principal quando estiverem prontas.

3. Colaboração: O Git é projetado para facilitar a colaboração entre desenvolvedores. Várias pessoas podem trabalhar no mesmo projeto, cada uma em sua própria branch, e depois mesclar suas alterações de forma ordenada.

4. Distribuído: O Git é um sistema de controle de versão distribuído, o que significa que cada desenvolvedor tem uma cópia completa do repositório em seu próprio computador. Isso facilita o trabalho offline e melhora o desempenho.

5. Integração com Plataformas de Hospedagem: Existem várias plataformas de hospedagem que oferecem serviços de hospedagem
de repositórios Git. Essas plataformas facilitam o compartilhamento e a colaboração em projetos Git. Algumas das principais plataformas de hospedagem Git incluem:

- GitHub: Uma das plataformas mais populares, o GitHub oferece recursos de hospedagem de repositórios Git, controle de acesso, rastreamento de problemas, integração contínua e muito mais.

Exemplo de repositório do GitHub [Arquivo Pessoal]

- GitLab: O GitLab é uma plataforma de hospedagem Git que oferece funcionalidades semelhantes ao GitHub, incluindo integração contínua, gerenciamento de projetos, rastreamento de problemas e muito mais. Ele também pode ser instalado localmente em seu próprio servidor.

- Bitbucket: O Bitbucket é outra plataforma de hospedagem Git que oferece hospedagem gratuita e privada para repositórios Git e Mercurial. É frequentemente usado por equipes que desejam manter seus repositórios privados.

Diferença entre Git & GitHub

— Azure DevOps (anteriormente conhecido como VSTS): Oferecido pela Microsoft, o Azure DevOps fornece recursos de gerenciamento de código-fonte, integração contínua, rastreamento de problemas e gerenciamento de projetos, tudo em uma única plataforma.

- GitKraken: Embora seja mais conhecido como um cliente Git, o GitKraken também oferece serviços de hospedagem de repositórios Git que podem ser usados para colaboração.

Essas são algumas das principais plataformas de hospedagem Git disponíveis. A escolha da plataforma depende das necessidades da equipe e do projeto, bem como das preferências pessoais em relação aos recursos oferecidos.

Git Semântico

O “Git Semântico” não se refere a uma ferramenta ou tecnologia específica, mas sim a um conjunto de convenções e práticas de nomenclatura para mensagens de commit em repositórios Git. O objetivo principal do Git Semântico é tornar o histórico de commits mais compreensível e rastreável, fornecendo informações claras sobre as alterações introduzidas em um projeto. Isso facilita a colaboração e o gerenciamento de versões em equipes de desenvolvimento.

Aqui estão algumas das principais práticas e convenções do Git Semântico:

1. Mensagens de Commit Descritivas: As mensagens de commit devem ser descritivas e informativas. Elas devem explicar o motivo da alteração, o que foi alterado e, quando aplicável, como isso afeta o projeto. Evite mensagens de commit genéricas ou vagas.

2. Padrão de Mensagem de Commit: Uma convenção comum é usar um padrão de mensagem de commit que consiste em três partes:

- Tipo: Indica a natureza da alteração, como “feat” (nova funcionalidade), “fix” (correção de bug), “docs” (documentação), “style” (melhorias na formatação de código), “refactor” (refatoração de código), etc.

- Âmbito (Opcional): Especifica a área do projeto afetada pela alteração.

- Descrição: Uma descrição concisa da alteração.

3. Exemplo de Mensagem de Commit: Aqui está um exemplo de mensagem de commit seguindo o Git Semântico:

Exemplo de mensagem de commit

4. Versões Semânticas: Além das mensagens de commit, o Git Semântico muitas vezes está associado à prática de versionamento semântico, que envolve atribuir números de versão de acordo com regras específicas, como MAJOR.MINOR.PATCH. O versionamento semântico ajuda a comunicar claramente quais mudanças estão presentes em cada versão.

5. Liberar Notas: Ao criar uma nova versão do software, é uma prática comum gerar notas de lançamento que detalham as alterações em cada versão, incluindo as mensagens de commit associadas a essa versão.

O uso do Git Semântico pode melhorar a clareza do histórico de commits, facilitar a identificação de alterações específicas e ajudar a equipe a entender o que está acontecendo no projeto. No entanto, é importante que as convenções e práticas específicas sejam definidas e adotadas pela equipe de desenvolvimento para que todos sigam um padrão consistente. Existem ferramentas e plugins disponíveis que podem ajudar a aplicar e fazer cumprir essas convenções automaticamente, facilitando sua adoção.

Extras

Técnica Pomodoro para gerenciamento de Tempo

Utilize a técnica pomodoro no seu cotidiano de trabalho.

A técnica Pomodoro é uma abordagem de gerenciamento de tempo amplamente utilizada para aumentar a produtividade e a concentração no trabalho, incluindo o desenvolvimento de software. Ela foi desenvolvida por Francesco Cirillo nos anos 1980 e é chamada de “Pomodoro” (tomate em italiano) devido ao uso de um timer de cozinha em formato de tomate que ele usava quando era estudante. A técnica consiste em dividir o trabalho em blocos de tempo curtos, geralmente 25 minutos, chamados de “Pomodoros”, seguidos por pausas curtas.

Aqui está como você pode aplicar a técnica Pomodoro no desenvolvimento de software:

Passo 1: Prepare-se

1. Escolha a tarefa que deseja realizar no desenvolvimento de software. Pode ser programar uma nova funcionalidade, corrigir um bug, revisar código, etc.

2. Configure um timer ou use uma ferramenta de Pomodoro (como um aplicativo Pomodone, Focus Booster, ou até mesmo um timer de cozinha).

Passo 2: Trabalhe no Pomodoro

1. Inicie o timer de 25 minutos e concentre-se intensamente na tarefa escolhida.

2. Evite distrações durante esse período. Desligue notificações, mantenha o foco na tarefa e evite verificar e-mails, mídias sociais ou outras distrações.

Passo 3: Faça uma Pausa Curta

1. Quando o Pomodoro de 25 minutos terminar, faça uma pausa de 5 minutos. Levante-se, estique-se, respire profundamente ou faça algo que relaxe a mente.

2. A pausa curta ajuda a recarregar a energia e a evitar a fadiga mental.

Passo 4: Repita o Ciclo

1. Após a pausa curta, retome o próximo Pomodoro e repita o ciclo de trabalho concentrado e pausa curta.

Passo 5: Longa Pausa (Após 4 Pomodoros)

1. Após completar quatro Pomodoros consecutivos (ou seja, após aproximadamente 2 horas de trabalho concentrado), faça uma pausa mais longa, geralmente de 15 a 30 minutos.

2. Use essa pausa para descansar, comer, exercitar-se ou fazer algo fora do ambiente de trabalho.

Passo 6: Continue o Processo

1. Continue a alternar entre Pomodoros e pausas curtas ao longo do dia, ajustando conforme necessário para atender às suas necessidades e níveis de concentração.

2. Registre o progresso de cada Pomodoro concluído, o que pode ajudar a manter o foco e a avaliar a produtividade ao longo do tempo.

A técnica Pomodoro é eficaz porque ajuda a manter a concentração durante os períodos de trabalho e evita o esgotamento mental. No desenvolvimento de software, onde a complexidade e a necessidade de foco são frequentes, essa técnica pode ser uma ferramenta valiosa para aumentar a produtividade e gerenciar o tempo de forma eficiente. Experimente e ajuste a técnica conforme suas preferências pessoais e necessidades específicas.

Ler documentações oficiais

Documentação oficial Angular

Muitas pessoas, principalmente estudantes que estão iniciando a sua carreira no mundo da programação, tem um certo receio/pavor ou até mesmo preguiça de buscar as informações direto da fonte ao estudar uma nova linguagem, framework ou lib de um software. Mas, o que não elas não imaginam, é que esta é uma das melhores e mais eficazes formas de entender os conceitos para posteriormente aplicá-los em um projeto futuro.

Talvez, o motivo seja também por não entender o idioma (na maioria das vezes é em inglês) contudo, há muitas ferramentas online, como: dicionários, tradutores, extensões de Browser que traduzem as páginas, aplicativos (como o Duolingo), etc… O que pode minimizar o tempo, caso o desenvolvedor não tenha tempo ou condições financeiras para fazer um curso de idiomas.

Não seja cringe

As documentações oficiais são para não só saber as novidades das linguagens, baixar suas últimas versões, mas também para aprender como utilizá-las nos projetos. Em sites como do Bootstrap, por exemplo, tem guias passo-a-passo de como utilizar os trechos de código e como implementá-los, em qual pasta cada um dos arquivos precisa estar, como chamar uma classe CSS no HTML, como usar os arquivos CDN (ou seja, sem precisar baixar nada, mas usando um link dinâmicos direto do site que irão se atualizar com o tempo), enfim.

Outros sites como o Angular, mostram como criar componentes, como funcionam as injeções de códigos, reaproveitamento de cards de componentes, etc… Tudo isso é passado nas documentações oficiais de cada projeto. Muitas vezes, escolas de tecnologia que disponibilizam cursos de desenvolvimento de software praticamente apenas traduzem o conteúdos das documentações oficiais e criam vídeos explicando os mesmos conceitos. Está na hora de mudar os hábitos e aprender de outra forma, olhando com maior prestígio as documentações.

Anote conceitos no caderno ou agenda

Anotar conceitos ajuda a fixar mais eficazmente o conteúdo

Conheço gente que estuda programação há anos e não tem o costume de anotar os conceitos das linguagens, mas isso é um grande erro porquê normalmente com o passar do tempo acabamos esquecendo de algumas coisas por falta de prática. Há também um outro problema em não anotar resumos que é se tornar aquele “Dev Ctrl + C / Ctrl + V”, que só sabe copiar e colar os códigos sem entender a lógica que está fazendo sem nenhum propósito.

E quando isso acontece, o Dev não está preparado para resolver problemas (bugs) que quando ocorrem se desesperam, deixam projetos pela metade e muitas vezes acabam desistindo e tendo problemas psicológicos como Ansiedade, Depressão, Transtorno Bipolar, Borderline, Síndrome do Impostor, Síndrome do Pânico, entre outras doenças que são muito difícil de se recuperar. Pessoas assim, devem procurar ajuda médica para evitar esse tipo de situação, para não se frustrarem nessa área com tantas coisas que podem proporcionar na qualidade de vida que é o Desenvolvimento de Software.

Inteligência Emocional & PNL

Nem só de Hard Skills vive um Dev

A inteligência emocional e a Programação Neurolinguística (PNL) podem desempenhar um papel significativo no mundo da programação, ajudando os desenvolvedores a aprimorar suas habilidades de comunicação, gerenciamento de estresse e desempenho geral. Aqui estão cinco dicas para aplicar a inteligência emocional e a PNL no desenvolvimento de software:

1. Autoconsciência Emocional:

- Desenvolver a autoconsciência emocional é essencial para os programadores. Isso envolve a capacidade de reconhecer e compreender suas próprias emoções. PNL pode ajudar a melhorar essa habilidade através de técnicas como a observação de padrões de pensamento e emoção em situações estressantes.

2. Comunicação Efetiva:

- A PNL oferece técnicas para melhorar a comunicação interpessoal, o que é crucial em equipes de desenvolvimento de software. Isso inclui a compreensão dos estilos de comunicação dos outros, ajustando sua própria comunicação para ser mais eficaz e ouvir ativamente.

3. Gerenciamento do Estresse:

- O desenvolvimento de software pode ser estressante devido a prazos apertados e desafios técnicos. A inteligência emocional e a PNL podem ensinar técnicas de gerenciamento de estresse, como a respiração profunda, a visualização positiva e a reestruturação cognitiva, que podem ajudar os programadores a lidar com situações de alta pressão.

4. Motivação e Resiliência:

- Desenvolver resiliência emocional é fundamental para lidar com as inevitáveis dificuldades que surgem na programação. A PNL pode ajudar a reforçar a motivação, estabelecendo metas claras e desenvolvendo uma mentalidade de crescimento.

5. Empatia e Trabalho em Equipe:

- A empatia é uma parte crucial da inteligência emocional. Ela envolve a capacidade de compreender e se relacionar com as emoções dos outros. No desenvolvimento de software, a empatia é valiosa para colaborar eficazmente em equipes. A PNL pode ajudar a melhorar a empatia, ensinando a observação de linguagem corporal e pistas verbais para entender as emoções dos colegas de equipe.

Lembrando que a inteligência emocional e a PNL são habilidades que podem ser desenvolvidas com o tempo e a prática. Aplicar esses conceitos no mundo da programação não só melhora a qualidade da comunicação e do trabalho em equipe, mas também ajuda os desenvolvedores a enfrentar desafios com mais eficácia e aprimorar sua satisfação e sucesso profissional.

Especialista vs Generalista

Escolher uma stack e se aperfeiçoar ao invés de querer aprender tudo de uma vez, não seja generalista, somente após conquistar uma boa experiência.

Relação entre Full Stack e Dev em T

A abordagem de escolher uma stack (conjunto de tecnologias) e se aperfeiçoar nela é uma estratégia sólida para desenvolver sua carreira no campo da tecnologia. Tornar-se especialista em uma área específica antes de se aventurar em muitas tecnologias pode trazer várias vantagens. Aqui estão algumas razões pelas quais essa abordagem é eficaz:

Profundidade de Conhecimento: Ao se concentrar em uma única stack, você pode aprofundar seu conhecimento nessa área específica. Isso permite que você compreenda profundamente a tecnologia, seus princípios subjacentes e as melhores práticas, tornando-se um especialista nela.

Valor para o Mercado: Especialistas em uma tecnologia específica são frequentemente mais valorizados no mercado de trabalho. Empresas muitas vezes procuram profissionais que dominam uma tecnologia-chave para liderar projetos críticos.

Projetos de Alto Impacto: Ao se tornar especialista em uma stack, você estará mais bem preparado para trabalhar em projetos complexos e de alto impacto que utilizam essa tecnologia. Isso pode abrir portas para oportunidades emocionantes.

Desenvolvimento de Habilidades Transferíveis: Uma vez que você tenha desenvolvido habilidades profundas em uma stack, você também estará melhor preparado para aprender novas tecnologias no futuro. As habilidades de resolução de problemas e pensamento crítico que você adquire podem ser aplicadas a diferentes contextos.

Confiança e Segurança: Conhecimento profundo em uma área específica geralmente leva a uma sensação de confiança e segurança em sua carreira. Você se torna um especialista em quem os outros confiam para orientação e liderança.

No entanto, é importante equilibrar essa abordagem com algumas considerações:

Mercado de Trabalho: Antes de escolher uma stack específica para se especializar, é uma boa ideia fazer alguma pesquisa de mercado para garantir que a tecnologia que você está escolhendo tenha demanda e oportunidades em sua região ou no mercado global.

Aprendizado Contínuo: Embora se especializar seja valioso, lembre-se de que o campo da tecnologia está em constante evolução. Você ainda precisará estar disposto a aprender novas tecnologias e se adaptar ao longo de sua carreira.

Amplitude de Conhecimento: Uma vez que você tenha uma base sólida em sua stack escolhida, você pode começar a explorar outras tecnologias relacionadas que possam se complementar. Isso pode aumentar ainda mais sua versatilidade.

Em resumo, a estratégia de se aperfeiçoar em uma única stack é uma escolha sábia para muitos profissionais de tecnologia, mas é importante fazê-lo com um planejamento cuidadoso e estar disposto a continuar aprendendo ao longo de sua carreira. Encontre o equilíbrio certo entre profundidade e amplitude em seu conhecimento, dependendo de seus objetivos e interesses pessoais.

Fundamentos de programação ou Frameworks?

A melhor opção é escolher se aprofundar nos conceitos e lógica de linguagens básicas antes de se aventurar em frameworks.

Focar em primeiro entender os conceitos e lógica das linguagens básicas antes de se aventurar com frameworks ou bibliotecas é uma estratégia sólida e amplamente recomendada, especialmente para aqueles que estão começando no desenvolvimento de software. Aqui estão algumas razões pelas quais essa abordagem é benéfica:

1. Fundamentos Sólidos: Ter uma compreensão profunda dos conceitos fundamentais de programação, como estruturas de controle, tipos de dados, algoritmos e estruturas de dados, é essencial. Esses conceitos são transferíveis entre linguagens de programação e formam a base para o desenvolvimento de software eficaz.

2. Adaptabilidade: Quando você entende os princípios subjacentes, fica mais fácil aprender novas linguagens, frameworks e bibliotecas. Você pode aplicar sua compreensão dos conceitos básicos a diferentes tecnologias, tornando-se mais adaptável e capaz de aprender mais rapidamente.

3. Resolução de Problemas: A programação é, em sua essência, sobre a resolução de problemas. Ter uma compreensão sólida dos conceitos permite que você aborde uma ampla variedade de problemas de maneira eficaz, independentemente da linguagem ou da tecnologia em uso.

4. Depuração Eficaz: Quando ocorrem erros ou problemas em seu código, sua compreensão dos fundamentos da programação facilita a depuração e a correção dos problemas. Você pode identificar problemas de lógica e solucioná-los com mais eficiência.

5. Independência de Tecnologia: A indústria de tecnologia está em constante evolução, e as linguagens e tecnologias podem mudar rapidamente. Ter uma base sólida de conhecimento em conceitos de programação torna você menos dependente de tecnologias específicas, o que pode ser útil ao longo de sua carreira.

6. Criatividade e Inovação: Compreender os conceitos básicos libera sua criatividade. Você pode pensar de forma mais aberta e inovadora, projetar soluções personalizadas e adaptadas aos problemas em vez de depender de soluções pré-fabricadas de frameworks ou bibliotecas.

No entanto, é importante observar que, à medida que você avança em sua carreira, frameworks e bibliotecas podem se tornar ferramentas valiosas para aumentar sua produtividade e eficiência. O conhecimento dos fundamentos de programação não é uma alternativa para aprender as tecnologias específicas necessárias para o trabalho em um ambiente de desenvolvimento real. Portanto, é aconselhável combinar uma base sólida com o aprendizado prático das linguagens, frameworks e bibliotecas relevantes à medida que você progride em sua carreira.

Emmet Abreviation

Esse truque poupa um baita tempo e é ótimo quando se trabalha com prazos curtos.

Use e abuse de abreviações e auto-complete isso facilitará muito ao desenvolver seus códigos, poupando um tempo precioso. Tanto estas funcionalidades do VS Code são uma verdadeira mão na roda assim como os atalhos de teclado que, com o passar do tempo você irá ficar craque e a sua habilidade de escrever não terá limites, poderá literalmente digitar sem olhar para o teclado, pois vai conhecer cada tecla e digitará com muito mais agilidade.

Digitar sem olhar para o teclado é só para os fortes! haha

The End

Po-Po-Po-Por hoje é só pessoal! Até breve! Aleluia finalmente acabou! 🙏😂

--

--

Marcelo Junior

👨🏼‍🎓 | ADS 👨🏼‍💻 | Analista de TI 📍 | RS / SC 🤖 | "I'm Just a Tech!" 🐧 | Open Source 👾 | $¢®¡¶T k¡Dd¥€ IG/TT: @designtechti.dev