Programas

Da Wikipédia, a enciclopédia livre
Ir para a navegação Saltar para pesquisar

Um diagrama mostrando como o usuário interage com o software aplicativo em um computador desktop típico . A camada de software aplicativo faz interface com o sistema operacional , que por sua vez se comunica com o hardware . As setas indicam o fluxo de informações.

Software é uma coleção de instruções que dizem a um computador como trabalhar. [1] [2] Isso contrasta com o hardware , a partir do qual o sistema é construído e realmente executa o trabalho.

No nível mais baixo de programação , o código executável consiste em instruções de linguagem de máquina suportadas por um processador individual – normalmente uma unidade de processamento central (CPU) ou uma unidade de processamento gráfico (GPU). A linguagem de máquina consiste em grupos de valores binários que significam instruções do processador que alteram o estado do computador de seu estado anterior. Por exemplo, uma instrução pode alterar o valor armazenado em um determinado local de armazenamento no computador - um efeito que não é diretamente observável pelo usuário. Uma instrução também pode invocar uma das muitas operações de entrada ou saída, por exemplo, exibir algum texto na tela do computador; causando mudanças de estado que devem ser visíveis para o usuário . O processador executa as instruções na ordem em que são fornecidas, a menos que seja instruído a "saltar" para uma instrução diferente ou seja interrompido pelo sistema operacional. A partir de 2015 , a maioria dos computadores pessoais , smartphones e servidores possuem processadores com várias unidades de execução ou vários processadores realizando computação juntos, e a computação se tornou uma atividade muito mais simultânea do que no passado.

A maioria dos softwares é escrita em linguagens de programação de alto nível . Eles são mais fáceis e eficientes para os programadores porque estão mais próximos das linguagens naturais do que das linguagens de máquina. [3] As linguagens de alto nível são traduzidas em linguagem de máquina usando um compilador ou um interpretador ou uma combinação dos dois. O software também pode ser escrito em uma linguagem assembly de baixo nível , que tem uma forte correspondência com as instruções da linguagem de máquina do computador e é traduzida em linguagem de máquina usando um montador .

História

Um algoritmo para o que teria sido o primeiro software foi escrito por Ada Lovelace no século 19, para o planejado Motor Analítico . [4] Ela criou provas para mostrar como o motor calcularia os números de Bernoulli . [4] Por causa das provas e do algoritmo, ela é considerada a primeira programadora de computador. [5] [6]

A primeira teoria sobre software, anterior à criação dos computadores como os conhecemos hoje, foi proposta por Alan Turing em seu ensaio de 1935, On Computable Numbers, with an Application to the Entscheidungsproblem (problema de decisão). [ citação necessário ] Isto eventualmente levou à criação dos campos acadêmicos de ciência da computação e engenharia de software; ambas as áreas estudam software e sua criação. [ citação necessária ] A ciência da computação é o estudo teórico do computador e do software (o ensaio de Turing é um exemplo de ciência da computação), enquanto a engenharia de software é a aplicação de princípios de engenharia ao desenvolvimento de software. [ citação necessária ]Antes de 1946, software ainda não eram os programas armazenados na memória dos computadores digitais de programa armazenado, como agora o entendemos; os primeiros dispositivos eletrônicos de computação foram religados para "reprogramá-los". [ citação necessária ]

Em 2000, Fred Shapiro, um bibliotecário da Yale Law School, publicou uma carta revelando que o artigo de 1958 de John Wilder Tukey "The Teaching of Concrete Mathematics" [7] [8] continha o mais antigo uso conhecido do termo "software". encontrado em uma busca nos arquivos eletrônicos do JSTOR , anterior à citação do OED em dois anos. [9] Isso levou muitos a creditar a Tukey a cunhagem do termo, particularmente em obituários publicados no mesmo ano, [10] embora Tukey nunca tenha reivindicado crédito por tal cunhagem. Em 1995, Paul Niquette afirmou que originalmente cunhou o termo em outubro de 1953, embora não tenha encontrado nenhum documento que apoiasse sua afirmação. [11]A primeira publicação conhecida do termo "software" em um contexto de engenharia foi em agosto de 1953 por Richard R. Carhart, em um Rand Corporation Research Memorandum. [12]

Tipos

Em praticamente todas as plataformas de computador, o software pode ser agrupado em algumas categorias amplas.

Finalidade ou domínio de uso

