Programação de computador

ImprimirCitar

Programação de computadores é o processo de realizar uma computação específica (ou, de forma mais geral, realizar um resultado de computação específico), geralmente projetando e construindo um programa de computador executável. A programação envolve tarefas como análise, geração de algoritmos, criação de perfil de algoritmos' precisão e consumo de recursos e a implementação de algoritmos (geralmente em uma linguagem de programação escolhida, comumente chamada de codificação). O código-fonte de um programa é escrito em uma ou mais linguagens inteligíveis para os programadores, em vez de código de máquina, que é executado diretamente pela unidade central de processamento. O objetivo da programação é encontrar uma sequência de instruções que automatize a execução de uma tarefa (que pode ser tão complexa quanto um sistema operacional) em um computador, muitas vezes para resolver um determinado problema. A programação proficiente geralmente requer experiência em vários assuntos diferentes, incluindo conhecimento do domínio do aplicativo, algoritmos especializados e lógica formal.

As tarefas que acompanham e estão relacionadas à programação incluem teste, depuração, manutenção do código-fonte, implementação de sistemas de compilação e gerenciamento de artefatos derivados, como o código de máquina de programas de computador. Isso pode ser considerado parte do processo de programação, mas geralmente o termo desenvolvimento de software é usado para esse processo maior com o termo programação, implementação, ou codificação reservada para a escrita real do código. Engenharia de software combina técnicas de engenharia com práticas de desenvolvimento de software. Engenharia reversa é um processo relacionado usado por designers, analistas e programadores para entender um programa existente e reimplementar sua função.

História

Ada Lovelace, cujas notas adicionadas ao final do artigo de Luigi Menabrea incluíram o primeiro algoritmo projetado para processamento por um motor analítico. Ela é frequentemente reconhecida como a primeira programadora de computador da história.

Dispositivos programáveis existem há séculos. Já no século IX, um sequenciador de música programável foi inventado pelos irmãos persas Banu Musa, que descreveram um tocador de flauta mecânico automatizado no Livro dos Dispositivos Engenhosos. Em 1206, o engenheiro árabe Al-Jazari inventou uma bateria eletrônica programável onde um autômato mecânico musical poderia ser feito para tocar diferentes ritmos e padrões de bateria, por meio de cravelhas e cames. Em 1801, o tear Jacquard podia produzir tramas totalmente diferentes alterando o "programa" – uma série de cartões de papelão com furos.

Algoritmos de quebra de código também existem há séculos. No século 9, o matemático árabe Al-Kindi descreveu um algoritmo criptográfico para decifrar o código criptografado, em A Manuscript on Deciphering Cryptographic Messages. Ele deu a primeira descrição da criptoanálise por análise de frequência, o primeiro algoritmo de quebra de código.

O primeiro programa de computador é geralmente datado de 1843, quando a matemática Ada Lovelace publicou um algoritmo para calcular uma sequência de números de Bernoulli, que deveria ser executado pela Máquina Analítica de Charles Babbage.

Dados e instruções foram armazenados uma vez em cartões perfurados externos, que foram mantidos em ordem e organizados em decks de programa.

Na década de 1880, Herman Hollerith inventou o conceito de armazenar dados em formato legível por máquina. Mais tarde, um painel de controle (plugue) adicionado ao seu Tabulador Tipo I de 1906 permitiu que ele fosse programado para diferentes trabalhos e, no final da década de 1940, equipamentos de registro de unidade, como o IBM 602 e o IBM 604, foram programados por painéis de controle de maneira semelhante. forma, como foram os primeiros computadores eletrônicos. No entanto, com o conceito de computador de programa armazenado introduzido em 1949, tanto os programas quanto os dados eram armazenados e manipulados da mesma maneira na memória do computador.

Linguagem de máquina

Código de máquina era a linguagem dos primeiros programas, escrita no conjunto de instruções da máquina em particular, muitas vezes em notação binária. As linguagens assembly logo foram desenvolvidas para permitir que o programador especifique a instrução em um formato de texto (por exemplo, ADD X, TOTAL), com abreviações para cada código de operação e nomes significativos para especificar endereços. No entanto, como uma linguagem assembly é pouco mais que uma notação diferente para uma linguagem de máquina, duas máquinas com conjuntos de instruções diferentes também possuem linguagens assembly diferentes.

Painel de controle com fio para uma máquina de contabilidade IBM 402. Os fios conectam fluxos de pulso do leitor de cartão a contadores e outra lógica interna e, finalmente, à impressora.

Linguagens do compilador

