Baixe o app para aproveitar ainda mais
Prévia do material em texto
FUNDAMENTOS DE DESENVOLVIMENTO DE SOFTWARES AULA 1 Prof.ª Luciane Yanase Hirabara Kanashiro SOFTWARE CONVERSA INICIAL Com certeza você já ouviu falar de software. Nós usamos algum software provavelmente todos os dias. Se você utiliza um computador, a Smart TV ou um celular, então você utiliza software. Mas mesmo utilizando-o todos os dias, saberia definir o que ele é? O que diferencia software de sistema? Ou, ainda, o que o diferencia de um programa? A seguir, veremos algumas definições que o auxiliará a responder às questões anteriores. No tópico 1, veremos sobre software, sistemas e programas. No tópico 2, veremos com mais detalhes os sistemas operacionais. No tópico 3, veremos sobre algoritmos e linguagens. No tópico 4, abordaremos sobre o jargão na área de TI. No tópico 5, ainda, veremos o ciclo de vida do desenvolvimento de software, onde serão abordadas diferentes metodologias que são frequentemente utilizadas. TEMA 1 – SOFTWARE, PROGRAMAS E SISTEMAS Com o advento da tecnologia e popularização da internet, os softwares, programas e sistemas têm sido uma constante em nossa vida. Provavelmente você utiliza algum tipo de software todo dia. Mas mesmo utilizando, você saberia definir o que ele é? Saberia diferenciar um software de um programa? Nesse tópico, veremos diversas definições que o ajudará a entender as diferenças conceituais entre os termos software, programa e sistema. 1.1 SOFTWARE E PROGRAMAS A seguir é dada uma definição técnica do que é um software. Observe que são vários conceitos que se unem na definição dada por Pressman (2001): Software consiste em: instruções (programas de computador) que, quando executadas, fornecem características, funções e desempenho desejados; estruturas de dados que possibilitam aos programas manipular informações adequadamente; informação descritiva, tanto na forma impressa quanto na virtual, descrevendo a operação e o uso dos programas. Simplificando a definição anterior, podemos dizer que um software é um programa de computador e toda a documentação associada a esse programa. Mas o que é um programa? Como você definiria um programa de computador? Uma definição conhecida e frequentemente utilizada por todos da área de TI é de que é uma sequência de passos ou instruções definidas por um algoritmo. Mas o que é um algoritmo? Aqui você pode assumir que este é como uma receita de bolo, um tutorial. Posteriormente, em outro tópico, veremos um conceito mais aprofundado. Um software tem ainda uma classificação, na realidade, ele pode ser classificado ou categorizado de várias maneiras. Nesta etapa, utilizaremos uma adaptação da classificação dada por Marçula (2009): Software de sistema (básico): sistemas operacionais; software utilitário. Software aplicativo. 1.2 SOFTWARE DE SISTEMA (BÁSICO) Software básico consiste em uma coleção de programas para apoiar outros programas. Realiza as tarefas de gerenciamento necessárias ao seu funcionamento. Temos nessa categoria os sistemas operacionais e o software utilitário. O sistema operacional é o software responsável pelo funcionamento geral dos sistemas de computação. Sem ele os sistemas de computação praticamente não funcionariam. Como exemplo de sistemas operacionais temos Windows, Unix, Linux e MacOS. A seguir são mostrados os ícones do Windows, Android, ubuntu e MacOS, respectivamente na ordem citada. Devido à importância, falaremos mais adiante e com mais detalhes sobre o Sistema Operacional. Os softwares utilitários ou ferramentas de sistema são os que acompanham o sistema operacional e o auxiliam nas suas tarefas (por exemplo, gerenciamento de dispositivos, mídias e programas). O software utilitário fornece ao usuário ferramentas para organizar os discos, verificar a disponibilidade de memória e corrigir as falhas de processamento. Costumamos dizer que são softwares úteis ao sistema operacional, ou seja, que trabalham em função do sistema operacional. São exemplos de utilitários: antivírus, compactadores, emuladores, desfragmentadores, formatadores, backup. O antivírus é um programa que detecta e remove o vírus, que é um programa malicioso. Emuladores são softwares que simulam, reproduzem um ambiente específico, por exemplo, o VmWare que simula um computador. Desfragmentadores eliminam a fragmentação de um sistema. O que é a fragmentação? Pense quando salvamos um arquivo no computador/smartphone, e em um outro momento editamos, fazemos algumas modificações naquele arquivo, as modificações não são salvas ao lado do arquivo original. Pense em um armário com várias gavetas: o seu arquivo original está na gaveta 1 e a edição desse arquivo está na gaveta 20; isso ocasiona lentidão na leitura e na gravação. É claro que a explicação técnica é mais complexa que essa abordada aqui, mas esse exemplo serve para entender o que é fragmentação. A desfragmentação ajuda a juntar os arquivos e sua edição próximos uns aos outros. Formatadores e backup: a formatação apaga tudo e reinstala. 1.3 SOFTWARE APLICATIVO O software aplicativo é também chamado apenas de aplicativo ou mais popularmente app. Podemos dizer que é um software que realiza algum trabalho para o usuário, ou seja, são programas que realizam tarefas específicas. Como exemplo temos as planilhas, o editor de texto, os navegadores (browsers), o editor de imagem, entre outros. A figura seguinte ilustra os ícones de vários softwares aplicativos. TEMA 2 – SISTEMA OPERACIONAL Um sistema pode ser definido como um conjunto de partes que se interagem para alcançar um determinado objetivo. O que diferencia software de um sistema é que este pode ser definido como um conjunto de softwares que interage para alcançar um determinado objetivo. O sistema operacional faz parte da categoria de software básico. Como visto anteriormente, o software básico é aquele necessário para o funcionamento do hardware ou de parte dele. Sem dúvida, sendo o software mais importante, devido às tarefas que desempenha, o sistema operacional é responsável pela supervisão dos processos executados em um computador. O sistema operacional gerencia todo o hardware e todo o software do computador e realiza a “comunicação” entre eles. Ao se falar em processo, você pode relacionar com um programa em execução para melhor entendimento. Embora a definição de programa e processos sejam diferentes, neste momento, podemos fazer essa analogia. Quando você abre o gerenciador de tarefas, você consegue ver vários programas, ou seja, vários processos executando. O sistema operacional vai ser responsável pela execução/supervisão desses processos. Além dos softwares, o SO gerencia o hardware, pois ele é responsável pela comunicação entre o software e o hardware. A figura seguinte apresenta o gerenciador de tarefas e mostra na aba Processos todos os processos que estão abertos no computador. Para abrir o gerenciador de tarefas no seu computador, você pode usar o atalho do teclado: CTRL + SHIFT + ESC, ou, ainda, digitar gerenciador de tarefas na barra de pesquisa do Windows. Também, é possível usar CTRL + ALT +DEL e escolher a opção Gerenciador de Tarefas. Figura 1 – Print do Gerenciador de Tarefas do Windows Podemos, ainda, dizer que o sistema operacional é uma camada entre o aplicativo utilizado pelo usuário e o hardware. Observe a próxima figura, a qual esquematiza essa representação: a camada de hardware, aqui representada pelo computador, a placa de vídeo, placa mãe, HD, memórias, CPU e periféricos. Veja que temos dois exemplos de SO – Windows e Linux – e alguns aplicativos, como o Chrome, o Firefox e o Word. Figura 2 – SO como camada intermediária entre usuário e hardware Crédito: Iamnee/shutterstock. O sistema operacional desempenha as seguintes funções: facilita o uso do computador pelo usuário, tornando mais simples a utilização de seus recursos; gerencia os recursos do computador; e controla a execução de programas pela CPU. Imagine se você não tivesse um sistemaoperacional instalado em seu computador, como faria para utilizá-lo? Se não tiver o SO instalado, você não conseguiria instalar os aplicativos. Observe que quando falamos em recursos, queremos dizer todo o hardware do computador e, consequentemente, o software. O sistema operacional gerencia todo o hardware, que é a placa de vídeo, placa de rede, memórias e os softwares instalados no computador. Quando você conecta um mouse, um headset no seu computador, eles também serão gerenciados pelo sistema operacional. Este, por sua vez, ainda controla a execução dos programas pela CPU. A CPU é o processador, é o acrônimo de Central Process Unit. Todo programa que necessita da utilização da CPU é controlado pelo SO. 2.1 SISTEMAS TRADUTORES Como integrantes do sistema básico, embora não tenham sido citados anteriormente, temos os sistemas tradutores, que são importantes para conhecermos, principalmente para quem irá trabalhar com desenvolvimento de software. Os sistemas tradutores convertem os programas escritos para um código em uma linguagem de máquina, mais adequada para manipular bits. Lembra dos códigos escritos nas linguagens de programação? Para que o computador entenda esse código, é necessário que ele seja traduzido para uma linguagem de máquina. Lembre-se de que o computador entende apenas bits. A figura a seguir ilustra um tradutor. O código entra e o tradutor o traduz para uma linguagem de máquina. Figura 3 – Tradutor Um programa escrito em linguagem de alto nível tem a necessidade de ser traduzido para a linguagem de máquina para que o computador possa executá-lo. Temos dois tipos de tradutores: os interpretadores e os compiladores. Então, todo programa escrito em linguagem de alto nível, aqui, quando falamos em linguagem de alto nível, fazemos referências às linguagens que utilizamos para desenvolvimento de apps (aplicativos). Existem, portanto, linguagens interpretadas e compiladas. A diferença é que nos interpretadores o código é interpretado linha por linha. Tome como exemplo um intérprete. Pode ser o intérprete de libras, ou outro qualquer, que, enquanto falamos, ele traduz. Já os compiladores traduzem o código todo de uma vez, gerando um .exe, por exemplo. Como analogia temos a tradução de um livro, em que o tradutor traduz todo o livro e ao final entrega-o traduzido. Figura 4 – Interpretador Figura 5 – Compilador TEMA 3 – ALGORITMOS E LINGUAGENS No tópico anterior, abordamos os softwares, programas e sistemas. Aqui, iremos conhecer um pouco mais sobre os algoritmos e as linguagens de programação. 3.1 ALGORITMOS No tópico anterior, vimos algo dos algoritmos. Foi mencionado que podem assumir que é algo parecido com a receita de bolo. A seguir, apresentamos uma definição de algoritmo. Essa definição é bem simples e sucinta e descreve perfeitamente o que ele é. Tal definição foi dada por Forbellone (2022, p. 3), em um livro sobre lógica de programação bastante utilizado como referência: “Algoritmo é uma sequência de passos que visa atingir um objetivo bem definido”. Nessa definição de algoritmo, uma sequência passo a passo visa atingir um objetivo bem definido. O objetivo aqui é representar mais fielmente o raciocínio envolvido na lógica de programação. Uma vez concebida uma solução, pode ser traduzida para qualquer linguagem de programação. Quem já teve Lógica de programação deve ter percebido que existe um gap semântico muito grande entre lógica de programação e a lógica do dia a dia. Se você ainda não teve Lógica de programação, quando tiver irá perceber esse gap. Quando falamos em semântica na linguagem de programação, estamos nos referindo ao conteúdo, ao significado. Vamos ver primeiro um exemplo em português para entendermos sintaxe e semântica. A sintaxe está relacionada com as regras, premissas, restrições. De maneira simplificada, as regras que determinam o modo como as palavras podem combinar-se para formar os enunciados definem a sintaxe. Tomemos como exemplo a frase: Fiz prova de FDS na semana passada. Se escrevêssemos: FDS passada semana prova fiz. Ainda assim reconheceríamos as palavras, mas a ordem está estranha! Semântica está relacionada com o conteúdo, o significado das palavras e sua representação. Por exemplo, um texto pode estar bem escrito (sintaticamente correto), mas sem sentido ou conteúdo (sem início, meio ou fim). Em linguagem de programação a sintaxe define como a forma ou a estrutura das expressões, dos comandos ou das unidades de programas devem ser, ou seja, ela define se um programa está corretamente escrito em uma determinada linguagem de programação. Por exemplo, a expressão seguinte está sintaticamente incorreta. Só de olharmos vemos que tem algo estranho. Um parênteses que se abriu e não fechou, um colchete perdido. Números que faltam. (2 ] - / Já a semântica define o significado formal dessas expressões, comandos ou unidades de programas. Ela define o significado da forma de cada trecho de código. Os erros de semântica estão relacionados com a lógica de programação. A próxima expressão está sintaticamente correta na linguagem Python, mas semanticamente não faz sentido somar um número e um caractere – na linguagem python, os caracteres são escritos utilizando aspas duplas (“) ou simples(‘). a = 2 + "3" Voltando ao assunto dos algoritmos, veremos, agora, alguns exemplos. A seguir, é mostrada uma receita de bolo de caneca. O modo de preparo é o passo a passo de como você deve fazer o bolo. No caso, é o algoritmo para se fazer um bolo. Exemplo 1 de algoritmo O segundo exemplo mostra um algoritmo para calcular a média da nota de duas provas. Exemplo 2 de algoritmo 3.2 LINGUAGENS Agora falaremos sobre as linguagens de programação. Você se lembra do que falamos sobre algoritmos? Depois que um problema é resolvido, ou melhor, depois que é feito um algoritmo para o problema, o programador passa esse algoritmo para uma linguagem de programação. O programador é quem profundamente conhece os detalhes da linguagem de programação que ele vai desenvolver. Costumamos dizer que depois de feito um algoritmo, este pode ser implementado em qualquer linguagem de programação. A seguir, temos uma imagem esquematizando que, após desenvolvermos os algoritmos, que representam a lógica de programação com a estrutura de dados, basta implementar para uma linguagem de programação. Figura 7 – Esquema: algoritmo + Lógica + ED = Linguagem É preciso lembrar que cada linguagem de programação tem uma sintaxe específica, com regras gramaticais próprias, como as que temos nas linguagens naturais. Observe nos próximos exemplos a utilização de comando para imprimir na tela a frase “olá mundo!”. Cada linguagem tem um comando próprio para realizar essa tarefa. Para imprimir uma frase na tela, em linguagem C, podemos fazer: printf(“Olá Mundo!”); Em linguagem Java, o comando para imprimir algo na tela seria: System.out.print(“Olá Mundo!”); Em linguagem Python: print(“Olá Mundo!”) No quadro seguinte, podemos visualizar o algoritmo do exemplo 2 implementado em três linguagens de programação diferentes. Algoritmo implementado na linguagem Python: Algoritmoimplementado na linguagem Java: Algoritmo implementado na linguagem C: Já a estrutura de dados diz respeito à forma como estes são armazenados e organizados na memória. Como estrutura de dados mais simples temos os vetores, também chamados de arrays ou listas. Cada linguagem tem formas e comandos específicos para manipular as estruturas de dados. TEMA 4 – GLOSSÁRIO DO DESENVOLVEDOR DE SOFTWARE Toda área tem seu jeito próprio de se comunicar, temos o chamado jargão. Segundo o dicionário Michaellis, “jargão” é a linguagem própria de um grupo profissional, sobretudo no nível lexical; gíria profissional. Na área da Computação, muito mais que em outras áreas, temos as palavras ou termos que são frequentemente utilizados na área de desenvolvimento. São termos tão corriqueiramente utilizados pelos profissionais da área queé necessário conhecê-los para compreender e conseguir se comunicar com seus pares. Até há pouco tempo muitas dessas siglas ou jargões eram totalmente desconhecidas pelas pessoas que não eram da área de TI (Tecnologia da Informação). Com a popularização da internet, muitas palavras que eram consideradas como jargão de TI passaram a ser utilizadas por muitas pessoas. Mas ainda temos alguns acrônimos, palavras ou termos que são utilizados e compreendidos apenas por quem trabalha na área de desenvolvimento. A seguir são citados alguns termos utilizados na área, que são importantes para o profissional de TI conhecer. Front-end: esse termo está relacionado com desenvolvimento da parte gráfica de uma aplicação web. Back-end: está relacionado ao desenvolvimento no lado do servidor. Ou seja, a programação que acontece no lado do servidor. Geralmente, o profissional que trabalha com Back-end tem experiência em versionamento e controle, deve ter, ainda, a habilidade para gerenciar o ambiente de hospedagem, levando em consideração a acessibilidade e segurança. Full-stack: o desenvolvedor full-stack é aquele que trabalha com ambas as abordagens tanto da parte gráfica, quanto da parte do lado do servidor. API: a Application Programming Interface (Interface de Programação de Aplicativos) pode ser definida como um conjunto de rotinas e padrões de programação que possuem o objetivo de acessar aplicativos de software ou plataformas baseados na web. A API é uma interface utilizada por um programa ou aplicação e não por um usuário. Framework: é um conjunto de código de uma linguagem de programação específica que auxilia no desenvolvimento de projetos de web ou de software. Podemos pensar no framework como se fosse uma biblioteca de códigos com funções já prontas. Na área de TI, também é comumente vista a definição como arcabouço de código. Exemplo de frameworks são: Vue.js, Angular, Bootstrap e React frameworks para desenvolvimento front-end. Spring boot e Laravel: framework para aplicações web back-end. A seguir temos logotipos do spring, angular, vue.js, react, laravel e bootstrap, respectivamente. IDE: é o acrônimo para Integrated Development Environment. O ambiente de desenvolvimento integrado é um software que integra diversas funcionalidades para desenvolvimento em uma única interface gráfica. A IDE auxilia e agiliza o processo de desenvolvimento. São exemplos de IDE: Pycharm, Eclipse, Apache Netbeans, Visual Studio. SDK: acrônimo para Software Development Kit, em português: kit de desenvolvimento de software. Basicamente, um SDK será composto de compilador, debugger e API. Um SDK pode ser entendido como conjunto de ferramentas fornecidos por um fabricante para que se desenvolva para uma plataforma ou sistema específico. Nativo: um aplicativo nativo é aquele desenvolvido para uma única plataforma utilizando linguagens e ferramentas específicas para a plataforma em questão. Por exemplo, para desenvolvimento nativo no Android, fazemos uso de uma SDK (Android SDK) e uma IDE (Android Studio), utilizando a linguagem Java e kotlin. Híbridos: dizer que uma aplicação é híbrida implica falar que sua implementação utiliza html, css e Javascript. As aplicações híbridas utilizam frameworks ou ferramentas que permitem uma mesma base de código. A aplicação híbrida é desenvolvida em uma única linguagem e distribuída para várias plataformas. Serviços: na área de desenvolvimento podem ser entendidos como processos de software. O termo processo de software, nesse caso, não é no sentido de conjunto de atividades que temos na engenharia de software, mas em um programa processado pelo SO (Sistema Operacional). Monolítico: é uma aplicação que roda com um único processo. Microsserviço: é uma abordagem arquitetônica e organizacional do desenvolvimento de software na qual o software consiste em pequenos serviços independentes que se comunicam usando APIs bem definidas. Esses serviços pertencem a pequenas equipes autossuficientes. Como características dos microsserviços temos que eles são autônomos e especializados. A próxima figura ilustra o conceito de aplicação monolítica e microsserviços. Figura 8 – Aplicação monolítica x microsserviços Crédito: Ashalatha/shutterstock. SOAP: Service-Oriented Architecture (Or Application) Protocol (protocolo de arquitetura orientada a serviços). O SOAP utiliza arquivos xml e o protocolo HTTP como protocolo de transporte. REST: REpresentational State Transfer, em português: Transferência Representacional de Estado, é um conjunto de restrições para criação de webservices. Quando um serviço implementa esse padrão, dizemos que é Restfull. Restfull utiliza arquivos JSON. SOAP e REST são APIs e são arquiteturas de webservice. Webservices são independentes de linguagem. Segundo Ferreira (2021), é correto afirmar que todo Webservice é uma API, mas nem toda API é um Webservice, porque tanto o Webservice quanto as APIs realizam a comunicação entre aplicações, porém a forma como são utilizados é totalmente diferente. A figura seguinte ilustra a independência dos webservices em relação às linguagens. Figura 9 – Independência de webservices em relação a linguagens de programação Crédito: Ashalatha/Shutterstock. Commit: o termo commit ou “comitar” significa enviar alterações de um determinado trecho do código, ou seja, o envio da criação de uma nova versão do projeto. Geralmente, quando o desenvolvedor termina uma tarefa, ele gera um commit. Esse commit possui o código modificado e a explicação do que esse commit faz naquele código. Versionamento: consiste em atribuir um número de versão ao estado do projeto. À medida que o desenvolvedor codifica, ele vai criando versões do projeto. Tome como exemplo várias pastas que representam versões do seu projeto: trabalho_FDS_v1, trabalho_FDS_v2. Snapshot: cópia instantânea em um determinado tempo de um volume. Git: é um sistema de controle de versão que gerencia as várias versões no desenvolvimento de um documento. Criado por Linus Torvalds, a justificativa para a escolha do nome é controversa, sendo que nenhuma delas foi desmentida pelo autor. GIT, em inglês britânico, é uma gíria para cabeça dura, também pode ser o acrônimo para "Global Information Tracker" ou, ainda, "Goddamn idiotic truckload of sh*t" (é um xingamento, não iremos traduzir). O logo do GIT representa a ramificação para desenvolvimento não linear. Github: segundo a própria desenvolvedora, o Github é uma plataforma de desenvolvedor completa para criar, dimensionar e fornecer software seguro. O github utiliza o Git como sistema de controle. Há uma certa confusão entre Git e GitHub para quem começa na área. Entenda Git como uma ferramenta. Tendo esta, você ainda precisará de um servidor, que, no caso, é o Github. Embora seja mais conhecido e usado, também existem outros servidores que prestam suporte para git, como: Gitlab, Bitbucket, Apache Allura. Os ícones seguintes são, respectivamente, do GitHub, Gitlab, Bitbucket e Apache Allura. Debug: o debugging ou debugar significa depurar o programa. Ou seja, encontrar erros e tentar resolvê-los. Aqui, só lembrando que o termo bug na área de TI se refere a um erro no programa. TEMA 5 – CICLO DE VIDA DE SOFTWARE O ciclo de vida de um software (do inglês: Software Development Life Cycle – SDLC), também chamado de modelo de processo, é uma representação simplificada de um processo de software. Este é como se fosse um roteiro, uma série de passos previsíveis. Esse processo depende do software que está sendo desenvolvido. O ciclo de vida de um software indica as etapas que devem ser cumpridas e a sequência para que o software seja desenvolvido. Os modelos de processos trazem ordem ao caos existente na área de desenvolvimento de software. O engenheiro de software deve adaptar um modelo de processo às suas necessidades e, então, deve segui-lo. O processo dá controle, estabilidade e organização ao desenvolvimento de software. Segundo Sommerville (2019), quatroatividades são comuns a todos os processos de software: especificação, desenvolvimento, validação e evolução. Antes de explicar mais detalhadamente cada fase, para ficar fácil de entender, podemos fazer uma analogia com a construção de uma casa. Essas fases genéricas são semelhantes também às fases da construção de uma moradia; a fase especificação, por exemplo, seria especificar com o contratante como ele quer que a casa seja. Na fase de desenvolvimento, é realizada a construção da moradia propriamente dita. Na fase de validação, é garantido que a casa está sendo construída de acordo com o que o contratante solicitou. A fase de evolução serve para manter a casa em boas condições, ou seja, evoluir para atender às necessidades do contratante. É possível incluir: pintura, troca/retirada/acréscimo de encanamento, troca/retirada/acréscimo de fiação, conserto de problemas que surgirem após final da construção, construção de um novo cômodo etc. Entendido o que cada fase faz na construção da casa, vejamos essa definição para o desenvolvimento de software. Na fase de especificação de um software ocorre a definição do problema. A funcionalidade e as restrições quanto às funções do software são definidas aqui. Nessa fase, é feita uma reunião com o cliente para levantamento de requisitos. Existem basicamente dois tipos de requisitos: os funcionais e os não funcionais. Os primeiros dizem respeito ao que o software deve fazer, ou seja, quais funções ele deve possuir. Já os não funcionais dizem respeito às restrições do software. Na etapa de desenvolvimento de software ocorre a codificação do software de acordo com as especificações coletadas na fase anterior. Aqui, também é feita a escolha da linguagem de programação que será utilizada para implementação do sistema. Na fase de validação o programa é analisado para garantir que atenda ao que foi solicitado pelo cliente. Na fase de evolução o software deve evoluir de acordo com a mudança nas necessidades do cliente, ou seja, devem ser realizados ajustes caso o software ou algum módulo necessite de alguma modificação. 5.1 CICLO DE VIDA DE SOFTWARE (SDLC) – METODOLOGIA TRADICIONAL Existem muitos modelos de processo de software. A seguir é mostrado um modelo clássico conhecido como modelo cascata (waterfall). O modelo é mostrado em uma perspectiva arquitetural; isso significa que será mostrada sua estrutura, mas não os detalhes das atividades. Devido à tradicionalidade do modelo, muitas vezes, ele é referenciado como sendo o próprio SDLC. Modelo Cascata (Watterfall): mostra as atividades fundamentais do processo de software distribuídas em fases distintas. Devido à cascata de uma fase para outra, é definido como modelo cascata ou ainda conhecido como modelo de ciclo de vida do software (SDLC). São cinco fases que compõem o modelo cascata: requerimento, projeto, implementação, verificação e manutenção. Na etapa de requerimento ocorre o levantamento de requisitos. As metas e restrições são identificadas com os usuários. Na etapa de projeto os requisitos identificados na etapa anterior são mapeados em componentes de hardware e software. Na etapa de implementação, o projeto de software é implementado em unidades de programas. Nessa fase ocorre também o teste de unidade, que envolve a verificação de cada unidade e se cada uma cumpre a sua especificação. Na etapa de verificação as unidades de programas são integradas e testadas como um sistema completo. Na etapa de manutenção o sistema é instalado e colocado em operação. Aqui, são corrigidos os erros que não foram descobertos nas fases anteriores. Novas funcionalidades podem ser identificadas e se há a necessidade da repetição do ciclo. A figura a seguir representa o modelo cascata e a descrição sucinta de suas fases. Figura 10 – Modelo cascata (Waterfall) Fonte: Kanashiro, 2022. O modelo cascata é fácil de gerenciar, pois tem etapas bem definidas e sem sobreposição. É um modelo que visa à alta qualidade, enfatizando metas e pontos de revisão. Porém, esse modelo apresenta desvantagens, pois é improdutivo quanto ao tempo, já que a etapa posterior só pode iniciar depois da finalização da etapa anterior. A Visão Sequencial também não corresponde ao mundo real, fornecendo pouca visibilidade do estado do projeto, pois é demandado muito tempo para a primeira entrega. Existem vários outros processos de software, porém o Cascata é o mais conhecido e tradicional. 5.2. CICLO DE VIDA DE SOFTWARE – METODOLOGIA ÁGIL A metodologia ágil é uma alternativa para a gestão de projetos tradicionais. Em 2001, um grupo de programadores lançou o Manifesto Ágil, pregando uma metodologia que tem como objetivo satisfazeros clientes entregando com rapidez e com maior frequência versões do software conforme suas necessidades. A metodologia ágil entrega as funcionalidades de software mais rapidamente aos seus clientes. Essa metodologia tem foco no software e não no projeto ou na documentação. É adequada para aplicações em que os requisitos mudam rapidamente. Veremos duas abordagens utilizadas na metodologia Ágil: o extreme Programming e o SCRUM. 5.3 XP (EXTREME PROGRAMMING) A programação extrema introduziu práticas ágeis ao desenvolvimento tradicional de software. As práticas da XP refletem os princípios do manifesto ágil. O quadro seguinte descreve as práticas do XP e suas respectivas descrições. Quadro 1 – Práticas do XP e suas respectivas descrições Princípio ou prática Descrição Propriedade coletiva Os pares de desenvolvedores trabalham em todas as áreas do sistema de modo que se desenvolvem “ilhas de conhecimento”, e todos os desenvolvedores assumem a responsabilidade por todo o código. Qualquer um pode mudar qualquer coisa. Integração continua Assim que o trabalho em uma tarefa é concluído, ele é integrado ao sistema completo. Após qualquer integração desse tipo, todos os testes de unidade no sistema devem passar Planejamento incremental Os requisitos são registrados em “cartões de história, e as histórias a serem incluídas em um lançamento são determinadas de acordo com o tempo disponível e com sua prioridade relativa. Os desenvolvedores decompõem essas histórias em tarefas de desenvolvimento. Representante do ciente Um representante do usuário final do sistema (o cliente) deve estar disponível em tempo integral para o time de programação. Em um processo como esse o cliente é um membro do time de desenvolvimento, sendo responsável por levar os requisitos do sistema ao time, visando sua implementação Programação em pares Os desenvolvedores trabalham em pares, conferindo o trabalho um do outro e oferecendo apoio necessário para que o resultado seja sempre satisfatório Refatoração Todos os desenvolvedores devem refatorar o código continuamente logo que sejam encontradas possíveis melhorias para ele. Isso mantém o código simples e de fácil manutenção Projeto(design) simples Deve ser feito o suficiente de projeto(design) para satisfazer os requisitos atuais e nada mais. Lançamentos pequenos O mínimo conjunto útil de funcionalidade que agregue valor ao negócio é desenvolvido em primeiro lugar. Os lançamentos do sistema são frequentes e acrescentam funcionalidade à primeira versão de uma maneira incremental. Ritmo sustentável Grandes quantidades de horas extras não são consideradas aceitáveis, já que o efeito líquido muitas vezes é a diminuição da qualidade do código e da produtividade no médio prazo Desenvolvimento com testes a priori(test first) Um framework automatizado de teste de unidade é utilizado para escrever os testes de um novo pedaço de funcionalidade antes que ela própria seja implementada. Fonte: Sommerville, 2018, p. 63. A figura seguinte ilustra metaforicamente a metodologia tradicional que entrega apenas parte do produto versus a metodologia ágil, onde pequenas versões do projeto são entregues até que se entregue o produto. Crédito: Henrik Kniberg. 5.4 SCRUM O manifesto ágil possibilitou o aparecimento de várias metodologiase frameworks. Um dos mais utilizados é o scrum. E é sobre ele que veremos a seguir. O Scrum é um framework estrutural, não é considerado uma metodologia. Basicamente, uma metodologia diz o que fazer e como fazer. O Scrum indica uma trajetória, mas não como fazer. Sendo assim, o Scrum é um arcabouço de informações, um esqueleto. O Scrum possui três artefatos, cinco eventos, cinco valores e três papéis. A figura a seguir mostra os respectivos artefatos, eventos, valores e papéis do Scrum. Vamos ver um pouco mais sobre essa composição do Scrum de acordo com o seu próprio guia. Alguns termos serão mantidos em inglês, pois são as terminologias utilizadas na área. Figura 11 – Componentes do Scrum Fonte: Kanashiro, 2022. No Scrum, os projetos são divididos em cicloschamados deSprints. As Sprints são a essência, o coração do Scrum. Uma sprint é um time-boxed de um mês ou menos, durante o qual um “Pronto”, incremento de produto potencialmente liberável é criado.O time-boxed é a expressão para definir uma unidade de tempo no Scrum. Cabe, ainda, ressaltar que as Sprints têm durações consistentes ao longo de todo o desenvolvimento.Uma nova Sprint só se inicia imediatamente após a conclusão da Sprint anterior. As sprints podem ser vistas como as iterações que ocorrem ao longo do desenvolvimento de software. A próxima figura ilustra a consistência das Sprints. Figura 12 – Sprints Crédito: KPDMedia/Shutterstock. Artefatos: no Scrum representam o trabalho feito para fornecer transparência ao processo. São projetados para maximizar a transparência das informações-chave para que todos no time recebam as informações relevantes e tenham a mesma compreensão do que deve ser feito. Como colocado anteriormente, o Scrum possui três artefatos: o product backlog, o sprint backlog e o increment. O Product Backlog é uma lista ordenada de tudo que é conhecidamente necessário para fornecer o produto.É a única origem dos requisitos para qualquer mudança a ser feita no produto.O product backlog é, então, uma lista de produtos pendentes. O Sprint backlog possui os itens do product Backlog selecionados para a Sprint, com o plano para entregar o incremento do produto e atingir o objetivo da Sprint.Possui também uma previsão do Time de Desenvolvimento sobre qual funcionalidade estará no próximo incremento.O Sprint Backlog é um plano feito por e para desenvolvedores. É uma imagem em tempo real altamente visível do trabalho que os desenvolvedores planejam realizar durante o Sprint para atingir o objetivo do Sprint. O increment (incremento) é a soma de todos os itens do Product Backlog completados durante a Sprint e o valor dos incrementos de todas as Sprints anteriores. Eventos: o Scrum prescreve alguns eventos formais para inspeção e adaptação: Sprint; Sprint Planning (Planejamento da Sprint); Daily Scrum (Reunião diária); Sprint Review (Revisão da Sprint); e Sprint Retrospective (Retrospectiva da Sprint). O Sprint foi explicado previamente. Iniciaremos, então, com a conceituação do Sprint Planning ou o Planejamento da Sprint. O Planejamento do Sprint inicia o Sprint, estabelecendo o trabalho a ser realizado para o Sprint. Esse plano resultante é criado pelo trabalho colaborativo de todo o Time Scrum. O Product Owner garante que os participantes estejam preparados para discutir os itens mais importantes do Product Backlog e como eles são mapeados para a meta do produto. O Time Scrum também pode convidar outras pessoas para participar do Sprint Planning para fornecer conselhos. O objetivo do Daily Scrum é inspecionar o progresso em direção ao Sprint Goal e adaptar o Sprint Backlog conforme necessário, ajustando o próximo trabalho planejado. O Daily Scrum é uma reunião de aproximadamente 15 minutos para os Desenvolvedores do Time Scrum. A sprint Review (Revisão do Sprint) tem como objetivo inspecionar o resultado do Sprint e determinar futuras adaptações. O Time Scrum apresenta os resultados de seu trabalho para as principais partes interessadas e o progresso em direção ao Objetivo do Produto é discutido. Sprint Retrospective (Retrospectiva da Sprint) tem como objetivo planejar maneiras de aumentar a qualidade e a eficácia. O Time Scrum inspeciona como foi o último Sprint em relação aos indivíduos, interações, processos, ferramentas e sua Definição de Pronto. Aqui, ainda, é discutido o que correu bem durante o Sprint, quais problemas foram encontrados e como esses problemas foram (ou não) resolvidos. Valores: os cincos valores descritos a seguir sempre foram considerados como partes do Scrum e adicionados oficialmente em julho de 2016 ao guia do Scrum. Coragem: o time Scrum precisa ter coragem para fazer a coisa certa e trabalhar em problemas difíceis. Foco: todos focam no trabalho da Sprint e nos objetivos do time Scrum. Comprometimento: as pessoas se comprometem pessoalmente em alcançar os objetivos do time scrum. Respeito: os membros do time scrum respeitam uns aos outros para serem pessoas capazes e independentes. Abertura: o time scrum e seus stakeholders concordam em estarem abertos a todo o trabalho e aos desafios com a execução dos trabalhos. Papéis: a unidade fundamental do Scrum é o time. Um pequeno time, ou seja, um pequeno grupo de pessoas que trabalham juntas, definidas de time Scrum. Não existe o conceito de hierarquia no time Scrum, mas cada integrante do time tem um papel (role). São três papeis: Product Owner, Scrum master e developers (desenvolvedores). O Product owner é dono do produto, é o responsável por maximizar o valor do produto resultante do trabalho do Time de Desenvolvimento. É a única pessoa responsável por gerenciar o Backlog do Produto. O Scrum master é o responsável por promover e suportar o Scrum como definido no Guia Scrum. O Scrum Master faz isso ajudando a todos a entenderem a teoria, as práticas, as regras e os valores do Scrum. O Time de Desenvolvimento consiste em profissionais que realizam o trabalho de entregar um incremento potencialmente liberável do produto ao final de cada Sprint. A figura a seguir representa o ciclo do Scrum. Figura 13 – Ciclo do Scrum Fonte: Scrum.org. FINALIZANDO Nesta etapa, você conheceu a definição técnica de software e agora já é capaz de diferenciar softwares, programas e sistemas. Conheceu, também, o conceito de algoritmos e alguns exemplos de implementação em algumas linguagens de programação. Foi visto também alguns dos termos mais utilizados pelos desenvolvedores de software e pudemos explorar um pouco sobre o ciclo de vida de software, conhecendo o modelo cascata, modelo ágil e suas características. REFERÊNCIAS AWS.AWS Amazon, 2022. O que são Microsserviços. Disponível em: <https://aws.amazon.com/pt/microservices/#:~:text=Microsservi%C3%A7os%20s%C3%A3o%20uma% 20abordagem%20arquitet%C3%B4nica,pertencem%20a%20pequenas%20equipes%20autossuficientes >.Acesso em: 18 set. 2022. FORBELLONE, A. L. V. Lógica de Programação. 4. ed. Porto Alegre: Bookman, 2022. MARÇULA, M.; PIO, A. B. F. Informática - conceitos e aplicações. 5. ed. São Paulo: Editora Érica, 2019. MARCONI, M. de A.; LAKATOS, E. M. Fundamentos de metodologia científica. 6. ed. São Paulo: Atlas, 2005. MONTEIRO, E. R. et al. DevOps. Revisão técnica: FAGONDE, F. S. S.; DIAS, C. de O. Porto Alegre: Sagah, 2021. PRESSMAN, R. S.; MAXIM, B. R. Engenharia de software. Tradução de COSTA, F. A. da; Revisão técnica: ARAKAKI, R.; ARAKAKI, J.; ANDRADE, R. M. de. 9. ed. Porto Alegre: Grupo A, 2021. SCHWABER, K.; SUTHERLAND, J.Scrum Guide: The Definitive Guide to Scrum: The Rules of the Game,2020. SOMMERVILLE, I. Engenharia de Software. Tradução de BOSNIC, I.; GONÇALVES, K. G. de O. Revisão técnica de Kechi Hirama. 10. ed. São Paulo: Pearson Education do Brasil, 2018. FUNDAMENTOS DE DESENVOLVIMENTO DE SOFTWARES AULA 2 Prof.ª Luciane Yanase Hirabara Kanashiro CONVERSA INICIAL Essa discussão tem como foco o profissional de TI (Tecnologia da Informação)e sua atuação. Sendo assim, inicialmente começaremos essa etapa vendo como surgiu a crise do software, seu significado para o desenvolvimento de software e com isso entender a importância do profissional de TI. Serão abordados também os diferentes papeis do profissional de TI e qual é o perfil do profissional de TI que o mercado de trabalho busca. Veremos ainda a importância da área de TI, destacando o panorama do mercado de trabalho e as mulheres na área de TI. Conheceremos também alguns mitos e verdades sobre o desenvolvimento de software. TEMA 1 – CRISE DO SOFTWARE A Crise do Software é um termo que surgiu em 1965 e refere-se ao problema do software não acompanhar o desenvolvimento do hardware. Antes de 1965, não existia qualquer planejamento ou projeto para desenvolver um software ou formação específica para desenvolvedor ou engenheiro. Em outras palavras, não existia documentação nenhuma. Os problemas relacionados ao desenvolvimento de software começaram a surgir quando a demanda por software começou a subir. O número de usuários de computador começou a aumentar e, consequentemente, a demanda por software. Era uma época em que a codificação do software era entendida apenas por quem o tinha desenvolvido. Imaginem o problema que era! Era então necessária uma solução para esse problema ou, como muitos autores dizem, era necessário colocar ordem ao caos. A formação de profissionais e o uso de técnicas, métodos e ferramentas para o desenvolvimento de software minimizou esse problema. No entanto, veremos a seguir que a crise do software ainda persiste e continuaremos com a explanação para melhor compreensão do que é a crise do software. A crise que se iniciou em 1965 se acentua na década seguinte e a necessidade de solução para os problemas cresce. Nessa época do surgimento da crise do software, os computadores começam a ficar menores com o surgimento dos CIs (Circuitos Integrados). A época dos CIs ficou conhecida como terceira Geração de computadores. A partir da terceira geração, começou-se a miniaturização do hardware. Nessa época, surgem os computadores de mesa, que ficaram conhecidos como PC (Personal Computer). Se antes os computadores eram usados apena para fins militares, a partir desse momento passam a ser adquiridos para fins pessoais. Com o crescimento da demanda por computador, o que se observa então é o crescimento da demanda por software, e é por essa razão que falamos que o software não conseguiu acompanhar a demanda pelo hardware. Como citado anteriormente, nessa época não existiam profissionais formados na área de desenvolvimento. O software era então desenvolvido de maneira informal, não seguindo nenhuma metodologia para o seu desenvolvimento. A ausência de metodologia, como bem sabemos hoje, causa erros de sistemas, problemas de cálculos, perdas financeira e perda de tempo, porque as estimativas de prazo são imprecisas. Então, é preciso que entendam que a expressão “Crise do software” surge em 1965 e continua até os dias de hoje. A seguir, veremos alguns dos bugs mais icônicos da Informática que ilustram bem a crise do software. O termo Bug se refere a um erro na interpretação de um requisito, na sintaxe de um código ou ainda pode se referir a uma causa (ainda desconhecida) da queda de um sistema. O Bug ficou amplamente conhecido no final da década de 1990, quando se especulava que haveria o “Bug do Milênio” nos sistemas computacionais quando se mudasse do ano 1999 para o ano 2000. A expressão bug, porém, surgiu muito antes dessa época. Antigamente, os computadores eram gigantescos, construídos com milhões de válvulas. As válvulas tinham tamanho de uma lâmpada. Algumas vezes alguns bichos, a exemplo de mariposa, passavam entre as válvulas e ficavam presos, ocasionando a queda do Sistema - lembrando que “bug”, em inglês, se refere a inseto. A seguir, são apresentados alguns dos bugs mais famosos da história da engenharia de software. Bug 1 - Falha na Sonda Mariner 1 Datada de 1962, o bug da sonda Mariner 1 se deve ao fato da fórmula escrita a lápis ter sido digitada errada no computador de cálculo. A sonda Mariner era um foguete projetado pela NASA para exploração do planeta vênus e depois do lançamento observou-se um desvio do curso preestabelecido. A sonda teve que ser destruída quando se encontrava sobrevoando o atlântico. Esse bug tão grotesco ainda é relembrado e até hoje é utilizado como referência para ilustrar a crise do software. Bug 2 – Acelerador médico Therac- 25 O therac-25 era uma máquina de radioterapia para tratar tumores utilizado nos hospitais na década de 80, mais precisamente entre 1985 e 1987. O caso do Therac é conhecido como o desastre da engenharia. O problema: devido a uma falha de programação, a máquina emitia 100 vezes mais radiação do que a requerida. Consequência: cinco pacientes morreram e várias pessoas sofreram os efeitos de ficarem expostas a um elevado índice de radiação. Esse caso também é muito utilizado para se ilustrar a crise do software, devido a erros ridiculamente grotescos, como, por exemplo, falta de revisão/teste do software, falta de documentação e manual fornecido ao usuário que não explicava os significados dos códigos de erro que a máquina retornava. Bug 3 - divisão de números com ponto flutuante no Pentium Um bug clássico que ocorreu em 1993 com os processadores Pentium da Intel. O problema foi descoberto por um professor de matemática que percebeu um erro quando se fazia divisão de números com ponto flutuante. Esse bug não custou vidas, mas custou milhões de dólares a Intel, pois foi obrigada a trocar de 3 a 5 milhões de chips, totalizando um prejuízo de mais de meio bilhão de dólar. Por exemplo ao executar a divisão daria o seguinte erro: 4195835,0/ 3145727,0 = 1,33374 O correto seria: 4195835,0/ 3145727,0 = 1,33382 Até aqui, deu para ter um entendimento do que foi a crise do software. O que ela ocasionou e que foi responsável pelo surgimento da engenharia de software. No entanto, se engana quem pensa que nos dias atuais estamos livres dos bugs. Recentemente, em 2022, o banco Nubank teve problemas com erro de arredondamento de ponto flutuante. O bug foi resolvido rapidamente, embora causou transtornos para vários usuários que foram impossibilitados de fazer transação via pix de determinados valores enquanto o bug persistia. TEMA 2 – PROFISSIONAL DE TI Aqui, serão abordadas as áreas de atuação de diferentes profissionais da área de TI. Engenheiro de software Os engenheiros de software são os profissionais que aplicam o processo da engenharia de software. É o profissional formado no curso de engenharia de software. Recentemente, em 2018, a Engenharia de software foi vinculada ao CREA. Ressaltamos aqui que a SBC (Sociedade Brasileira de Computação) não concorda com essa regulamentação, mas este é um assunto que não nos cabe discutir. Para entender o que o engenheiro de software é, primeiramente veremos o que ele não é. O engenheiro de software não é um desenvolvedor que trabalha nas atividades de análise e produção de código, também não tem a função de analista de sistemas. Embora constantemente tenha a função confundida com a dessas duas profissões, o papel desempenhado pelo Engenheiro de software é diferente. Seria como confundir o engenheiro civil com o pedreiro, ou seja, o engenheiro não coloca a mão na massa. Segundo Wazlawick (2013): O engenheiro de software acompanha e avalia o desenvolvimento de todos os projetos da empresa para verificar se o processo estabelecido é executado de forma eficiente e efetiva. Caso sejam necessárias mudanças no processo estabelecido, ele as identifica e realiza, garantindo que a equipe adote tais mudanças. Ele reavalia o processo continuamente. (Wazlawick, 2013. p. 5) Analista de sistema O analista de sistemas é o profissional responsável pela compreensão do problema, ou seja, é de responsabilidade do analista o levantamento dos requisitos e da modelagem do sistema utilizando a metodologiaescolhida. Quando se fala de requisitos diz respeito ao que o sistema deve fazer e como serão feitos. São basicamente dois tipos de requisitos: funcionais e não funcionais. Os funcionais especificam o que o sistema deve fazer e os não funcionais definem como serão feitos. Um dos principais fatores para fracassos em projetos de software é a má especificação dos requisitos, sendo assim, o analista tem a grande responsabilidade de coletá-los e interpretá-los corretamente. Os requisitos iniciais serão fornecidos pelo cliente, portanto, é o analista de sistemas quem irá descobrir o que o cliente precisa e planejar a solução. O analista precisa ainda conhecer sobre banco dados e linguagens de programação, porém não necessita de conhecimento profundo na linguagem de programação. Desenvolvedor/Programador O Programador será o responsável pela implementação da solução a partir das especificações coletadas pelo analista de sistemas. Esse profissional é que detém o profundo conhecimento da linguagem de programação e do ambiente de programação e das bibliotecas. Deve ainda ter conhecimento sobre teste e depuração. Dentre os programadores, ainda existem aqueles que se especializam em determinadas áreas. Por exemplo, o desenvolvedor pode ainda querer atuar no desenvolvimento de aplicativos móveis, ou ainda ir para a área de desenvolvimento de jogos. Para esse profissional, são imprescindíveis o raciocínio lógico e a lógica de programação, importantíssimo e indispensável nessa área, pois sem a lógica de programação é impossível o domínio das linguagens de programação. A lógica de programação é o uso correto das leis do pensamento e de processos de raciocínio e simbolização formais na programação de computadores. Tem-se como objetivo a racionalidade e a produção de soluções logicamente validas e coerente. Permite ainda resolver com qualidade os problemas que se desejam programar. Segundo Forbelone, a lógica de programação é concebida pela mente treinada e é representada pela linguagem de programação. Atualmente, muitas empresas estão dando muita mais importância à lógica do que ao domínio de linguagens de programação específicas, pois sabendo a lógica se aprende qualquer linguagem com facilidade. Infelizmente, na prática essa divisão de papeis dos três profissionais citados não é observada. Apenas grandes empresas podem se dar ao luxo de contratar um profissional para desempenhar um papel específico. Muitas vezes, o que vemos na prática é um profissional desempenhando as três funções. No entanto, é importante que se tenha em mente que, ainda que uma pessoa execute mais de um papel no processo de desenvolvimento de software, esses papéis são distintos. Gestor de TI Nem todo profissional da área de TI trabalha com desenvolvimento de programas de computador. O gestor de TI é um deles. Esse profissional é quem administra os recursos de TI. Quando falamos em recursos de TI, estamos nos referindo ao tratamento, armazenamento e proteção de sistemas e informações. O Gestor de TI ainda é responsável por garantir a segurança dos dados. Na gestão de TI, além de saber sobre desenvolvimento, também deve ter conhecimento sobre marketing e administração, pois deve ter competência para fazer planejamento com ações estratégicas. Deve saber como utilizar as ferramentas tecnológicas a favor da empresa. Cientista de Dados O cientista de dados deve ter conhecimento em computação, matemática e análise de dados. Ele é o profissional responsável por reunir e interpretar os dados. O cientista de dados é um Especialista analítico, pois trabalha com a análise de dados, resolvendo problemas complexos. Com o surgimento da big data, os cientistas de dados se tornaram imprescindíveis em muitas empresas. Com capacidade de ler, escrever, comunicar e raciocinar com dados, diferente do analista de dados que apenas analisa e comunica as informações, o cientista deve ter conhecimento de métodos científicos, pois deve formular hipóteses e achar soluções. Engenheiro da Computação O engenheiro da computação é um profissional que tem uma base mais sólida em cálculo. Além de aprender cálculo, tecnicamente aprende tudo o que se aprende em engenharia de software. O engenheiro de computação está apto a desenvolver software e hardware. A diferença com o engenheiro de software é que o engenheiro da computação está mais direcionado a desenvolver softwares, por exemplo, para microcontroladores e projetos de chips. O Engenheiro de computação seria uma junção entre cientista da computação e o engenheiro eletricista. Administrador /Analista de Redes de Computadores O foco para quem é formado nessa área de redes são as profissões como: administrador de redes, analista de suporte, analista em segurança de redes, supervisor de segurança de redes, entre outros. Esse profissional é responsável pela Instalação e implementação de infraestrutura de sistemas. Tem a habilidade de documentar projetos de redes, configurar e gerenciar redes. É ainda o profissional responsável pelas soluções para desempenho da rede, garantindo a comunicação segura de programas e equipamentos. Muito comumente os profissionais dessa área se especializam na parte de web segurança. Administrador de Banco de Dados O profissional dessa área implementa, projeta as soluções e gerencia o Banco de dados, sendo responsável ainda pela segurança e integridade dos dados. O profissional dessa área, apesar de não ser um engenheiro de dados, pode ainda trabalhar na área de engenharia de dados. TEMA 3 – PERFIL DO PROFISSIONAL DE TI Aqui, será abordado o perfil do profissional de TI. Embora o profissional de TI tenha diferentes papeis, de modo geral, as competências e habilidades não diferem. Molinaro (2010) cita três habilidades inerentes ao profissional de TI: habilidade básica, habilidade técnica e habilidade comportamental. A seguir, são descritas sucintamente as três habilidades. Habilidades básicas: diz respeito as habilidades básicas de TI, como conhecer o sistema operacional, saber utilizar editores e planilhas, saber fazer uma apresentação no Power point e saber lidar com outros aplicativos considerados básicos. Habilidades técnicas: atualmente conhecida como hard skills. As habilidades técnicas são quantificáveis. Entendemos as habilidades técnicas aquelas que adquirimos através de estudo formal, como por fazer um curso de desenvolvimento para aprender as técnicas e ferramentas utilizadas nessa área. As competências técnicas são o conhecimento fundamental que um profissional deve ter. O profissional de TI deve ser especialista em alguma área e generalista nas outras. Habilidades comportamentais: nos dias atuais, a habilidade comportamental é mais conhecida como soft skills. São características subjetivas, difíceis de avaliar e estão também relacionadas ao comportamento do profissional: como ele interage em grupo, habilidade de resolver problemas, de trabalhar em equipe, de se comunicar, de planejar - embora sejam subjetivas, podem ser desenvolvidas pelo profissional. São habilidades que geralmente são analisadas nas entrevistas de emprego. Essas habilidades surgem como novas capacidades sociais e comportamentais (soft skills), que possuem caráter universal. Hoje em dia, é muito importante desenvolver as soft skills, existindo até profissionais especializados nessa área, os chamados coaching de carreira. Com tantas habilidades requeridas, o perfil do profissional de TI é um tanto quanto complexo, podemos assim dizer, pois o profissional deve ainda gostar de aprender novas tecnologias e estar sempre atualizado, além de ser um profissional criativo deve dominar as tecnologias emergentes. Além da facilidade de aprender e se adaptar rapidamente as novas tecnologias, se for ainda um desenvolvedor, deve ser capaz de programar em várias linguagens e para várias plataformas. Quando falamos em diversas plataformas estamos nos referindo a dispositivos móveis (celular/tablets), computador. Já deu para notar queo profissional de TI deve estar em constante aprendizado e atualização, não é? E não é só isso. Além das habilidades técnicas inerentes à profissão, o inglês também é indispensável para esta profissão assim como a facilidade de trabalhar em equipe, pois essa área é muito complexa e o profissional muitas vezes deve trocar ideias com outros colegas de profissão. O velho perfil do nerd, de ser um cara isolado em um porão e que trabalha sozinho, já não existe mais. Mas o que realmente o mercado busca? Competência profissional! A competência profissional abrange o conhecimento, a habilidade e a atitude. O conhecimento é o saber. A habilidade é o saber fazer. A atitude é o saber ser. Assim, a intersecção dessas 3 dimensões formam a competência profissional. A seguir, são mostrados exemplos de anúncios reais para vagas de emprego para profissionais da área. Observe que além das habilidades técnicas são exigidas também as comportamentais. No tópico a seguir, veremos sobre a importância do profissional da área de TI (Tecnologia da Informação), discutiremos sobre empreendedorismo e mercado de trabalho na área de TI. TEMA 4 – IMPORTÂNCIA DO PROFISSIONAL DE TI A chegada da pandemia acelerou o processo de digitalização de muitas empresas. Com isso, o mercado de Tecnologia da Informação (TI) ganhou ainda mais destaque no processo de transformação digital, exigindo a figura de um profissional imprescindível para a criação de soluções em diferentes áreas de negócios. Profissionais da área de TI, comodesenvolvedores, analistas e administradores de redes e outras áreas afins tornaram imprescindíveis para diferentes organizações. 4.1 MERCADO DE TI A área de TI é a que mais cresce atualmente e com o advento da pandemia da Covid-19 os recursos tecnológicos se mostraram imprescindíveis. Algumas instituições brasileiras trazem dados importantes acerca da utilização das tecnologias no país. Segundo dados do Cetic, que é Centro Regional de Estudos para o Desenvolvimento da Sociedade da Informação, que monitora a adoção das Tecnologias de Informação e Comunicação (TIC) no Brasil, entre 2019 e 2021 – período marcado pela emergência da pandemia COVID-19 – a proporção de empresas brasileiras que comercializaram produtos e serviçosonlinecresceu de 57% para 73% (Cetic, 2021). Ainda de acordo com os indicadores do Cetic em pesquisa feita sobre a utilização das TICs pelas empresas no brasil, entre 2013 e 2021 houve um crescimento de 9% na proporção de empresas que possuem área ou departamento de TI. O ano de 2013 foi o ano em que houve a primeira edição sobre proporção de empresas que possuem área ou departamento de TI. À primeira vista, o crescimento médio em porcentagem de 9% em um período de pouco menos de uma década pode parecer pouco, mas se observamos o gráfico podemos perceber que a porcentagem nas empresas de pequeno porte subiu mais de 16% e na de médio o crescimento foi de 18%. Nas empresas de grande porte, a porcentagem continuou estável com 89% das empresas possuindo departamento de TI. Esse aumento nas pequenas e médias empresas mostra um cenário otimista, pois quer dizer que as pequenas e médias empresas estão investindo cada vez mais em serviços e produtos da área de TI. Pequeno De 10 a 49 pessoas Médio De 50 a 249 pessoas Grande Mais De 250 pessoas Fonte: Brascom. De acordo com a Brasscom (Associação Brasileira das Empresas de Tecnologia da Informação e Comunicação) no relatório setorial referente a 2021, a demanda por mão de obra na área de TI considerando de 2021 a 2025 é de 797 mil, com uma média simples de 159 mil empregos por ano. Hoje, o Brasil forma cerca de 52 mil pessoas com perfil tecnológico por ano, com relativo descasamento entre oferta e demanda de mão de obra. Esta é uma grande oportunidade para o os profissionais de TI do país, especialmente em um momento em que se verifica uma taxa de desemprego de mais de 11% (considerado 2021). Ainda de acordo com a Brasscom, a remuneração média do subsetor de Software e serviços de TI é a maior dentre as pesquisadas e 3,5 vezes superior ao salário médio nacional. O gráfico a seguir mostra os salários de TIC e Telecom no país. Fonte: Brasscom 2021 e UT. No Relatório da Brasscom, a remuneração do setor TIC, do subsetor de Serviços de alto valor agregado e Software, Telecom e Serviços de Implantação inclui benefícios comumente oferecidos no setor. 4.2 EMPREENDEDORISMO E STARTUPS Apesar de não ter sido citado como habilidade inerente do profissional de TI, o espírito empreendedor também é muito bem-vindo aos profissionais dessa área. Saber sobre empreendedorismo também é um quesito que não pode ser deixado de fora. Além de desenvolver os sistemas ou prestar serviços de TI, muitas vezes o profissional deve saber como divulgar e vender seu produto/serviço. Ter um espírito empreendedor pode ser o caminho para o sucesso. Muitas startups começam assim, com uma ideia criativa e espírito empreendedor. A popularização da internet e smartphones também contribui enormemente para o crescimento do mercado digital no Brasil. No mercado digital, houve a proliferação de startups brasileiras. Startup é um grupo de pessoas à procura de um modelo de negócios repetível e escalável, trabalhando em condições de extrema incerteza. As empresas startups que atingem mais de 1 bilhão de dólares são chamadas de unicórnio. As fintechs no Brasil mostraram aumento de 96% ao ano. De acordo com a Nubank, as fintechs são startups ou empresas que desenvolvem produtos financeiros totalmente digitais, nas quais o uso da o uso da tecnologia é o principal diferencial em relação às empresas tradicionais do setor. Algumas das fintechs mais conhecidas no Brasil: Neon, Stone, Nubank, Getnet, Ebanx, Contabilizei, C6bank, Vero, Safrapay, Pagseguro, Nibo, Contaazul, Mercado pago, banco Inter, Geru e Creditas. Essas fintechs utilizam uma abordagem centrada no consumidor. O Brasil ingressou no rank dos países com mais unicórnios no mundo, possuindo 16 deles (considerando até 2021): Stone, Gympass, Nubank, Ifood, Loggi, Quinto andar, Arco, Pagseguro, 99, WildLife, Creditas, Loft, Vtex, C6 Bank e Madeira Madeira. A presença de startups está concentrada em São Paulo. Sua economia é comparável a dos maiores países do mundo. Por que essas informações são importantes? São relevantes para nós que somos da área de TI porque nos mostra um cenário que é favorável para o desenvolvimento. Se, cada vez mais, mais pessoas estão conectadas a internet, utilizando dispositivos digitais como computadores e principalmente smartphones, isso indica que as pessoas estão baixando mais apps, e que as empresas vão precisar de mais desenvolvedores e consequentemente mais profissionais na área de TI. 4.3 A MULHER E O MERCADO DE TI Essa parte da etapa aborda como é o mercado de trabalho na área de TI para as mulheres. Primeiramente, veremos algumas mulheres que contribuíram para o desenvolvimento tecnológico no mundo. Créditos: HappySloth/Shutterstock. O primeiro programador da história é na verdade uma programadora. Seu nome é Ada Lovelace. Ela era uma matemática inglesa e escreveu o primeiro algoritmo para a máquina analítica de Charles Babbage. A linguagem de programação Ada foi criada em homenagem a ela pelo Departamento de Defesa dos Estados Unidos. Crédito:Smile Ilustras. Grace Murray Hopper foianalista de dados da marinha americanae criou a linguagem de programação Flow-Matic, que serviu de base para acriação do COBOL. É de autoria dela otermo “bug”. Créditos: patuletail//Shutterstock. Hedwig Eva Marie Kiesler, mais conhecida como Hedy Lamarr, é a mãe do wifi. Mais famosa como atriz do que como cientista em sua época, durante a segunda guerra, ela inventou um aparelho de interferência em rádio, que posteriormente possibilitou a criação de tecnologias como wifi e CDMA (Code Division Multiple Access, ou Acesso Múltiplo por Divisão de Código). Vimos sucintamente (muito sucintamente, eu diria!) sobre essas três mulheresque em muito contribuíram para o desenvolvimento tecnológico no mundo. Com base nesses nomes, posteriormente você pode se aprofundar fazendo pesquisas na internet e conhecendo mais sobre essas mulheres maravilhosas. A seguir, vemos sobre a presença das mulheres no mercado de TI. No censo da indústria de jogos digitais realizada pela Abra Games em 2022, constatou-se que na maioria dos casos o desenvolvedor era do sexo masculino. Apesar de ser um censo da indústria de jogos, esses números refletem a área de TI. Estima-se que mais de 80% dos profissionais que trabalham nesta área são homens, ou seja, a participação das mulheres na área de TI ainda é muito pouco. No segundo censo, as mulheres que realmente trabalhavam com programação atingiam apenas 11%, enquanto os homens atingiam 89%. Apesar de parecer uma porcentagem muito pequena, a presença de mulheres vem aumentando nos últimos anos. Entre os anos de 2014 e 2018, o aumento do número de mulheres na área de desenvolvimento de jogos triplicou. Já no censo feito pela Abra Games em 2022 essa proporção de colaboradoras que trabalham com programação aumentou para 15%. Na área de desenvolvimento de software em geral não é diferente. Segundo pesquisa da Revelo, feita entre janeiro e dezembro de 2021, apenas 12,3% de desenvolvedores são do sexo feminino. Apesar de parecer um número pequeno, entre 2014 e 2019, houve um aumento significativo de 60% de mulheres na área de desenvolvimento. Ainda de acordo com a Revelo, considerando experiência e gênero, a proporção de profissionais de tecnologia, em sua maioria desenvolvedoras, diminui conforme o aumento da senioridade. Isso ilustra um cenário positivo, pois quer dizer que cada vez mais as mulheres mais jovens estão se interessando por essa área de desenvolvimento. No gráfico a seguir, podemos visualizar com mais clareza esse cenário. Fonte: Revelo e UT. Em tempo: Revelo é uma empresa de tecnologia no setor de recursos que oferece uma plataforma de recrutamento e seleção que conecta candidatos às vagas de forma ágil e humanizada. No último tópico, voltaremos a falar sobre as mulheres na área de TI. 4.4 TECNOLOGIAS EMERGENTES 4.4.1 virtualização e conteinerização A computação em nuvem, muitas vezes referenciada como cloud computing, tem como definição mais básica um computador localizado em algum lugar acessado via Internet e usado de alguma maneira. A AWS (Amazon Web Services), provedora de serviços de computação em nuvem, define, baseada em seus serviços, que a computação em nuvem é a entrega sob demanda de poder computacional, armazenamento de banco de dados, aplicativos e outros recursos de TI por meio de uma plataforma de serviços de nuvem via Internet com definição de preço conforme o uso. Mas por que falar em computação em nuvem? Tendências que foram ressaltadas pela pandemia é a da virtualização e conteinerização pois a criação de um ambiente de desenvolvimento pode ser árdua e demorada. Mais adiante, discutiremos com mais detalhes a virtualização. A solução é hospedar códigos e criar, testar e implantar os aplicativos na nuvem. Isso possibilita disponibilizar softwares com mais rapidez, fazendo ainda com que o time se torne mais produtivo. Durante a pandemia de Covid-19, houve um enorme crescimento da utilização de serviços na nuvem. De acordo com os Dados da Brasscom, em 2020 houve um destaque de crescimento em relação ao ano anterior para software na Nuvem com 165,8% e infraestrutura na Nuvem com 127,8%. Já no relatório setorial referente a 2021, o crescimento foi de 32% para software na nuvem e infraestrutura na nuvem com 42%. Existem várias empresas que oferecem serviços na nuvem. A AWS (Amazon Web Services) é uma delas, sendo líder global em serviços de nuvem. A Amazon Web Services disponibiliza vários serviços de computação em nuvem para os três modelos de serviço: IaaS (Infraestrutura como Serviço), PaaS (Plataforma como serviço) e SaaS (Software como Serviço). A AWS utiliza a prática do dogfooding, ou seja, utiliza seu próprios produtos e serviços, tendo um foco implacável no cliente. Como mencionado anteriormente, veremos a seguir as características da virtualização, para que seja possível compreendermos o que é conteinerização e computação de borda. A virtualização consiste em uma máquina física que emula várias máquinas virtuais. Cada máquina Virtual roda uma cópia do sistema operacional, como Windows, Mac OS ou Linux. Ou seja, a virtualização cria um ambiente virtual de computação (simulando um ambiente real) ao invés de um ambiente físico. Um exemplo de emulador é o VMWare e VirtualBox. O conceito de virtualização não é novo, existe desde 1960, mas é uma tendência que foi ressaltada com a popularização da computação em nuvem. Os contêineres são um método de virtualização do sistema operacional que permite executar um aplicativo e suas dependências em processos isolados de recursos. Simplificadamente os containers empacotam o código, as configurações e as dependências de um aplicativo em um único objeto. O Docker é um bom exemplo de produto que utiliza virtualização para entregar pacotes de softwares denominados contêineres. A seguir, podemos visualizar a logo do Docker, que representa uma baleia com o dorso empilhado de contêineres. 4.4.2 Computação de borda Se procurarmos um pouco na internet, encontraremos várias definições sobre computação de borda. A seguir, algumas definições dadas por empresas reconhecidas mundialmente na área de TI. A definição dada pela Intel é de que “a computação de borda se refere ao processamento, análise e armazenamento de dados mais próximos de onde eles são gerados para permitir análises e respostas rápidas, quase em tempo real”. Já a IBM define a computação de borda como “um modelo de computação distribuída que aproxima os aplicativos corporativos das fontes de dados, como dispositivos de IoT ou servidores de borda local”. Essa proximidade com os dados em sua fonte pode gerar grandes benefícios de negócios: insights mais rápidos, tempos de resposta melhores e disponibilidade de largura de banda aprimorada. A Hewlett Packard dá uma definição mais simplificada dizendo que “a computação de borda é uma forma de computação realizada no local ou próximo a uma fonte de dados em particular, minimizando a necessidade de os dados serem processados em um data center remoto.” Analisando as definições, podemos simplificar ainda mais e dizer que a computação de borda aproxima os equipamentos de onde estão os dados que são gerados. A computação de borda é uma evolução da computação em nuvem e teve origem em 1990 com o surgimento das CDNs (Redes de entrega de conteúdo), que armazena conteúdo próximo dos locais de entrega. Esse é o recurso utilizado por empresas como Netflix e Disney plus, que conseguem entregar conteúdo rapidamente e sem “travar”. A computação de borda é uma tendência que foi ressaltada com o aparecimento do conceito de IoT (Internet das Coisas). Com a possiblidade de se conectar à internet objetos que utilizamos no dia a dia, como eletrodomésticos, carros, baba eletrônica surgiu o conceito de IoT. TEMA 5 – MITOS E VERDADES DO DESENVOLVIMENTO DE SOFTWARE Os mitos do desenvolvimento de softwares são definidos como sendo crenças comuns, sem fundamento científico sobre o software e o processo utilizado para criá-lo. De acordo com Pressman (2016), existem os mitos de gerenciamento, mitos do cliente e mitos dos profissionais da área. A seguir, veremos essas três categorias de mitos, conforme disposto por Pressman (2016). Mitos de gerenciamento Existem muitos outros mitos na área de gerenciamento. Listamos aqui alguns mitos relacionados ao gerenciamento de projetos de software. Mito Realidade Já temos um livro cheio de padrões e procedimentos O livro é utilizado? Se o cronograma atrasar, acrescentarmos mais programadores Acrescentar mais pessoal atrasa o projeto Ao terceirizar o projeto é possível relaxar Acompanhamento contínuo. Fonte: Kanshirocom base em Pressman (2016). Mitos do Cliente Compreender as necessidades do cliente é um grande desafio em qualquer projeto. No desenvolvimento de software não é diferente. Muitas vezes, o cliente tem expectativas de como o software funcionará, muitas vezes errôneas. Cabe lembrar aqui que, apesar de ser o cliente que deve definir o que será feito, é o profissional de TI, como especialista da área, que deve saber convencer o cliente quando achar que uma especificação não cabe em uma solução de tecnologia. O quadro a seguir mostra os mitos relacionados ao cliente. Mito Realidade Uma definição geral dos objetivos é suficiente para começar a escrever os programas – podemos preencher os detalhes posteriormente. A principal causa do fracasso de projetos de software são os requisitos iniciais maus definidos/entendidos de maneira errônea. A probabilidade de sucesso de um projeto aumenta se os requisitos iniciais forem bem definidos Os requisitos de software mudam continuamente, mas as mudanças podem ser facilmente assimiladas, pois o software é flexível O impacto da mudança depende de quando ela é introduzida. Fonte: Pressman (2016). Mitos dos profissionais da área Apesar de muito estudo, muitos profissionais da área ainda caem em alguns dos mitos do desenvolvimento de software. Listamos os mitos mais conhecidos relacionados aos profissionais da área. Mito Realidade Uma vez que o programa foi feito e colocado em uso, nosso trabalho está́ terminado. Entre 60 e 80% de todo o esforço será́ despendido após a entrega do software ao cliente pela primeira vez Até́ que o programa esteja “em execução”, não há como avaliar sua qualidade Existem formas de avaliar a qualidade antes da implementação do sistema. O único produto passível de entrega é o programa em funcionamento. Uma variedade de outros artefatos são necessários: modelos, documentos, planos etc. A engenharia de software nos fará criar documentação volumosa e desnecessária e, invariavelmente, vai nos retardar. Objetivo: criar um produto de qualidade. Uma qualidade melhor leva à redução do retrabalho. Fonte: Pressman (2016). Além dos mitos de engenharia de software, temos também aqueles mitos não técnicos da área de TI. A seguir, são abordados alguns desses mitos. TI não é uma área para mulheres Alguns podem até dizer que TI não é uma área para mulheres, mas a própria história contradiz isso, e temos exemplos de mulheres como Ada Lovelace, Hedy Lamarr e Grace Hooper. Mas então por que temos um número tão baixo de mulheres na área de TI? Atualmente, estão sendo feitas muitas pesquisas em relação à predominância de homens, não só na área de TI, mas na STEM (acrónimo em inglês para "Science, Technology, Engineering and Mathematics"). Em um estudo feito por DO (2021), são resumidas as questões que influenciam as escolhas de mulheres jovens ao estudar STEM/TI. Essas questões levantadas por vários pesquisadores da área de psicologia e comportamento foram divididas em três níveis: individual, interpessoal e estrutural. No nível individual são elencadas algumas questões individuais que afetam a motivação e as decisões das mulheres ao buscar um diploma de TI em nível superior. Dentre as questões levantadas estão: autoeficácia; atitudes e interesses; exposição prévia à computação; e percepção de carreira. A seguir, uma breve explicação de cada quesito que compõe o nivel individual: Autoeficácia: é a crença na própria capacidade de realizar uma tarefa ou um objetivo. Atitudes e interesses: esse quesito faz referência a atitudes em relação aos computadores e afirma que os interesses das meninas preveem significativamente sua busca por um diploma de TI Exposição prévia à computação: meninas com experiência em computação têm maiores interesses e maior probabilidade de concluir um curso de TI. Esta relação é explicada pelo argumento de que o acesso precoce a computadores reduz a intimidação e aumenta a percepção de capacidade. A familiaridade com computadores estimula também o interesse e a curiosidade da criança e, simultaneamente, promove seu senso de competência. (Adya, M.; Kaiser, K.M. 2005. “Early Determinants of Women in the IT Workforce: A Model of Girls’ Career Choices.” apud Do (2021)) Percepção de carreira: estudos indicaram que trabalhos que envolvem interações sociais e que valorizam as recompensas sociais têm maior probabilidade de atrair mulheres do que aquelas que exigem trabalho com objetos físicos e/ou estão mais focadas em ganhar altos salários e poder. Há uma percepção errônea de que uma carreira em STEM não é associada a objetivos comunitários, o que leva as mulheres a se afastarem dessa área (Dasgupta, N. Stout, J.G. 2014. “Girls and Women in Science, Technology, Engineering, and Mathematics: STEMing the Tide and Broadening Participation in STEM Careers.” Policy Insights from the Behavioral and Brain Sciences 1(1):21–29 apud (DO (2021)) Além das questões individuais, também são mostradas questões interpessoais como influência dos pais e dos pares e modelos femininos “comuns” a serem seguidos em uma área dominada por homens. A pesquisa também cita que a presença de mentores, podendo ser um amigo, irmão, primo, ajuda as alunas a combaterem várias formas de isolamento, micro agressão e a escassez de modelos de mulheres. Quanto a questões estruturais levando em consideração o ambiente acadêmico, infelizmente a literatura aponta vários casos do papel negativo dos professores escolares no reforço dos estereótipos de gênero em STEM. O relatório cita ainda que a indústria de games e filmes pode reforçar os estereótipos de gênero, visto que ainda hoje proliferam a existência de personagens femininas sexualizadas, o estudo aponta ainda que a porcentagem de personagens femininas principais não evoluiu ou se desenvolveu ao longo do tempo. Embora essas constatações não sejam definitivas, nos levam realmente a pensar qual é a motivação e as expectativas de uma mulher ao se buscar um diploma na área de TI. Ser bom em matemática Nem toda área de TI exige cálculos avançados. Em um vídeo de divulgação para incentivar futuros programadores feito pela code.org, onde vários famosos da área de TI, como Zuckeberg do Facebook, Jack, criador do Twiter, e Bill Gates, fundador da Microsoft, participam. O próprio Bill diz que para ser um programador “é preciso apenas saber adição e fração ...” e, é claro, um pouco de multiplicação também. E embora tenhamos mitos, algumas coisas são verdades: Saber Inglês é imprescindível Um profissional da área de TI que não sabe inglês pode perder muitas oportunidades. Em um mundo globalizado, onde a tecnologia muda rapidamente é importantíssimo que se aprenda o básico de inglês, permitindo assim que se comunique, entenda outros profissionais e saiba pelo menos entender um manual ou uma especificação em inglês. Mas existem bons tradutores online! Sem dúvida, mas saber o básico de inglês pode abrir um mar de oportunidades. Área de TI é uma área em expansão Como vimos anteriormente, a demanda por profissionais de TI só aumenta. Essa área é uma que não sofreu crise por conta da pandemia, ao contrário, esses profissionais ficaram ainda mais disputados. Profissionais de TI devem estar em constante aprendizado Se vai trabalhar na área de TI, deve ter em mente que vai ter que estudar durante a vida toda, pois a tecnologia muda rapidamente. De um ano para outro as tecnologias são aprimoradas, enquanto outras novas surgem. As versões de linguagens e softwares existentes mudam continuamente. Constantemente quando acha que dominou uma linguagem ou framework, determinado comando fica “deprecated” – obsoleto - e (re)começa a saga para se adaptar ao “novo jeito” de fazer. FINALIZANDO Nessa etapa, aprendemos um pouco sobre a crise do software, pudemos ver os diferentes papeis do profissional de TI. Verificamos que, embora um profissional desempenhe várias funções, ainda assim são papéis diferentes. Pudemos conhecer ainda o perfil
Compartilhar