É praticamente impossível ensinar boa programação a estudantes que tiveram uma exposição prévia ao BASIC: como programadores em potencial, eles são mentalmente mutilados além da esperança de regeneração
Tenho profundo respeito por Dijkstra, mas não concordo com tudo o que ele disse / escreveu. Discordo especialmente desta citação em um artigo vinculado, escrito há 35 anos, sobre a implementação do Dartmouth BASIC .
Muitos dos meus colegas de trabalho ou amigos programadores começaram com o BASIC, as perguntas abaixo têm respostas que indicam que muitos programadores tiveram sua primeira experiência em programação no BASIC. AFAIK muitos bons programadores começaram na programação BASIC.
Não estou falando sobre o Visual Basic ou outros dialetos "modernos" do BASIC em execução em máquinas cheias de recursos. Estou falando dos velhos tempos do BASIC executando no computador "brinquedo", que o programador tinha que se preocupar em salvar pequenos números que não precisam ser calculados como uma string para salvar um byte mísero, porque o computador tinha apenas algumas centenas deles, ou é preciso usar o goto computado por falta de um recurso mais poderoso e muitas outras coisas que exigem que o programador pense muito antes de fazer algo e forçar o programador a ser criativo.
Se você teve experiência com o antigo BASIC em uma máquina com recursos limitados (lembre-se de que um simples microcontrolador hoje possui muito mais recursos do que um computador em 1975, você acha que o BASIC ajuda sua mente a encontrar melhores soluções, a pensar como um engenheiro ou o BASIC arrastá-lo para o lado sombrio da programação e mutilá-lo mentalmente?
É bom aprender uma linguagem de programação em execução em um computador cheio de recursos onde o programador iniciante pode fazer tudo errado e o programa é executado sem grandes problemas? Ou é melhor aprender onde o programador não pode dar errado?
O que você pode dizer sobre o BASIC ajudou você a ser um programador melhor / pior?
Você ensinaria o BASIC antigo em execução em uma máquina (virtual) de 2 KB a um programador próximo?
Claro, apenas a exposição ao BASIC é ruim. Talvez você compartilhe minha opinião de que o BASIC moderno não ajuda muito porque o BASIC moderno, enquanto outras linguagens de programação, oferece facilidades que permitem que o programador não pense mais profundamente.
Informações adicionais: Por que BASIC?
Respostas:
Os conceitos básicos populares na época da citação eram muito diferentes do que tínhamos até 20 anos atrás. (Você está contando aqueles entre seus dialetos "modernos"?)
Esqueça loops, sub-rotinas, variáveis locais e tudo o que a Programação Estruturada (da qual Dijkstra e Knuth eram grandes defensores) enfatizou. Você tinha o GOTO e gostou .
Nesse contexto, programadores que conheciam apenas variáveis globais, inventaram suas próprias sub-rotinas (usando mais variáveis globais para parâmetros e valores de retorno!) E escreveram GOTOs de espaguete realmente foram mutilados.
Se você tem 30 anos ou menos hoje e o Basic era seu primeiro idioma, não era o mesmo idioma que Dijkstra estava falando. Mesmo se você for mais velho e o seu primeiro Basic tiver alguns desses recursos, como Murph comenta abaixo, ainda pode não ter sido o mesmo idioma que Dijkstra estava falando.
Você atualizou a pergunta com o contexto que eu nunca soube antes:
A citação de Dijkstra é de 1975.
Não foi até a versão 6 que você obteve procedimentos compiláveis separadamente - o que, acredito, mostra o início da mudança de foco em relação ao GOTO.
"Em 1976, Steve Garland adicionou recursos de programação estruturada para criar o Dartmouth SBASIC, um pré-compilador que produziu a saída da versão 6 ..." [ Wikipedia ] O contexto da citação é claramente anterior ao que conhecemos agora como estruturas de controle e a muitos usuários do o tempo poderia estar mais familiarizado com a penúltima versão - ou seja, duas versões anteriores à Garland, que é a v5 e antes dos procedimentos compiláveis separadamente.
O GOSUB / RETURN ainda manipula apenas "sub-rotinas simples".
"Os nomes das variáveis foram limitados a A a Z, A0 a A9, B0 a B9, ..., Z0 a Z9, fornecendo um máximo de 286 possíveis variáveis distintas." ... e são todos globais.
fonte
Um homem não pode fazer nada melhor do que comer e beber e encontrar satisfação em seu trabalho.
Eu aprendi BASIC antes de qualquer outra coisa (bem, exceto álgebra, eu acho). Se isso não entortou seriamente minha mente, não sei como explicar os 18 anos que se seguiram ...
Dito isto, e daí? Dijkstra pode ter dificuldade em me ensinar qualquer coisa por causa da minha exposição a longo prazo ao BASIC, mas ele teria mais dificuldade em me ensinar qualquer coisa por causa da sua exposição a longo prazo a uma caixa de pinheiro subterrânea. E mesmo com esses fatores removidos, eu nunca fui um estudante sério de computação gráfica, um estudante sério de matemática ou um estudante sério em qualquer outra disciplina. O abismo entre alguém como eu e o tipo de programador que Dijkstra gostaria de ver é tão grande que é quase insondável ...
E, no entanto, programamos. Nós, que trabalhamos com o BASIC, brincamos com a FORTRAN, experimentamos o COBOL e todo o resto, também encontramos uma alegria e um fascínio por essas pequenas máquinas que, embora talvez totalmente diferentes daquelas que primeiro atraíram o Sr. Edsger para o seu campo, não são menos um chamado, a base para um trabalho de amor ao longo da vida.
... ou talvez isso é só o que uma mente mutilada iria dizer ...
fonte
Não é o BASIC que o machuca, é o fracasso em se expor a outros idiomas. "Programadores" monoglóticos não são.
fonte
BASIC, do ponto de vista estruturado, não era pior que assembler ou COBOL. Naquela época, não havia a abundância de idiomas descendentes de algol que temos agora, sendo Pascal a primeira introdução que a maioria das pessoas teve a estruturas de controle razoáveis (e eu não gosto tanto de estruturas de controle de Pascal).
Se o BASIC fosse suficiente para prejudicar permanentemente as pessoas, outras línguas antigas também seriam e, portanto, não teríamos pessoas prejudicadas o suficiente para desenvolver todas as línguas que usamos hoje.
É possível que Dijkstra estivesse lidando com pessoas que não eram bons programadores e nunca seriam, que aprenderam a fazer algumas coisas no BASIC. Essa é a interpretação mais caridosa que posso colocar na declaração.
fonte
BASIC
porAssembler
na citação de Dijkstra, mas eu consideraria uma linguagem de computador, não uma linguagem de programação. +1 embora :)Eu aprendi com o BASIC em um TRS-80 e Apple II c / e, e me considero um bom programador. As duas características que eu pessoalmente acho que levaram a não serem destruídas pelo aprendizado do BASIC primeiro são
Admito que aprender programação orientada a objetos após o procedimento puro do BASIC foi uma luta por um tempo, mas não sei se isso estava realmente relacionado ao BASIC, pois eu também havia aprendido uma boa quantidade de C .
fonte
Eu também não concordo com Dijkstra. Acho que é mais difícil aprender uma segunda língua porque paradigmas, não porque é BASIC.
O BASIC foi minha primeira língua em um computador pessoal chamado TK (como o Sinclair) em 1985. Era uma máquina de recursos muito limitada. Naquele tempo, escrevi um compilador BASIC de um livro usando um editor hexa-decimal por diversão. Comprei um livro Z80 e aprendi a linguagem de máquina de 8 bits depois disso. O BASIC me ajudou muito com isso.
Depois eu aprendo C e Pascal e brinco com Assembly para 8080/6. MSX-BASIC, Quick Basic nos tempos do MS-DOS ... VB, Delphi, alguns Java nos tempos do Windows ...
Hoje um trabalho com progresso (4gl), .net (C # / VB), php e eu não me sinto como um ciclope. : O)
fonte
Comecei com o básico em um clone de maçã aos oito anos.
Mesmo as versões posteriores do basic que tiveram algumas idéias de OOP (qbasic, visual basic etc.) não teriam sentido no Oito.
Começar a programar tão cedo é uma das razões pelas quais consigo pensar no problema no fluxo do programa e isso é algo que muitas pessoas não conseguem fazer bem neste setor.
Penso que um início precoce é frequentemente benéfico e é necessária uma linguagem MUITO SIMPLES quando se lida com crianças.
Sua milhagem pode variar ...
fonte
Acho que a exposição à maioria dos exemplos do BASIC no mundo é o que mutila os cérebros dos programadores, não a linguagem em si. É como o programador C # que navega no MSDN e não acha que o tratamento de exceções é necessário ou que os
IDisposable
tipos não precisam realmente ser descartados.fonte
Qualquer pessoa terá um problema se não conseguir identificar os problemas no idioma atual e não apenas conseguir contorná-los, mas encontrar outro para solucionar o problema.
E GOTO só é ruim se você não tiver numeração de linha;)
fonte
Atualmente, estou usando o BASIC para ensinar meu filho a escrever seus próprios jogos simples. Eu nunca o usei, iniciei minha operadora com o PowerBuilder e o PowerScript e pulei para o C / C ++ e depois para o Delphi. Hoje, uso quase todas as línguas disponíveis e me adapto muito rapidamente, porque a base de todas as línguas é a mesma, fórmulas matemáticas com diferentes sinais, operadores e símbolos. É também isso que estou ensinando ao meu filho e, por isso, ele já pode ler e explicar o código C ++. Meu filho tem 12 btw.
fonte
O BASIC
GOTO
é uma ótima maneira de ensinar o modo de pensar em linguagem assembly . Ele não mutila a mente, apenas a afasta das sinapses baseadas em carbono e mais perto dos transistores baseados em silício.No entanto, vamos comparar o BASIC ao LOGO. O BASIC pode afastar as crianças da programação, porque, para escrever um programa simples e divertido, tudo o que você pode fazer é continuar digitando em cópia um programa muito, muito longo, impresso em uma revista, enquanto que com o LOGO, uma linha pode desenhar gráficos impressionantes, o que é essencial para atrair crianças.
fonte
Básico é bom - é divertido e bastante simples Ele pode fazer gráficos 2D divertidos e o que não ... Eu aprendi (ou tento aprender) que quando eu tinha 10 ou 12 anos, era uma linguagem divertida que me interessou em aprender mais sobre computadores ...
fonte
Alguns dos melhores programadores que conheço foram expostos desde cedo à programação no Basic. É um pouco mais "concreto" e, portanto, fornece uma sensação melhor de como a máquina de baixo nível pode realmente funcionar do que muitas linguagens mais recentes (por exemplo, é uma introdução mais próxima da HLL ao assembler).
A citação de Dijkstra é de um período em que os acadêmicos tentavam empurrar uma tendência em direção a programas bem estruturados comprovadamente corretos, projetados a partir de especificações. Mas não foi assim que a indústria de grande parte foi. Em vez disso, muitos programadores da era da Web 2.0 estão tentando criar um protótipo rápido de algo para o qual a maioria das especificações matematicamente rígidas para provar o código não existe, porque as coisas estão evoluindo muito rapidamente para que essa especificação se mantenha competitiva.
Assim, os métodos de programação de tentativa e erro de hack-and-slash que a programação no Basic às vezes incentiva, quando são um pouco mais claros na metodologia, são uma cartilha útil para o pensamento da RAD.
Termino observando que há pelo menos 5 intérpretes básicos disponíveis que são executados no iPad, mantendo assim o idioma disponível até nos dispositivos mais recentes.
fonte
Penso que, uma vez que essa citação tem 35 anos, tem muito a ver com a falta de abstração disponível nas linguagens de programação e com o que era necessário para você se desenvolver bem, quando foi dito.
O uso de uma linguagem como o BASIC ensina pouco sobre como programar em um nível baixo, algo muito mais necessário no passado do que agora, e daria a impressão equivocada de que a programação era mais simples do que realmente é.
Lembro-me de tentar discernir 'código de máquina' aos 15 anos, após mais de 3 anos de VZ200, C64 e Apple] [e BASIC, foi um rude alerta.
Hoje em dia, no entanto, embora eu seja um esnobe completo sobre essas coisas, e você não me encontrará trabalhando alegremente em qualquer idioma com BASIC no nome (eu costumo começar a gritar com as frases do monitor como 'idiota Fisher Price Language' como , mais uma vez, rejeita minhas chaves descuidadas), admito que é mais fácil fazer coisas produtivas com linguagens que abstraem a mecânica da CPU do que há 35 anos (ou 25 anos atrás, na minha própria experiência e exemplo)
fonte
para aqueles de nós que carregavam código de montagem nos computadores Speer Micro-LINC, um byte de cada vez, através de um conjunto de 8 switches no painel frontal e os armazenavam em fitas PDP em 1972, afirmo inequivocamente que Dijkstra era uma merda pomposa. Tudo o que ele desprezava sobre o Basic era verdadeiro em relação ao montador com o qual eu estava trabalhando, e mesmo assim eu e milhares de outras pessoas nos recuperamos da nossa exposição ao montador e, mais tarde, ao Basic e Fortran e Cobol e C etc.
fonte
Comecei a programar com o GW-BASIC no início dos anos 90. Minha mente não ficou mutilada. Eu mudei para linguagens melhores como Pascal, C, C ++, Java, C # e Python.
Eu não seria capaz de escrever um programa BASIC hoje; Eu esqueci como pensar em termos de números de linha. Não que isso seja um problema.
Mas minha experiência no BASIC me ajudou muito no curso de arquitetura de computadores da faculdade, onde tive que aprender a linguagem assembly (MIPS). Assembléia fluxo de controle de idioma é muito parecido com BASIC de: Salta =
GOTO
, ramos =IF
...GOTO
,jal
(call) ...jr
(ret) =GOSUB
...RETURN
. É todo o fluxo de controle que você precisa!Eu diria que é melhor aprender em um computador com recursos limitados. Não porque "o programador não pode dar errado", mas porque o limite de "frieza" é muito menor. Um programador iniciante pode não saber como criar um ótimo jogo de tiro em primeira pessoa para seu PC. Mas eles poderiam escrever um ótimo jogo de Pac Man para a TI-89 e usar o hardware em todo o seu potencial. E isso é um sentimento de poder.
fonte