JavaRush /Blogue Java /Random-PT /Quem é um engenheiro de software? Engenharia de software ...

Quem é um engenheiro de software? Engenharia de software versus programação “apenas”

Publicado no grupo Random-PT
Chamamos a sua atenção uma adaptação de um artigo de Samer Buna sobre as diferenças entre engenharia de software e programação, ou como o desenvolvimento de um conceito de software difere de “apenas codificação”.
Quem é um engenheiro de software?  Engenharia de Software VS
Todos os engenheiros de software podem codificar, mas nem todos os programadores podem desenvolver conceitos de software. Algumas pessoas não gostam do termo “Engenheiro de Software” (também conhecido como Engenheiro de Software) porque na maioria das vezes usamos a palavra “engenheiro” quando falamos de algo mais físico – construção, por exemplo. Nosso artigo, é claro, não trata do termo em si. Se de repente lhe causar rejeição, pode ser facilmente substituído por algo relacionado à criatividade. “Criador de Software”, “Autor de Software”... ou mesmo “Criador de Software”!
Quando falamos em “engenheiro de software”, queremos dizer uma pessoa cuja principal tarefa não é apenas escrever código, mas criar uma aplicação de qualidade. E nisso ele vê sua vocação, aplicando uma abordagem científica e métodos estatísticos ao seu trabalho. Para ele, programar não é apenas uma forma de ganhar dinheiro para comprar comida.
A capacidade de programar não torna automaticamente uma pessoa um engenheiro de software. Qualquer um pode aprender a programar e é muito mais fácil do que parece. Qualquer pessoa pode criar um programa simples para uso próprio, mas isso não garante que o mesmo programa funcionará para outras pessoas. Meu exemplo preferido é este: muitos de nós cantamos no chuveiro, mas, infelizmente, essa performance nem sempre é digna de um palco profissional. É claro que, para uma experiência musical de alta qualidade, você provavelmente recorrerá a um profissional. Você precisa de mais exemplos?
  • Todos aprendemos matemática e redação na escola, mas isso não nos torna matemáticos e escritores.
  • A maioria de nós é capaz de preparar um prato aceitável e às vezes muito saboroso, mas nem todos se atreveriam a preparar uma mesa para 100 pessoas para um jantar da embaixada. Neste caso, contratamos um cozinheiro.
  • Você está pronto agora para confiar totalmente a construção de sua nova casa ao filho do vizinho que cria impressionantes obras-primas de Lego?
O ponto principal que estou tentando transmitir neste artigo é que programas simples são muito diferentes dos programas desenvolvidos por engenheiros. A definição mais simples do processo de programação: traçar uma sequência ordenada de ações para um computador a fim de obter algo específico como saída, dados determinados parâmetros de entrada. O processo de engenharia de software é o design, escrita, teste e curadoria de um programa de computador para resolver problemas para muitos usuários. Trata-se de criar soluções confiáveis ​​e seguras que resistirão ao teste do tempo e funcionarão para alguns desafios possivelmente desconhecidos, além do óbvio.
Quem é um engenheiro de software?  Engenharia de Software VS
Os engenheiros de software sabem tudo sobre os problemas que resolvem, as soluções que propõem, as limitações dessas soluções, a sua privacidade e segurança. Na minha opinião, se uma pessoa não entende a essência do problema, não deveria nem começar a programar sua solução.

Mentalidade de engenharia - busca por soluções aplicadas

Os engenheiros de software não consideram escrever software em si como seu objetivo principal. Eles pensam em termos de satisfação de necessidades e resolução de problemas . Isto é importante porque nem todo problema requer uma solução de software. Alguns deles podem ser resolvidos usando programas existentes. A ocorrência de alguns problemas às vezes pode ser prevista com antecedência e, com a ajuda de um design de programa competente, eles podem ser evitados no futuro.

"Os intelectuais resolvem problemas, os gênios os impedem"

- Albert Einstein

Quem é um engenheiro de software?  Engenharia de Software VS
Problemas complexos geralmente exigem a escrita de muitos programas. Existem tarefas que requerem a execução paralela de aplicativos, enquanto outras requerem a execução sequencial de vários programas. Vários problemas podem ser resolvidos simplesmente treinando os usuários. Antes de começar a criar um programa, um engenheiro de software se faz uma série de perguntas:
  • Que problemas devo resolver?
  • O que mais você pode fazer além de escrever código para resolvê-los?
  • O que posso fazer para facilitar essas tarefas com o aplicativo?

Qualidade do programa e qualidade do código

