<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cleison Carlos</title>
    <description>The latest articles on DEV Community by Cleison Carlos (@cleisoncarlos).</description>
    <link>https://dev.to/cleisoncarlos</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F680742%2F38e606b7-90ff-47d3-916f-9312059537b6.jpeg</url>
      <title>DEV Community: Cleison Carlos</title>
      <link>https://dev.to/cleisoncarlos</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cleisoncarlos"/>
    <language>en</language>
    <item>
      <title>O fator humano e a engenharia de software</title>
      <dc:creator>Cleison Carlos</dc:creator>
      <pubDate>Wed, 07 Feb 2024 15:34:57 +0000</pubDate>
      <link>https://dev.to/cleisoncarlos/ddakqvz2uv-bh1</link>
      <guid>https://dev.to/cleisoncarlos/ddakqvz2uv-bh1</guid>
      <description>&lt;p&gt;Quando se fala em &lt;strong&gt;engenharia de software&lt;/strong&gt;, as pessoas associam o termo aos programas de computadores e todo o processo de automatização que ele pode proporcionar, essa é uma visão bem simplista, pois para que esse software tenha eficiência e sucesso é necessário um fator muito importante, o fator humano, que é pouco abordado quando se fala a respeito deste assunto.&lt;/p&gt;

&lt;p&gt;Software não é apenas a“aplicação rodando na máquina do cliente”, mas também todos os dados, informações, documentações e configurações necessárias para que ele opere corretamente e estas práticas requerem atividades em conjunto como: analisar, projetar, programar, testar… E essas operações e caracterizam-se pela interação da equipe de desenvolvimento.&lt;/p&gt;

&lt;p&gt;Ao longo de todo o processo de desenvolvimento encontramos muitas dificuldades que vão além da tecnologia, é comum encontrarmos fatores psicológicos que incluem estresse, desmotivação, pressão, dificuldades cognitivas e problemas pessoais.&lt;/p&gt;

&lt;p&gt;Muitas vezes o engenheiro de software é bem treinado em termos técnicos, mas não dá o foco em termos de ciências humanas para aprender a se comunicar com pessoas, essas habilidades muita das vezes são subestimadas, ou simplesmente as deixamos de lado.&lt;/p&gt;

&lt;p&gt;É preciso saber lidar com as pessoas, conhecer suas limitações e necessidades, afinal fazemos software com elas e para elas. Precisamos nos colocar no lugar do outro para entendermos suas dificuldades, afinal pensamos diferente e transformar a ideia da cabeça de um cliente em software não é uma tarefa fácil.&lt;/p&gt;

&lt;p&gt;Essa é uma habilidade imprescindível não só na área de tecnologia, mas de uma forma geral o profissional que tem essa qualidade poderá se dar bem em qualquer área.&lt;/p&gt;

&lt;p&gt;Focar nas pessoas também é essencial, é um pilar principal do sucesso dos negócios, também descrito no Manifesto Agile:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Pessoas relacionadas à negócios e desenvolvedores devem trabalhar em conjunto e diariamente, durante todo o curso do projeto.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Construir projetos ao redor de indivíduos motivados. Dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Weinberg publicou o livro “The Psycology of Computer Programming”. O livro é considerado atual até hoje, e as mesmas questões básicas persistem por décadas.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Um pouco de psicologia e ciências humanas seria a chave para o sucesso individual e de equipes de desenvolvimento.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Afinal é essencial para os engenheiros e gestores não focarem apenas na tecnologia, mas também focar na dinâmica do desenvolvimento, não avaliar as pessoas como linhas de código , pois uma equipe bem entrosada, processos elaborados em conjunto, uma boa interação com o cliente é essencial para o sucesso do seu software ou da sua empresa. A aplicação de conceitos psicológicos ao processo de desenvolvimento de software é um avanço na direção correta.&lt;/p&gt;

