Conversando com várias pessoas novatas ao longo dos anos, percebi que é muito difícil obter uma compreensão clara do que é a programação estruturada por falta de contexto.
O material didático e os cursos afirmam a maravilha da programação estruturada ao organizar programas, enumerando problemas que ninguém mais tem, porque todas as linguagens de programação atuais são estruturadas. Como é possível comunicar a dificuldade de programar de uma forma que é, atualmente, impossível programar?
Uma solução seria ensinar BASIC e então mostrar como é problemático escrever programas longos em BASIC, em comparação com Pascal. Porém, BASIC e Pascal são escrotas por sí só, sem qualquer relação com a presença ou ausência de estruturas.
Ensinar programação não-estruturada com o intuito de redescobrir a programação estruturada não pode implicar mais dores que esta: manifestar o fluxo de controle apenas com goto.
Me ocorreu, então, que esta é exatamente a solução: tomar uma linguagem de programação moderna, como C ou Javascript, e arrancar dela todos os elementos de programação estruturada ou mais avançada. O usuário não poderá dividir o código em funções isoladas; o usuário não poderá usar if, while, do. A única estrutura de controle será goto e if-goto. Todo o resto se mantém mais ou menos intacto; criação de objetos, atribuição de valores, sintaxe de literais etc.. O único acréscimo será algum tipo de sintaxe para entrada e saída padrão. (Ou talvez uma maneira secreta de invocar chamadas de procedimento escrita por terceiros.)
Como exemplo, eis uma pesquisa binária em uma formulação inicial da minha linguagem não-estruturada:
data_size : integer ; // parameter
data : array(integer, data_size) ; // parameter
value : integer ; // parameter
@ continue
pivot : integer = ( left + right ) / 2 ;
goto (data[pivot] == value) found ;
goto (left == pivot || pivot == right) not_found ;
goto (data[pivot] < value) adjust_left ;
right = pivot ;
goto (true) continue ;
@ adjust_left
left = pivot ;
goto (true) continue ;
@ not_found
write("value not found") ;
exit ;
@ found
write("value found in position %i", pivot) ;
exit ;
Cara, imagina este programa se o alvo do goto não fosse um nome mas um número de linha...
O material didático e os cursos afirmam a maravilha da programação estruturada ao organizar programas, enumerando problemas que ninguém mais tem, porque todas as linguagens de programação atuais são estruturadas. Como é possível comunicar a dificuldade de programar de uma forma que é, atualmente, impossível programar?
Uma solução seria ensinar BASIC e então mostrar como é problemático escrever programas longos em BASIC, em comparação com Pascal. Porém, BASIC e Pascal são escrotas por sí só, sem qualquer relação com a presença ou ausência de estruturas.
Ensinar programação não-estruturada com o intuito de redescobrir a programação estruturada não pode implicar mais dores que esta: manifestar o fluxo de controle apenas com goto.
Me ocorreu, então, que esta é exatamente a solução: tomar uma linguagem de programação moderna, como C ou Javascript, e arrancar dela todos os elementos de programação estruturada ou mais avançada. O usuário não poderá dividir o código em funções isoladas; o usuário não poderá usar if, while, do. A única estrutura de controle será goto e if-goto. Todo o resto se mantém mais ou menos intacto; criação de objetos, atribuição de valores, sintaxe de literais etc.. O único acréscimo será algum tipo de sintaxe para entrada e saída padrão. (Ou talvez uma maneira secreta de invocar chamadas de procedimento escrita por terceiros.)
Como exemplo, eis uma pesquisa binária em uma formulação inicial da minha linguagem não-estruturada:
data_size : integer ; // parameter
data : array(integer, data_size) ; // parameter
value : integer ; // parameter
@ continue
pivot : integer = ( left + right ) / 2 ;
goto (data[pivot] == value) found ;
goto (left == pivot || pivot == right) not_found ;
goto (data[pivot] < value) adjust_left ;
right = pivot ;
goto (true) continue ;
@ adjust_left
left = pivot ;
goto (true) continue ;
@ not_found
write("value not found") ;
exit ;
@ found
write("value found in position %i", pivot) ;
exit ;
Cara, imagina este programa se o alvo do goto não fosse um nome mas um número de linha...
Comentários
Postar um comentário