Software[1] (pronúncia em inglês: ['sɔftwɛəɹ], pronúncia em português: ['sóof-tu-er']) é uma coleção de programas que dizem a umcomputador como executar tarefas específicas.[2] Isso contrasta com ohardware, a partir do qual o sistema é construído e que realmente executa o trabalho.
Software é o termo usado para se referir a uma sequência de instruções executadas em um dispositivo informático, como um computador ou máquina semelhante. Ele é um produto daengenharia de software e inclui não apenas o programa em si, mas também quaisquerdocumentações eespecificações.
Um software é geralmente composto por diversas funções,bibliotecas e módulos que, ao final do desenvolvimento, formam um programaexecutável. Quando executado, esse programa recebe dados de entrada (input), processa as informações por meio dealgoritmos ou sequências de instruções lógicas e gera uma saída (output) como resultado deste processamento.
A maioria dos softwares é escrita em linguagens de programação de alto nível, comoPython,Java,JavaScript,TypeScript,C#,Go,PHP,Kotlin,Ruby,Dart,R,Swift, entre outras.[3] Essas linguagens são mais fáceis e eficientes para os programadores, pois estão mais próximas das linguagens naturais do que docódigo de máquina. Elas são traduzidas para a linguagem de máquina por meio de umcompilador, uminterpretador ou uma combinação dos dois.[4]
Softwares também podem ser escritos em linguagens de nível mais baixo, comoAssembly. Além disso, linguagens comoC,C++ eRust, embora geralmente classificadas como de médio ou alto nível, são frequentemente usadas para programação de baixo nível devido ao seu controle direto sobre ohardware e à proximidade com a linguagem de máquina.[5] As linguagens assembly, por sua vez, possuem uma forte correspondência com as instruções daCPU e são traduzidas para a linguagem de máquina usando umassembler.
Um algoritmo para o que teria sido o primeiro software foi escrito porAda Lovelace no século 19, para o planejadoAnalytical Engine.[8] Ela criou provas para mostrar como o motor calcularia os números de Bernoulli. Por causa das provas e do algoritmo, ela é considerada a primeira programadora de computador.[9][10]
A primeira teoria sobre software, anterior à criação dos computadores como os conhecemos hoje, foi proposta por Alan Turing em seu ensaio de 1936,On Computable Numbers, with an Application to theEntscheidungsproblem (problema de decisão).[11] Isso eventualmente levou à criação dos campos acadêmicos de ciência da computação e engenharia de software; Ambos os campos estudam software e sua criação.[12] Ciência da computação é o estudo teórico do computador e do software (o ensaio deTuring é um exemplo deciência da computação), enquanto a engenharia de software é a aplicação dos princípios da engenharia ao desenvolvimento de software.[13]
Em 2000, Fred Shapiro, bibliotecário daYale Law School, publicou uma carta revelando que o artigo deJohn Wilder Tukey de 1958 "The Teaching of Concrete Mathematics" continha o uso mais antigo conhecido do termo "software" encontrado em uma busca nos arquivos eletrônicos doJSTOR, antecedendo a citação doOxford English Dictionary em dois anos. Isso levou muitos a creditar Tukey por cunhar o termo, particularmente em obituários publicados no mesmo ano, embora Tukey nunca tenha reivindicado crédito por qualquer moeda. Em 1995, Paul Niquette alegou que havia originalmente cunhado o termo em outubro de 1953, embora não tenha encontrado nenhum documento que sustentasse sua afirmação. A primeira publicação conhecida do termo "software" em um contexto de engenharia foi em agosto de 1953 por Richard R. Carhart, em um memorando de pesquisa daRand Corporation.[14][15][16][17][18]
Umprograma de computador é composto por umasequência de instruções, que podem ser em linguagem natural ou codificada, que é interpretada e executada por umprocessador ou por umamáquina virtual. Em um programa correto e funcional, essa sequência segue padrões específicos que resultam em um comportamento desejado.[19]
O termo "software" foi criado na década de 1940, e é um trocadilho com o termohardware. "Hardware", eminglês, significa "ferramenta física".Software seria tudo o que faz o computador funcionar, através de instruções, excetuando-se a parte física dele.
Um programa pode ser executado por qualquer dispositivo capaz de interpretar e executar as instruções de que é formado.
Quando umsoftware está representado como instruções que podem ser executadas diretamente por um processador, dizemos que está escrito emlinguagem de máquina, conhecido também como código de máquina. A execução de umsoftware também pode ser intermediada por um programainterpretador, responsável por interpretar e executar cada uma de suas instruções. Uma categoria especial e o notável de interpretadores são asmáquinas virtuais, como amáquina virtual Java (JVM), que simulam umcomputador inteiro, real ou imaginado.[20]
Normalmente, programas de computador são escritos emlinguagens de programação, pois estas foram projetadas para se aproximar das linguagens usadas por seres humanos. Raramente é usada a linguagem de máquina para desenvolver um programa. Atualmente existe uma quantidade muito grande de linguagens de programação, sendo as mais populares no momentoJava,Visual Basic,C,C++,PHP, entre outras.[21]
Alguns programas feitos para usos específicos, como por exemplosoftware embarcado ousoftware embutido, ainda são feitos em linguagem de máquina para aumentar a velocidade ou diminuir o espaço consumido. Em todo caso, a melhoria dos processadores dedicados também vem diminuindo essa prática, sendo oC uma linguagem típica para esse tipo de projeto. Essa prática, porém, vem caindo em desuso, principalmente devido à grande complexidade dos processadores atuais, dos sistemas operacionais e dos problemas tratados. Muito raramente, realmente apenas em casos excepcionais, é utilizado o código de máquina, a representação numérica utilizada diretamente pelo processador.[carece de fontes?]
O programa é, inicialmente, "carregado" namemória principal.[22] Após carregar o programa, o computador encontra oEntry Point ou ponto inicial de entrada do programa que carregou e lê as instruções sucessivamentebyte porbyte. As instruções do programa são passadas para o sistema ou processador onde são traduzidas dalinguagens de programação para alinguagem de máquina, sendo em seguida executadas ou diretamente para ohardware, que recebe as instruções na forma de linguagem de máquina.
Software aplicativo, que permite ao usuário fazer uma ou mais tarefas específicas. Aplicativos podem ter uma abrangência de uso de larga escala, muitas vezes em âmbito mundial; nestes casos, os programas tendem a ser mais robustos e mais padronizados. Programas escritos para um pequeno mercado têm um nível de padronização menor.
Ainda é possível usar a categoriaSoftware embutido ousoftware embarcado, indicandosoftware destinado a funcionar dentro de uma máquina que não é um computador de uso geral e normalmente com um destino muito específico.
Software aplicativo: é aquele que permite aos usuários executar uma ou mais tarefas específicas, em qualquer campo de atividade que pode ser automatizado no computador, especialmente no campo dos negócios. Inclui, entre outros:
Aplicações de controle e sistemas de automação industrial.
Atualmente, temos um novo tipo desoftware. Osoftware como serviço, que é um tipo de software armazenado num computador que se acessa pela internet, não sendo necessário instalá-lo no computador do usuário. O cliente pode acessar esse tipo desoftware, que tem as mesmas funcionalidades das versões armazenadas localmente, de maneira gratuita ou pagar um valor por ele.
Outra classificação possível é:
Software de sistema: Seu objetivo é separar usuário e programador de detalhes do computador específico que está sendo usado. Osoftware do sistema lhe dá ao usuário interfaces de alto nível e ferramentas que permitem a manutenção do sistema. Inclui, entre outros:
Software de programação: O conjunto de ferramentas que permitem ao programador desenvolver programas de computador usando diferentes alternativas e linguagens de programação, de forma prática. Inclui, entre outros:
Ambientes de Desenvolvimento Integrado : agrupamento das ferramentas anteriores, geralmente em um ambiente visual, de modo que o programador não precisa digitar vários comandos para a compilação, interpretação, depuração, etc. Geralmente equipados com uma interface de usuário gráfica avançada.
A maioria dossoftwares é publicada sob umalicença desoftware. Essa licença define e até restringe qual a forma que se pode utilizar o software definido números de licenças, modificações entre outros. Exemplos de licenças:
↑Base I: do alfabeto e dos nomes próprios estrangeiros e seus derivados. Disponível emhttp://umportugues.com/acordo/alfabeto. Acesso em 25 de setembro de 2012.
↑STAIR, Ralph M. (2003).Principles of Information Systems. [S.l.]: Course Technology. p. 16.ISBN0619064897