&lt;p&gt;Fontes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Psychology of Computer Programming, Gerald M. Weinberg, 1998&lt;/li&gt;
&lt;li&gt;Analog World: Improving Software Engineering Through Applied Psychology, John R. Fox &lt;/li&gt;
&lt;li&gt;IBM Rational Software&lt;/li&gt;
&lt;li&gt;Manifesto for Agile Software Development
Manifesto for Agile Software Development&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>engenhariadesoftware</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Uma análise sobre a Engenharia do Conhecimento</title>
      <dc:creator>Cleison Carlos</dc:creator>
      <pubDate>Thu, 12 Aug 2021 17:44:08 +0000</pubDate>
      <link>https://dev.to/cleisoncarlos/uma-analise-sobre-a-engenharia-do-conhecimento-4e6b</link>
      <guid>https://dev.to/cleisoncarlos/uma-analise-sobre-a-engenharia-do-conhecimento-4e6b</guid>
      <description>&lt;p&gt;Implementar projetos de forma eficiente e produtiva não é uma tarefa fácil. O relacionamento entre membros da equipe pode ser bastante complexo e podem surgir disputas, pressão para realização de tarefas, falta de entrosamento entre membros da equipe, pensamentos diferentes sobre a forma de desenvolver, ou mesmo a escolha da tecnologia, entre vários outros. Afinal, o ser humano é complexo por ele só.&lt;/p&gt;

&lt;p&gt;A Gestão do Conhecimento tem a finalidade facilitar o acesso e manter um gerenciamento sobre as informações em seus diversos meios. O conhecimento é a informação interpretada, ou seja, transformar o conhecimento implícito dentro das cabeças dos funcionários em um conhecimento explícito, podendo ser compartilhado por toda a organização.&lt;/p&gt;

&lt;p&gt;Para podermos gerenciar este conhecimento é necessário o uso de ferramentas que vão além da administração de dados e de informações, possibilitando uma melhor e mais rápida geração, codificação e transferência do conhecimento. Como qualquer ferramenta, elas foram criadas para facilitar o trabalho, assim aumentando sua produtividade.&lt;/p&gt;

&lt;p&gt;Sabendo como o meio reage às informações, podemos prever as mudanças e nos posicionar de forma para obter vantagens e ser bem sucedido nos objetivos e projetos da empresa.&lt;/p&gt;

&lt;p&gt;Em uma definição resumida, pode-se dizer que Gestão do Conhecimento é um processo de disseminação e apropriação de conhecimentos por todos envolvidos, com o propósito de atingir a excelência dentro da organização.&lt;/p&gt;

&lt;p&gt;A principal preocupação na área está na busca da melhoria de desempenho, na melhora dos processos e na criação de conhecimento.&lt;/p&gt;

&lt;p&gt;Assim, através das ferramentas e tecnologias de informação e até mesmo uma boa comunicação, de forma geral, uma boa prática de gestão influencia direta e indiretamente o bom desempenho tecnológico, organizacional e financeiro de uma empresa.&lt;/p&gt;

&lt;p&gt;Precisamos admitir que os conhecimentos da equipe são valiosos ativos, ativos intangíveis e confinados apenas na “cabeça” de quem os possui. Uma boa gestão desse conhecimento pode ser transferido a todos e assim elevando o nível da equipe.&lt;/p&gt;

&lt;p&gt;Quando esse conhecimento não é gerido e o membro abandona a equipe, esse conhecimento é simplesmente perdido.&lt;/p&gt;

</description>
      <category>engenhariadesoftware</category>
      <category>software</category>
    </item>
    <item>
      <title>Tendências de arquitetura de software na pesquisa e prática, um resumo de “Software Architecture: a Roadmap”</title>
      <dc:creator>Cleison Carlos</dc:creator>
      <pubDate>Thu, 05 Aug 2021 16:54:08 +0000</pubDate>
      <link>https://dev.to/cleisoncarlos/tendencias-de-arquitetura-de-software-na-pesquisa-e-pratica-um-resumo-de-software-architecture-a-roadmap-2lei</link>
      <guid>https://dev.to/cleisoncarlos/tendencias-de-arquitetura-de-software-na-pesquisa-e-pratica-um-resumo-de-software-architecture-a-roadmap-2lei</guid>
      <description>&lt;p&gt;Um dos elementos mais importantes para proporcionar ganhos em agilidade, eficiência, manutenção e evolução dos sistemas de informação é a arquitetura de software, contudo, à medida que os sistemas tornam-se maiores, o uso de princípios deve ser destacado de modo a obter vantagens no retorno e investimento considerando prazos e custos finais, com isso a arquitetura de software tem entrado em cena de modo para lidar com esses sistemas grandes e complexos, assim, algoritmos e estruturas de dados deixaram de ser o ponto mais crítico do projeto de construção de sistema de informação. Ao longo da última década arquitetura de software tem recebido cada vez mais atenção como uma importante área de software engenharia.&lt;/p&gt;

