BASICに触れると心が傷つくと思いますか?[閉まっている]


32

BASICを以前に経験したことのある生徒に優れたプログラミングを教えることは事実上不可能です。潜在的なプログラマーとして、彼らは再生の希望を超えて精神的に傷つけられています

- エドガー・W・ダイクストラ

私はダイクストラに深い敬意を持っていますが、彼が言った/書いたすべてに同意するものではありません。35年前にダートマスBASICの実装について書いたリンクされた論文のこの引用には特に同意しません。

私の同僚や友人のプログラマーの多くはBASICを使い始めました。以下の質問には、多くのプログラマーがBASICでのプログラミングの最初の経験があることを示す回答があります。私の知る限り、多くの優秀なプログラマーがBASICプログラミングを始めました。

リソースがいっぱいのマシンで実行されているVisual BasicまたはBASICの他の「現代の」方言については話していない。「おもちゃ」コンピューターで実行されている昔のBASICについて話しています。コンピューターには数百個しかないため、わずかなバイトを保存するために文字列として計算する必要のない小さな数字を保存することをプログラマーは心配しなければならなかった、またはより強力な機能がないために計算されたgotoを使用する必要があります。また、何かをしてプログラマーに創造性を強いる前にプログラマーが考えることを必要とする他の多くのことを行う必要があります。

