Linguagem Potigol is a programming language for Portuguese-speaking beginners where all English words have been replaced with Portuguese words.
To run it you'll need to download the .jar
file from GitHub, but it has editor plugins for VSCode, so it's not too bad.
I'll be doing a lot of Google Translate for this episode, so don't expect too much from my Portuguese.
Hello, World!
Let's start with the obvious:
escreva "Olá Mundo!"
$ java -jar potigol.jar -w -c ola.poti Olá Mundo!
Greetings
We can assign to variables without any hassle, and there's string interpolation:
escreva "Qual é o seu nome?" nome = leia_texto escreva "Olá {nome}!"
$ java -jar potigol.jar -w -c ola2.poti Qual é o seu nome? Amanda Olá Amanda!
FizzBuzz
The words are different, but structure of this program is basically identical to what you'd expect:
para número de 1 até 100 faça se número mod 15 == 0 escreva "FizzBuzz" senãose número mod 5 == 0 escreva "Buzz" senãose número mod 3 == 0 escreva "Fizz" senão escreva número fim fim
By the way accents in all keywords are optional, I'll just use them for extra authenticity. What would be the point of programming in Portuguese and not at least trying to spell it properly?
Fib
We need to declare types of function arguments and return values, but at least we don't need to write any retorne
, last expression will be the default valor de retorno
.
fib(número : Inteiro) : Inteiro se número <= 2 1 senão fib(número - 1) + fib(número - 2) fim fim para número de 1 até 30 faça escreva "fib({número})={fib(número)}" fim
java -jar potigol.jar -w -c fib.poti fib(1)=1 fib(2)=1 fib(3)=2 fib(4)=3 fib(5)=5 fib(6)=8 fib(7)=13 fib(8)=21 fib(9)=34 fib(10)=55 fib(11)=89 fib(12)=144 fib(13)=233 fib(14)=377 fib(15)=610 fib(16)=987 fib(17)=1597 fib(18)=2584 fib(19)=4181 fib(20)=6765 fib(21)=10946 fib(22)=17711 fib(23)=28657 fib(24)=46368 fib(25)=75025 fib(26)=121393 fib(27)=196418 fib(28)=317811 fib(29)=514229 fib(30)=832040
Class
We can declare new types by listing their instance variables. There's default constructor, default string representation, and so on:
tipo Pessoa nome : Texto sobrenome : Texto idade : Inteiro fim maria = Pessoa("Maria", "Santos", 27) josé = Pessoa("José", "Rodrigues", 22) escreva maria escreva "{josé.nome} {josé.sobrenome} tem {josé.idade} anos"
$ java -jar potigol.jar -w -c pessoa.poti Pessoa(Maria,Santos,27) José Rodrigues tem 22 anos
Portuguese Wordle
Based on this repository, I setup a list of 6254 common 5-letter Portuguese words. The list already filtered out accented characters. I have no idea how good this list is, I'm just coding here.
And with the list, I created command line Portuguese Wordle:
verifique(acho : Texto, palavra : Texto) var blocos = "" para número de 1 até 5 faça se acho[número] == palavra[número] blocos := blocos + "🟩" senãose palavra.contem(acho[número]) blocos := blocos + "🟨" senão blocos := blocos + "⬛" fim fim escreva blocos fim palavras = Arquivo.leia("palavras.txt") palavra = aleatorio(palavras) var acho = "" enquanto acho <> palavra faça acho := leia_texto se acho.tamanho == 5 verifique(acho, palavra) senão escreva "palavra deve ter 5 caracteres" fim fim
And here's my totally authentic first game. Not bad:
$ java -jar potigol.jar -w -c wordle.poti amigo 🟨⬛⬛⬛⬛ fazer ⬛🟩⬛🟩⬛ naves ⬛🟩⬛🟩🟩 xales 🟩🟩🟩🟩🟩
Step by step:
- for constant values we could just say
name = expr
, for variables we have more complex syntaxvar name = expr
to declare, thenvar := expr
to update - indexing starts from 1 not 0, somehow this annoys me more than all the Portuguese words
- the rest is basically self-explanatory
How English is programming really?
I downloaded all code from Rosetta Code project, which hosts a mix of all programming languages. Skipping one letter names, here are 100 most common words in the code: if
, end
, the
, for
, to
, return
, int
, in
, of
, string
, is
, then
, print
, do
, and
, list
, function
, set
, else
, as
, integer
, length
, new
, value
, var
, array
, let
, number
, next
, main
, while
, with
, def
, not
, from
, result
, line
, println
, loop
, data
, str
, sum
, true
, this
, size
, count
, val
, text
, len
, import
, or
, name
, begin
, map
, file
, define
, my
, out
, it
, max
, char
, false
, say
, write
, input
, by
, type
, on
, left
, first
, io
, std
, add
, func
, index
, range
, xs
, get
, printf
, right
, procedure
, math
, test
, class
, sub
, row
, const
, call
, case
, num
, self
, void
, double
, item
, use
, word
, be
, public
, output
, dim
.
There's no easy way to remove comments, so some of them are mostly from comments (like the
).
Most of these words are not really English in any meaningful sense. An average non-programmer has no idea what the hell string
or var
or def
is; print
for sure doesn't have anything to do with printers, import
nothing with receiving goods from another country, double
isn't twice anything, and so on. It really doesn't get all that easier by replacing boolean
with booleano
- you still need to learn pretty much just as much.
It might be a different story if your native language doesn't use Latin characters. Reading in a foreign alphabet takes a constant mental toll, much greater than a few keywords you get used to fast enough. So the value of programming language spelled in Korean, Russian, Greek, or Hebrew is likely much higher than one spelled in Portuguese or Polish. On yet another hand, coding in non-alphabetic spelling system like Chinese is such a terrible idea, so the Chinese people are probably better off just learning English spelling for it.
Should you use Linguagem Potigol?
The language was actually surprisingly decent. Error messages were better than most "English" languages, and that's really important for beginner language. It was also quite forgiving of minor grammar issues like confusing senãose
with senão se
and such and did its best to still run what it could.
It's not really going to replace Python anytime soon, but quality was way higher than I expected.
I don't really buy the idea that a handful of "English" keywords are a major barrier to entry to programming, but if you do, and your main language is Portuguese, it's not the worst idea ever.
Code
All code examples for the series will be in this repository.
Top comments (2)
As a native Portuguese speaker, I always cringe when I read code in Portuguese. It's just weird. I wonder how native English speakers feel about this.
This blog post talks a little about this situation: code-anth.herokuapp.com/posts/1
Great overview, btw!
There's at least one place where people use local language for programming, and that's Excel Spreadsheets. From what I can tell, Microsoft uses local names in documentation, and most people use local names, even though English ones work too.