Escreva algoritmo
.
Não escreva algorítmo
(com acento)
nem algoritimo
.
algoritmona imprensa
Observação de Arnaldo Mandel:
…
ao ler um artigo no jornal, vi mais uma vez a repetição de um
fenômeno linguístico que […]
provavelmente incomoda a alguns:
termos matemáticos precisos sendo usados de maneira imprópria
.
Um que já foi pro saco é algoritmo
.
Esse termo
adquiriu nas ruas um novo significado.
Trata-se dos misteriosos sistemas
por trás dos motores de busca e das redes sociais.
Em outra ocasião, Arnaldo complementa:
Faz algum tempo escrevi aqui sobre a palavra algoritmo e como ela tinha caído na boca do povo com um significado derivado, mas não igual ao que sempre demos. […] De lá prá cá, a situação parece ter piorado.
Por algumas semanas vi na TV anúncio de uma série especial
sobre os avanços da IA.
No trêiler, um repórter explicava didaticamente
Algoritmos são um conjunto de instruções usadas
pela inteligência artificial para…
A gota d'água hoje foi o artigo do Pedro Dória no Estadão. […] Normalmente gosto dos artigos dele. Mas hoje escreveu:
Em 1996, poucos sites ofereciam espaços para comentários.
Havia também espaços de discussão,
fóruns, começando a se popularizar.
Não existiam ainda blogs, muito menos redes e algoritmos.
Vejam que ele usa o nosso
vocabulário com significados diferentes.
Ele, e toda mídia escrita e falada;
jornalistas atingem muito mais gente que nossos papers.
É preciso estar alerta para isso quando se interage com gente que não é do ramo da Computação. Não adianta insistir com a definição técnica sem reconhecer a definição midiática (algoritmo é aquela coisa misteriosa que existe na internet e faz aparecerem resultados do google, recomendações em sites, etc…).
E, mais importante: todo ano temos contato com muitas centenas de não especialistas: alunos de Introdução [à Computação]. Posso estar errado, e os que forem dar aula podem checar, mas acho que muitos chegarão à USP com a definição midiática na cabeça.
Você sabe qual a diferença entre iterativo
e interativo
?
Não confunda variante com invariante…
A ideia de minimalidade
está embutida no significado da palavra distância.
(A distância entre dois pontos
é o comprimento do menor caminho entre os pontos.)
Portanto,
as expressões distância mínima
e menor distância
são redundantes.
(É como dizer subir para cima
ou descer para baixo
.)
A expressão um máximo é, quase sempre, mais correta que o máximo porque em geral há mais de elemento máximo.
deletar
O verbo deletar foi importado do inglês sem a menor necessidade. Há excelentes verbos em português — como apagar, eliminar, remover — que significam a mesma coisa. O verbo delir também é bom português, mas é pouco usado.
Em inglês, diz-se random. Em português, diga aleatório.
A linguagem C tem um comando break
que interrompe a execução de um processo iterativo
antes do seu fim natural
.
Por exemplo:
for (i = 0; i < n; i++) { if (a[i] == x) break; }
Não faz muito sentido traduzir esse break
como quebra
ou quebrar
.
É bem melhor dizer interrompa
ou interromper
.
Retornar é o mesmo que voltar. Assim, antes de retornar é preciso ir (a algum lugar). Algoritmos não vão a lugar algum, e portanto não podem retornar.
No contexto de algoritmos, a palavra retorna
é uma tradução inadequada do return em inglês,
do mesmo modo que
pretendeé tradução errada de pretend,
parenteé tradução errada de parent,
reinaré tradução errada de to rain,
eventualmenteé tradução errada de eventually.
Em inglês, to return tem dois significados diferentes: retornar e devolver. Na grande maioria das vezes, um return num programa em C tem o sentido de devolver e não o de retornar.
The 20th century was the century of the equation; the 21st century is the century of the algorithm.[B. Chazelle]
O século XX foi o século da equação;
o século XXI é o século do algoritmo.
Informatica gaat net zo min over computers als astronomie over telescopen.
Computer science is no more about computers
than astronomy is about telescopes.
[Edsger W. Dijkstra]
Ciência da computação não é a ciência dos computadores,
assim como a astronomia não é a ciência dos telescópios.
Programming is best regarded as the process of creating works of literature, which are meant to be read.[Donald E. Knuth, Literate Programming]
A atividade de programação deve ser encarada
como um processo de criação de obras de literatura,
escritas para serem lidas.
Let us change our traditional attitude to the construction of programs. Instead of imagining that our main task is to instruct a computer what to do, let us imagine that our main task is to explain to human beings what we want a computer to do.[Donald E. Knuth, Literate Programming]
Devemos mudar nossa atitude tradicional
em relação à construção de programas.
Em vez de imaginar que nossa principal tarefa é instruir o computador sobre o que
ele deve fazer,
vamos imaginar que nossa principal tarefa é explicar a seres humanos
o que queremos que o computador faça.
Needless to say [that] all by itself, a program is no more than half a conjecture. The other half of the conjecture is the functional specification the program is supposed to satisfy. The programmer's task is to present such complete conjectures as proven theorems.[Edsger W. Dijkstra, manuscrito EWD1036]
Não é preciso dizer que
um programa não é mais que meia conjetura.
A outra metade da conjetura
é a especificação funcional que o programa supostamente satisfaz.
A tarefa do programador
é a de apresentar tais conjeturas completas como como teoremas
demonstrados.
Programs must be written for people to read, and incidentally for machines to execute.[H. Abelson, G. Sussman, The Structure and Interpretation of Computer Programs]
Programas devem ser escritos para serem lidos por seres humanos e,
incidentalmente,
para serem executados por máquinas.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.[Martin Fowler, Refactoring: Improving the Design of Existing Code]
Qualquer idiota é capaz de escrever código que um
computador possa entender.
Bons programadores escrevem código que seres humanos podem entender.
… put a comment on each function saying what the function does, what sorts of arguments it gets, and what the possible values of arguments mean and are used for […] Also explain the significance of the return value, if there is one.[Seção Commenting Your Work em GNU Coding Standards]
… acrescente um comentário a cada função para dizer
o que a função faz,
que tipo de argumentos recebe,
o que cada um dos possíveis valores dos argumentos significa.
[…]
Se a função devolve algo,
explique o significado do valor devolvido.
Nothing can clutter up a module more than frivolous dogmatic comments. Nothing can be quite so damaging as an old crufty comment that propagates lies and misinformation. […] Comments are, at best, a necessary evil. If our programming languages were expressive enough, or if we had the talent to subtly wield those languages to express our intent, we would not need comments very much-perhaps not at all. […] The proper use of comments is to compensate for our failure to express ourself in code. Note that I used the word failure. I meant it. Comments are always failures. We must have them because we cannot always figure out how to express ourselves without them, but their use is not a cause for celebration. […] Truth can only be found in one place: the code.
Nada suja mais um módulo que um comentário frívolo e redundante.
Nada pode causar tanto estrago quanto um velho comentário supérfluo
que propaga desinformação.
[…]
Comentários são, na melhor das hipóteses, um mal necessário.
Se nossas linguagens de programação fossem suficientemente expressivas,
ou se tivéssemos o talento de usar essas linguagens
de modo a exprimir nossas intenções,
não precisaríamos de comentários.
[…]
Comentários são usados para compensar nosso fracasso
em dizer o que queremos em código.
Usei a palavra fracasso de propósito.
Comentários são sempre fracassos.
Precisamos deles porque nem sempre conseguimos descobrir
como nos exprimir sem eles,
mas seu uso não deve ser motivo para festa.
[…]
A verdade só pode ser encontrada em um lugar: o código.
The art of debugging is figuring out what you really told your program to do rather than what you thought you told it to do.[Andrew Singer]
Depurar [um programa]
é entender o que você realmente
mandou seu programa fazer,
e não o que você pensou ter mandado o programa fazer.
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.[Brian W. Kernighan]
Eliminar erros em programas
é duas vezes mais difícil que escrever o código original.
Portanto,
se você escrever o código da maneira mais esperta que puder
então, por definição,
você não será esperto o bastante para encontrar os erros.
A good algorithm is like a sharp knife: it does what it is supposed to do with a minimum amount of applied effort. Using the wrong algorithm to solve a problem is like trying to cut a steak with a screwdriver: you may eventually get a digestible result, but you will expend considerably more effort than necessary, and the result is unlikely to be aesthetically pleasing.[Th. Cormen, Ch. Leiserson, R. Rivest, Introduction to Algorithms, 1st edition]
Um bom algoritmo é como uma faca afiada:
ele faz o que dele se espera com o mínima de esforço.
Usar um algoritmo errado para resolver um problema
é como tentar cortar um bife com uma chave de fenda:
você pode até mesmo conseguir um resultado aceitável,
mas você gastará muito mais esforço que o necessário
e é pouco provável que o resultado será esteticamente agradável.
There is a huge difference between programs that merely work and programs that are well-engineered, just as there is a huge difference between a log thrown over a river and a well-engineered bridge. […] There is a huge difference between working programs and good programs. A good program not only works, but is easy to read and maintain.[P. A. Darnell, Ph. E. Margolis, Software Engineering in C]
Há uma enorme diferença entre programas que meramente funcionam
e programas bem construídos,
assim como há uma enorme diferença entre um tronco
jogado sobre um rio e uma ponte bem construída.
[…]
Há uma enorme diferença entre programas que funcionam
e bons programas.
Um bom programa não só funciona, mas é fácil de ler e de manter.
To understand recursion, we must first understand recursion.[Anônimo]
Para entender recursão, é preciso primeiro entender recursão.
Binary search is to algorithms what a wheel is to mechanics: It is simple, elegant, and immensely important.[Udi Manber, Introduction to Algorithms]
Busca binária é para algoritmos
o que a roda é para a mecânica:
ela é simples, elegante, e enormemente importante.
Binary search is a notoriously tricky algorithm to program correctly. It took seventeen years after its invention until the first correct version of binary search was published![Steven Skiena, The Algorithm Design Manual]
Busca binária é um algoritmo notoriamente difícil
de programar corretamente.
Somente dezessete anos depois da invenção do algoritmo
a primeira versão correta
do programa foi publicada!
Often it appears that there is no better way to solve a problem than to try all possible solutions. This approach, called exhaustive search, is almost always slow, but sometimes it is better than nothing.[Ian Parberry, Problems on Algorithms]
Muitas vezes parece que não há outra
maneira de resolver um problema senão
tentar todas as possíveis soluções.
Esta abordagem, chamada busca exaustiva,
é quase sempre lenta,
mas às vezes ela é melhor que nada.
First, beautiful software ought to be visually beautiful — the written code I mean — and almost a pleasure to read. I don't equate cleverness with beauty necessarily. Too often very clever code is actually quite ugly to read and understand. Secondly, the code ought to be lean, spare. However large and powerful the programming language used is, I am not impressed by someone's use of every possible construct in the language, but rather their mastery of key constructs. Again, cleverness and a showy knowledge don't impress me so much as a kind of modest strength and clarity.[Don Sherwood Olson, writer and former software engineer]
Em primeiro lugar,
software bonito deve ser visualmente bonito —
estou me referindo ao código escrito —
e quase um prazer para ler.
Para mim, esperteza não é necessariamente igual a beleza.
Muitas vezes, um código muito esperto
é muito feio para ler e entender.
Em segundo lugar,
o código deve se enxuto, econômico.
Não importa quão grande e poderosa é a linguagem de programação usada,
eu não fico impressionado pelo uso que um programador
possa fazer de todos os recursos da liguagem
mas sim pela maestria com que usa as construções mais importantes.
A esperteza e a exibição de conhecimento não me impressionam tanto quanto
modesta força e clareza.
Hashing is used extensively in applications and deserves recognition as one of the cleverer inventions of computer science.[Eric S. Roberts, Programming Abstractions in C]
Hashing é muito usado em aplicações
e merece ser reconhecido como uma das mais espertas invenções
da ciência da computação.
The Role of Efficiency. Many other properties of software are as important as efficiency, if not more so. Don Knuth has observed that premature optimization is the root of much programming evil; it can compromise the correctness, functionality and maintainability of programs. Save concern for efficiency for when it matters.[Jon Bentley, Programming Pearls]