O ano era 2007, a NASA confirmava a presença de lagos de metano em Titã, a primeira geração do iPhone é lançada, todos esperam ansiosos pela conclusão da saga de Harry Potter, e eu me encontrava em posse de uma apostila de liguagem C!

Eu deveria ter uns quatorze anos, já havia brincado com um pouco de HTML e alguns scripts do RPG Maker, mas programação “de verdade” me parecia um grande mistério.

Era a época anterior aos bootcamps, cursos online e tutoriais delicinhas no youtube, e eu havia lido em algum fórum que “se alguém quisesse ser um hacker, deveria aprender C”. Eu não conhecia ninguém que entendesse de programação, não fazia ideia do que era C, mas era fã de Matrix e estava piradão em ser um hacker.

Munido de nada mais que um pdf que encontrei online, bloco de notas, e alguma versão do gcc que, miraculosamente, instalei no Windows XP, consegui rodar meu primeiro programa!

#include <stdio.h>

int main()
{
    printf("olá, mundo\n");
    return 0;
}

Essas instruções não fazem mais do que imprimir na tela a frase “olá, mundo”, um conceito que não deve ser novidade para alguém com alguma experiência em programação.

K&R C

Primeiro contato que muitos estudantes têm com C, olá, mundo foi um exemplo utilizado por Brian Kernighan em seus tutoriais para as linguagens B e C, na Bell Labs do início dos anos 1970. E acabou ganhando fama em 1978, com a publicação de seu livro The C Programming Language, escrito em parceria com Denis Ritchie, criador da linguagem.

O único modo de aprender uma nova linguagem de programação é escrevendo programas nela. O primeiro programa a escrever é o mesmo para todas as linguagens:

Imprima as palavras

olá, mundo

Isso é um grande obstáculo; para superá-lo você deve ser capaz de criar o texto do programa em algum lugar, compilá-lo com sucesso, carregá-lo, executá-lo, e descobrir para onde foi sua saída. Com esses detalhes mecânicos dominados, todo o resto é comparativamente fácil.

(KERNIGHAN; RITCHIE, 1988, p.9, tradução nossa) 1.

The C Programming Language, comumente conhecido por K&R C, foi importante não somente por representar talvez o primeiro padrão para C, se valendo da autoridade de seu designer original, mas também por apresentar uma escrita considerada modelo para este gênero de publicação.

Em sua participação no episódio #109 do podcast do Lex Fridman (meu favorito atualmente), Kernighan discute um pouco sobre a popularidade do livro, e da Linguagem C como um todo.

Eu acho que [a linguagem C] encontrou um ponto ideal de expressividade, já que você poderia ler e escrever coisas em uma maneira bem natural, e eficiência, o que era particularmente importante quando computadores não eram tão poderosos quanto são hoje […] e, não sei, talvez o ambiente que a acompanhava também, que era o Unix. Então isso significava que se você escrevesse um programa ele poderia ser usado em todos aqueles computadores que rodavam Unix, e eram todos aqueles computadores, porque eles eram todos escritos em C.

[…] o próprio sistema operacional Unix era portátil, assim como todas as ferramentas. Então tudo trabalhou junto, novamente, em uma dessas coisas onde as coisas se alimentam umas das outras em um ciclo positivo.

O tempo foi bom. Denis e eu escrevemos o livro em 1977 […] e naquele ponto Unix estava começando a se espalhar, eu não sei quantos eram, mas deveriam existir dezenas a centenas de sistemas Unix, e C também estava disponível em computadores que não tinham nada a ver com Unix, e assim a linguagem tinha algum potencial.

E não haviam outros livros sobre C, e a Bell Labs era realmente sua única fonte, e Denis, é claro, era autoritário porque era a linguagem dele. E ele havia escrito um manual de referência que era um exemplo maravilhoso de como escrever um manual de referência, muito, muito, muito, muito bem feito.

Assim eu torci o seu braço até que ele concordou em escrever um livro, e então escrevemos um livro. E a virtude ou vantagem, ao menos eu acho, de ir primeiro é que então os outros têm que te seguir se farão alguma coisa.

(BRIAN, 2020, 53:10, tradução nossa) 2