Com base no objetivo, o software de computador pode ser dividido em:

  • O software aplicativo usa o sistema do computador para executar funções especiais além da operação básica do próprio computador. Existem muitos tipos diferentes de software de aplicativo porque a variedade de tarefas que podem ser executadas com um computador moderno é muito grande - consulte a lista de software .
  • O software do sistema gerencia o comportamento do hardware, de modo a fornecer funcionalidades básicas exigidas pelos usuários ou para que outro software funcione corretamente, se for o caso. O software do sistema também é projetado para fornecer uma plataforma para executar o software aplicativo, [13] e inclui o seguinte:
    • Os sistemas operacionais são coleções essenciais de software que gerenciam recursos e fornecem serviços comuns para outros softwares que são executados "em cima" deles. Programas de supervisão , carregadores de inicialização , shells e sistemas de janelas são partes essenciais dos sistemas operacionais. Na prática, um sistema operacional vem com software adicional (incluindo software de aplicativo) para que um usuário possa fazer algum trabalho com um computador que tenha apenas um sistema operacional.
    • Os drivers de dispositivo operam ou controlam um tipo específico de dispositivo conectado a um computador. Cada dispositivo precisa de pelo menos um driver de dispositivo correspondente; porque um computador normalmente tem pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída, um computador normalmente precisa de mais de um driver de dispositivo.
    • Utilitários são programas de computador projetados para auxiliar os usuários na manutenção e cuidado de seus computadores.
  • Software malicioso , ou malware , é um software desenvolvido para danificar ou interromper computadores. O malware está intimamente associado a crimes relacionados a computadores, embora alguns programas maliciosos possam ter sido concebidos como brincadeiras .

Natureza ou domínio de execução

Ferramentas de programação

As ferramentas de programação também são software na forma de programas ou aplicativos que os desenvolvedores usam para criar, depurar , manter ou dar suporte a software. [16]

O software é escrito em uma ou mais linguagens de programação; existem muitas linguagens de programação, e cada uma tem pelo menos uma implementação, cada uma das quais consiste em seu próprio conjunto de ferramentas de programação. Essas ferramentas podem ser programas relativamente independentes, como compiladores , depuradores , interpretadores , vinculadores e editores de texto , que podem ser combinados para realizar uma tarefa; ou podem formar um ambiente de desenvolvimento integrado (IDE), que combina muitas ou todas as funcionalidades dessas ferramentas independentes. [ citação necessária ]Os IDEs podem fazer isso invocando as ferramentas individuais relevantes ou reimplementando suas funcionalidades de uma nova maneira. [ citação necessária ] Um IDE pode facilitar a execução de tarefas específicas, como pesquisar em arquivos em um projeto específico. [ citação necessária ] Muitas implementações de linguagem de programação oferecem a opção de usar ferramentas individuais ou um IDE. [ citação necessária ]

Tópicos

Arquitetura

As pessoas que usam computadores modernos de uso geral (em oposição a sistemas embarcados , computadores analógicos e supercomputadores ) geralmente veem três camadas de software executando uma variedade de tarefas: plataforma, aplicativo e software do usuário. [ citação necessária ]

  • Software
    da plataforma A plataforma inclui o firmware , drivers de dispositivo , um sistema operacional e, normalmente, uma interface gráfica de usuário que, no total, permite que um usuário interaja com o computador e seus periféricos (equipamento associado). O software da plataforma geralmente vem junto com o computador. Em um PC , geralmente é possível alterar o software da plataforma.
  • Software aplicativo O software
    aplicativo é o que a maioria das pessoas pensa quando pensa em software. [ citação necessária ] Exemplos típicos incluem suítes de escritório e jogos de vídeo. O software aplicativo geralmente é adquirido separadamente do hardware do computador. Às vezes, os aplicativos são empacotados com o computador, mas isso não altera o fato de serem executados como aplicativos independentes. Os aplicativos geralmente são programas independentes do sistema operacional, embora geralmente sejam adaptados para plataformas específicas. A maioria dos usuários pensa em compiladores, bancos de dados e outros "softwares de sistema" como aplicativos. [ citação necessária ]
  • Software escrito
    pelo usuário O desenvolvimento do usuário final adapta os sistemas para atender às necessidades específicas dos usuários. O software do usuário inclui modelos de planilha e modelos de processador de texto. [ citação necessário ] Mesmo os filtros de e-mail são um tipo de software de usuário. Os próprios usuários criam esse software e muitas vezes ignoram a importância dele. [ citação necessária ] Dependendo de quão competentemente o software escrito pelo usuário foi integrado aos pacotes de aplicativos padrão, muitos usuários podem não estar cientes da distinção entre os pacotes originais e o que foi adicionado por colegas de trabalho. [ citação necessária ]

