以前にBASICに触れたことのある学生に優れたプログラミングを教えることは実際には不可能です。潜在的なプログラマーとして、彼らは再生の希望を超えて精神的に切断されています
私はダイクストラに深い敬意を持っていますが、彼が言った/書いたすべてに同意しません。 35年前に Dartmouth BASIC の実装について書かれたリンク紙の引用に特に同意しません。
私の同僚や友人のプログラマーの多くはBASICを使い始めました。以下の質問の答えは、多くのプログラマーがBASICでのプログラミングを初めて経験したことを示しています。私の知る限り、多くの良いプログラマーがBASICプログラミングから始めました。
Visual Basicや、リソースがいっぱいのマシンで実行されているBASICの他の「モダンな」方言について話しているのではありません。私は昔の「おもちゃの」コンピュータで実行されているBASICについて話している。コンピュータには数百しかないので、プログラマは文字列として計算する必要のない小さな数値を保存して大まかなバイトを保存することを心配しなければならなかった。より強力な機能がないため、計算されたgotoを使用する必要があり、その他の多くのことを行うには、プログラマが何かをする前に熟考し、プログラマに創造性を発揮させる必要があります。
リソースが限られているマシンで昔からのBASICの経験があった場合(1975年の単純なマイクロコントローラーは、コンピューターよりもはるかに多くのリソースを備えていることを覚えておいてください。BASICは、より良い解決策を見つけるための心の助けになると思いますか。エンジニアやベーシックのようにあなたをプログラミングのダークサイドに引きずり込み、精神的に傷つけましたか?
初心者プログラマーがすべて間違ってプログラムが大きな問題なく実行できるリソースでいっぱいのコンピューターで実行されているプログラミング言語を学ぶのは良いですか?それとも、プログラマーが間違ってはいけないところを学ぶ方が良いでしょうか?
BASICについて、あなたがより良い/より悪いプログラマーになるのにどのように役立っていますか?
2KB(仮想)マシンで実行されている古いBASICを次期プログラマに教えますか?
確かに、BASICへの露出だけが悪いです。現代のBASICは、他のプログラミング言語と同様に、プログラマーが深く考えることができない機能を備えているため、現代のBASICはあまり役に立たないという私の意見を共有するかもしれません。
追加情報: なぜBASIC?
見積もりの時点で人気のあったベーシックは、20年前とはかなり異なりました。 (あなたはあなたの「現代」方言の中にそれらを数えていますか?;)
ループ、サブルーチン、ローカル変数、および構造化プログラミング(DijkstraとKnuthが大きな支持者であった)が強調したすべてを忘れてください。あなたは後藤を持っていて、あなたはそれを好きでした。
この状況では、グローバル変数のみを知っているプログラマーが独自のサブルーチンを発明し(パラメーターと戻り値により多くのグローバル変数を使用します!)、スパゲッティGOTOを実際に作成しました。
あなたが今日30歳以下で、Basicが第一言語であった場合、それはダイクストラが話していた言語と同じではありませんでした。あなたが年をとっていて、最初のBasicにこれらの機能のいくつかがあったとしても、Murphが以下にコメントするように、それはまだダイクストラが話していた同じ言語ではなかったかもしれません。
これまでに知らなかったコンテキストで質問を更新しました。
ダイクストラの引用は1975年のものです。
個別にコンパイル可能なプロシージャを取得したのはバージョン6でした。これは、GOTOからフォーカスawayへの移行の始まりを示していると思います。
「1976年、スティーブガーランドは 構造化プログラミング 機能を追加して、バージョン6出力を生成するプリコンパイラー、ダートマスSBASICを作成しました...」 [ ウィキペディア ] 引用文のコンテキストは明らかに、制御構造として現在知られているものの前にあり、当時の多くのユーザーは2番目から2番目のバージョン、つまりtwoガーランドより前のバージョン。v5であり、個別にコンパイル可能なプロシージャより前です。
GOSUB/RETURNは依然として「単純なサブルーチン」のみを処理します。
「変数名は、AからZ、A0からA9、B0からB9、...、Z0からZ9に制限され、最大286の可能な個別の変数が与えられました。」 ...そしてそれらはすべてグローバルです。
人は、食べたり飲んだりして、自分の仕事に満足を見つける以上に良いことはありません。
私は何よりもまずBASICを学びました(まあ、代数学を除いて)。それが私の心を真剣に反らせなかったなら、私はその後の18年間をどのように説明するのかわかりません...
とはいえ、それで何?ダイクストラは、BASICに長期間さらされているために何かを教えるのに苦労するかもしれませんが、地下の松ぼっくりに長期間さらされているためにharderは私に何かを教える時間があるでしょう。そして、これらの要因が取り除かれても、私はまだ真面目なCSの学生、真面目な数学の学生、または他の分野の真面目な学生ではありません。私のような人とプログラマーのダイクストラが見たかった種類のプログラマとの間の深淵は、ほとんど計り知れないほど素晴らしいものです...
それでも、プログラムします。 BASICに精通し、FORTRANをもてあそび、COBOLやその他すべてを試しましたが、これらの小さなマシンに喜びと魅力を見出しましたが、おそらくまったく異なるが最初にMr.エズガーが彼の分野に参入することは、召命であり、愛の生涯にわたる労働の基盤です。
...または多分それは傷ついた心ですwould言う...
あなたを傷つけるのはBASICではありません、それはother言語に身をさらすことの失敗です。 Monoglotの「プログラマ」は違います。
構造化の観点から見ると、BASICはアセンブラーやCOBOLよりも劣っていませんでした。当時、私たちが持っているALGOL派生の言語はそれほど多くはありませんでした。Pascalは、ほとんどの人が合理的な制御構造に持っていた最初の導入でした(そして、私はPascal制御構造が好きではありません)。
BASICで人に永続的に害を与えるのに十分であれば、他の初期の言語でも同様であり、したがって、今日使用しているすべての言語を開発するのに十分な害を受けていない人はいないでしょう。
その後、ダイクストラが、優れたプログラマではなく、BASICでいくつかのことを行うことを学んだ、決してそうではない人々を扱っていた可能性があります。それが私が声明に出した最も慈善的な解釈です。
私はTRSIC-80とApple II c/eでBASICを学びました、そして私自身は優れたプログラマーだと思います。私が個人的にBASICを最初に学ぶことによって破壊されないことにつながった2つの特徴は、
BASICの純粋な手続きの後でオブジェクト指向プログラミングを学ぶのはしばらくの間苦労したと認めますが、それまでにかなりの量のCも学んだので、それが本当にBASICに関連していたのかどうかはわかりません。
ダイクストラにも同意しません。第二言語を習得するのは、ベーシックだからではなく、パラダイムのためにもっと難しいことです。
BASICは、1985年にTK(シンクレアのような)と呼ばれるパーソナルコンピュータで私の最初の言語でした。これは、非常に限られたリソースマシンでした。その頃、私は本から16進数のエディタを使ってBASICコンパイラを書きました。私はZ80の本を購入し、その後8ビットの機械語を学びました。 BASICはこれで私を大いに助けてくれました。
CとPascalを学び、8080/6のAssemblyで遊んだ後。 MSX-BASIC、MS-DOS時代のQuick Basic ... VB、Delphi、一部Java Windows時代...
今日は進歩のある作品(4gl)、. net(C#/ VB)、php、そして私はサイクロプスのようには感じません。 :O)
私はAppleクローンの基本について、8歳の時に始めました。
いくつかのOOPアイデアが取り入れられた(qbasic、visual basicなど))それ以降のバージョンのBasicでさえ、Eightでは意味がありませんでした。
プログラミングを早く開始することは、プログラムフローの問題を通して考えることができる理由の1つであり、それが、この業界ではあまりにも多くの人々がうまくできない方法です。
多くの場合、早い段階での開始が有益であり、小さなものを扱う場合は非常に単純な言語が必要です。
あなたのマイレージは異なる場合があります...
現在の言語で問題を特定できず、問題を回避できるだけでなく、問題を解決するために構築された別の問題を見つけると、誰でも問題を抱えることになります。
そして、GOTOは、行番号がない場合にのみ悪いです;)
世界のほとんどのBASIC examplesへの露出は、言語自体ではなく、プログラマーの頭を傷つけるものだと思います。それは、MSDNを閲覧し、例外処理が必要だとは思わない、またはIDisposable
型が必要としないC#プログラマーのようなものです本当に破棄する必要があります。
私は現在、BASICを使用して、息子に簡単なゲームを書くように教えています。私はそれを使用したことがなく、PowerBuilderとPowerScriptでキャリアを始め、C/C++にジャンプしてからDelphiにジャンプしました。今日、私は利用可能なほとんどすべての言語を使用しており、すべての言語の根拠が、異なる記号、演算子、記号を使用した同じ数式であるので、非常に速く順応します。それは私が息子に教えることでもあり、そのため彼はすでにC++コードを読んで説明することができます。私の息子は12 btwです。
BASICのGOTO
はアセンブリ言語で考えるの方法を教えるのに最適な方法です。それは人の心を傷つけるものではなく、それは人の心を炭素ベースのシナプスから遠く離れ、シリコンベースのトランジスタに近づけるだけです。
ただし、BASICとLOGOを比較してみましょう。 BASICを使用すると、幼い子供たちをプログラミングから遠ざけることができます。シンプルな楽しいプログラムを書くには、雑誌に印刷された非常に長いプログラムをコピータイプし続けるだけです。一方、LOGOを使用すると、非常に印象的なグラフィックを描くことができます。これは子供を引き付けるのに不可欠です。
私が知っている最高のプログラマーの何人かは、Basicでのプログラミングに早くから触れていました。これは少し「具体的」であり、したがって、低レベルのマシンが実際にどのように機能するかについて、多くの新しい言語よりも優れた感触を提供します(たとえば、アセンブラへのより近いHLLの紹介です)。
ダイクストラの引用は、学者が仕様から設計された、証明可能で適切に構造化されたプログラムに向かう傾向を押し出そうとしていた時期からのものです。しかし、それは大部分の業界が進んだ方法ではありません。代わりに、多くのWeb 2.0時代のプログラマーは、コードを証明するための数学的に厳密な仕様のほとんどが存在しないものを迅速にプロトタイプ化しようとしています。
したがって、Basicでプログラミングするハックアンドスラッシュの試行錯誤プログラミング手法は、方法論を少し整理すると、RAD思考に役立つプライマーになります。
最後に、iPadで実行できる最低5つのBasicインタープリターがあるため、最新のデバイスでも言語を使用できるようにしておくことに注意します。
基本は良いです-それは楽しくてかなりシンプルですそれは楽しい2Dグラフィックスを行うことができますが...コンピュータについて...
フロントパネルの8個のスイッチのセットを介してアセンブリコードをSpeer Micro-LINCコンピューターに一度に1バイトずつロードし、1972年にPDPテープに保存していた私たちにとって、ダイクストラは膨大なツイットであったと明確に主張します。彼がBasicについて軽蔑したことはすべて、私が一緒に作業していたアセンブラについても真実でしたが、私と他の何千人もの人々が、アセンブラ、そして後にBasicとFortranとCobolとCなどにさらされたことから回復しました。
この引用が35年前のものであることを考えると、それはプログラミング言語で利用できる抽象化の欠如に関係していると思います。
BASICのような言語が与えられると、低レベルでプログラミングする方法についてほとんど教えられなくなります。これまでよりもはるかに必要なことであり、プログラミングは実際よりも単純であるという誤った印象を与えます。
VZ200、C64、およびApple] [e BASIC]を3年以上使用した後、15歳で「マシンコード」を習得しようとしたことをはっきり覚えています。これは失礼なウェイクアップコールでした。
しかし、最近では、私はこれらのことについて完全に理解していて、BASICという名前の言語で楽しく働いているとは思わないでしょう(私は「愚かなフィッシャープライスランゲージ」のようなモニターフレーズに怒鳴り始めがちです、それでも、私の不注意な中括弧は拒否されます)、CPUのメカニズムを抽象化する言語を使用すると、35年前(または25年前の私の個人的な経験と例)よりも生産的なことを行う方が簡単です。
1990年代初頭にGW-BASICでプログラミングを始めました。私の心は傷ついていませんでした。 Pascal、C、C++、Java、C#、Pythonなどのより優れた言語に移行しました。
今日、BASICプログラムを書くことはできません。行番号で考える方法を忘れてしまいました。それは問題ではありません。
しかし、私のBASICの経験は、私がアセンブリ言語(MIPS)を学ぶ必要があった大学のコンピュータアーキテクチャコースで多くの助けとなりました。アセンブリ言語の制御フローは、BASICによく似ています。ジャンプ= GOTO
、分岐= IF
...GOTO
、jal
(呼び出し)...jr
(ret)= GOSUB
...RETURN
。それがあなたが必要とするすべての制御フローです!
初心者プログラマーがすべて間違ってプログラムが大きな問題なく実行できるリソースでいっぱいのコンピューターで実行されているプログラミング言語を学ぶのは良いですか?それとも、プログラマーが間違ってはいけないところを学ぶ方が良いでしょうか?
限られたリソースのコンピューターで学ぶ方がいいと思います。 「プログラマーがうまくいかない」という理由ではなく、「クールさ」のしきい値がはるかに低いためです。初心者プログラマーは、自分のPCに優れた一人称シューティングゲームを作成する方法を知らない可能性があります。しかし、彼らはTI-89向けの素晴らしいパックマンゲームを作成し、ハードウェアを最大限に活用することができます。そして、それは力の感覚です。