リソースが限られたマシンで昔のBASICの経験があった場合(今日のシンプルなマイクロコントローラーは1975年のコンピューターよりもはるかに多くのリソースを持っていることを念頭に置いて、BASICはより良い解決策を見つけるためにあなたの心を助けると思いますか?エンジニアやBASICがプログラミングの暗黒面にあなたを引きずり込み、精神的に傷つけたのですか?

初心者プログラマーがすべて間違っていることができ、プログラムが大きな問題なく実行できるリソースがいっぱいのコンピューターで実行されているプログラミング言語を学ぶのは良いですか?それとも、プログラマーがどこを間違えないかを学ぶ方が良いでしょうか?

BASICについて、あなたはより良い/より悪いプログラマーになるために何を助けましたか?

2KB(仮想)マシンで実行されている古いBASICを来たるプログラマーに教えますか?

確かに、BASICへの露出だけが悪いです。おそらく、他のプログラミング言語と同様に、現代のBASICはプログラマが深く考えられない機能を提供するため、現代のBASICはあまり役に立たないという私の意見を共有するかもしれません。

追加情報:なぜBASICなのか?


7
あなたは引用が35歳のようなものであることに気付きますよね?
MIA

2
はい。ダイクストラへのリンクには公開日があります。
マニエロ

3
若い人はこの質問に答えるべきではないかもしれません:
マニエロ

8
35歳。エディも書いたときにトローリングをしていたことは間違いない。あまり読みません。
Carson63000

3
@Carsonに同意します。シニカルで、慢で、苦い老人に長時間さらされると、あなたに悪い影響を与えると思います。
マークC

回答:


37

引用の時点で人気のあったBasicsは、20年前とは非常に異なっていました。(それらを「現代の」方言に数えていますか?)

ループ、サブルーチン、ローカル変数、および構造化プログラミング(DijkstraとKnuthが大きな支持者であった)が強調したすべてのものを忘れてください。GOTOがあり、気に入りました。

このコンテキストでは、グローバル変数のみを知っていて、独自のサブルーチンを発明し(パラメーターと戻り値にさらにグローバル変数を使用します!)、スパゲッティGOTOを書いたプログラマーは本当に傷つきました。

あなたが今日30歳以下でBasicがあなたの第一言語だった場合、それはダイクストラが話していたのと同じ言語ではありませんでした。以下のMurphがコメントしているように、あなたがより古く、最初のBasicがこれらの機能のいくつかを持っていたとしても、それはまだダイクストラが話していたのと同じ言語ではなかったかもしれません。


あなたは私が今まで知らなかったコンテキストで質問を更新しました:

  • ダイクストラの引用は1975年のものです。

  • 個別にコンパイル可能な手順を入手したのは、バージョン6になっからでした。これは、GOTOから離れたフォーカスへの移行の始まりを示していると思います。

  • 「1976年、スティーブ・ガーランドが追加構造化プログラミングはダートマスSBASIC、バージョン6の出力を生成するプリコンパイラを作成するために備えて...」[ ウィキペディア ]引用の文脈では、我々は今、制御構造として知っている前に明確である、との多くのユーザー時間が2番目から最新のバージョン、つまり、V5であるGarlandの2つ前のバージョンと、個別にコンパイル可能な手順の2つ前のバージョンに慣れていたはずです。

  • GOSUB / RETURNは、「単純なサブルーチン」のみを処理します。

  • 「変数名は、AからZ、A0からA9、B0からB9、...、Z0からZ9に制限されており、最大286個の異なる変数を指定できました。」...そしてそれらはすべてグローバルです。


2
私の最初の露出はBASIC(1979年)でしたが、逆説的には、パラメータ化された手順があり、外部テキストエディタでコードを編集できる方言ですが、エレガントではないバージョンでもっと多くのことをしました。1982年に構造化プログラミング(およびパスカルを実装する言語として)を教えられたとき、朝に昇る太陽のようでした...最後に、概念的に「適切な」言語(DIBOL)でGOTOを使用しました1990
...-マーフ

@Murph:私は最終的に年に数回gotoを使用することになりますが、同じ言い方をすれば、「gotoは有害である」とは、ローカルのgotoではなく、上記のグローバルgotoについてでした。

1
GOTO別名「大規模なランダムリープ」-そして、この論文は「何」ではなく「どのように」に関するものであり、それが彼が間違っていた理由ですが、それが良い見出しをつかむ一般化に役立ったことを感謝します。(たとえば、Fortran IVを見ると、gotoを使用する以外に選択の余地はありませんでしたが、私の講師は、Fortran 77の導入に失敗しましたが、gotoを使用して適切に構造化されたコードを書くことができました)
マーフ

私は古いBASIC方言について正確に話されてきました。私が現代のBASICと話していると人々が考えることを主張する理由がわかりません。私にとって、現代のBASICはプログラマーの心を傷つけます。それは調理されたほとんどすべてを与え、より深い思考を必要としません。BASICプログラムが1または2KLOCを超えることはめったになく、100を超える変数を持つことはめったにありませんでした。私の考えでは、ダイクストラは最悪のBASICプログラマにさらされていました。限られたリソースのマシンでBASICを使用した経験がある人のみが知ることができます。
マニエロ

@bigown:しかし、あなたは現代を正確にどう思いますか?30年前のプログラミング言語を「モダン」と呼ぶことは、私にとってはまったく珍しいことです。

31

男は食べたり飲んだりして自分の仕事に満足感を見つける以外に何もできません。

私は何よりも前にBASICを学びました(そうですね、代数を除いて)。それが私の心を真剣にゆがめなかったなら、その後18年を説明する方法がわからない...

とはいえ、それで何が?ダイクストラは、BASICに長期間さらされているため、何かを教えるのに苦労するかもしれませんが、地下の松の箱に長期間さらされているため、私に何かを教えるのに苦労するでしょう。そして、これらの要因が取り除かれたとしても、私はまだ真面目なCSの学生、真面目な数学の学生、または他の分野の真面目な学生ではありませんでした。私のような人とダイクストラが見たかったようなプログラマーとの間の深byは、ほとんど計り知れないほど素晴らしいです...

それでも、私たちはプログラムします。COBOLおよびすべての残りの部分で実験FORTRANでおもちゃにBASIC、上の歯付き我々は、我々はまた、おそらく一方で、これらの小さなマシンと喜びと魅力見つかった完全に異なる最初の彼のフィールドに氏Edsgerを描いたものから、ないです呼び出しではなく、生涯にわたる愛の労働の基盤。

...または多分それは切断された心言うことだ...


とてもおかしい!真剣にその意見の問題
-RCプログラミング

17

あなたを傷つけるのはBASICではなく、他の言語にさらされないことです。Monoglot「プログラマー」はそうではありません。


1
絶対に正しい
-RCプログラミング

これが真である間、私は、これはEDが一度に言及されたものであるとは思わない
JKを。

11

BASICは、構造化された観点からは、アセンブラーまたはCOBOLよりも悪くありませんでした。当時、私たちが現在持っているアルゴル語の言語はそれほど多くありませんでした。Pascalは、ほとんどの人が合理的な制御構造を持っている最初の導入でした(そして、私はPascal制御構造があまり好きではありません)。

BASICが永久に人々を傷つけるのに十分であれば、他の初期の言語もそうでした。したがって、今日使用するすべての言語を開発するのに十分な人々を無傷にすることはなかったでしょう。

ダイクストラはその後、優れたプログラマーではなく、BASICで何かをすることを学んだことのない人々を扱っていた可能性があります。それは私が声明に置くことができる最も慈善的な解釈です。


アセンブラーは、コンピューターにフィードするバイトの表現です。あなたは置き換えることができBASICAssembler、ダイクストラの引用で、私はそれがコンピュータ言語ではなく、プログラミング言語であると考えるでしょう。+1しかし:)
deltreme

1
私の理解では、ダイクストラはここで簡単な引用のためにベーシックを選び出し、他の非構造化環境を含めたでしょう。

2
確かに、ダイクストラは良い音を噛むためにBASICについて話していたのかもしれません。しかし、私の言いたいことは、初期のコンピューター言語は確かに良くないということであり、それは優れたプログラマーが1960年頃まで開発できなかったことを意味します。
デビッドソーンリー

5
あなたが引用が引用された論文を読むのに時間をかけていたなら、あなたは彼がBASIC以外の当時の他の人気のある言語も破壊したことを発見したでしょう。彼はまた、コンピューターを擬人化する傾向を批判しました。彼らはそれが嫌いです。
Huperniketes

2
@Huperniketes:はい。しかし、ダイクストラはBASICとCOBOLについて異常に活力がありました。彼は、FORTRANとPL / Iのウィニーが治癒できるという感覚を残しました。
デビッドソーンリー

6

TRS-80とApple II c / eでBASICを使って学んだので、自分は優秀なプログラマーだと思います。私が個人的に考えると、最初にBASICを学ぶことによって破壊されないという2つの特徴は、

  1. 必要なことをより少ない労力で達成するためのより良い方法を学ぼうとしていました。その結果、他の言語とそれらの言語の強力な機能を学ぶことになりました。
  2. 言語としてのBASICの問題、特にサブルーチンの不足に遭遇し、認識しました(ただし、現在行っている問題を簡潔に説明する経験はありませんでしたが)。

BASICの純粋な手続き後のオブジェクト指向プログラミングの学習はしばらくの間苦労したことは認めますが、それが本当にBASICに関連しているかどうかはわかりません。 。


6

ダイクストラにも同意しません。BASICではなく、パラダイムのために、第二言語を習得するのはより困難です。

BASICは、1985年にTK(Sinclairのような)と呼ばれるパーソナルコンピューターでの私の最初の言語でした。非常に限られたリソースマシンでした。その間、私は楽しみのために16進エディタを使用して本からBASICコンパイラを書きました。Z80の本を買って、その後8ビットの機械語を学びました。BASICはこれで私を大いに助けてくれました。

CとPascalを学び、8080/6のAssemblyで遊んだ後。MSX-BASIC、MS-DOS時代のQuick Basic ... VB、Delphi、Windows時代のいくつかのJava ...

今日は、進行状況(4gl)、. net(C#/ VB)、phpを使用した作業で、サイクロプスのようには感じません。:O)


5

私は8歳の時にアップルクローンの基本から始めました。

いくつかのOOPアイデアが組み込まれた新しいバージョンのbasic(qbasic、visual basicなど)でさえ、Eightでは意味がありませんでした。

プログラミングを早期に開始することは、プログラムフローの問題を考えることができる理由の1つであり、それがあまりにも多くの人々がこの業界でうまくできない方法です。

多くの場合、早い段階での開始が有益であり、小さなものを扱うときは非常にシンプルな言語が必要だと思います。

あなたのマイレージは異なる場合があります...


4

世界の大部分のBASICのに触れることは、プログラマーの脳を傷つけるものであり、言語そのものではないと思います。これは、MSDNを参照し、例外処理が必要であると考えない、またはそのIDisposable型を実際に破棄する必要がないと考えるC#プログラマのようなものです。


4

現在の言語で問題を特定できず、問題を回避できるだけでなく、問題を解決するために構築された別の問題を見つけることができれば、誰もが問題を抱えることになります。

また、GOTOは、行番号がない場合にのみ悪いです;)


うん!GOTOは大丈夫です。それは邪悪なラベルです... mwuuuuhahahaha
Mawg

3

私は現在、BASICを使用して、息子に自分の簡単なゲームを書くように教えています。一度も使用したことはありません。PowerBuilderとPowerScriptでキャリアを開始し、C / C ++、Delphiに飛びました。今日、私は利用可能なほぼすべての言語を使用し、すべての言語の根拠は同じで、異なる記号、演算子、記号を使用した数式であるため、非常に高速に適応します。それは私が息子に教えていることでもあり、そのため彼はすでにC ++コードを読んで説明することができます。私の息子は12歳です。


3

BASIC GOTOは、アセンブリ言語考え方を教えるのに最適な方法です。心を傷つけることはなく、心をカーボンベースのシナプスから遠ざけ、シリコンベースのトランジスタに近づけるだけです。

ただし、BASICとロゴを比較してみましょう。BASICは、幼い子供をプログラミングから遠ざけることができます。シンプルな楽しいプログラムを書くには、雑誌に印刷された非常に長いプログラムのコピータイピングを続けるだけでよいのに対し、LOGOでは、ワンライナーが非常に印象的なグラフィックを描画できます。子供を引き付けるのに不可欠です。


この声明のため、私はこの答えを否定しました 。できることは、雑誌に印刷された非常に長いプログラムのコピータイピングを続けることだけです。本当の開発者は、自分のものを学び、書いていました。
TecBrat

2

基本は良いです-それは楽しくて非常にシンプルです楽しい2Dグラフィックスをやることができます...私は10または12歳の頃、それは私がもっと学ぶことに興味を持った楽しい言語だったことを学びました(または学びましょう)コンピューターについて...


2

私が知っている最高のプログラマーの何人かは、早くからBasicでのプログラミングにさらされていました。これはもう少し「具体的」であるため、多くの新しい言語よりも低レベルのマシンが実際にどのように動作するかをよりよく感じられます(たとえば、アセンブラーへのより近いHLLの紹介)。

ダイクストラの引用は、アカデミックが仕様から設計された立証済みの適切に構造化されたプログラムに向かう傾向を押し進めようとしていた時代のものです。しかし、それは大部分の業界が行った方法ではありません。代わりに、多くのWeb 2.0時代のプログラマーは、コードを証明する数学的に厳密な仕様のほとんどが存在しないものを迅速にプロトタイプ化しようとしています。

したがって、Basicでのプログラミングが推奨するハックアンドスラッシュの試行錯誤プログラミング手法は、方法論を少し整理すると、RAD思考の入門書として役立ちます。

iPadで動作する少なくとも5つのBasicインタープリターが利用可能であるため、最新のデバイスでも言語を利用できるようにしています。


1

この引用は35年前のものであるため、プログラミング言語で利用できた抽象化の欠如と、それが言われた頃によく開発するためにあなたが知っておく必要があったことと関係があると思います。

BASICのような言語を与えられたからといって、低レベルでプログラミングする方法についてはほとんど教えられません。これは、現在よりもはるかに過去に必要なことであり、プログラミングは実際よりも単純であるという誤った印象を与えます。

3年以上のVZ200、C64、Appleの3年以上経った後、15歳で「マシンコード」を学習しようとしていたことを覚えています。

しかし、最近は、これらのことについて完全なスノブであり、BASICという名前の言語で喜んで作業していることに気付かないでしょう(「愚かなフィッシャー価格言語」のようなモニターフレーズを叫び始める傾向があります) 、再び、私の不注意な中括弧を拒否します)、35年前(または25年前、私自身の個人的な経験と例では)よりもCPUの仕組みを抽象化する言語で生産的なことをする方が簡単だと認めます


1

フロントパネルの8つのスイッチのセットを介して一度に1バイトずつアセンブリーコードをSpeer Micro-LINCコンピューターにロードし、1972年にPDPテープに保存した私たちにとって、ダイクストラは威厳のあるトゥイットだったと断言できます。彼がBasicについて軽deしていたことはすべて、私が働いていたアセンブラーについてのスペードで真実でしたが、私自身と他の何千人もの人々がアセンブラーとその後のBasicとFortranとCobolとCなどにさらされたことから回復しました。


1

1990年代初期にGW-BASICでプログラミングを開始しました。私の心は傷つきませんでした。Pascal、C、C ++、Java、C#、Pythonなどのより良い言語に移行しました。

今日はBASICプログラムを書くことができません。行番号の観点から考える方法を忘れてしまいました。それは問題ではありません。

しかし、私のBASICの経験は、アセンブリ言語(MIPS)を学ばなければならなかった大学のコンピュータアーキテクチャコースで多くの助けになりました。アセンブリ言語の制御フローがたくさんBASICのようなものです:ジャンプ= GOTO、枝= IF... GOTOjal(コール)... jr(RET)= GOSUB... RETURN。必要な制御フローはこれだけです!

初心者プログラマーがすべて間違っていることができ、プログラムが大きな問題なく実行できるリソースがいっぱいのコンピューターで実行されているプログラミング言語を学ぶのは良いですか?それとも、プログラマーがどこを間違えないかを学ぶ方が良いでしょうか?

リソースが限られているコンピューターで学習する方が良いと思います。「プログラマーが間違えない」からではなく、「クールネス」のしきい値がずっと低いからです。初心者プログラマーは、自分のPC用の優れた一人称シューティングゲームを作成する方法を知らないかもしれません。しかし、彼らはTI-89用の素晴らしいパックマンゲームを作成し、ハードウェアを最大限に活用することができました。そしてそれは力の感覚です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.