Execução pammi

O software de computador deve ser "carregado" no armazenamento do computador (como o disco rígido ou a memória ). Uma vez que o software foi carregado, o computador é capaz de executar o software. Isso envolve passar instruções do software aplicativo, através do software do sistema, para o hardware que, em última análise, recebe a instrução como código de máquina. Cada instrução faz com que o computador execute uma operação - mover dados, realizar uma computação ou alterar o fluxo de controle das instruções. [ citação necessária ]

A movimentação de dados é normalmente de um lugar na memória para outro. Às vezes, envolve a movimentação de dados entre a memória e os registradores que permitem o acesso de dados de alta velocidade na CPU. Mover dados, especialmente grandes quantidades, pode ser caro; isso às vezes é evitado usando "ponteiros" para dados. [ citação necessária ] Os cálculos incluem operações simples como incrementar o valor de um elemento de dados variável. Cálculos mais complexos podem envolver muitas operações e elementos de dados juntos. [ citação necessária ]

Qualidade e confiabilidade

A qualidade do software é muito importante, especialmente para software comercial e de sistema. Se o software estiver com defeito, ele pode excluir o trabalho de uma pessoa, travar o computador e fazer outras coisas inesperadas. Falhas e erros são chamados de " bugs " que são frequentemente descobertos durante os testes alfa e beta. [ citação necessário ] O software é muitas vezes também uma vítima do que é conhecido como envelhecimento do software , a degradação progressiva do desempenho resultante de uma combinação de bugs invisíveis. [ citação necessária ]

Muitos bugs são descobertos e corrigidos por meio de testes de software . No entanto, o teste de software raramente – ou nunca – elimina todos os bugs; alguns programadores dizem que "todo programa tem pelo menos mais um bug" (Lei de Lubarsky). [17] No método em cascata de desenvolvimento de software, equipes de teste separadas são normalmente empregadas, mas em abordagens mais recentes, coletivamente denominadas desenvolvimento de software ágil , os desenvolvedores geralmente fazem todos os seus próprios testes e demonstram o software aos usuários/clientes regularmente para obter feedback. [ citação necessária ] O software pode ser testado através de testes unitários , testes de regressãoe outros métodos, que são feitos manualmente, ou mais comumente, automaticamente, já que a quantidade de código a ser testada pode ser grande. [ citação necessária ] Os programas que contêm software de comando permitem que a engenharia de hardware e as operações do sistema funcionem muito mais facilmente em conjunto. [ citação necessária ]

Licença

A licença do software dá ao usuário o direito de usar o software no ambiente licenciado e, no caso de licenças de software livre , também concede outros direitos, como o direito de fazer cópias. [ citação necessária ]

O software proprietário pode ser dividido em dois tipos:

  • freeware , que inclui a categoria de software de "avaliação gratuita" ou software " freemium " (no passado, o termo shareware era frequentemente usado para software de avaliação gratuita/freemium). Como o nome sugere, o freeware pode ser usado gratuitamente, embora no caso de testes gratuitos ou software freemium, isso às vezes seja verdade apenas por um período limitado de tempo ou com funcionalidade limitada. [18]
  • software disponível por uma taxa, que só pode ser usado legalmente na compra de uma licença. [ citação necessária ]

O software de código aberto vem com uma licença de software livre, concedendo ao destinatário o direito de modificar e redistribuir o software. [19]

Patentes

As patentes de software, como outros tipos de patentes, teoricamente devem dar ao inventor uma licença exclusiva e limitada no tempo para uma ideia detalhada (por exemplo, um algoritmo) sobre como implementar um software ou um componente de um software. Ideias para coisas úteis que o software pode fazer e requisitos do usuário, não devem ser patenteáveis, e implementações concretas (ou seja, os pacotes de software reais que implementam a patente) também não devem ser patenteáveis—as últimas já estão cobertas por direitos autorais, geralmente automaticamente. Assim, as patentes de software devem cobrir a área intermediária, entre os requisitos e a implementação concreta. Em alguns países, um requisito para que a invenção reivindicada tenha efeito no mundo físico também pode fazer parte dos requisitos para que uma patente de software seja considerada válida - embora, como todo software útil tenha efeitos no mundo físico, esse requisito pode ser aberto ao debate. Enquanto isso, a lei de direitos autorais americana foi aplicada a vários aspectos da escrita do código do software. [20]