As linguagens de alto nível tornaram o processo de desenvolvimento de um programa mais simples e compreensível, e menos vinculado ao hardware subjacente. A primeira ferramenta relacionada a compiladores, o Sistema A-0, foi desenvolvida em 1952 por Grace Hopper, que também cunhou o termo 'compilador'. FORTRAN, a primeira linguagem de alto nível amplamente usada a ter uma implementação funcional, foi lançada em 1957, e muitas outras linguagens logo foram desenvolvidas - em particular, COBOL voltada para processamento de dados comerciais e Lisp para pesquisa de computador.

Essas linguagens compiladas permitem que o programador escreva programas em termos sintaticamente mais ricos e mais capazes de abstrair o código, facilitando o direcionamento para vários conjuntos de instruções de máquina por meio de declarações de compilação e heurística. Os compiladores aproveitaram o poder dos computadores para tornar a programação mais fácil, permitindo que os programadores especificassem cálculos inserindo uma fórmula usando a notação infixa.

Entrada do código-fonte

Os programas eram inseridos principalmente usando cartões perfurados ou fita de papel. No final da década de 1960, os dispositivos de armazenamento de dados e os terminais de computador tornaram-se baratos o suficiente para que os programas pudessem ser criados digitando diretamente nos computadores. Também foram desenvolvidos editores de texto que permitiram que alterações e correções fossem feitas com muito mais facilidade do que com cartões perfurados.

Programação moderna

Requisitos de qualidade

Qualquer que seja a abordagem de desenvolvimento, o programa final deve satisfazer algumas propriedades fundamentais. As seguintes propriedades estão entre as mais importantes:

  • Confiabilidade: com que frequência os resultados de um programa estão corretos. Isso depende da correção conceitual de algoritmos e minimização de erros de programação, tais como erros na gestão de recursos (por exemplo, fluxos de buffer e condições de corrida) e erros lógicos (como divisão por zero ou erros fora de um).
  • Robustness: como um programa antecipa problemas devido a erros (não erros). Isso inclui situações como dados incorretos, inadequados ou corruptos, indisponibilidade de recursos necessários, como memória, serviços do sistema operacional e conexões de rede, erro de usuário e falhas de energia inesperadas.
  • Usabilidade: a ergonomia de um programa: a facilidade com que uma pessoa pode usar o programa para o seu propósito pretendido ou, em alguns casos, até propósitos imprevistos. Tais questões podem fazer ou quebrar seu sucesso mesmo independentemente de outras questões. Isso envolve uma ampla gama de elementos textuais, gráficos e, às vezes, hardware que melhoram a clareza, intuitividade, coesividade e integridade da interface de usuário de um programa.
  • Portabilidade: a gama de plataformas de hardware e sistema operacional de computador em que o código fonte de um programa pode ser compilado/interpretado e executado. Isso depende das diferenças nas instalações de programação fornecidas pelas diferentes plataformas, incluindo recursos de hardware e sistema operacional, comportamento esperado do hardware e sistema operacional, e disponibilidade de compiladores específicos de plataforma (e às vezes bibliotecas) para a linguagem do código fonte.
  • Manutenção: a facilidade com que um programa pode ser modificado por seus desenvolvedores atuais ou futuros, a fim de fazer melhorias ou personalizar, corrigir bugs e furos de segurança, ou adaptá-lo a novos ambientes. Boas práticas durante o desenvolvimento inicial fazem a diferença a este respeito. Esta qualidade pode não ser diretamente aparente para o usuário final, mas pode afetar significativamente o destino de um programa ao longo do longo prazo.
  • Eficiência / desempenho: Medida de recursos do sistema um programa consome (tempo do processador, espaço de memória, dispositivos lentos, como discos, largura de banda de rede e até mesmo interação do usuário): menos, melhor. Isso também inclui gerenciamento cuidadoso de recursos, por exemplo, limpeza de arquivos temporários e eliminação de vazamentos de memória. Isso é frequentemente discutido sob a sombra de uma linguagem de programação escolhida. Embora a linguagem certamente afeta o desempenho, até linguagens mais lentas, como Python, pode executar programas instantaneamente a partir de uma perspectiva humana. Velocidade, uso de recursos e desempenho são importantes para programas que estrangulam o sistema, mas o uso eficiente do tempo do programador também é importante e está relacionado ao custo: mais hardware pode ser mais barato.

Legibilidade do código-fonte

Na programação de computadores, a legibilidade refere-se à facilidade com que um leitor humano pode compreender o propósito, o fluxo de controle e a operação do código-fonte. Afeta os aspectos de qualidade acima, incluindo portabilidade, usabilidade e, mais importante, capacidade de manutenção.

A legibilidade é importante porque os programadores passam a maior parte do tempo lendo, tentando entender, reutilizando e modificando o código-fonte existente, em vez de escrever um novo código-fonte. Código ilegível geralmente leva a bugs, ineficiências e código duplicado. Um estudo descobriu que algumas transformações simples de legibilidade tornaram o código mais curto e reduziram drasticamente o tempo para entendê-lo.