Bons programas são claros e legíveis. Eles são fáceis de estender, funcionam bem com outros programas e não serão um pesadelo para trabalhar. A qualidade do código não é negociável. Deve ser alto, só isso. Ao considerar isso, desculpas como o mau humor do programador ou prazos muito apertados (ah, esses prazos!) são inaceitáveis. Um dos aspectos mais importantes do desenvolvimento de software é projetar o programa de forma que seja fácil de manter e modificar no futuro (olá, OOP!). Hoje quase todos os softwares são modificáveis, muitas vezes esse processo ocorre mesmo sem a participação do usuário ou não exige nada do usuário além de “seu programa foi atualizado, clique em OK ou Adiar”. É claro que os usuários têm o direito de exigir novos recursos dos aplicativos (especialmente se estivermos falando de software empresarial de longa duração escrito em Java ou de jogos online que podem ser jogados por anos).
Quer saber mais sobre programação Java? Junte-se ao grupo de desenvolvedores Java !
Um trecho de código por si só dificilmente pode ser considerado útil. A funcionalidade útil do software começa onde partes diferentes de aplicativos se comunicam entre si, trocam dados e trabalham juntas para executar a tarefa de apresentar dados e interfaces aos usuários.
Quem é um engenheiro de software?  Engenharia de Software VS
Os programas devem ser concebidos tendo estes pontos em mente! Que mensagens eles recebem? Quais eventos são monitorados? Como ocorre a autenticação e autorização? Outro sinal igualmente importante de um bom programa é a clareza do código, e não o número de testes que o aplicativo passou ou mesmo uma boa cobertura de testes. Perguntas aparentemente simples: “Alguém além de mim pode entender meu código?”, “Serei capaz de escrever este código hoje e entendê-lo em algumas semanas?” Uma citação popular sobre as duas coisas mais difíceis da programação diz:

“Existem apenas duas coisas realmente difíceis: invalidação de cache e nomeação de entidade”

- Phil Carlton.

A legibilidade do código é muito mais importante do que normalmente se acredita. Infelizmente, não é possível definir métricas ou parâmetros precisos para clareza do código. Memorizar normas de linguagem geralmente aceitas, bons modelos de software e métodos de desenvolvimento ajudará em parte. Mas geralmente isso não é suficiente. Com o tempo e a experiência, os verdadeiros profissionais desenvolvem, por assim dizer, um “senso de clareza”, algo semelhante à intuição. Uma metáfora de escrita funciona bem aqui: saber muitas palavras não o ajudará a escrever algo conciso e de significado claro.

“Eu teria escrito mais curto, mas não tive tempo.”

-Mark Twain.

A capacidade de corrigir bugs de forma rápida e fácil é uma característica fundamental de um bom software. Erros no programa devem enviar mensagens claras e ser registrados centralmente para rastreamento. Quando um novo erro é relatado, a pessoa que irá corrigi-lo deve ter a capacidade de depurá-lo. Ele precisa se conectar facilmente ao sistema, acessar informações de execução a qualquer momento e também poder verificar facilmente a funcionalidade de qualquer parte do sistema.

Ambientes e testes

Quando os engenheiros de software desenvolvem aplicativos, eles fazem o possível para garantir que funcionem em computadores de diferentes arquiteturas e com diferentes sistemas operacionais. É importante que o software funcione em diferentes resoluções e orientações de tela, e também que não “consome” mais memória e poder de processamento do que o necessário.
Quem é um engenheiro de software?  Engenharia de Software VS
Quando se trata de aplicativos da web, eles devem funcionar em todos os principais navegadores. Ao criar um aplicativo de desktop, você precisa garantir que ele seja iniciado e funcione corretamente no Mac, Windows e Linux. Bom, o programa depende dos dados, então o aplicativo deve funcionar mesmo no caso de conexão de dados lenta ou ausência dela. Para escrever um software, os engenheiros pensam em todos os tipos de opções de cenário e planejam testá-los. Tudo começa na escolha da opção ideal, na qual tudo funciona sem erros. Eles então documentam quaisquer problemas potenciais e os inscrevem no plano de teste. Alguns engenheiros começam escrevendo código, que chamam de caso de teste, que simula cenários para todos os prováveis ​​problemas e erros. E então é escrito um programa que pode funcionar com qualquer uma das opções consideradas. A habilidade única de um engenheiro de software talentoso não é saber escrever código, mas entender o que exatamente o aplicativo deve fazer como saída e como alcançá-lo. Quando os requisitos de software do cliente estão incompletos e possivelmente ambíguos, o engenheiro precisa avaliá-los e “entendê-los” corretamente.