As patentes de software são controversas na indústria de software, com muitas pessoas tendo opiniões diferentes sobre elas. Uma das fontes de controvérsia é que a divisão acima mencionada entre ideias iniciais e patente não parece ser honrada na prática pelos advogados de patentes - por exemplo, a patente para programação orientada a aspectos (AOP), que pretendia reivindicar direitos sobre qualquer ferramenta de programação implementando a idéia de AOP, independentemente de sua implementação. [ citação necessário ] Outra fonte de controvérsia é o efeito sobre a inovação, com muitos especialistas e empresas ilustres argumentando que o software é um campo de movimento tão rápido que as patentes de software apenas criam grandes custos e riscos adicionais de litígio e, na verdade, retardam a inovação. [citação necessária ]No caso de debates sobre patentes de software fora dos Estados Unidos, foi feito o argumento de que grandes corporações americanas e advogados de patentes provavelmente serão os principais beneficiários de permitir ou continuar a permitir patentes de software. [ citação necessária ]

Design e implementação

O design e a implementação do software variam dependendo da complexidade do software. Por exemplo, o design e a criação do Microsoft Word levaram muito mais tempo do que o design e o desenvolvimento do Microsoft Notepad , porque este último possui funcionalidades muito mais básicas. [ citação necessária ]

O software geralmente é desenvolvido em ambientes de desenvolvimento integrado (IDE) como Eclipse , IntelliJ e Microsoft Visual Studio que podem simplificar o processo e compilar o software. [ citação necessária ] Conforme observado em uma seção diferente, o software geralmente é criado em cima do software existente e da interface de programação de aplicativos (API) que o software subjacente fornece, como GTK+ , JavaBeans ou Swing . [ citação necessária ] Bibliotecas (APIs) podem ser categorizadas por sua finalidade. Por exemplo, o Spring Frameworké usado para implementar aplicativos corporativos , a biblioteca Windows Forms é usada para projetar aplicativos de interface gráfica do usuário (GUI), como o Microsoft Word, e o Windows Communication Foundation é usado para projetar serviços da Web . [ citação necessária ] Quando um programa é projetado, ele depende da API. Por exemplo, um aplicativo de desktop do Microsoft Windows pode chamar funções de API na biblioteca .NET Windows Forms como Form1.Close() e Form1.Show() [21]para fechar ou abrir o aplicativo. Sem essas APIs, o programador precisa escrever essas funcionalidades inteiramente por conta própria. Empresas como Oracle e Microsoft fornecem suas próprias APIs para que muitos aplicativos sejam escritos usando suas bibliotecas de software que geralmente possuem várias APIs. [ citação necessária ]

Estruturas de dados como tabelas de hash , arrays e árvores binárias e algoritmos como quicksort , podem ser úteis para criar software.

O software de computador possui características econômicas especiais que tornam seu projeto, criação e distribuição diferentes da maioria dos outros bens econômicos. [ especificar ] [22] [23]

Uma pessoa que cria software é chamada de programador , engenheiro de software ou desenvolvedor de software, termos que têm um significado semelhante. Também existem termos mais informais para programador, como "codificador" e "hacker" - embora o uso da última palavra possa causar confusão, porque é mais frequentemente usado para significar alguém que invade ilegalmente sistemas de computador .


Veja também

