多くのプログラマーが固執する古い格言は、「プログラミングを学ぶにはある種の心がかかり、誰もがそれをできるわけではありません」です。
今、私たち全員が逸話的な証拠の独自の集団を持っていると確信していますが、これは科学的に研究されていますか?
多くのプログラマーが固執する古い格言は、「プログラミングを学ぶにはある種の心がかかり、誰もがそれをできるわけではありません」です。
今、私たち全員が逸話的な証拠の独自の集団を持っていると確信していますが、これは科学的に研究されていますか?
回答:
別の研究、初心者プログラマーが保持するメンタルモデルの実行可能性の調査:
このペーパーでは、1年目のJavaプログラミングコースの終わりに初心者プログラマーが使用するメンタルモデルの実行可能性に関する調査について説明します。定性的調査結果は、参加者が保持する価値と参照の割り当ての精神モデルの範囲を特定します。定量分析により、学生の約3分の1が価値割当の実行不可能なメンタルモデルを保持し、参照割当の実行可能なメンタルモデルを保持した学生はわずか17%であることが明らかになりました。さらに、参加者のメンタルモデルと、インコースアセスメントおよび最終試験でのパフォーマンスの比較の観点から、実行可能なメンタルモデルを持つ学生は、実行できないモデルを持つ学生よりも大幅に優れていることがわかりました。これらの調査結果は、より「構成主義者」を提案するために使用されます
また、羊とヤギの研究の同じ著者による後の研究を参照してください(明確にするために、実際に公開されたことはありません)。2009年のこのトピックに関する彼らの最後の最新の研究は、プログラミングの早期学習の成功に対する一貫性の影響のメタ分析(pdf)です。
プログラミングの最初のコースの前に、生徒の割り当てと順序に関する知識を明らかに調べたテストが設計されましたが、実際には、推論戦略をとらえるように設計されました。実験では、学生の2つの異なる集団が見つかりました。1つは、プログラム実行のメンタルモデルを構築し、一貫して適用できます。もう1つは、モデルを構築できないか、モデルを一貫して適用できないかのいずれかです。最初のグループのコース終了時の試験の成績は、成功または失敗の点で2番目のグループよりもはるかに優れていました。このテストでは、パフォーマンスのレベルをあまり正確に予測していませんが、実験の6回の複製(英国で5回、オーストラリアで1回)の結果を組み合わせることにより、一貫性がプログラミングの早期学習の成功に強い影響を与えることを示していますが、一方、バックグラウンドプログラミングの経験、
はい、「プログラマーになるために誰を切り取るか」を多かれ少なかれ決定するように設計された、かなり有名なオンラインの論文があります。
プログラミングの早期学習に関する認知的研究 -リチャードボーナット教授、レイアダムス博士
プログラミングのすべての教師は、結果に「二重のこぶ」が表示されることに気付きます。まるで2つの母集団があるかのようです。それぞれが独自のベル曲線を持つ[プログラミング]できる人々と[プログラミング]できない人々です。
プログラミングの教育と学習に関するほとんどすべての研究は教育に集中しています。言語の変更、アプリケーション領域の変更、IDEの使用、動機付けの作業です。いずれも機能せず、二重のこぶが持続します。
コースが始まる前に、プログラムできる人口を選ぶテストがあります。ダブルハンプを分解できます。あなたはおそらくこれを信じないでしょうが、あなたは話を聞いた後にそうするでしょう。どのように/なぜ機能するかは正確にはわかりませんが、いくつかの優れた理論があります。
ここだジェフ・アトウッドのブログ記事結果を解釈し、コンテキストにいくつかのものを置きます。
1950年代に電子コンピューティングが発明されてから大きな変化があったにもかかわらず、いくつかの事柄は頑固に同じままです。特に、ほとんどの人はプログラミングを学ぶことができません。すべての大学のコンピューターサイエンス部門の入学者の30%から60%が最初のプログラミングコースに合格していません。
経験豊富な教師は疲れていますが、この事実を決して忘れません。古い人たちが間違ったことをしているに違いないと信じる明るい初心者は、苦い経験から真実を学びます。そのため、1960年代に主題が始まって以来、ほぼ2世代にわたっています。
誰でもプログラマーになれます。スプレッドシートを簡単に把握できることを考慮してください。Alan Kayが、プログラム可能な環境での実験と探索によってプログラミングを子供たちにいかに簡単に紹介するかを検討してください。
人々は大学レベルのコースで成功を研究し、「プログラミングを学ぶのにふさわしくない人もいる」と結論付けるかもしれません。ただし、このような結論は、観察された証拠の範囲を大きく超えています。その代わりに、どの程度の失敗が、プログラミングの教え方(抽象的すぎる?)、どのスタイルのプログラミングが教えられるか(命令的すぎる?)、またはプログラミング環境(コンパイル、即時フィードバックなし?)に起因する可能性があります。
人々が抽象化を理解するのは、複数の具体的なインスタンスですでに作業を行った後、最も容易に理解できること、つまり、ほとんど既に知っているまで何かを学べないことはよく理解されています。したがって、抽象から始めることは、プログラミングを教えるためのまったくばかげた方法です。リアルタイムのフィードバックをより具体的な環境の中で教えられている場合(例えばのようにpremisconceived「メンタルモデル」の上につまずく多くの人々が繁栄するでしょうCSのためのカーンアカデミー、その後することが奨励)抽象のはしごを登る、彼らはそれのために準備ができているとき。Learnable Programmingは、Bret Victorによる最近のエッセイであり、プログラマーが学習で直面する不必要な環境課題に注目しています。
場合によっては、クラスに失敗するのは学生です。知的怠と意図的な無知は、人間の大規模なグループに存在します。優秀な人たちも例外ではありません。素晴らしいクランクと主張した人なら誰でも証明できます。しかし、特にプログラミングと数学の場合、多くの場合、生徒が失敗するのはクラスです。
x = 1; y = x;
」との質問ですx
and の値は何y
ですか?」
Is it true that not everyone can learn how to program?
質問からその行を削除しました。経験豊富なメンバーはそれを無視し、ガイドラインに合わないことに気付き、質問の研究/科学的側面に回答を集中しました。同じことをしてもらえますか?
たぶんこれは逸話ですが、数百人のリベラルアーツの学生にイントロプログラミングを教えたとき、そのような「二重のこぶ」は見つかりませんでした。一部の人は他の人よりも一生懸命働いたが、彼らのうちのいくつかはブラフしようとしたが、彼らはすべて非常に能力があるように思えた。
多くはそれがどのように教えられているかに関係しています。
多くは欲望にも関係しています-プログラミングがあまり面白くないと感じる人もいます。それでも、正直な努力をすれば、それを学ぶことができます。
私が始めたとき、プログラミングの仕事に就く前に「適性検査」をするのが一般的でした。コンピュータサイエンスの卒業生はそれほど多くなかったため、他の分野から採用するのが一般的でした。
テストは、IQテストで見たもの(シーケンスの次の番号など)に似ていました。
逸話的な証拠は、テストに合格したすべての人が優れたプログラマーになったわけではないが、テストに失敗したが他の理由で雇われた人が優れたプログラマーになったことはないということです。
悲しいことに、HRドローンはこれらのテストを理解していなかった(そしてそれらを受験したときに失敗した!)ので、最近の募集はHRドローンが理解するものに依存しています-良い大学、コミュニケーション、スーツ着用スキル。
これが、大規模なIT部門にPowerPointショーが得意な人が多く、優秀なプログラマーがほとんどいない理由です。
DehnadiとBornatのダブルハンプまたはヤギ対ヒツジの研究を引用している人にとって、彼らがそれを複製しようとするCaspersenら(2007)によるメンタルモデルとプログラミング適性をチェックすることは価値があります:
入門プログラミングコースに参加する学生の成功を予測することは、25年以上にわたって活発な研究分野でした。最近まで、有意な予測力を持つ変数やテストはありませんでした。しかし、DehnadiとBornatは、プログラミング羊を非プログラミングヤギから明確に分離するためのプログラミング適性の簡単なテストを発見したと主張しています。彼らの理論とテスト機器を簡単に紹介します。
調査結果を検証し、おそらく一般化するために、ローカルコンテキストでテストを繰り返しましたが、テストが入門プログラムプログラミングコースでの学生の成功を予測することを示すことはできませんでした。
テスト機器のこの失敗に基づいて、異なる結果のさまざまな説明を議論し、この領域で局所的な結果を一般化できる研究方法を提案します。さらに、DehnadiとBornatのプログラミング適性テストについて議論し、批判し、代替のテスト機器を考案します。
抽象化能力やその他の有用な知識について研究することはできますが、プログラミングの定義は明確ではありません。プログラミングを見るには反対の方法があるため、引用は無関係だと思います。
第一の種類:プログラミング言語は、コンピューターが実行するタスクを記述するために作られた何らかの人間の言語である(またはそうあるべきです)ので、話す人は誰でもプログラムできるはずです。スクリプト、BASIC、組版システムTeXなどと呼ばれます。言語やシステムは関係なく、作成者や人々がそれを見る方法です。「親愛なるプログラム/コンピュータ、私の名前を印刷してください」ではなく「11文字のサイズのスペースを取得してから、このスペースのアドレスを教えてから、保存してから、キーボードバッファーから取り出すことができるこのメモリに11文字を入力します(ただし、消去することを忘れないでくださいなど」
この場合、研究が「すべての言語がすぐに同化できるわけではない」ということになるのは明らかです。
一方、プログラミング言語は、1950年代のコンピューターを考えた場合、コンピューターがどのように機能するか、どのように機能するか、どのように「接続」する必要があるかを説明する方法にすぎません。したがって、プログラマは、プログラミング言語を完全に「話す」場合でも、メモリに格納されているバイト、ポインタとしての文字列などを見るこの抽象化レベルに到達できない場合、何もできません。地球に戻ってそれを問題に結びつけてください。したがって、すべての人間が(アセンブリ言語で...)プログラムできるわけではありません。
これとは別に、仕事と何かを生み出すために必要なすべての資質が必要になります。あなたが望むものを非常によく知って、他の人が理解/完成/レビューするのを簡単にし、目的に集中するなど...しかし、建築家のように、作家、音楽家、義肢..aehh義肢装具士など
しかし、ほとんどの人間、特に子供には優れた抽象化能力があります。ドイツの一部の学校は、10代前半にHaskellを教えています(PascalやDelphiなどのプログラミング言語は、すべてのドイツの学校で教えられています)。
したがって、質問に答えるのは非常に難しく、どんな答え(または研究)も無関係である可能性が高いと思います。
Peter Norvig の記事「Teach Yourself Programming in Ten Years」の記事に、プログラミングの学習方法の非常に簡単な分析があります。彼は、生まれつきのプログラマーはいないと考えているようです。
何年も前、私は軍事指導者の理論を含むいくつかのコースを行いました。理論の一部は、自然な指導者である者から犬をひもにつなぐことができない者まで、指導者の連続体が存在するということでした。アイデアは、人々がこのリーダーシップの連続体で釣鐘曲線で分配され、ほとんどの人が両極端の間のどこかにいるということでした。極度の「犬を導くことができなかった」終わりの少数を除いて、ほとんど誰もがリーダーシップの技術を教えることができました。誰かをリーダーに変えるために必要な努力の量は、彼らが連続体のどこに座るかによって異なりました。
プログラミングには同様の連続体と同様の分布があると思います。楽にそれを手に入れる人もいれば、自分の人生がそれに頼らなければ手に入らない人もいるでしょう。しかし、それらはベル曲線の最後にある少数です。ほとんどの人は、連続体のそれらの極端の間に座っています。彼らはプログラミングを学ぶことができますが、教えるために必要な努力は、彼らが座る連続体のどこに依存します。