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.