• Nenhum resultado encontrado

Humanos versus computadores

No documento Algoritmos e Estruturas de Dados I (páginas 26-31)

N´os seres humanos n˜ao nos sentimos muito `a vontade com este tipo de trabalho repetitivo. Temos a tendˆencia a identificar “meta-regras” e executar a opera¸c˜ao com base em um comportamento de mais alto n´ıvel. Em suma, n´os aprendemos algo neste processo, coisa que o computador s´o faz em filmes de fic¸c˜ao cient´ıfica.

A primeira coisa que nos perguntamos ´e: por qual motivo ora se soma um valor emp, ora outro? Isto ´e, quando executamos a opera¸c˜ao “load”, o valor somado emp foi 3. Depois, quando executada a opera¸c˜ao “read” o valor somado foi 2. Em seguida, para a instru¸c˜ao “mult” o valor somado foi 4.

O estudante atento, notadamente aquele que foi at´e o final na execu¸c˜ao do ciclo de opera¸c˜oes deixado como exerc´ıcio, talvez tenha percebido uma sutileza por tr´as deste modelo.

De fato, quando se executa a instru¸c˜ao [p], o conte´udo de [p+1] sempre ´e o endere¸co de destino dos dados que s˜ao resultado da opera¸c˜ao em execu¸c˜ao. Os endere¸cos subsequentes apontam para os operandos da opera¸c˜ao que est´a programada para acontecer.

Assim:

• Se for uma multiplica¸c˜ao, subtra¸c˜ao ou soma, precisamos de dois operandos e do endere¸co destino, por isto se soma 4 emp;

• Se for um “load” precisamos de um operando apenas, assim como para a raiz quadrada, por isto se soma 3 emp;

• Se for uma leitura do teclado ou uma escrita na tela do computador, ent˜ao um

´

unico argumento ´e necess´ario, por isto se soma apenas 2 em p.

Uma outra observa¸c˜ao importante ´e que, por quest˜oes de hardware, o computador precisa entender a mem´oria como esta esp´ecie de “tripa”. O ser humano, ao contr´ario,

4.3. HUMANOS VERSUS COMPUTADORES 27 uma vez que j´a identificou pequenos blocos relacionados `as instru¸c˜oes, pode tentar entender esta mesma mem´oria em outro formato, isto ´e, separando cada um destes pequenos blocos em uma ´unica linha.

Observamos que apenas os n´umeros de 1 a 9 podem ser interpretados como c´odigos de alguma instru¸c˜ao, pois s˜ao os ´unicos c´odigos da tabela de instru¸c˜oes da BCC.

A separa¸c˜ao dos pequenos blocos resulta em uma visualiza¸c˜ao em que os dados s˜ao separados das instru¸c˜oes numa mesma linha, cada linha agora representa toda a instru¸c˜ao com os dados. Isto pode ser visto na figura 4.3. Importante notar que ´e a mesma informa¸c˜ao da figura 4.1, s´o que em outro formato visual.

Endere¸co Instru¸c˜ao Operando Operando Operando

0 1 54 2

3 1 50 4

6 7 46

8 4 47 46 46

12 7 48

14 4 49 50 48

18 3 51 47 49

22 6 52 51

25 3 53 46 52

29 5 55 53 54

33 8 55

35 2 56 46 52

39 5 57 56 54

43 8 57

45 9

Figura 4.3: Separando as instru¸c˜oes.

4.3.1 Abstra¸ c˜ ao dos endere¸ cos

Continuando nossa explora¸c˜ao de aspectos percebidos pelo ser humano a partir da maneira como o computador trabalha, agora ´e poss´ıvel percebermos mais duas coisas importantes:

1. O computador n˜ao mudou seu modo de operar, ele continua executando as instru¸c˜oes na mem´oria conforme foi apresentado na se¸c˜ao 4.2.4;

2. A visualiza¸c˜ao na forma apresentada na figura 4.3 ´e apenas uma maneira mais simples para o ser humano perceber o que o computador est´a fazendo.

Esta segunda observa¸c˜ao ´e muito importante. Ela nos permite aumentar o grau de

“facilidade visual” ou, dizendo de outra maneira, o grau de nota¸c˜ao sobre o modelo Von Neumann, o que vai nos permitir a compreens˜ao do processo de uma maneira cada vez mais “humana”.

De fato, a partir da figura 4.3, podemos perceber que o endere¸co em que ocorre a instru¸c˜ao ´e irrelevante para n´os, humanos. Podemos perfeitamente compreender o processo de computa¸c˜ao se eliminarmos a coluna do “Endere¸co” na figura 4.3.

A figura 4.4 ilustra como ficaria o programa em mem´oria visto de outra maneira, agora n˜ao apenas em formato de blocos mas tamb´em sem a coluna dos endere¸cos. Va-mos perceber que, apesar de muito parecido com a figura anterior, o grau de “polui¸c˜ao visual” ´e bem menor.

Instru¸c˜ao Operando Operando Operando

1 54 2

1 50 4

7 46

4 47 46 46

7 48

4 49 50 48

3 51 47 49

6 52 51

3 53 46 52

5 55 53 54

8 55

2 56 46 52

5 57 56 54

8 57