Referências

  1. ^ IBM. "O que é Desenvolvimento de Software" . IBM . IBM . Recuperado em 4 de outubro de 2021 .
  2. ^ Johnson, Dave. "O que é Software" . Insider de Negócios . Insider de Negócios . Recuperado em 4 de outubro de 2021 .
  3. ^ "Construção do compilador" . Arquivado a partir do original em 2 de novembro de 2013.
  4. ^ a b Evans 2018 , p. 21.
  5. ^ Fuegi, J.; Francisco, J. (2003). "Lovelace & Babbage e a criação das 'notas' de 1843" (PDF) . Annals of the History of Computing . 25 (4): 16–26. doi : 10.1109/MAHC.2003.1253887 . S2CID  40077111 . Arquivado a partir do original (PDF) em 15 de fevereiro de 2020.
  6. ^ "Ada Lovelace homenageada pelo Google doodle" . O Guardião . 10 de dezembro de 2012 . Recuperado em 25 de novembro de 2018 .
  7. ^ Tukey, John Wilder (janeiro de 1958). "O Ensino da Matemática Concreta". American Mathematical Mensal . Taylor & Francis, Ltd. / Associação Matemática da América . 65 (1): 1–9, 2. doi : 10.2307/2310294 . ISSN 0002-9890 . JSTOR 2310294 . CODEN AMYAE . […] Hoje, o "software" que compreende as rotinas interpretativas cuidadosamente planejadas, compiladores e outros aspectos da programação automática são pelo menos tão importantes para a calculadora eletrônica moderna quanto seu "hardware" de válvulas, transistores, fios, fitas e similares . […]   
  8. Beebe, Nelson HF (22 de agosto de 2017). "Capítulo I - Aritmética inteira". The Mathematical-Function Computation Handbook - Programming Using the MathCW Portable Software Library (1 ed.). Salt Lake City, UT, EUA: Springer International Publishing AG . pp. 969, 1035. doi : 10.1007/978-3-319-64110-2 . ISBN 978-3-319-64109-6. LCCN  2017947446 . S2CID  30244721 .
  9. ^ Shapiro, Fred (2000). "Origem do Termo Software: Evidência do JSTOR Electronic Journal Archive" (PDF) . IEEE Annals of the History of Computing . 22 (2): 69–71. doi : 10.1109/mahc.2000.887997 . Arquivado a partir do original (PDF) em 5 de junho de 2003 . Recuperado em 25 de junho de 2013 .
  10. Leonhardt, David (28 de julho de 2000). "John Tukey, 85, Estatístico; cunhou a palavra 'Software'" . The New York Times . Recuperado em 24 de setembro de 2012 .
  11. Niquette, R. Paul (2006), Softword: Provenance for the Word 'Software , ISBN 1-58922-233-4, arquivado do original em 8 de agosto de 2019 , recuperado em 18 de agosto de 2019
  12. ^ Carhart, Richard (1953). Um levantamento do status atual do problema de confiabilidade eletrônica (PDF) . Santa Mônica, CA: Rand Corporation . pág. 69. […] Será lembrado do art. 1.6 que o termo pessoal foi definido para incluir as pessoas que entram em contato direto com o hardware, desde a produção até o uso em campo, ou seja, pessoas que montam, inspecionam, embalam, enviam, manuseiam, instalam, operam e mantêm equipamentos eletrônicos. Em qualquer uma dessas fases, falhas de pessoal podem resultar em equipamentos inoperantes. Tal como acontece com os fatores de hardware, quase não há dados quantitativos sobre esses fatores de software ou humanos em confiabilidade: quantas falhas são causadas por pessoal, por que elas ocorrem e o que pode ser feito para remover os erros. […]
  13. ^ "Software do sistema" . A Universidade do Mississipi. Arquivado a partir do original em 30 de maio de 2001.
  14. ^ "O que é um plug-in?" . www.computerhope.com . Recuperado em 26 de janeiro de 2022 .
  15. ^ "Software Embutido—Tecnologias e Tendências" . Sociedade de Computação IEEE. Maio a junho de 2009. Arquivado a partir do original em 28 de outubro de 2013 . Recuperado em 6 de novembro de 2013 .
  16. ^ "O que é uma ferramenta de programação? - Definição da Techopedia" . Techopedia . com . Recuperado em 26 de janeiro de 2022 .
  17. ^ "exemplos de livros de inteligência de script" . GitHub . 9 de maio de 2018. Arquivado a partir do original em 6 de novembro de 2015.
  18. ^ "Freeware vs Shareware - Diferença e Comparação | Diffen" . www.diffen.com . Recuperado em 26 de janeiro de 2022 .
  19. ^ "Software de código aberto explicado" . Guia Digital IONOS . Recuperado em 26 de janeiro de 2022 .
  20. Gerardo Con Díaz, "The Text in the Machine: American Copyright Law and the Many Natures of Software, 1974-1978," Technology and Culture 57 (outubro de 2016), 753-79.
  21. ^ "Biblioteca MSDN" . Arquivado a partir do original em 11 de junho de 2010 . Recuperado em 14 de junho de 2010 .
  22. ^ v. Engelhardt, Sebastian (2008). "As Propriedades Econômicas do Software" . Jena Economic Research Papers . 2 (2008-045). Arquivado a partir do original em 5 de janeiro de 2016.
  23. ^ Kaminsky, Dan (1999). "Por que o código aberto é o paradigma econômico ideal para software" . Arquivado a partir do original em 22 de maio de 2012.

Fontes

links externos