&lt;p&gt;Os profissionais têm percebido que a arquitetura é um fator crítico de sucesso para os sistemas de informação, no entanto, apesar desse progresso, a arquitetura de software continua a ser relativamente imatura.&lt;/p&gt;

&lt;p&gt;No artigo “Software Architecture: a Roadmap”, de David Garlan (2000), descreve algumas das importantes tendências de arquitetura de software na pesquisa e prática, assim trago um resumo de algumas dessas questões.&lt;/p&gt;

&lt;h2&gt;
  
  
  O papel da arquitetura de Software
&lt;/h2&gt;

&lt;p&gt;A arquitetura de software pode desempenhar um importante papel em pelo menos, seis aspectos no desenvolvimento do software.&lt;/p&gt;

&lt;p&gt;Compreensão: A arquitetura simplifica a capacidade de compreender os grandes sistemas, apresentando um nível de abstração em que um sistema de projeto de alto nível pode ser facilmente compreendido.&lt;/p&gt;

&lt;p&gt;Reutilização: A reutilização de software tem sido bastante apontada como um fator de grande economia de tempo. Assim, desenvolvedores de outro projeto podem beneficiar-se reutilizando seu código, ao invés de reinventá-lo.&lt;/p&gt;

&lt;p&gt;Construção: Uma descrição da arquitetura fornece um modelo parcial para o desenvolvimento através de principais componentes e dependências entre eles.&lt;/p&gt;

&lt;p&gt;Evolução: Quando o software atinge um estágio de desenvolvimento considerado satisfatório para um determinado usuário do sistema, pode não ser satisfatório para todos os usuários, mesmo que o grupo de desenvolvedores abandone o projeto em algum momento, nada impede que outros desenvolvedores continuem o desenvolvimento em uma versão paralela ou mesmo assumam a administração da original.&lt;/p&gt;

&lt;p&gt;Análise: Uma arquitetura adequada fornece novas oportunidades para análise, e restrições imposta pelo estilo da arquitetura.&lt;/p&gt;

&lt;p&gt;Gestão: Projetos onde são utilizadas uma arquitetura de software adequada leva a uma compreensão muito mais clara das necessidades, estratégias de implementação e riscos.&lt;/p&gt;

&lt;p&gt;O arquiteto de software deverá ter um foco nas implicações que os objetivos organizacionais terão sobre as opções técnicas, ou seja, uma visão global do sistema. Deverá construir modelos para o problema em mãos, buscando achar uma solução e buscando sempre abordagens alternativas, a documentação é imprescindível a fim de apresentar e discutir com os demais membros da equipe de desenvolvimento e com o gerente responsável pelo projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Passado
&lt;/h2&gt;

&lt;p&gt;A origem da arquitetura de software foi primeiramente identificado na pesquisa de Edsger Dijkstra em 1968 e David Parnas no início de 1970. Estes cientistas enfatizaram a importância das estruturas de um sistema de software e a importância da identificação da sua estrutura.&lt;/p&gt;

&lt;p&gt;Há anos atrás, as arquiteturas foram em grande parte ad hoc e estas arquiteturas raramente eram mantidas uma vez que o sistema tivesse sido construído, como as pessoas começaram a compreender o papel fundamental que desempenha no projeto arquitetônico determinar o sucesso do sistema, eles também começaram a reconhecer a necessidade de uma abordagem mais organizada. Os primeiros autores começaram a observar certos princípios em projetos para chamar a arquitetura como um campo importante no desenvolvimento e estabelecer um padrão de trabalho para arquitetos de software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Presente
&lt;/h2&gt;

&lt;p&gt;Atualmente a tecnologia móvel está entre as mais promissoras do mercado, a necessidade de integração com outras plataformas e dispositivos, o constante crescimento na capacidade de processamento e uma ampla necessidade por aplicativos com requisitos mais complexos por parte dos usuários, são apenas alguns fatores que incrementam a dificuldade no desenvolvimento.&lt;/p&gt;

&lt;p&gt;Entretanto poucas propostas foram definidas focando as características específicas desta área e desta plataforma. Esse desenvolvimento na grande maioria, ainda se faz por técnicas advindas de outras plataformas, muitas vezes inadequadas. Embora não haja grande variação, de um modo geral a arquitetura é muito mais visível como uma importante atividade no desenvolvimento de software, muita coisa mudou na última década, além da base tecnológica para a arquitetura de software ter melhorado dramaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Linhas de Produtos e Padrões
&lt;/h2&gt;

