# Manual do Ubuntu/O que é Software?
## O que é Software?

São os programas de computador – fazem o computador realizar operações e o tornam útil. É formado por um agrupamento de comandos escritos em uma linguagem de programação. Estes comandos, ou instruções, criam as ações dentro do programa, e permitem seu funcionamento. Cada ação é determinada por uma sequência, e cada sequência se agrupa para formar o programa em si. Estes comandos se unem, criando um programa complexo.

### Tipos de Software

* Software de sistema: O Software de sistema é constituído pelos S.O (Sistemas Operacionais) e drivers, são softwares responsáveis pelo funcionamento de todo computador, incluindo o Hardware. Eles auxiliam o usuário, a passar os comandos para o computador, interpretando nossas ações e transformando os dados em códigos binários, que podem ser processados pela CPU.
* Software aplicativo: Conhecido também como Software utilitário, este tipo de software é, basicamente, os programas utilizados para aplicações dentro do S.O (Sistemas Operacionais), que não estejam ligados com o funcionamento do mesmo. Exemplos: Editores de texto, Editores de imagem, Bloco de notas, calculadora, Compactadores de arquivos, antivírus, etc.
* Software de programação: São softwares usados para criar outros programas, a partir de uma linguagem de programação. Exemplo: Ferramentas de desenvolvimento como Eclipse e NetBeans.

### Programa de Computador

Uma linguagem de programação é um método padronizado para comunicar instruções para um computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. Linguagens de programação podem ser usadas para expressar algoritmos com precisão.O conjunto de palavras (lexemas classificados em tokens), compostos de acordo com essas regras, constituem o código fonte de um software. Esse código fonte é depois traduzido para código de máquina, que é executado pelo processador.
Exemplo de código fonte escrito na linguagem de programação C:

#### Interpretação e Compilação

Interpretação de compilação são processos de conversão do código fonte original (escrito por um programador) para o código de máquina (código que a máquina entende).
Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretada por um processo denominado interpretação. Em ambas ocorre a tradução do código fonte para código de máquina.
Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C.
Se o texto do programa é executado à medida que vai sendo traduzido, como nas linguagens JavaScript, BASIC, Python ou Perl, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais facilmente.
Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como Java (compila para a plataforma Java ) e C# (compila para a plataforma CLI). E também há outras formas de interpretar em que os códigos fontes, ao invés de serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como JIT.
Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o código java para o código intermediário (e portável) da JVM. As JVMs originais interpretavam esse código, de acordo com o código de máquina do computador hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM para código hospedeiro.
Fonte: https://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o#Interpreta.C3.A7.C3.A3o_e_compila.C3.A7.C3.A3o