"Olá, amigo!"

"Oi, Bilaabo!"

"Hoje vou falar sobre como os programas geralmente são desenvolvidos."

"No século 20, quando a TI moderna estava em sua infância, todos pareciam pensar que a programação era como construção ou manufatura."

"As coisas geralmente aconteciam mais ou menos assim:"

" O cliente explicava o tipo de programa de que precisava — o que deveria fazer e como deveria fazer."

" Os analistas de negócios o ouviam e faziam uma lista completa dos requisitos do programa com base no que ele dizia."

"Em seguida, os gerentes de projeto dividiriam esses requisitos em tarefas e também determinariam qual programador faria qual tarefa e em que ordem."

"Então os programadores começavam a trabalhar. Às vezes, eles trabalhavam vários anos (!)."

"Quando terminaram, o programa foi entregue aos testadores."

"Os testadores passariam por cada um dos requisitos do programa para verificar se foram implementados e se o programa funcionava como deveria."

"Se algo desse errado, os testadores registrariam os bugs e os enviariam aos programadores."

"Em seguida, os programadores corrigiam os bugs e enviavam o programa corrigido de volta aos testadores. E o ciclo se repetia."

"Quando os principais bugs foram corrigidos, o programa foi entregue ao cliente."

"Isso é realmente como as coisas aconteceram?"

"Bem, é claro, simplifiquei bastante, mas é bem próximo de como as coisas eram feitas."

"E um projeto pode realmente levar de um ano e meio a dois anos para ser concluído?"

"Às vezes, se o desenvolvimento de um projeto era muito longo, eles o dividiam em versões separadas. A cada 3-6 meses, os desenvolvedores tinham que criar uma parte específica da funcionalidade do programa, testá-la, corrigir todos os seus bugs e mostrá-la ao cliente."

"Primeiro, para que ele pudesse compartilhar suas impressões. E segundo, e mais importante, para que ele continuasse pagando pelo desenvolvimento do programa."

"Continuar pagando?"

"Naquela época, o desenvolvimento geralmente demorava 2 a 3 vezes mais do que o planejado. E como os programadores costumavam ser pagos por hora, o programa se tornava 2 a 3 vezes mais caro. Além disso, os benefícios também eram reduzidos. Afinal, o que o cliente quer hoje por $ 100.000 pode não ser necessário em 3 anos - especialmente em três vezes o preço."

"Os clientes muitas vezes se recusam a pagar?"

"Sim. Mais tarde, eles começaram a adicionar penalidades ao contrato, mas isso não melhorou a situação. O desenvolvimento de software se arrastava. E ninguém poderia fazer nada sobre isso, mesmo que quisesse."

"Mas por que?"

"Bem, primeiro, muito pouco é conhecido durante o estágio de planejamento. Na maioria das vezes, no começo, ninguém poderia prever os problemas que os programadores enfrentariam."

"Mas programadores experientes deveriam ter sido capazes de prever tudo, certo?"

"Você pode ver que a programação é uma profissão única."

"Um trabalhador comum freqüentemente executa o mesmo trabalho repetidamente. Relojoeiros fazem relógios, cozinheiros cozinham, professores ensinam, médicos tratam, etc."

"Cada um desses profissionais faz basicamente a mesma coisa todos os dias. Como resultado, eles começam a melhorar cada vez mais em seus trabalhos."

"Na programação, a abordagem é diferente. Assim que um programador enfrenta a mesma tarefa todos os dias, ele escreve uma função, módulo ou programa para executá-la e nunca mais volta a ela."

"Cada programador geralmente resolve cada tarefa uma vez na vida."

"Algo como cientistas ou engenheiros projetistas que inventam coisas."

"Ah. Bem, qual é o papel mais importante em um projeto?"

"Hmm, como devo responder a isso. É fácil dizer qual é o mais importante, mas identificar o menos importante é difícil."

" A principal tarefa de um testador ( Q uality  A ssurance, QA )  é monitorar o status de um programa e relatar bugs prontamente. Quanto mais e mais cedo um testador encontrar bugs, mais eles poderão ser corrigidos  . um bom programador faz ."