&lt;p&gt;Uma dessas tendências tem sido o desejo de explorar a frequência em vários produtos, com isso uma nova abordagem de reuso de software tem motivado os desenvolvedores, essa abordagem é conhecida como Linhas de Produtos de Software que é baseada na reutilização de artefatos de software onde são estabelecidos sob uma mesma arquitetura. Esse novo conceito tem sido utilizado pelos desenvolvedores para reduzir custos e aumentar a sua produtividade, porém esta adoção há riscos que devem ser avaliados antes de iniciar este tipo de reuso.&lt;/p&gt;

&lt;p&gt;Os projetos que fizeram uso de reutilização de software mostraram que sem um planejamento adequado, os custos do projeto com reutilização podem ser bem maiores do que para desenvolver os artefatos a partir do zero. Desse modo é fundamental um planejamento com antecedência dos produtos para os quais a reutilização será aplicada, sem duvidas as organizações podem obter benefícios consideráveis em termos de redução de custos e tempo de colocação no mercado, aumento na qualidade do produto, aplicando desenvolvimento de linhas de produto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Codificação e Divulgação
&lt;/h2&gt;

&lt;p&gt;Um impedimento cedo para o surgimento de arquitetura de software como uma disciplina de engenharia de software foi a falta de compartilhada conjunto de conhecimentos sobre arquiteturas e técnicas para desenvolver bons resultados&lt;/p&gt;

&lt;p&gt;Embora reconhecendo o valor de uniformidade estilística, realidades de construção de software, muitas vezes forçar um para compor sistemas a partir de peças que não foram arquitetados de uma forma uniforme.&lt;/p&gt;

&lt;p&gt;Por exemplo, pode-se combinar um banco de dados a partir de um fornecedor, com middleware de outro, e uma interface de usuário de um terço. Nesses casos, as partes nem sempre funcionam bem juntos em grande parte porque eles fazem conflitantes suposições sobre os ambientes em que eles foram projetados para trabalhar. Isto conduziu ao reconhecimento de a necessidade de identificar estratégias arquiteturais para evitar problemas.&lt;/p&gt;

&lt;h2&gt;
  
  
  Futuro
&lt;/h2&gt;

&lt;p&gt;Embora hoje a arquitetura de software seja uma base muito mais sólida do que há uma década, não é ainda estabelecida como uma disciplina que é ensinada e praticada universalmente toda a indústria de software. Uma razão para isso é simplesmente que é preciso tempo para novas abordagens, outra razão é que a base tecnológica para o projeto de arquitetura é ainda imaturo, mas a tendência da evolução natural da área é trazer avanços contínuos.&lt;/p&gt;

&lt;p&gt;No entanto, o mundo do desenvolvimento de software e os contextos em que o software está sendo usado está mudando em significativa maneiras. Essas mudanças prometem ter um grande impacto sobre a forma como é praticada a arquitetura de software, são consideradas três das tendências mais proeminentes e suas implicações para o campo da arquitetura de software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comprar ou desenvolver??
&lt;/h2&gt;

&lt;p&gt;Enquanto comprar um software significa adaptar os processos de negócio ao software, desenvolver significa construir uma aplicação que atenda a um processo específico.&lt;/p&gt;

&lt;p&gt;Na verdade, muitos as empresas estão rapidamente encontrando-se mais na posição de integradores de sistema que os desenvolvedores de software. Isto é, a maior parte do código que eles fazem é escrever código “copiar e colar”. Há uma série de consequências para a arquitetura de software, essa tendência aumenta a necessidade de toda a indústria.&lt;/p&gt;

&lt;p&gt;Esta tendência é evidente na crescente popularidade do software ‘componente baseado em’ desenvolvimento. Ao escolher os componentes que concordam relativamente a um quadro comum de arquitetura, tais como JavaBeans, ou CORBA, muitos dos problemas da arquitetura e incompatibilidade são aliviadas, deve-se levar em consideração as expectativas em relação ao software e quanto se tem a investir para realizar essa escolha.&lt;/p&gt;

&lt;h2&gt;
  
  
  Computação distribuída
&lt;/h2&gt;

&lt;p&gt;Os últimos anos trouxeram mudanças importantes na área de desenvolvimento de software, como a criação de padrões que permitiram que sistemas fossem integrados mais rapidamente, suportando um número crescente de usuários e aplicações através da internet. Com a criação do conceito de Web Services e sua materialização através dos protocolos HTTP + SOAP, os serviços foram definitivamente expostos na Internet.&lt;/p&gt;

