Mar 21, 2024

A melhor tecnologia para cada projeto e porquê!

 

António Anacleto, 

Fullstack Solutions Delivery


No universo profissional da tecnologia é comum assistirmos a debates renhidos sobre qual a melhor tecnologia seja ela uma metodologia, linguagem, sistema operativo, etc. São apresentados argumentos por vezes até comprovados por estatísticas, estudos de benchmark, opiniões de profissionais de renome entre outras fontes. Nalguns casos a defesa pela tecnologia preferida chega a transformar-se no equivalente a uma religião onde a dedicação e emoções que o profissional apresenta transcendem a simples lógica e racionalidade.  

Neste cenário, que se complica a cada dia com a multiplicação de novas tecnologias, fica difícil, principalmente para os atores/decisores que, contactando com os sistemas, não são profissionais do sector tecnológico, entender qual o melhor caminho e porquê! Dependendo do profissional que está a fazer o acompanhamento as decisões podem mudar drasticamente e com elas todas as variáveis agregadas, como por exemplo o tempo a utilizar no projeto, o custo de implementação, o custo de ownership, a equipa necessária, a solução final, etc.  

Desta forma é fácil de entender a relevância deste processo de decisão e o impacto das diversas opções no sucesso do projeto. 

Cingindo-nos ao desenvolvimento de software, sendo que a mesma lógica se aplica a outras áreas da tecnologia, podemos começar por dizer que não existe uma solução que serve para tudo e todos. Cada projeto tem as suas variáveis a serem consideradas. 

Podemos começar por avaliar o sistema operativo a utilizar, por exemplo. Essa decisão passa por diversos vetores: será esse Sistema Operativo para os servidores ou para as máquinas clientes, qual o know how e conforto a utilizar o Sistema Operativo por parte de quem o vai utilizar, a instituição já tem uma infraestrutura pré-instalada, as aplicações a utilizar tem como requisito um determinado Sistema Operativo, etc.?  A título de exemplo podemos apresentar vários casos de uso que justificam determinadas opções: 

- É muito comum designers e outros profissionais de imagem e multimédia preferirem MacOS dada a sua estabilidade e o facto de ter as ferramentas que estão habituados a utilizar;

- A nível empresarial normalmente as máquinas cliente costumam ter o microsoft windows instalado dado que é o sistema operativo que mais utilizadores estão habituados a usar e suporta o microsoft office, ferramenta que normalmente este tipo de utilizadores necessita;

- Muitos programadores e académicos utilizam o Linux, sistema operativo que entrega um bom nível de liberdade, estabilidade e segurança, libertando o utilizador para se focar nas tarefas em mãos e suportando as ferramentas que estes necessitam.

Ao nível dos servidores podemos verificar que normalmente se o objetivo é implementar um cluster ou hospedar soluções web, por exemplo, normalmente são utilizados servidores Linux, mas se o que pretende for disponibilizar um servidor Microsoft SQL ou uma aplicação cliente/servidor desenvolvida para windows já a solução é utilizar um servidor windows. Claro que isto de uma forma exemplificativa e bastante introdutória e simplificada, temos múltiplas outras situações como é o caso de IOT por exemplo onde se utilizam SO's mínimos normalmente baseados em distribuições Linux ou Android, mas por vezes são utilizados SO's especializados dada a especificidade da utilização. 

No caso das linguagens temos a incontornável JavaScript que é utilizada em todas as aplicações web, ou em alternativa TypeScript que para leigos podemos definir como uma extensão do JavaScript onde temos que ter em conta o tipo de dados e objetos. Apesar de ainda pouco usado, temos em complemento o WebAssembly (Wasm) que permite correr código de outras linguagens no browser e pode coexistir com o JavaScript. Neste ponto costuma existir alguma rivalidade entre os defensores de escrever código mais rapidamente (JavaScript) e os que defendem a importância de garantir a coerência dos tipos (TypeScript), Wasm ainda não é muito utilizado quando posto em perspetiva mas não deixa de apresentar possibilidades interessantes, não vou entrar em detalhe, mas podemos falar sobre isso noutro artigo. Eu diria que a verdadeira discussão aqui é sobre utilizar JavaScript puro (Vanilla JS) ou em alternativa uma das várias frameworks como seja Vue, Angular, React, etc. Descriminar as características de cada possibilidade e porque optar por uma ou outra opção dependendo do projeto está fora do âmbito deste artigo. 

