Para começar

Para escrever programas precisas de conhecer uma linguagem de programação. Cada linguagem tem uma série de palavras reservadas, ou "keywords" que têm significados especiais - são comandos ou definições dessa linguagem. Conhecendo essas palavras e a maneira de as combinar (a sintaxe da linguagem) podes começar a programar.

As linguagens de alto nível que mais se usam são as de e geração. São linguagens imperativas, o que significa que dás ordens ao computador. Como máquina estúpida e obediente que é, o computador vai obedecer a todas as ordens, mesmo que não façam sentido, desde que obedeçam às regras da linguagem. Isso quer dizer que qualquer erro que o programa tenha é provavelmente culpa tua. Para caçares os erros no código - os famosos "bugs" - deves usar um "debugger". Muitas vezes o debugger é de fácil acesso (como no BASIC-256), outras vezes é um programa independente que tem de ser instalado e configurado. Essa fase  da criação de um programa é tanto mais importante (e demorada) quanto maior for o código escrito.

Então, dás ordens ao computador e trabalhas com informação (dados, como gostamos de chamar). Esses dados, que introduzes no programa e que o programa te devolve, são guardados em variáveis. As variáveis são a memória do programa: guardam os dados enquanto o programa está em execução, desaparecem quando o programa termina. Variáveis são como caixinhas onde guarads coisas, portanto, quando escreves uma linha como numero = 5 estás a guardar o número 5 numa caixa a que chamaste numero. Se escreveres numero = numero + 5, o que acontece? Para veres o que está numa variável tens de ir ver. Em BASIC (e em muitas outras linguagens) print numero escreve o valor de numero no monitor. Claro que as variáveis podem ser muito mais complexas. Podem guardar números, texto, imagens, sons, vídeo, estruturas de dados, e coisas que um utilizador normal não faz ideia que existem.

Os primeiros programas eram executados sequencialmente - uma linha a seguir à outra - e terminavam na última linha. Hoje, as coisas são um pouco diferentes.

À medida que os programas se tornaram maiores e mais complexos, foram inventadas formas de simplificar a programação (pode-te parecer que estamos a complicar, mas a complicação torna um programa grande mais simples de gerir. A primeira revolução foi a invenção das sub-rotinas (funções ou procedimentos). Imagina que tens de fazer muitas vezes um cálculo no teu programa - por exemplo, converter quilometros em metros. Cada vez que o tiveres de fazer escreves o mesmo código (usas variáveis para ler e guardar os valores: dist_em_m = dist_em_km * 1000. Para não repetires o mesmo código, crias uma função km_para_m que podes chamar sempre que fizeres a conversão.

função km_para_m(km)
m = km * 1000
devolve m
fim da função

Uma função recebe valores (chamados argumentos da função) e devolve o resultado. Passas a escrever dist_em_m = km_para_m(dist_em_km). Um procedimento é uma função que não devolve nada - só executa um conjunto de comandos. Imagina que crias escrever em azul em vários pontos do programa:

procedimento print_azul(texto)
   cor azul
   print texto
fim do procedimento

As sub-rotinas foram o princípio da "encapsulação" do código que levou à programação orientada a objetos.

Com as interfaces gráficas, teclados e ratos, a maioria dos programas são orientados a eventos: dentro do código há um ciclo que se repete enquanto o programa está em execução, atento ao que acontece (teclas carregadas, cliques e movimentos do rato, passagem do tempo, sinais enviados pelo S.O. ou por outros programas). O programador deve escolher os eventos importantes e escrever as respostas do programa a esses eventos, como por exemplo, quando o utilizador "clica" no botão "Guardar" o programa vai escrever dados no disco. Objetos e eventos são portanto o topo de gama da programação, mas não deves começar por aí, tal como não deves aprender a conduzir ao volante de um Ferrari.

Para escrever código, tenta o BASIC. Se quiseres saber como é controlar objetos, experimenta o Scratch.