Custo e eficiência

Um engenheiro de software pode resolver o problema rapidamente na maioria dos casos. Se você acha que contratar um programador experiente “caro” aumentará seus custos, pense novamente. Quanto mais experiente for o programador contratado, mais rápido ele será capaz de fornecer uma solução simples, organizada, confiável e fácil de usar. No longo prazo, isso reduzirá definitivamente os custos de desenvolvimento de software.
Quem é um engenheiro de software?  Engenharia de Software VS
Também é necessário considerar os custos de execução do programa. Qualquer programa utiliza recursos computacionais e eles não são gratuitos.
O trabalho de um engenheiro de software é escrever código eficiente que não utilize recursos computacionais desnecessariamente.
Por exemplo, armazenar em cache dados acessados ​​com frequência é uma das possíveis estratégias utilizadas para alcançar o resultado desejado. Mas esta é apenas uma entre provavelmente centenas de ferramentas e soluções que podem tornar um programa mais rápido e eficiente. Um programador iniciante pode fornecer uma solução barata, mas usar tal solução acabará custando muito mais para você e seus clientes do que se você trabalhasse com um desenvolvedor experiente que criou uma solução eficaz em primeiro lugar.

Foco na experiência do usuário

Um bom programador desenvolve tendo a Experiência do Usuário (UX) em mente. A interação homem-máquina é um tema com inúmeras pesquisas e soluções. Quanto mais soluções forem aplicadas, melhor deverá ser o resultado do programa. Aqui estão alguns exemplos, apenas para lhe dar uma ideia de qual é essa direção:
  • Ao projetar formulários de entrada de dados como e-mail, um bom programa deve ignorar as maiúsculas e minúsculas do endereço de e-mail. Não deverá ocorrer um erro se a tecla CAPSLOCK for pressionada porque o endereço de e-mail é exclusivo em letras minúsculas. Se o programa aceitar um novo endereço de e-mail como entrada, verifique-o no início do processo de entrada para alertar o usuário de que ele está usando o formato de endereço errado. Esta solução inclui verificações óbvias, como a falta do sinal “@”, e também verificações não tão óbvias, como a verificação da ordem errada de caracteres, como “gmail.ocm”.

  • Quando o usuário é redirecionado para realizar alguma ação, um bom programa deve lembrar sua posição atual e devolvê-lo após terminar. Um bom programa também deve lembrar os dados já transmitidos pelo usuário, o que é importante para uma maior interação com ele.

    Digamos que você esteja pesquisando viagens aéreas como Hóspede na Expedia. Mais tarde você decide criar uma conta. O aplicativo deve salvar todas as suas pesquisas anteriores na nova conta e você poderá acessá-las de outros dispositivos.


  • Quem é um engenheiro de software?  Engenharia de Software VS
  • Um bom programa é projetado tendo em mente os cenários de comportamento do usuário. Você não precisa apenas adicionar novos recursos “mais ou menos”; coloque-se no lugar do usuário. Um dia eu estava reservando passagens de avião e esqueci de incluir meu número de passageiro frequente. Após receber a confirmação, resolvi acessar o site da companhia aérea e adicioná-lo para obter o desconto. Para descobrir como fazer isso, brinquei no site por uns bons 10 minutos. O aplicativo era tão pouco óbvio que simplesmente vaguei sem rumo pelas diferentes páginas do site para encontrar o que precisava. Mais tarde, descobri que já havia chegado algumas vezes à página certa, mas nem entendi, pois o campo que precisava estava perdido entre outros campos semelhantes de um formulário enorme.

    Acontece que para editar as informações da viagem, precisei percorrer cerca de vinte linhas do formulário, inserir o número do cartão fidelidade e o telefone, sem os quais o formulário não poderia ser enviado para verificação. Este é um exemplo de programa que foi desenvolvido sem pensar no quão confortável o usuário ficaria com ele.

Confiabilidade, segurança e proteção