Seguir um estilo de programação consistente geralmente ajuda na legibilidade. No entanto, legibilidade é mais do que apenas estilo de programação. Muitos fatores, tendo pouco ou nada a ver com a capacidade do computador de compilar e executar o código com eficiência, contribuem para a legibilidade. Alguns desses fatores incluem:

  • Diferentes estilos de recuo (espaço branco)
  • Comentários
  • Decomposição
  • Nomear convenções para objetos (como variáveis, classes, funções, procedimentos, etc.)

Os aspectos de apresentação disso (como recuos, quebras de linha, realce de cores e assim por diante) geralmente são tratados pelo editor de código-fonte, mas os aspectos de conteúdo refletem o talento e as habilidades do programador.

Várias linguagens de programação visual também foram desenvolvidas com a intenção de resolver problemas de legibilidade adotando abordagens não tradicionais para estrutura de código e exibição. Ambientes de desenvolvimento integrado (IDEs) visam integrar toda essa ajuda. Técnicas como refatoração de código podem melhorar a legibilidade.

Complexidade algorítmica

O campo acadêmico e a prática de engenharia de programação de computadores estão amplamente preocupados em descobrir e implementar os algoritmos mais eficientes para uma determinada classe de problemas. Para isso, os algoritmos são classificados em ordens usando a chamada notação Big O, que expressa o uso de recursos, como tempo de execução ou consumo de memória, em termos do tamanho de uma entrada. Os programadores especialistas estão familiarizados com uma variedade de algoritmos bem estabelecidos e suas respectivas complexidades e usam esse conhecimento para escolher os algoritmos mais adequados às circunstâncias.

Metodologias

A primeira etapa na maioria dos processos formais de desenvolvimento de software é a análise de requisitos, seguida de testes para determinar a modelagem de valor, implementação e eliminação de falhas (depuração). Existem muitas abordagens diferentes para cada uma dessas tarefas. Uma abordagem popular para análise de requisitos é a análise de Caso de Uso. Muitos programadores usam formas de desenvolvimento de software Agile, onde os vários estágios de desenvolvimento de software formal são mais integrados em ciclos curtos que levam algumas semanas em vez de anos. Existem muitas abordagens para o processo de desenvolvimento de software.

Técnicas de modelagem populares incluem Análise e Design Orientado a Objetos (OOAD) e Arquitetura Orientada a Modelos (MDA). A Unified Modeling Language (UML) é uma notação usada para OOAD e MDA.

Uma técnica semelhante usada para o design de banco de dados é a Modelagem Entidade-Relacionamento (Modelagem ER).

Técnicas de implementação incluem linguagens imperativas (orientadas a objetos ou procedurais), linguagens funcionais e linguagens lógicas.

Como medir o uso do idioma

É muito difícil determinar quais são as linguagens de programação modernas mais populares. Os métodos para medir a popularidade da linguagem de programação incluem: contar o número de anúncios de emprego que mencionam a linguagem, o número de livros vendidos e cursos ensinando a linguagem (isso superestima a importância das linguagens mais recentes) e estimativas do número de linhas de código existentes escritas na linguagem (isso subestima o número de usuários de linguagens de negócios como COBOL).

Algumas linguagens são muito populares para determinados tipos de aplicativos, enquanto algumas linguagens são usadas regularmente para escrever muitos tipos diferentes de aplicativos. Por exemplo, COBOL ainda é forte em centros de dados corporativos, geralmente em grandes computadores mainframe, Fortran em aplicativos de engenharia, linguagens de script no desenvolvimento da Web e C em software embarcado. Muitos aplicativos usam uma mistura de várias linguagens em sua construção e uso. Novas linguagens são geralmente projetadas em torno da sintaxe de uma linguagem anterior com novas funcionalidades adicionadas (por exemplo, C++ adiciona orientação a objetos a C e Java adiciona gerenciamento de memória e código de bytes a C++, mas, como resultado, perde a eficiência e a capacidade de baixa nível de manipulação).

Depuração

O primeiro bug real conhecido causando um problema em um computador foi uma traça, preso dentro de um mainframe de Harvard, registrado em uma entrada de livro de log datada de 9 de setembro de 1947. "Bug" já era um termo comum para um defeito de software quando este inseto foi encontrado.

