Espírito de Startup: Tudo ao mesmo tempo agora
A evolução no desenvolvimento de software
A análise do que será desenvolvido em termos de soluções em software dentro de empresas modernas passa pelo seguinte fluxo para a tomada de decisão.
Nas páginas seguintes, vamos analisar a área de desenvolvimento de software e algumas metodologias aplicadas por grandes empresas visando aumento de produtividade, não apenas no contexto do desenvolvimento de sistemas, como no aumento da satisfação dos clientes, na redução do desperdício e do retrabalho.
A EVOLUÇÃO NO DESENVOLVIMENTO
DE SOFTWARE
Até o início deste século XXI, ainda havia uma grande tendência da utilização do modelo em cascata em projetos de desenvolvimento de software . Esse modelo prescreve uma sequência de atividades ordenadas para que uma aplicação seja desenvolvida de acordo com os requisitos de negócio estabelecidos nas fases iniciais.
O grande problema desse modelo em cascata (ou waterfall ) é que, muitas das vezes, há uma grande distância entre a solução final entregue – o software – e o que a área de negócio (ou o cliente) esperava receber. Não é raro que áreas de negócios de uma empresa tenham que se adaptar à solução desenvolvida em vez da solução lhes proporcionar automação e ganho de produtividade na execução de processos. E por que isso acontece?
Simplesmente, porque os projetos de software dentro de uma empresa duram muitos meses, ou até anos em casos de empresas de grande porte com muitas regras de negócio a serem implementadas. Além disso, no modelo em cascata, há uma fase de grande interação com o usuário final, o cliente ou a área de negócio, que é a fase inicial: a análise de requisitos. Nessa fase, analistas de negócios e analistas de sistemas interagem com o usuário final da aplicação para documentarem e traduzirem necessidades de negócio em requisitos de sistema. A partir da conclusão dessa fase, o modelo sugere que a fase de projeto da solução seja iniciada e, daí em diante, até a entrega da solução, após a fase de teste ou verificação, praticamente não há interação com o usuário final. Esse era o caminho considerado natural em termos de evolução dos projetos de desenvolvimento de software . Era preciso um modelo que fosse mais interativo com o usuário final ou o cliente.
Em paralelo a esse movimento evolutivo em termos de metodologias, as linguagens de programação também evoluíam. Na década de 1980 e 1990, as linguagens procedurais de programação dominavam os projetos de desenvolvimento de software . Os geeks daquela época, muita das vezes autodidatas, aprendiam a desenvolver softwares em Cobol, Pascal, Fortran e, os superpopulares Clipper e C, que até hoje estão presentes em algumas empresas que rodam seus sistemas desenvolvidos nessas linguagens.
Livros de linguagens programação do final da década de 1980 e início de 1990 usado pelos autores.
Fonte: Glauter Jannuzzi
No início de 2017, ao visitarmos a casa de nossos pais, encontramos alguns dos livros que usamos muito no início da década de 1990 e, em forma de brincadeira, resolvemos tirar uma foto com os principais e postar no LinkedIn. Para nossa grande surpresa, tivemos mais de cem mil visualizações em pouco mais de um mês de publicação. Profissionais de TI de todo o Brasil registravam seus comentários saudosos e “davam likes ” como forma de relembrarem aquela época “romântica” da programação. Como visto na figura acima, eram livros de dBaseIII Plus, Clipper, C, C++ até chegarmos na era do desenvolvimento orientado a objetos com Delphi.
Vale lembrar aos leitores mais jovens – da era do Java e do .Net – que foi no início dos anos 1990 que as linguagens evoluíram do paradigma procedural para o modelo orientado a objetos. Nessa época, houve uma grande migração de programadores em Clipper – que pertenciam a uma tribo mais jovem que os fiéis programadores de Cobol – para as novas linguagens orientadas a objeto que surgiam ou eram adotadas em larga escala pelo mundo: C, C++ e as novas plataformas visuais integradas como Visual Basic e Delphi.
Temos claro em nossa memória uma visita feita a Fenasoft em 1992, quando tivemos contato pela primeira vez com um ambiente de desenvolvimento orientado a objetos no estande da Microsoft. O apresentador demonstrava uma nova solução que trazia novos conceitos para agilizar a programação, deixando de lado o mundo do MS-DOS e entrando de vez no mundo das interfaces gráficas do Windows. Era o FoxPro. Porém, ao retornarmos para nosso hotel próximo à estação São Bento do metrô, no bairro da Santa Efigênia em São Paulo, discutíamos que não houve “amor à primeira vista” com o FoxPro. Poucos anos depois, conhecíamos o Delphi, o Visual Basic e, aí sim, rolou paixão, especialmente com o Borland Delphi daquela época.
Com a evolução das linguagens de programação orientada a objetos, foi natural que analistas e desenvolvedores abandonassem de vez o modelo em cascata para adotarem novas metodologias de desenvolvimento de software .
Perto do final do século passado, por volta de 1997, uma empresa chamada Rational Software desenvolveu um framework mais moderno para o desenvolvimento de softwares e o batizou de Rational Unified Process (ou simplesmente RUP). Esse framework propunha que o desenvolvimento de software fosse dividido em quatro fases:
1. Inception (Concepção).
2. Elaboration (Elaboração).
3. Construction (Construção).
4. Transition (Transição).
Além dessas quatro fases, o RUP era organizado em nove disciplinas:
1. Business Modeling .
2. Requirements .
3. Analysis & Design .
4. Implementation .
5. Test .
6. Deployment .
7. Configuration & Change Management .
8. Project Management .
9. Environment .
Esse processo deveria ser bastante iterativo, ou seja, em cada uma de suas quatro fases, deveríamos passar pelas nove disciplinas, algumas com maior ou menor ênfase, dependendo da fase em que estávamos, de forma que executássemos miniprocessos em cascata em cada iteração, o que tornaria o procedimento mais interativo também, pois em várias fases do desenvolvimento de software passaríamos, por exemplo, pela disciplina de modelagem de negócio assim como pela disciplina de análise de requisitos.
A figura mostra o “diagrama das baleias” como ficou conhecida a representação visual do RUP.
Fonte: Rational
O RUP representou uma grande evolução e foi largamente adotado pelo mundo, as empresas treinavam seus times e desenvolviam customizações desse framework , batizando-o com as iniciais da empresa agregando o “UP” (de Unified Process ) ao final. Na Unisys, por exemplo, onde trabalhávamos, foi desenvolvido o UnisysUP.
A Rational foi vendida em 2003 para a IBM, que apostava muito no crescimento e replicação desse framework nas grandes corporações. A partir daí a evolução foi constante, tanto no aspecto metodológico quanto no conceito das linguagens de programação.
Quando o Java surgiu e começou a se popularizar, o mundo todo o adotou como a nova linguagem de programação da era da internet. A expectativa gerada sobre o Java era enorme. Um exemplo clássico que era usado nessa época era que, com a programação em Java, seria possível fazer uma geladeira se comunicar diretamente com supermercados para disparar um pedido de compra de algum item que estivesse abaixo do nível mínimo desejado. Anos mais tarde, sabemos que muitos desses exemplos são possíveis com a internet das coisas (IoT), usando o poder na nuvem.
No mundo dos apps , podemos citar além de C#, C++, .net e Java, mais duas linguagens que fazem sucesso no desenvolvimento para mobile : Python e Swift. Python é uma linguagem que, mesmo sendo robusta, tem uma sintaxe mais simples e é recomendada para iniciantes na programação mobile . Já a Swift é a nova linguagem desenvolvida pela Apple para substituir a Objective-C e não há opção melhor para desenvolver aplicativos nativos em iOS. A transformação da Swift em código aberto busca o aumento do número de programadores e a popularização da linguagem para desenvolvimento de software .