Mesmo quase cinquenta anos após a sua concepção, C ainda ocupa o terceiro lugar no ranking das Linguagens de Programação mais populares do mundo segundo a IEEE Spectrum (TOP, 2021). Este fato sozinho talvez possa indicar a influência da linguagem, e em parte, K&R C, no mundo da programação.

Brian Kernighan também comenta sobre sua contribuição e a escolha de exemplos para o livro:

Passei muito tempo tentando encontrar exemplos que meio que se encaixariam e diriam às pessoas o que talvez devessem saber, aproximadamente no momento certo em que deveriam estar pensando em precisar daquilo.

[…] Eu penso que um bom exemplo te dirá como fazer algo e será representativo de ‘Talvez você não queria fazer exatamente isso, mas irá querer fazer algo que esteja ao menos na mesma linha geral’. E então muitos dos exemplos no livro de C foram escolhidos por esses problemas de processamento de texto muito simples e diretos que eram típicos do Unix. […] esse tipo de coisas distintas que são representativas do que as pessoas querem fazer, e soletrá-las para que possam então tomá-las e observar as partes principais, e modificá-las a seu gosto.

E eu acho que muitos livros de programação […] não fazem isso. Não te dão exemplos que são ambos realistas e algo que você pode querer fazer.

(BRIAN, 2020, 56:13, tradução nossa) 3

Considerando essa preocupação na escolha de exemplos realistas e úteis, que ensinariam “aquilo que você precisa aprender aproximadamente quando precisa aprender”, pode-se apreciar o valor de olá, mundo como o primeiro exemplo do livro.

Apesar de aparentemente simples, o exemplo não só familiariza o leitor com a sintaxe básica de um programa em C, e com o uso da função printf para a impressão de saídas na tela, mas também introduz o conceito de adequadamente configurar e testar seu ambiente de programação antes de pensar em qualquer outra coisa.

Primeiro contato

É certo que K&R C não era voltado ao ensino de programação básica, como declarado no prefácio para a primeira edição:

O livro não é um manual introdutório de programação; ele assume alguma familiaridade com conceitos básicos de programação como variáveis, declarações de atribuição, laços de repetição e funções. No entanto, um programador iniciante deve ser capaz de acompanhar a leitura e aprender a linguagem, embora acesso a um colega mais experiente ajude.

(KERNIGHAN; RITCHIE, 1988, p.8, tradução nossa) 4.

Ainda assim, pode-se notar a beleza de olá, mundo quando apresentado mesmo a alguém que nunca escreveu uma linha de código. Não é preciso ter familiaridade com nenhum dos conceitos mencionados para se copiar algumas linhas e sentir que o seu programa faz alguma coisa, e que você entende (ou ao menos suspeita) o porquê. Para mim isso foi mágico.

Penso que esse talvez seja o motivo para que tantos livros introdutórios e apostilas também apresentem olá, mundo (ou similar) como o primeiro contato com a programação. Tradição, inclusive, que acaba aparecendo também em outras áreas da computação.

Outras linguagens

Olá, mundo também é utilizado em linguagens diferentes de C, tanto como exemplo introdutório quanto como teste de funcionalidade.

Sendo simples e reconhecível, também pode ser utilizado como uma comparação rápida de sintaxes, como a seguir:

Python

print('olá, mundo')

Java

class olaMundo
{
  public static void main(String args[])
  {
    system.out.println("olá, mundo");
  }
}

C++

#include <iostream.h>

int main(void)
{
  cout << "olá, mundo" << endl;
  return 0;
}

Go

package main

import "fmt"

func main () {
  fmt.Println("olá, mundo")
}

PHP

<? php echo "olá, mundo"; ?>

Bash

#!/bin/bash
echo "olá, mundo"

Lisp

(print "olá, mundo")

Lua

print("olá, mundo")

Note como linguagens compiladas como no caso de C, C++ e Go requerem mais linhas de código para o olá mundo do que linguagens de scripts como Python e Lua. Há um motivo para isso, mas talvez seja assunto para uma postagem futura.