&lt;p&gt;A Desde então surgiram conceitos como computação na nuvem e software como serviço (SaaS — Software as a Service). O software como serviço, seja através de uma infraestrutura local ou através de datacenters espalhados pelo mundo, permite que funcionalidades de aplicações sejam oferecidas como serviço pela Internet e consumidas sob demanda, de forma flexível e dinâmica.&lt;/p&gt;

&lt;p&gt;Percebe-se claramente a evolução de TI de sistemas de produção de software monolíticos, similares aos sistemas de produção criados por Enri Ford, onde o cliente não participa do processo, sendo apenas um consumidor do bem produzido, para software como um serviço; sendo este último um processo de intensa participação do usuário consumidor.&lt;/p&gt;

&lt;p&gt;Com o este crescente aumento do uso da Internet e a redução dos preços de computadores contribuiu para a criação de um modelo com aplicações distribuídas, cada vez mais, o PC e uma variedade de outras interfaces (dispositivos portáteis, laptops, telefones) são utilizados como uma interface de usuário que fornece acesso a dados e de computação remota, essa tendência não é surpreendente, pois um modelo centrado na rede oferece vantagens significativas.&lt;/p&gt;

&lt;p&gt;Ela promove a mobilidade do usuário por meio do acesso a informações e serviços, essa tendência tem uma série de consequências para a engenharia e arquitetura de software, para tais sistemas de um novo conjunto de desafios arquitetura de software surgem, esses desafios podem ser eficientemente dirigidos com os recursos que a computação na nuvem oferece, o desafio é estabelecer uma arquitetura mínima, capaz de suportar o trafego de acessos e ter um recursos disponíveis quando necessário.&lt;br&gt;
Computação Ubíqua ( Internet das coisas )&lt;/p&gt;

&lt;p&gt;A terceira tendência é relacionado para computação pervasiva em que o universo da computação é povoado por uma rica variedade de dispositivos de computação: torradeiras, casa sistemas de aquecimento, sistemas de entretenimento, carros inteligentes, etc.&lt;/p&gt;

&lt;p&gt;Além disso, estes dispositivos são susceptíveis de ser bastante heterogêneo, o que requer especiais considerações em termos de seus recursos físicos e poder de computação.&lt;/p&gt;

&lt;p&gt;Há uma série de consequentes desafios para a arquitetura de software. Por exemplo, pode ser desejável ter uma arquitetura que permita modificar a fidelidade de computação baseado sobre as reservas de energia à sua disposição.&lt;/p&gt;

&lt;p&gt;Embora isto possa ser adequado para ambientes em que temos apenas alguns dispositivos de computação, relativamente estáticos (tal como PCs e notebooks), ele não escala para ambientes com centenas de dispositivos. Devemos, portanto, encontrar arquiteturas que forneçam um controle muito mais automatizado sobre a gestão dos serviços computacionais, e que os usuários de permissão para mover-se facilmente de um ambiente para outro.&lt;/p&gt;

&lt;p&gt;A arquitetura de software cresceu consideravelmente nos últimos dez anos, e promete continuar esse crescimento para um futuro previsível. Muitas das soluções para esses desafios são susceptíveis de surgir como uma consequência natural das práticas arquiteturais, outros desafios surgem com a evolução da computação e as necessidades para software: estes serão necessárias novas inovações significativas, propondo uma abordagem que ajuda a gerenciar a complexidade no desenvolvimento de software. Criar abordagens que possibilitam visualizar o sistema em módulos e observar as relações entre eles, tornando assim a implementação muito mais eficaz e eficiente.&lt;/p&gt;

&lt;p&gt;A arquitetura consiste em um modelo de alto nível que possibilita um entendimento e uma análise mais fácil do software a ser desenvolvido, para se representar essas soluções, a arquitetura de software como solução mais adequada para atender aos requisitos do software, uma avaliação dessa estrutura deve ser realizada.&lt;/p&gt;

&lt;p&gt;As organizações podem obter benefícios consideráveis em termos de redução de custos e tempo de colocação no mercado, aumentando a qualidade do produto final utilizando técnicas adequadas de arquitetura de software, porém há riscos e custos associados à adoção destas praticas que devem ser avaliados antes de embarcar nessa iniciativa.&lt;/p&gt;

&lt;p&gt;Fonte: “Software Architecture: a Roadmap”, de David Garlan (2000).&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>software</category>
      <category>search</category>
    </item>
  </channel>
</rss>