A depuração é uma tarefa muito importante no processo de desenvolvimento de software, pois ter defeitos em um programa pode trazer consequências significativas para seus usuários. Algumas linguagens são mais propensas a alguns tipos de falhas porque sua especificação não exige que os compiladores executem tantas verificações quanto outras linguagens. O uso de uma ferramenta de análise de código estático pode ajudar a detectar alguns possíveis problemas. Normalmente, a primeira etapa na depuração é tentar reproduzir o problema. Esta pode ser uma tarefa não trivial, por exemplo, com processos paralelos ou alguns bugs de software incomuns. Além disso, o ambiente específico do usuário e o histórico de uso podem dificultar a reprodução do problema.

Após a reprodução do bug, a entrada do programa pode precisar ser simplificada para facilitar a depuração. Por exemplo, quando um bug em um compilador pode causar falhas ao analisar algum arquivo de origem grande, uma simplificação do caso de teste que resulta em apenas algumas linhas do arquivo de origem original pode ser suficiente para reproduzir a mesma falha. É necessário tentar-e-erro/dividir-e-conquistar: o programador tentará remover algumas partes do caso de teste original e verificar se o problema ainda existe. Ao depurar o problema em uma GUI, o programador pode tentar pular alguma interação do usuário da descrição original do problema e verificar se as ações restantes são suficientes para que os bugs apareçam. Scripts e pontos de interrupção também fazem parte desse processo.

A depuração geralmente é feita com IDEs. Depuradores autônomos como o GDB também são usados, e geralmente fornecem um ambiente menos visual, geralmente usando uma linha de comando. Alguns editores de texto, como o Emacs, permitem que o GDB seja chamado por meio deles, para fornecer um ambiente visual.

Linguagens de programação

Diferentes linguagens de programação suportam diferentes estilos de programação (chamados paradigmas de programação). A escolha do idioma usado está sujeita a muitas considerações, como política da empresa, adequação à tarefa, disponibilidade de pacotes de terceiros ou preferência individual. Idealmente, a linguagem de programação mais adequada para a tarefa em questão será selecionada. As compensações desse ideal envolvem encontrar programadores suficientes que conheçam a linguagem para formar uma equipe, a disponibilidade de compiladores para essa linguagem e a eficiência com que os programas escritos em uma determinada linguagem são executados. As línguas formam um espectro aproximado de "baixo nível" para "alto nível"; "nível baixo" as linguagens são tipicamente mais orientadas para a máquina e mais rápidas de executar, enquanto as linguagens de "alto nível" as linguagens são mais abstratas e fáceis de usar, mas são executadas com menos rapidez. Geralmente é mais fácil codificar em "alto nível" idiomas do que em "baixo nível" uns. Linguagens de programação são essenciais para o desenvolvimento de software. Eles são os blocos de construção de todos os softwares, desde os aplicativos mais simples até os mais sofisticados.

Allen Downey, em seu livro Como pensar como um cientista da computação, escreve:

Os detalhes parecem diferentes em diferentes idiomas, mas algumas instruções básicas aparecem em apenas sobre cada idioma:
  • Entrada: Reunir dados do teclado, um arquivo ou algum outro dispositivo.
  • Saída: Exibir dados na tela ou enviar dados para um arquivo ou outro dispositivo.
  • Aritmética: Executar operações aritméticas básicas como adição e multiplicação.
  • Execução condicional: Verifique certas condições e execute a sequência apropriada de declarações.
  • Repetição: Executar alguma ação repetidamente, geralmente com alguma variação.

Muitas linguagens de computador fornecem um mecanismo para chamar funções fornecidas por bibliotecas compartilhadas. Desde que as funções em uma biblioteca sigam as convenções de tempo de execução apropriadas (por exemplo, método de passagem de argumentos), essas funções podem ser escritas em qualquer outra linguagem.

Programadores

Programadores de computador são aqueles que escrevem software de computador. Seus trabalhos geralmente envolvem:

  • Prototipagem
  • Codificação
  • Depuração
  • Documentação
  • Integração
  • Manutenção
  • Análise dos requisitos
  • Arquitetura de software
  • Teste de software
  • Especificação

Embora a programação tenha sido apresentada na mídia como um assunto um tanto matemático, algumas pesquisas mostram que bons programadores têm fortes habilidades em linguagens humanas naturais e que aprender a codificar é semelhante a aprender uma língua estrangeira.

Contenido relacionado

FIFO (informática e eletrônica)

Na computação e na teoria de sistemas, FIFO é um acrônimo para primeiro a entrar, primeiro a sair um método para organizar a manipulação de uma...

Verme de computador

Um worm de computador é um programa de computador de malware autônomo que se replica para se espalhar para outros computadores. Ele geralmente usa uma rede...

KOMPILER

Na computação, o KOMPILER foi um dos primeiros sistemas de compilação e execução de linguagem para a International Business Machines' IBM 701, o...
Más resultados...
Tamaño del texto:
Copiar