9

Figura 4.4: Abstra¸c˜ao dos endere¸cos.

Vale a pena refor¸car: o computador n˜ao mudou, ele continua operando sobre os circuitos eletrˆonicos, o que estamos fazendo ´e uma tentativa, um pouco mais humana, de enxergar isto.

4.3.2 Abstra¸ c˜ ao dos c´ odigos das instru¸ c˜ oes

Continuando neste processo de “fazer a coisa do modo mais confort´avel para o ser humano”, afirmamos que ´e poss´ıvel aumentar ainda mais o grau de nota¸c˜ao.

Para a etapa seguinte, vamos observar que, embora os computadores manipulem n´umeros (em particular, n´umeros bin´arios) de maneira muito eficiente e r´apida, o mesmo n˜ao ocorre para os humanos, que tˆem a tendˆencia a preferirem nomes.

De fato, basta observar que n´os usamos no nosso dia-a-dia nomes tais como Marcos, Jos´e ou Maria e n˜ao n´umeros tais como o RG do Marcos, o CPF do Jos´e ou o PIS da Maria.

Ora, j´a que ´e assim, qual o motivo de usarmos os n´umeros 1−9 para as instru¸c˜oes se podemos perfeitamente usar o mnemˆonico associado ao c´odigo?

Desta forma, vamos modificar ainda mais uma vez nossa visualiza¸c˜ao da mem´oria, desta vez escrevendo os nomes dos mnemˆonicos no lugar dos n´umeros. Assim, na

4.3. HUMANOS VERSUS COMPUTADORES 29 coluna Instru¸c˜ao, substituiremos o n´umero 1 por load, 2 por add, 3 por sub e assim por diante, conforme a figura 4.2.

O programa da figura 4.4 pode ser visualizado novamente de outra forma, tal como apresentado na figura 4.5. Notem que o grau de compreens˜ao do c´odigo, embora ainda n˜ao esteja em uma forma totalmente amig´avel, j´a ´e bastante melhor do que aquela primeira apresenta¸c˜ao da “fotografia da mem´oria”.

De fato, agora ´e poss´ıvel compreender o significado das linhas, em que existe um destaque para a opera¸c˜ao (o mnemˆonico), a segunda coluna ´e o endere¸co de destino da opera¸c˜ao e as outras colunas s˜ao os operandos.

Instru¸c˜ao Operando Operando Operando

load 54 2

load 50 4

read 46

mult 47 46 46

read 48

mult 49 50 48

sub 51 47 49

sqrt 52 51

sub 53 46 52

div 55 53 54

write 55

add 56 46 52

div 57 56 54

write 57

stop

Figura 4.5: Programa reescrito com Mnemˆonicos.

O que falta ainda a ser melhorado? N´os humanos usamos desde a mais tenra idade outro tipo de nota¸c˜ao para representarmos opera¸c˜oes. Este ´e o pr´oximo passo.

4.3.3 Abstra¸ c˜ ao do repert´ orio de instru¸ c˜ oes

Nesta etapa, observaremos que as instru¸c˜oes executadas pelo computador nada mais s˜ao do que manipula¸c˜ao dos dados em mem´oria. Os c´alculos s˜ao feitos sobre os dados e o resultado ´e colocado em alguma posi¸c˜ao de mem´oria.

Podemos melhorar o grau de abstra¸c˜ao considerando a nota¸c˜ao apresentada na figura 4.6. Isto ´e, vamos usar as tradicionais letras finais do alfabeto para ajudar na melhoria da facilidade visual. Assim poderemos reescrever o programa mais uma vez e ele ficar´a como apresentado na figura 4.7.

x= [p+ 1]

Figura 4.6: Nota¸c˜ao para as instru¸c˜oes.

54 ← 2

Figura 4.7: Programa escrito sob nova nota¸c˜ao.

4.3.4 Abstra¸ c˜ ao dos endere¸ cos de mem´ oria (vari´ aveis)

Na verdade, assim como j´a observamos que o c´odigo da instru¸c˜ao n˜ao nos interessa, vamos perceber que o mesmo ´e verdade com rela¸c˜ao aos endere¸cos de mem´oria. Ent˜ao, convencionaremos que os n´umeros podem ser trocados por nomes. Fazemos isto na vers˜ao seguinte do mesmo programa.

Conv´em notar que o ser humano gosta de dar nomes apropriados para as coi-sas4. Assim, ´e importante que os nomes que usarmos tenham alguma rela¸c˜ao com o

4Quem quiser ter uma ideia do estrago quando ao damos bons nomes para as coisas, pode acompanhar dois di´alogos humor´ısticos, um deles, o original, da du-pla Abbot & Costello sobre um jogo de beisebol, a outra de um ex-presidente dos Estados Unidos falando sobre o novo presidente da China. Ambos os v´ıdeos est˜ao dispon´ıveis no YouTube: (1) http://www.youtube.com/watch?v=sShMA85pv8M; (2) http://www.youtube.com/watch?v=Lr1DWkgUBTw.

4.4. ABSTRAC¸ ˜AO DAS INSTRUC¸ ˜OES (LINGUAGEM) 31

No documento Algoritmos e Estruturas de Dados I (páginas 26-31)