Vale lembrar também que, tendo sido concebido no mesmo grupo de exemplos baseados em texto inspirados pelos problemas típicos do Unix, olá, mundo pode não ser tão simples e em outras aplicações. Como na programação de microcontroladores e sistemas embarcados, em que um terminal para impressão de texto nem sempre está facilmente disponível. Neste caso, surgiram suas próprias tradições, como o programa Blink no arduino, que pisca um LED para indicar seu funcionamento.

Faça também

Você também pode escrever seu próprio olá, mundo.

Se estiver lendo esta postagem em um navegador em seu computador, siga os passos a seguir.

  1. Abra as ferramentas de desenvolvedor, pressionando F12 no Firefox, Chrome ou Edge.
  2. Localize a aba console.
  3. Clique na área de texto, indicada por um ou mais caracteres >, e escreva a seguinte linha de código:
alert("olá, mundo")

Não esqueça das aspas!

  1. Pressione Enter.

Uma janela de alerta deve surgir na sua tela, com a frase “olá, mundo”.

Parabéns! Agora você também fez parte de uma das maiores tradições no mundo da programação!

Referências

KERNIGHAN, Brian W.; RITCHIE, Dennis M. The C Programming Language. 2nd ed. [S.l.]: Prentice-Hall, 1988.

BRIAN Kernighan: UNIX, C, AWK, AMPL, and Go Programming | Lex Fridman Podcast #109. Produzido por Lex Fridman. [S.l.: s.n], jul. 2020. 1 vídeo (103 min). Disponível em: https://www.youtube.com/watch?v=O9upVbGSBFo. Acesso em: 16 nov. 2021.

TOP Programming Languages 2021. IEEE Spectrum. [S.l.]: nov. 2021. Disponível em: https://spectrum.ieee.org/top-programming-languages. Acesso em: 16 nov. 2021.


  1. “The only way to learn a new programming language is by writing programs in it. The first program to write is the same for all languages:

    Print the words

    hello, world

    This is a big hurdle; to leap over it you have to be able to create the program text somewhere, compile it successfully, load it, run it, and find out where your output went. With these mechanical details mastered, everything else is comparatively easy.” (KERNIGHAN; RITCHIE, 1988, p.9). ↩︎

  2. I think it [the C language] found a sweet spot of expressiveness, as you could read and write things in a pretty natural way, and efficiency, which was particularly important when computers were not nearly as powerful as they are today […] and, I don’t know, perhaps the environment that it came with as well, which was Unix. So it meant that if you wrote a program it could be used on all those computers that ran Unix, and that was all of those computers, because they were all writen in C […]

    […] Unix the operating system itself was portable, as were all the tools. So it all worked together again in one of these things were things fed on each other in a positive cycle.

    _Timing was good. Denis and I wrote the book in 1977 […] and at that point Unix was starting to spread, I don’t know how many there were, but it would be dozens to hundreds of Unix systems, and C was also available on other kinds of computers that had nothing to do with Unix, and so the language had some potential.

    And there were no other books on C, and Bell Labs was really the only source for it, and Denis of course was authoritative because it was his language. And he had written a reference manual which was a marvelous example of how to write a reference manual, really really, very very well done.

    So I twisted his arm until he agreed to write a book, and then we wrote a book. And the virtue or advantage, at least I guess, of going first is that then other people have to follow you if they are going to do anything. (BRIAN, 2020, 53:10↩︎

  3. “I spent a lot of time trying to find examples that would sort of hang together and that would tell people what they might need to know at about the right time that they should be thinking about needing it.

    […] I think a good example will tell you how to do something, and it will be representative of ‘You might not want to do exactly that, but you will want to do something that is at least in that same general vein’. And so a lot of the examples in the C book were picked for these very very simple straight forward text processing problems that were typical of Unix […] that kind of fine things that are representative of what people want to do, and spell those out so that they can then take those and see the core part, and modify them to their taste.

    And I think that a lot of programming books […] don’t do that. They don’t give you examples that are both realistic and something that you might want to do.” (BRIAN, 2020, 56:13↩︎

  4. “The book is not an introductory programming manual; it assumes some familiarity with basic programming concepts like variables, assignment statements, loops, and functions. Nonetheless, a novice programmer should be able to read along and pick up the language, although access to more knowledgeable colleague will help.” (KERNIGHAN; RITCHIE, 1988, p.8). ↩︎