Na minha opinião, a diferença mais importante entre um desenvolvedor de software profissional e um amador é levar em consideração parâmetros como confiabilidade, segurança e proteção do aplicativo ao criá-lo.
Um verdadeiro profissional sabe que é responsável pela segurança de sua solução.
Partes do programa devem ser tolerantes com entradas incorretas, estados incorretos e interações incorretas. Isto é realmente muito difícil de aplicar e é a principal razão pela qual ouvimos histórias de pessoas que morrem devido a bugs de software. Os usuários inseriram, estão inserindo e continuarão inserindo dados incorretos no programa. Isto deve ser aceito como um fato. Além disso, alguns farão isso de propósito, com o objetivo de quebrar o aplicativo e obter os recursos disponíveis para ele.
Quem é um engenheiro de software?  Engenharia de Software VS
Aqui está um exemplo da vida real: a pessoa supostamente responsável pela recente violação de dados da Equifax é acusada de falhar em suas responsabilidades profissionais, que consistiam em desenvolver soluções para resistir a informações ruins e maliciosas em todos os produtos de software disponibilizados ao público. Incidentes relacionados à segurança da informação envolvem não apenas entradas incorretas e maliciosas, mas também dados inseridos incorretamente. Se um usuário esqueceu sua senha, quantas vezes ele pode tentar digitá-la? Você vai bloqueá-lo depois disso? E se outra pessoa tentar bloquear sua conta? Um usuário pode transmitir suas credenciais por meio de um canal de dados não criptografado? E se a solicitação de login vier de um local incomum? O que você fará se a tentativa de login parecer automática? O que você fez para proteger seus usuários contra scripts entre sites, falsificação de solicitações entre sites e phishing comum? Você tem uma estratégia de backup em caso de ataque DDoS em seus servidores? Estas questões destacam apenas algumas das questões que precisam ser consideradas. O programa protegido não salva informações importantes em formato de texto. Ele o protege com uma cifra unidirecional complexa (que é fácil de criptografar, mas quase impossível de descriptografar sem a chave). Estas são medidas de backup caso o programa seja hackeado. Os hackers descobrirão dados criptografados que são inúteis para eles. Problemas inesperados surgem mesmo nos melhores programas. Um programador que não está preparado para sua ocorrência dificilmente pode ser chamado de profissional. Até que espere um comportamento inesperado, ele não é engenheiro. Ele é o “autor de programas inseguros”. Os erros nos programas nem sempre são óbvios. A nossa capacidade intelectual de antecipar e prevenir erros conhecidos é limitada. É por isso que os engenheiros de software entendem a importância de boas ferramentas que lhes permitam escrever software correto e seguro.

Ferramentas necessárias

Não há dúvida de que precisamos de ferramentas de desenvolvimento diferentes e boas. Seu papel é muitas vezes subestimado, mas na verdade eles economizam muito tempo e esforço, simplificando algumas tarefas em uma ordem de grandeza. Imagine se você ainda tivesse que fazer upload de arquivos via FTP para implantação, por assim dizer, à moda antiga. Imagine depurar problemas de rede e desempenho sem o Chrome DevTools! E quão ineficiente seria escrever código JavaScript sem ESlit e Prettier hoje em dia!
Quem é um engenheiro de software?  Engenharia de Software VS
Qualquer ferramenta que reduza o tempo de feedback enquanto você escreve o código deve ser bem-vinda. Quando encontro uma ferramenta que antes não conhecia, mas que é realmente útil e eficaz, só posso lamentar não tê-la usado antes daquele momento feliz.
Ferramentas melhores e mais modernas irão ajudá-lo a se tornar um programador melhor. Encontre-os, use-os, aprecie-os e, se puder, melhore-os. E não fique preso à mesma coisa: quem sabe, com uma nova ferramenta você gastará tempo instalando e aprendendo uma vez, e então resolverá problemas muitas vezes mais rápido?

A evolução da engenharia de software

Ninguém pode aprender engenharia de software em dois meses, seis meses ou mesmo um ano. Você não aprenderá como ser engenheiro de software em um curso, universidade ou treinamento. Tenho estudado há mais de vinte anos e continuo estudando agora. Só consegui me considerar um programador experiente depois de uma década aprendendo e desenvolvendo, criando e mantendo aplicativos usados ​​por milhares de usuários. A engenharia de software não é para todos, mas todos deveriam aprender a resolver seus problemas usando um computador. Se você pode aprender a escrever programas simples, você deveria. Se você pode aprender a usar software disponível publicamente, você deveria. Se você aprender a usar software de código aberto e personalizá-lo, você terá um superpoder! Cada dia traz aos desenvolvedores novos desafios, novos problemas, e é por isso que a engenharia de software é necessária. A principal tarefa desta profissão é criar software para que uma pessoa comum não tenha que lidar com ele por muitos anos. Para que não haja necessidade de longos estudos para interagir com os programas. Mesmo assim, os engenheiros de software estão constantemente pensando em criar ferramentas melhores que possam resolver problemas conhecidos mais complexos e fazendo todo o possível para garantir que novos problemas apareçam o mais raramente possível.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION