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

32

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

bigown
fonte
7
você percebe que a citação é algo como 35 anos, certo?
MIA
2
Sim. O link para Dijkstra tem a data de publicação.
Maniero
3
Talvez esta questão não deve ser respondida por pessoas mais jovens :-)
Maniero
8
35 anos, e tenho certeza de que Eddie também estava trollando. Eu não iria ler muito sobre isso.
Carson63000
3
Eu concordo com @Carson; Eu acho que a exposição prolongada a velhos cínicos, arrogantes e amargos fará pior para você.
Mark C

Respostas:

37

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.

Roger Pate
fonte
2
Minha primeira exposição foi ao BASIC (em 1979) - mas paradoxalmente um dialeto que tinha procedimentos parametrizados e para os quais você pode editar o código em um editor de texto externo, embora eu tenha feito mais coisas com uma versão menos elegante. Quando, em 1982, eu fui ensinado Programação Estruturada (e Pascal como uma linguagem para implementá-la), era como o sol nascendo de manhã ... Eu usei o GOTO pela última vez em uma linguagem notadamente "adequada" (DIBOL) em cerca de 1990 ...
Murph 28/09
@ Murph: Eu acabei usando goto algumas vezes por ano ... mas, da mesma forma, "goto considerado prejudicial" era sobre os gotos globais que mencionei acima, e não os gotos locais.
1
GOTO, também conhecido como "salto aleatório maciço" - e eu aprecio que o artigo não tenha sido sobre o "quê", mas sobre o "como", que por sua vez é a razão pela qual ele estava errado, mas foi uma boa generalização. (Se você observar, por exemplo, o Fortran IV, você não teve muitas outras opções além de usar o goto, mas, como meus palestrantes tentaram demonstrar - embora frustrado pela introdução do Fortran 77 - você poderia escrever um código bem estruturado usando o gotos)
Murph
Eu tenho falado exatamente sobre os antigos dialetos do BASIC. Não sei por que as pessoas insistem em pensar que estou falando com o BASIC moderno. Para mim, o BASIC moderno mutila a mente de um programador. Dá quase tudo cozido e não requer uma reflexão mais profunda. Os programas BASIC raramente ultrapassavam 1 ou 2KLOCs e raramente tinham mais de cem variáveis; hoje é comum uma classe ter mais que isso e vejo várias funções mal escritas em torno dessa contagem. Meu pensamento é que Dijkstra teve exposição aos piores programadores do BASIC. Somente quem teve experiência com o BASIC em máquinas com recursos limitados pode saber.
Maniero
@ Bigown: Mas o que você considera moderno, exatamente? Chamar uma linguagem de programação de 30 anos de "moderna" é definitivamente incomum para mim.
31

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

Shog9
fonte
muito punny! Seriamente embora sua matéria um de opinião
RCProgramming
17

Não é o BASIC que o machuca, é o fracasso em se expor a outros idiomas. "Programadores" monoglóticos não são.

Craig Stuntz
fonte
1
absolutamente correto
RCProgramming
enquanto isso é verdade, não acho que isso é o que ED estava se referindo na época
jk.
11

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.

David Thornley
fonte
Assembler é uma representação dos bytes que você alimenta um computador. Você poderia substituir BASICpor Assemblerna citação de Dijkstra, mas eu consideraria uma linguagem de computador, não uma linguagem de programação. +1 embora :)
deltreme
1
Meu entendimento é que Dijkstra destacou o Basic aqui para uma cotação rápida e incluiria outros ambientes não estruturados.
2
Certamente, Dijkstra pode ter falado sobre o BASIC para obter um bom som. No entanto, o que quero dizer é que as primeiras linguagens de computador certamente não eram melhores, e isso implicaria que bons programadores não poderiam se desenvolver até 1960, e qualquer pessoa que começasse antes seria danificada permanentemente.
David Thornley
5
Se vocês tivessem tido tempo para ler o artigo do qual a citação foi tirada, descobririam que ele também jogou fora outras línguas populares da época, além do BASIC. Ele também criticou a tendência de antropomorfizar computadores, que eu posso entender; Eles odeiam isso.
Huperniketes
2
@ Superniketes: Sim, mas Dijkstra era extraordinariamente vituperativo sobre o BASIC e o COBOL. Ele deixou a sensação de que as ervas daninhas FORTRAN e PL / I poderiam ser curadas.
precisa
6

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

  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 .

Caleb Huitt - cjhuitt
fonte
6

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)

Pagotti
fonte
5

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

Conta
fonte
4

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 IDisposabletipos não precisam realmente ser descartados.

Jesse C. Slicer
fonte
4

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

JeffO
fonte
Sim! GOTO está bem; é rótulos que são mal ... mwuuuuhahahaha
MAWG
3

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.

Henk v. Birsten
fonte
3

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.

rwong
fonte
Eu diminuí a votação desta resposta por causa dessa afirmação: tudo o que você pode fazer é continuar copiando, digitando, um programa muito, muito longo, impresso em uma revista. Essas são apenas as crianças do roteiro do dia. Os verdadeiros desenvolvedores estavam aprendendo e escrevendo suas próprias coisas.
TecBrat 5/08/16
2

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

aggietech
fonte
2

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.

hotpaw2
fonte
1

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)

johnc
fonte
1

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.

kloucks
fonte
1

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!

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

dan04
fonte