Aqui temos os princípios básicos sobre sistemas operacionais baseados em Linux, explorando seu histórico, distribuições, serviços e ferramentas essenciais. Também veremos a estrutura de diretórios do Linux e comandos essenciais do terminal, com o objetivo de capacitar o estudante a se sentir confortável e confiante ao trabalhar com esse sistema operacional poderoso.
Além disso, abordaremos o Git, uma das ferramentas mais populares para controle de versão de software. Veremos conceitos fundamentais como repositórios, terminologia e comandos básicos, ajudando o estudante a dominar essa tecnologia indispensável para trabalho em equipe e gerenciamento de projetos.
- Linux: Histórico, Filosofia e Aplicações
- Licenças de Software
- Distribuições Linux
- Terminologia Linux
- Serviços, Jogos e Certificações no Linux
- Estrutura de Diretórios do Linux
- Comandos Essenciais do Terminal
- Gerenciamento de Pacotes
- Permissões de Acesso
- O que é Git e Controle de Versionamento
- Repositório Git
- Comandos Básicos do Git
- Terminologia do Git
- Outros Comandos Essenciais
- Trabalhando com Branches
- Fundamentos de Arquitetura de Software
- Estilo Arquitetural
- Documentação da Arquitetura de Software
- Modelos Arquiteturais
- O Futuro da Arquitetura de Software
- Fundamentos de Design de Sistemas
- Experiência do Usuário (UX)
- Interface do Usuário (UI)
- Pesquisa com Usuários
- Ideação e Brainstorming
- Prototipação
- Arquitetura da Informação
- Wireframes
- Service Blueprints
- Modelo Atômico
- Design Sprint
- Linux: Criado por Linus Torvalds em 1991, inspirado no Unix.
- Diferenciais:
- Código aberto sob a licença GPL (General Public License).
- Flexibilidade e personalização.
- Mascote: O pinguim Tux, criado em 1996, é o símbolo icônico do Linux.
O kernel é o núcleo do sistema operacional, responsável por:
- Gerenciamento de memória.
- Gerenciamento de processos e arquivos.
- Controle de dispositivos conectados.
Criado por Richard Stallman em 1983, o projeto GNU:
- Desenvolve softwares livres com código aberto.
- Foi essencial para o desenvolvimento do Linux.
- Colaboração e comunidade: Código aberto permite contribuições de diversos desenvolvedores.
- Liberdade: Usuários podem estudar, modificar e distribuir o software.
- Servidores: Estabilidade e segurança para aplicações como web hosting e banco de dados.
- Dispositivos móveis: Base do Android.
- Sistemas industriais e IoT: Adaptação a diferentes necessidades.
- Linux Foundation: Promove e protege o Linux como projeto colaborativo.
- Free Software Foundation (FSF): Criada por Stallman, promove a liberdade do software.
- Código-fonte aberto para uso, modificação e distribuição.
- Exemplos: Linux, Firefox, LibreOffice.
- Código aberto para colaboração, mas nem sempre livre.
- Exige que modificações do software sejam distribuídas sob os mesmos termos da licença original.
- Exemplo: GPL.
- Freeware: Gratuito, mas sem acesso ao código-fonte.
- Shareware: Gratuito para teste, mas exige pagamento para uso contínuo.
- Código-fonte fechado, com uso restrito.
- Exemplos: Windows, Microsoft Office.
- Software acessado via internet, oferecido por assinatura.
- Exemplos: Dropbox, Spotify, Google Apps.
Conjuntos de ferramentas e programas baseados no kernel Linux, adaptados a diferentes necessidades.
- Debian: Foco em estabilidade; base para outras distribuições como Ubuntu.
- Ubuntu: Fácil de usar, ideal para iniciantes.
- Mint: Experiência similar ao Windows.
- Red Hat: Focado em soluções empresariais, com suporte comercial.
- Etapas de inicialização do sistema operacional, do BIOS ao carregamento do kernel.
- Estruturas como Ext4, XFS e Btrfs para gerenciar arquivos.
- X Window System: Base para ambientes gráficos como Gnome e KDE.
- Ferramenta poderosa para comandos avançados e automação.
- Interpretador de comandos; exemplos incluem Bash e Zsh.
- Ferramentas como LibreOffice, Firefox, GIMP e VLC.
- Compatibilidade com jogos via Wine ou Proton (Steam).
- LPI (Linux Professional Institute):
- Certificações: Linux Essentials, LPIC-1, LPIC-2 e LPIC-3.
O Linux utiliza uma estrutura de diretórios hierárquica baseada em uma raiz única, representada pelo símbolo /
. Cada diretório tem uma função específica:
- /bin: Armazena executáveis essenciais do sistema.
- /boot: Contém arquivos necessários para a inicialização do sistema.
- /dev: Representa dispositivos de hardware como arquivos especiais.
- /etc: Guarda arquivos de configuração do sistema e programas.
- /home: Diretório pessoal dos usuários.
- /root: Diretório do usuário administrador (root).
- /usr: Armazena aplicativos e arquivos compartilhados.
- /var: Contém dados variáveis como logs e e-mails.
- ls: Lista conteúdo de diretórios.
- Opções:
-l
: Mostra detalhes.-a
: Inclui arquivos ocultos.-h
: Exibe tamanhos em formato legível.
- Opções:
- cd: Muda o diretório atual.
- Uso:
cd [caminho]
- Uso:
- mkdir: Cria novos diretórios.
- Opção:
-p
: Cria diretórios aninhados.
- Opção:
- rmdir: Remove diretórios vazios.
- rm: Remove arquivos e diretórios.
- Opções:
-r
: Recursivo.-f
: Força a remoção.-v
: Exibe detalhes das remoções.
- Opções:
- pwd: Mostra o caminho completo do diretório atual.
- apt: Gerenciador de pacotes principal do Ubuntu.
- Comandos comuns:
update
,upgrade
,install
,remove
,list
,search
.
- Comandos comuns:
- dpkg: Gerenciador de pacotes para sistemas Debian.
- Útil para instalar pacotes fora do repositório padrão.
- ps: Exibe informações sobre processos ativos.
- top: Monitora processos em tempo real.
- jobs: Lista jobs em segundo plano na sessão atual.
- fg e bg: Controlam processos em foreground e background.
- kill: Encerra ou interrompe processos.
- Leitura (r), Escrita (w), Execução (x).
- Atribuídas a:
- Dono.
- Grupo.
- Outros.
- Possui permissões totais sobre o sistema.
- Deve ser usado com cautela para evitar danos ao sistema.
- Altera permissões de acesso de arquivos e diretórios.
- Sintaxe:
chmod [OPÇÕES] MODO ARQUIVO/DIRETÓRIO
.
- Sintaxe:
O Git é uma das ferramentas mais populares para controle de versões, essencial para o desenvolvimento de software.
Ele permite:
- Rastreabilidade: Acompanhe e reverta alterações no código.
- Colaboração: Trabalhe com múltiplos desenvolvedores sem conflitos.
- Backup: Armazene todas as versões do código para evitar perdas.
- Integração contínua: Automatize processos como testes e deploy.
Links úteis:
Um repositório Git é onde todos os arquivos e suas versões são armazenados e gerenciados.
Ele permite:
- Reverter alterações.
- Comparar versões.
- Analisar a evolução do projeto ao longo do tempo.
O comando git config
configura informações essenciais do usuário.
Exemplos:
git config --global user.name "Seu Nome"
git config --global user.email "seu.email@exemplo.com"
git config --list
Use o comando git init para transformar um diretório em repositório Git.
Exemplo:
mkdir meu-projeto
cd meu-projeto
git init
- Branches: Permitem trabalhar em linhas separadas de desenvolvimento sem afetar o código principal.
- Fluxo de Trabalho: -- Add (git add): Prepara as alterações para um commit. -- Commit (git commit): Registra as alterações no repositório local. -- Push (git push): Envia alterações para o repositório remoto.
git log
Exibe o histórico de commits.
# Exibir o histórico completo
git log
# Histórico de commits de um arquivo específico
git log <file>
git status
Mostra o estado atual do repositório.
git status
git reset
Desfaz alterações no repositório.
# Desfazer o último commit
git reset --soft HEAD^
# Remover arquivo do índice
git reset <nome-do-arquivo>
git diff
Compara diferenças entre versões.
# Diferença entre dois commits
git diff <commit1> <commit2>
Comando git branch
Gerencia ramificações do projeto.
# Listar branches existentes
git branch
# Criar nova branch
git branch nova-branch
Comando git checkout
Altera o contexto do repositório.
# Trocar de branch
git checkout nome-da-branch
# Criar e mudar para uma nova branch
git checkout -b nova-branch
A arquitetura de software é uma estrutura fundamental que orienta decisões sobre tecnologias, desempenho, escalabilidade, interoperabilidade, compatibilidade e desempenho de um sistema ou aplicativo. Ela define a organização do sistema e sua evolução ao longo do tempo.
Um padrão arquitetural orienta uma visão alinhada aos negócios, servindo como uma bússola para decisões relacionadas ao projeto de software.
- Início das discussões: Final dos anos 1960.
- Formalização: Década de 1990, com o livro Software Architecture: Perspectives on an Emerging Discipline por Mary Shaw e David Garlan.
- Evolução: Influenciada pela transição para a computação em nuvem e tecnologias emergentes.
O arquiteto de software vai além da programação, sendo responsável por:
- Oferecer soluções para corporações.
- Compreender os negócios da organização.
- Dominar tecnologias, serviços, normas, legislações e cloud computing.
- Proporciona níveis mais altos de abstração.
- Ajuda a entender a estrutura geral do sistema.
- Facilita a comunicação efetiva sobre o sistema.
- Suporte a atributos de qualidade.
- Reuso de arquitetura e conhecimento em novos projetos.
- Planejamento e gerência da manutenção.
- Diferenciação entre arquiteturas, simplificando o entendimento do projeto.
A documentação da arquitetura de software é essencial para o desenvolvimento de sistemas, servindo como registro duradouro das decisões e estruturas que moldam um sistema de software.
- Documentar do ponto de vista do usuário.
- Evitar ambiguidades e repetições desnecessárias.
- Usar modelos ou templates.
- Manter a documentação atualizada e revisada.
- Tornar acessível a todos os participantes do projeto.
- Estabelece um padrão para a descrição da arquitetura de sistemas e softwares.
- Proporciona um modelo conceitual para descrever e comunicar a arquitetura de forma eficaz.
- Visão Lógica: Funcionalidade do sistema.
- Visão de Desenvolvimento: Estrutura do software.
- Visão do Processo: Aspecto dinâmico do sistema.
- Visão Física: Infraestrutura necessária para o sistema.
Organiza o sistema em camadas, onde cada camada fornece serviços para a camada acima dela.
Um modelo em que o servidor fornece serviços, e um ou mais clientes consomem esses serviços.
Divide a aplicação em três partes interconectadas: Modelo, Visão e Controlador.
Estrutura a aplicação como uma coleção de serviços independentes, altamente manuteníveis e testáveis.
Permite que as empresas movam suas operações para servidores virtuais hospedados na Internet.
Automatiza tarefas complexas, analisa grandes volumes de dados e melhora a eficiência operacional.
Divide um aplicativo em pequenos serviços independentes que podem ser desenvolvidos, implantados e escalados individualmente.
O design de sistemas é uma abordagem multidisciplinar que visa criar soluções eficazes e satisfatórias para os usuários.
Ele envolve:
- Compreensão das necessidades dos clientes.
- Geração de ideias inovadoras.
- Criação de protótipos para testar e refinar soluções.
A UX refere-se à experiência geral que um usuário tem ao interagir com um produto ou serviço, abrangendo:
- Descoberta inicial.
- Uso cotidiano.
- Suporte pós-venda.
- Origem: Termo cunhado por Don Norman na década de 1990.
- Evolução: Exemplificada pela jornada da Apple na criação de dispositivos intuitivos e centrados no usuário.
Uma boa UX pode ser a diferença entre o sucesso e o fracasso de um produto, como demonstrado pelo sucesso do Netflix.
- UX: Foca na experiência geral do usuário.
- UI: Concentra-se especificamente na interface com a qual o usuário interage.
É crucial encontrar um equilíbrio entre:
- Necessidades do usuário (UX).
- Demandas do negócio, oferecendo uma interface agradável e prática (UI).
Importância: Entender as necessidades reais dos usuários.
- Preparação: Definir público-alvo e criar roteiro de perguntas.
- Condução: Criar um ambiente acolhedor e evitar vieses.
Utilizar os insights obtidos para informar decisões de design e desenvolvimento.
- Brainstorming: Geração livre de ideias em grupo.
- Crazy 8's: Método rápido para gerar múltiplas soluções.
- MESCRAI: Técnica para diversificar e desenvolver ideias existentes.
- Definir o problema.
- Montar um grupo multidisciplinar.
- Estabelecer regras.
- Gerar ideias.
- Analisar e selecionar as melhores soluções.
Permite visualizar e testar ideias antes da implementação final, reduzindo custos e riscos.
- Baixa Fidelidade: Esboços simples para demonstrar funcionalidade básica.
- Média Fidelidade: Mais detalhes e interações simples.
- Alta Fidelidade: Representação próxima ao produto final, com elementos visuais refinados.
- Criar protótipos baseados nas ideias geradas.
- Testar com usuários.
- Coletar feedback.
- Iterar e refinar o design.
A Arquitetura da Informação (AI) trata de organizar e estruturar as informações de forma compreensível e intuitiva para os usuários. Segundo o Information Architecture Institute, é a prática de decidir como organizar as partes de algo para torná-lo compreensível.
- Navegação: Facilita o deslocamento dos usuários pelo site ou sistema.
- Busca: Permite encontrar informações específicas dentro do sistema.
- Organização: Estrutura as informações de maneira lógica e acessível.
- Rotulação: Usa nomes e categorias intuitivas, alinhadas à linguagem dos usuários.
A documentação da AI pode incluir:
- Mapas do site: Estrutura geral do conteúdo.
- Wireframes: Esboços da disposição de elementos em páginas.
- Diagramas de fluxo do usuário: Caminhos percorridos pelos usuários.
- Blueprints: Detalhes sobre interações e funcionalidades de páginas.
- Modelos de conteúdo: Relacionam tipos de conteúdo e suas conexões.
- Taxonomias e etiquetagem: Classificação e representação de informações.
- Protótipos: Versões interativas que ajudam a testar usabilidade.
Os wireframes são representações visuais simplificadas de um site ou aplicativo, com foco em estrutura e funcionalidade, sem incluir detalhes gráficos.
- Estruture blocos de conteúdo principais, como cabeçalhos, menus e áreas de conteúdo.
- Defina a hierarquia e organização dos elementos, priorizando usabilidade.
- Garanta que o wireframe seja compreensível para equipes e stakeholders.
- Conteúdo: Localização de textos, botões e imagens.
- Estrutura: Disposição dos elementos na página.
- Hierarquia: Destaque para os elementos mais relevantes.
- Funcionalidade: Explicações sobre ações e interações.
- Comportamento: Reações a interações, como cliques e expansões.
- Cores, fontes específicas e elementos gráficos detalhados.
- Detalhes visuais ou conteúdo final.
- Especificações técnicas.
Os service blueprints mapeiam as interações entre os usuários e os processos internos de um serviço, oferecendo uma visão completa da jornada do cliente.
- Identifica falhas no atendimento às expectativas dos clientes.
- Alinha padrões de serviço com as necessidades dos usuários.
- Permite reestruturação de processos e treinamento de funcionários.
- Visão geral do serviço.
- Melhoria da experiência do cliente e dos colaboradores.
- Identificação de gargalos e redução de custos.
- Garantia de conformidade com regulamentos.
- Ações do cliente: Interações diretas do usuário.
- Ações de frontstage: Visíveis ao cliente (ex.: interação com atendente).
- Atividades de backstage: Não visíveis ao cliente (ex.: gestão de estoque).
- Processos de suporte: Sustentam as operações de frontstage.
- Linhas de separação: Diferenciam níveis de interação e visibilidade.
O design atômico, proposto por Brad Frost, organiza o design em componentes reutilizáveis, desde elementos básicos até estruturas complexas.
- Átomos: Elementos básicos como botões e ícones.
- Moléculas: Combinações de átomos (ex.: barra de navegação).
- Organismos: Conjuntos de moléculas com funções específicas (ex.: tela de perfil).
- Modelos: Esqueleto de páginas, delineando a estrutura sem conteúdo final.
- Páginas: Modelos preenchidos com conteúdo real.
- Promove consistência e eficiência no design.
- Facilita colaboração entre equipes.
- Simplifica ajustes e iterações.
- Dificuldade inicial em classificar elementos.
- Exige alinhamento e comunicação claros entre equipes.
- Pode ser inviável para projetos pequenos ou com prazos apertados.
Criado por Jake Knapp, o design sprint é uma metodologia ágil de cinco dias para resolver problemas, prototipar e testar ideias.
- Entendimento: Compreensão do problema e definição de objetivos.
- Ideação: Geração de soluções usando brainstorming e técnicas como Crazy 8s.
- Decisão: Seleção da melhor solução e criação de um storyboard.
- Prototipação: Desenvolvimento de um protótipo funcional.
- Teste de Usabilidade: Validação do protótipo com usuários reais.
- Validação rápida de ideias com feedback dos usuários.
- Alinhamento entre equipes multidisciplinares.
- Redução de riscos e custos de desenvolvimento.