"Por que o programador não pode testar seus próprios programas. Afinal, eles não sabem melhor do que os testadores o que funciona e o que não funciona?"

"Um bom programador é simplesmente incapaz de ser um bom testador. Um programador sabe como o programa funciona muito bem, então ele ou ela sempre o usa de uma certa maneira. Ao contrário dos usuários comuns que usam o programa como quiserem. "

"Além disso, os testadores não testam o que ainda não funciona. O testador testa a funcionalidade ou partes do programa que o programador diz que já estão funcionando quase perfeitamente."

"E quando o testador encontra toneladas de bugs nessa funcionalidade e o programador os corrige, o produto realmente se aproxima da perfeição."

" A principal tarefa de um programador ( S oftware  D eveloper  E ngineer,  D eveloperSDE ) é implementar uma nova funcionalidade. Ou, de forma mais simples, executar as tarefas atribuídas a ele. , eles os executam. Quando são atribuídos bugs, eles corrigem os bugs."

"Mas às vezes há tarefas mais desafiadoras, por exemplo, criar a arquitetura para o programa ou partes dele. Quanto melhor a arquitetura proposta, mais fácil será fazer as coisas no futuro."

"O problema é que a arquitetura precisa ser escolhida logo no início, mas somente no meio do desenvolvimento fica claro se você escolheu a arquitetura certa."

"Além disso, se a arquitetura for bem-sucedida e o programa for ótimo, o cliente provavelmente desejará usá-la como base para novas versões do programa."

"Aqui está onde quero chegar."

"Seja qual for a arquitetura que você escolher, sempre haverá um monte de mudanças, acréscimos e novos recursos que a arquitetura não considera."

"Aqui está um bom exemplo."

"Um cliente pede para você construir um prédio de 5 andares, então você projeta uma arquitetura e constrói a casa."

"Então o cliente pede para adicionar outra história, e depois outra, e assim por diante."

"Mas as paredes do primeiro andar não foram projetadas para tanto peso, nem a fundação. Então tudo tem que ser refeito."

"Mas depois que o prédio de 5 andares estiver pronto, e se o cliente decidir imediatamente que quer um prédio de 50 andares?"

"Seria mais fácil demolir a estrutura existente e reconstruir tudo do zero..."

"Mas tenho um conselho para você sobre arquitetura."

"A arquitetura de um aplicativo deve, antes de mais nada, ser flexível, o que significa que você não terá que começar do zero se decidir refazer metade do aplicativo. Esse tipo de arquitetura costuma ser chamado de flexível e modular . "

" O principal trabalho do gerente de projeto é tomar decisões. O gerente de projeto é aquele que vê o quadro geral e toma decisões com base nessa perspectiva."

"Suponha que durante o desenvolvimento fique claro que uma determinada tarefa não será concluída conforme o planejado. O gerente de projeto pode então:"

" a)  tentar negociar com o cliente para modificar a tarefa"

" b)  alocar mais tempo para a tarefa"

" c)  trazer programadores mais experientes de outros projetos."

"E há muitas outras possibilidades."

"Cada opção exige que você sacrifique algo, e o trabalho do gerente é minimizar as perdas totais desses sacrifícios. "

"Por exemplo, suponha que os concorrentes roubem o programador líder, oferecendo-lhe o dobro do dinheiro."

"O gerente de projeto pode:"

" a)  não fazer nada. O programador sairá e o projeto provavelmente ficará para trás e incorrerá em penalidades."

" b)  dobrar o salário dele. Então todos os outros membros da equipe também vão querer aumentos. Se você der mais dinheiro a todos eles, os custos do projeto aumentarão e ele poderá se tornar não lucrativo."

" c)  alguma outra opção que você imaginar."

"Eu vejo."

"Com um gerente de projeto ruim, uma boa equipe geralmente alonga um projeto, mas nem sempre."

"Um bom gerente com uma equipe de programadores medianos quase sempre concluirá um projeto mais rápido do que um mau gerente com uma equipe de excelentes programadores."

"Eu vejo."

"Ok, vamos fazer uma pequena pausa e depois continuaremos."