No início da minha carreira em computação, deparei-me com uma classificação útil de software que o divide em três categorias: software de sistema, software de aplicação e scripts. Embora esta abstração não seja perfeita, serve como um quadro conceptual útil para engenheiros e gestores. Cada categoria revela perceções únicas sobre desenvolvimento de software, uso e os tipos de pessoas que os escrevem.\n\nNa base está o software de sistema, que inclui sistemas operativos, compiladores e bases de dados. Estes servem como componentes genéricos e fundamentais necessários para construir todos os outros tipos de software. Embora o software de sistema seja generalizado, é inerentemente indiferenciado e não executa tarefas significativas por si só. Existem relativamente poucas opções de software de sistema de qualidade de produção disponíveis — apenas alguns sistemas operativos, cerca de dez linguagens de programação populares e algumas dezenas de motores de base de dados principais. A escassez de escolhas resulta de desafios económicos e técnicos, pois criar software de sistema fiável exige grandes equipas de desenvolvedores altamente qualificados e frequentemente abrange várias gerações. Exemplos notáveis incluem Unix e o compilador gcc, ilustrando a complexidade e escala envolvidas. Apesar da sua importância, apenas uma minoria dos engenheiros de software se especializa no desenvolvimento de software de sistema.\n\nAcima desta camada está o software de aplicação, que abrange todos os programas nomeados concebidos para tarefas específicas. Exemplos vão desde produtos de consumo como Photoshop, Excel e TikTok até inúmeras ferramentas internas, como sistemas de tickets de help desk ou controladores de máquinas-ferramenta. As aplicações são construídas sobre o software de sistema e, por vezes, outras aplicações, projetadas para cumprir trabalhos particulares com capacidades limitadas de personalização ou scripting. Comparadas com o software de sistema, as aplicações tendem a ter ciclos de vida mais curtos, embora algumas, como Microsoft Office, Google Search e Midnight Commander, tenham perdurado por décadas. O software de aplicação constitui a maior parte do desenvolvimento profissional de software e, consequentemente, a maioria dos desenvolvedores profissionais foca-se na criação destas aplicações.\n\nA terceira categoria, scripting, cobre software que automatiza ou liga vários componentes, frequentemente adaptado a casos de uso muito específicos e estreitos. Scripts podem ser tão simples como ligar uma folha de cálculo a um serviço de email usando ferramentas como Zapier ou tão complexos como scripts de análise de dados que utilizam bibliotecas como Numpy. A maior parte do software no mundo enquadra-se nesta categoria de scripting. Ao contrário dos desenvolvedores profissionais, os autores de scripts incluem frequentemente programadores não profissionais, como trabalhadores de escritório que criam fórmulas Excel ou cientistas que escrevem código de análise de dados. Embora os scripts sejam geralmente menos complexos do que aplicações completas, ainda envolvem programação e servem propósitos práticos claros, em vez de existirem como produtos autónomos.\n\nEste quadro coloca elegantemente um vasto espectro de atividades de programação — desde soluções NoCode até microcódigo — no mesmo continuum, destacando as diversas ferramentas que os desenvolvedores devem dominar. Também encoraja os desenvolvedores a considerar se um script simples ou automação é mais apropriado do que construir uma aplicação completa, pois scripts podem ser mais baratos de desenvolver e permitem iteração mais rápida. Curiosamente, scripts frequentemente evoluem para aplicações, e aplicações podem crescer para software de sistema, refletindo uma natureza fractal entre as camadas.\n\nDentro das organizações, estas categorias manifestam-se de formas diferentes. Equipas de plataforma frequentemente personalizam software de sistema para se adequar às necessidades específicas da empresa, reduzindo a complexidade das ferramentas usadas para desenvolvimento de aplicações. Historicamente, aplicações internas tinham suporte limitado para scripting, mas avanços em Automação Robótica de Processos (RPA), plataformas NoCode e ferramentas de Business Intelligence (BI) aumentaram as capacidades de automação e personalização para desenvolvedores não profissionais. Olhando para o futuro, espera-se que não profissionais assumam mais papéis de personalização de software, impulsionados por ferramentas melhoradas e crescentes exigências por soluções de software. Entretanto, desenvolvedores profissionais focar-se-ão no software central de sistema e de interface com o utilizador, fornecendo APIs e fluxos de dados para que ferramentas de scripting e automação de nível superior possam aproveitar.\n\nNo geral, esta classificação não só clarifica como o software é construído e mantido, mas também oferece perceções valiosas para a carreira. Compreender estas camadas pode ajudar profissionais a escolher onde se especializar e como colaborar eficazmente com outros no ecossistema de software.