ti-enxame.com

Você acha que a exposição ao BASIC pode mutilar sua mente?

É 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

- Edsger W. Dijkstra

Tenho profundo respeito por Dijkstra, mas não concordo com tudo o que ele disse/escreveu. Eu discordo especialmente desta citação no artigo vinculado, escrito há 35 anos, sobre a implementação 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 obscuro 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?

33
Maniero

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 você gostou dele.

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 mais de 30 anos 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 para longe do GOTO.

  • "Em 1976, Steve Garland adicionou programação estruturada recursos para criar o Dartmouth SBASIC, um pré-compilador que produzia a saída da versão 6 ..." [ Wikipedia ] O contexto da citação é claramente anterior ao que conhecemos agora como estruturas de controle, e muitos usuários da época poderiam estar mais familiarizados com a penúltima versão - ou seja, dois versões anteriores ao 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.

37
Roger Pate

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 de minha exposição a longo prazo ao BASIC, mas ele teria um tempo mais difícil em me ensinar qualquer coisa por causa de 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, nós programamos. Nós que trabalhamos com o BASIC, brincamos com o 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 em seu campo não é menos um chamado, a base de um trabalho de amor ao longo da vida.

... ou talvez seja exatamente isso que uma mente mutilada diria diria ...

31
Shog9

Não é o BASIC que o machuca, é o fracasso em se expor a outros idiomas. Os "programadores" do Monoglot não são.

17
Craig Stuntz

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 muito das 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.

11
David Thornley

Aprendi com o BASIC em um TRS-80 e Apple II c/e, e me considero um bom programador. As duas características que pessoalmente acho que levaram a não serem destruídas pelo aprendizado do BASIC primeiro são:

  1. Continuei tentando aprender melhores maneiras de realizar o que queria com menos esforço, o que levou ao aprendizado de outros idiomas e aos recursos desses idiomas que os tornam poderosos, e
  2. Encontrei e reconheci problemas com o BASIC como idioma, principalmente a falta de sub-rotinas (embora eu não tenha tido a experiência de descrever de forma concisa os problemas que tenho agora).

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 .

6
Caleb Huitt - cjhuitt

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 a partir 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, some 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)

6
Pagotti

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;)

4
JeffO

Eu acho que a exposição à maioria dos BASIC exemplos no mundo são o que mutilam 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 IDisposable tipos não realmente precisam ser descartados.

4
Jesse C. Slicer

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.

3
Henk v. Birsten

GOTO do BASIC é uma ótima maneira de ensinar a maneira de pensando em linguagem Assembly. Ele não mutila a mente, apenas a afasta das sinapses baseadas em carbono e se aproxima 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 divertido simples, 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 muito impressionantes, o que é essencial para atrair crianças.

3
rwong

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.

Portanto, 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 um primer útil para o pensamento 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.

2
hotpaw2

O básico é bom - é divertido e bastante simples 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 ...

2
aggietech

para aqueles de nós que carregavam o código Assembly nos computadores Speer Micro-LINC, um byte por vez, através de um conjunto de 8 switches no painel frontal e os armazenavam em fitas PDP em 1972, afirmarei inequivocamente que Dijkstra era um idiota pomposo. Tudo o que ele desprezava sobre o Basic era verdadeiro em relação ao montador com quem eu estava trabalhando e, no entanto, 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.

1
kloucks

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 alerta rude.

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)

1
johnc

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 minha faculdade, onde tive que aprender a linguagem Assembly (MIPS). O fluxo de controle da linguagem assembly é muito parecido com o BASIC: Saltos = GOTO, branches = IF...GOTO, jal (call) ...jr (ret) = GOSUB...RETURN. É todo o fluxo de controle que você precisa!

É 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?

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.

1
dan04