De uso mais genérico existe uma grande rivalidade entre Java e C# .net, ambas utilizadas em ambientes empresariais e institucionais, eu diria que utilizar uma ou outra, se visto de uma forma racional, passaria mais por questões como o know how da equipa, o que já existe em termos de “codebase” na instituição, que bibliotecas serão utilizadas, etc. dado que de uma forma geral ambas as linguagens permitem entregar soluções de qualidade escaláveis e robustas.

Para o backend de websites e aplicações web o PHP continua a ser utilizado principalmente por causa do sucesso de soluções como o Wordpress mas tem estado cada vez mais a ser substituído por outras linguagens. Com o JavaScript a ser utilizado também do lado servidor através da utilização de Node.js, a opção de utilizar uma única linguagem para todo o backend para quem usa C#, Java, etc. e o aumento de utilização de outras linguagens como é o caso do Python com frameworks tipo Django, FastAPI, Flask, etc. este segmento tem-se mostrado bastante diversificado com todas estas opções se mostrando excelentes alternativas.

No sector de IA e análise de dados a linguagem Python tem apresentado um crescimento exponencial, bem como na área de administração de sistemas, sendo também muitas vezes utilizada como "linguagem cola" facilitando a integração entre diversas tecnologias e soluções. Muitas vezes acusada de ser uma linguagem lenta devido ao facto de ser uma linguagem interpretada e não compilada, esse não é de facto um argumento válido para muitos dos casos de utilização atuais, por exemplo se vou fazer uma aplicação web a linguagem será sempre mais rápida que a minha rede, então de nada me serve utilizar uma linguagem compilada gastando muito mais recursos devido ao maior tempo necessário para o desenvolvimento para depois a aplicação correr com a mesma performance ou por vezes até pior dado que além da velocidade de execução da linguagem temos muitos outros fatores a considerar como seja a qualidade das bibliotecas utilizadas, qualidade do código, etc.  

Para casos de uso que exijam a melhor performance temos Rust, C, C++, etc. linguagens que foram feitas para esse efeito, sendo que em casos extremos como por exemplo certos componentes de apoio à condução dos automóveis modernos, recorre-se a SO's específicos com linguagens específicas dada a necessidade de garantir a performance e robustez da solução.  

A título de conclusão a ideia que pretendo transmitir neste artigo é precisamente que não existe uma única solução para todos os casos e não é produtivo ser fanático no respeitante às tecnologias, nem para o lado inovador nem para o lado clássico e conservador. Cada projeto é um projeto com as suas especificidades, manter a mente aberta é sempre um ativo importantíssimo nos elementos da equipa. 

Fica aqui muito por dizer, obviamente, e muitas áreas ficam em aberto para possíveis artigos posteriores. Falo de SO’s e linguagens, mas não entrei em áreas como tecnologias de base de dados, gestão de projetos de desenvolvimento, suas metodologias e ferramentas, utilização ou não de paradigmas (e quando usar cada um) como por exemplo MCV (Model, Controller, View), Injeção de dependências, Utilizar ORM 's ou não e quando? etc. 

Este artigo pretende assim lançar o mote para uma discussão produtiva sobre tecnologia e sua aplicação e espero inspirar os colegas para que escrevam sobre as suas próprias opiniões e assim contribuam para o enriquecimento do know how de todos nós. 

 


No comments:

Post a Comment