web-dev-qa-db-ja.com

「誰もがプログラマーになることができるわけではない」は研究されましたか?

多くのプログラマーが固執する古い格言は、「プログラミングを学ぶにはある種の心が必要であり、誰もがそれを行うことができるわけではない」というものです。

今、私たちは皆、独自の事例証拠の山を持っていると確信していますが、これは科学的に研究されましたか?

184
System Down

別の研究、 初心者プログラマーが持つメンタルモデルの実行可能性の調査

このペーパーでは、初年度の終わりに初心者プログラマーが使用するメンタルモデルの実行可能性の調査について説明しますJavaプログラミングコース。定性的調査結果は、保持されている価値と参照の割り当てのメンタルモデルの範囲を特定します定量分析では、学生の約3分の1が価値の割り当ての実行不可能なメンタルモデルを保持しており、参照割り当ての実行可能なメンタルモデルを保持している学生はわずか17%でした。さらに、参加者のメンタルの比較の観点からモデルとコース内評価と最終試験でのそのパフォーマンス、実行可能なメンタルモデルを持つ学生は、実行不可能なモデルを持つ学生よりも大幅にパフォーマンスが高いことがわかりました。これらの調査結果は、より「構成主義的」なアプローチを提案するために使用されています。 「認知的対立」とプログラムの視覚化の統合。

また、羊と山羊の研究の同じ著者による 後の研究 も参照してください(明確にするために、実際には公開されていません)。 2009年からのこのトピックに関する最後の最新の研究は 一貫性がプログラミングの早期学習の成功に及ぼす影響のメタ分析 (pdf)です。

プログラミングの最初のコースの前に、割り当てと順序に関する学生の知識を明らかに調べるテストが設計されましたが、実際には、彼らの推論戦略を取り込むように設計されていました。実験により、2つの異なる学生集団が見つかりました。1つは、プログラム実行のメンタルモデルを構築し、一貫して適用することができます。もう1つは、モデルを構築できないか、1つを一貫して適用できないかのいずれかでした。最初のグループは、成功または失敗の点で、2番目のグループよりもコース終了時の試験で非常に優れていました。テストはパフォーマンスのレベルを非常に正確に予測しませんが、実験の6回の複製の結果を組み合わせて、英国で5回、オーストラリアで1回、一貫性がプログラムの初期学習の成功に大きな影響を与えることを示していますが、一方、バックグラウンドプログラミングの経験は、ほとんどまたはまったく効果がありません。

87
Jeff Atwood

はい、多かれ少なかれ「だれがプログラマーであると断念されたのか」を決定するために設計されたかなり有名な紙のオンラインがあります。

プログラミングの初期学習に関する認知的研究 -リチャード・ボルナット教授、レイ・アダムス博士

プログラミングのすべての教師は、彼らの結果が「二重のこぶ」を表示することに気づきます。それはまるで2つの母集団があるかのようです。それぞれが独自のベルカーブを持つ[プログラムする]ことができる人々と[プログラムする]ことができない人々です。

プログラミング教育と学習に関するほとんどすべての研究は教育に集中しています。言語を変更し、アプリケーション領域を変更し、IDEを使用して動機付けに取り組みます。それは機能せず、二重こぶが続きます。

コースが始まる前に、プログラムできる人口を選ぶテストがあります。二重こぶを拾うことができます。あなたはおそらくこれを信じていませんが、話を聞いた後であなたはそうするでしょう。どのように/なぜ機能するのかは正確にはわかりませんが、いくつかの良い理論があります。


これが Jeff Atwoodによるブログ投稿 で、結果を解釈し、いくつかのことをコンテキストに入れています。

1950年代に電子計算機が発明されて以来、大きな変化がありましたが、いくつかの事柄は頑固に同じままです。特に、ほとんどの人はプログラミングを学ぶことができません。すべての大学のコンピューターサイエンス学部の30%から60%が最初のプログラミングコースに不合格です。

経験豊富な教師は疲れていますが、この事実に気づくことはありません。古いものはそれを間違っていたに違いないと信じる目利きの初心者は、苦い経験から真実を学びます。したがって、主題が1960年代に始まって以来、ほぼ2世代にわたっています。

92
sergserg

誰でもプログラマーになることができます。人々がスプレッドシートをどれほど簡単に把握できるかを検討してください。プログラム可能な環境での実験と探索によって、アランケイがどれほど簡単に子供たちにプログラミングを紹介するかを考えてみましょう。

人々は大学レベルのコースで成功を研究し、「プログラミングを学ぶのに適さない人々もいる」と結論するかもしれません。しかし、そのような結論は、観察された証拠の範囲を大幅に超えています。代わりに、どの程度の失敗は、プログラミングがどのように教えられているか(抽象的すぎる?)、どのスタイルのプログラミングが教えられているか(命令的すぎる?)、またはプログラミング環境(コンパイル、即時フィードバックなし?)に起因する可能性があります。

抽象化は、複数の具象インスタンスを使用して作業した後で最も簡単に把握できること、つまり、ほとんどのことを理解するまでは何かを学ぶことができないことはよく理解されています。したがって、アブストラクトから始めることは、プログラミングを教えるまったく愚かな方法です。事前フィードバックされた「メンタルモデル」につまずく多くの人々は、リアルタイムのフィードバックを備えたより具体的な環境で教えられると繁栄します(たとえば Kahn Academy for CS のように) climb the抽象化のはしご 彼らはそれの準備ができているとき。 Learnable Programming は、Bret Victorによる最近のエッセイで、プログラマーが学習で直面する不必要な環境課題に注意を向けています。

場合によっては、授業に失敗するのは学生です。知的怠惰と故意の無知は、どんな大規模な人間のグループにも存在します。賢い人も例外ではありません。素晴らしいクランクについて議論したことがある人なら誰でも証明できるでしょう。しかし、特にプログラミングと数学については、多くの場合、学生を失敗させているのはクラスです。

33
dmbarbour

多分これは逸話かもしれませんが、私が数百人のリベラルアーツの学生にイントロプログラミングを教えたとき、そのような「二重こぶ」は見つかりませんでした。一部の人が他の人よりも一生懸命働いていたにもかかわらず、彼らはすべてかなり能力があるように見えました、そして非常に少数が彼らの道をブラフしようとしました。

教え方には多くのことが関係しています。

多くは欲求とも関係があります-プログラミングを少し面白くないと思う人もいます。それでも、正直に努力すれば学ぶことができます。

19
Mike Dunlavey

私が始めたとき、プログラミングの仕事に就く前に「適性テスト」を受けることが一般的でした。コンピュータサイエンスの卒業生はそれほど多くなかったため、他の分野から採用するのが一般的でした。

テストは [〜#〜] iq [〜#〜] テスト(シーケンスの次の番号など)に表示されるものと同様でした。

逸話的な証拠は、テストに合格したすべての人が優れたプログラマーになったわけではないが、テストに不合格で他の理由で採用された人が優れたプログラマーになったことはないということです。

悲しいことに、HRドローンはこれらのテストを理解していなかった(そして、彼らがテストを行ったときに失敗した!)ため、最近の採用は、人事ドローンが理解していること、つまり、優れた大学、コミュニケーション、スーツ着用スキルに依存しています。

これが、大規模なIT部門がPowerPointショーに優れた多くの人々と優秀なプログラマーをほとんど持たない理由です。

7
James Anderson

抽象化能力やその他の有用な知識について研究を行うことはできますが、プログラミングの定義は不明確であり、プログラミングを見るのに反対の方法があるため、引用は関係ないと思います。

第1の種類:プログラミング言語は、コンピューターが実行するタスクを記述するために作られたある種の人間の言語です(またはそうする必要があります)。そのため、話す人は誰でもプログラムできるはずです。それは、スクリプト、BASIC、組版システム TeX などと呼ばれます。言語やシステムは関係ありません。それは、作成者や人々がそれを見た方法です "親愛なるプログラム/コンピュータ、私の名前を印刷してください"ではなく "11文字のサイズのスペースを取得して、アドレスを教えてくださいこのスペース、それを保存して、キーボードバッファーから取り出せる11文字をこのメモリに入力します(ただし、クリーンアップなどを忘れないでください。)

この場合、調査はむしろ「すべての言語がすぐに同化できるわけではないのか」ということになるのは明らかです。

一方、プログラミング言語は、1950年代のコンピューターを考えると、コンピューターの動作や動作の仕方、「接続」の仕方を説明するための手段にすぎません。したがって、プログラマーは、プログラミング言語を完全に「話す」場合でも、インテリジェンスがメモリに格納されているバイト、ポインターとしての文字列などが格納されているこの抽象化レベルに到達できない場合、何もできません。地球に戻って問題にリンクします。したがって、すべての人間が(アセンブリ言語で)プログラムできるわけではありません。

これとは別に、何かを作り、何かを生み出すために必要なすべての資質が必要になります。あなたが何を望んでいるかを十分に理解し、他の人が簡単に理解/完了/確認し、目的に焦点を合わせるなど...作家、ミュージシャン、prostit..aehhプロテーストなど.

しかし、ほとんどの人間、特に子供には、優れた抽象化能力があります。一部のドイツ語学校は Haskell を10代前まで教えています( Pascal または Delphi のようなプログラミング言語はすべてのドイツ語学校で教えられています)。

だから私はその質問に答えるのは非常に難しく、どんな答え(または研究)も無関係である可能性が高いと思います。

Peter Norvigによる記事Teach Yourself Programming in 10 Yearsに、人々がプログラミングを学ぶ方法の非常に簡単な分析があります。彼は生まれながらのプログラマーはいないと思っているようです。

4
Yves

DehnadiとBornatの二重こぶまたは山羊対羊の研究を引用している人には、チェックアウトする価値があります メンタルモデルとプログラミングの適性 Caspersen et al(2007)による複製を試みます。

入門プログラミングコースに参加する学生の成功を予測することは、25年以上にわたって活発な研究分野です。最近まで、変数やテストに有意な予測力はありませんでした。しかし、DehnadiとBornatは、プログラミング羊を非プログラミングヤギからきれいに分離するプログラミング適性の簡単なテストを見つけたと主張しています。それらの理論と試験装置を簡単に紹介します。

調査結果を検証し、おそらく一般化するために、私たちはローカルのコンテキストでテストを繰り返しましたが、テストが私たちの入門プログラムミングコースでの学生の成功を予測することを示すことはできませんでした。

テスト機器のこの失敗に基づいて、異なる結果のさまざまな説明を議論し、この領域でのローカルな結果を一般化することが可能な研究方法を提案します。さらに、DehnadiとBornatのプログラミング適性テストについて議論および批判し、代替のテスト機器を考案します。

4
Thomas Park

何年も前に、私は軍事指導者理論を含むいくつかのコースを行いました。理論の一部は、自然なリーダーである人から、首輪で犬を導くことができない人まで、リーダーシップの連続体が存在するというものでした。アイデアは、人々がこのリーダーシップの連続体に釣鐘曲線で分布し、ほとんどの人々は2つの極端の中間にいるというものでした。 「犬を導くことができなかった」という極端な極端なものを除いて、ほとんどすべての人にリーダーシップの芸術を教えることができました。誰かをリーダーに変えるのに必要な労力は、彼らが連続体のどこに座ったかによって異なります。

プログラミングには同様の連続体と同様の分布があると思います。苦労せずにそれを手に入れる人もあれば、彼らの生活がそれに依存しているのにそれを手に入れることができなかった人もいるでしょう。しかし、それらはベルカーブの最後にある数少ないものです。ほとんどの人は、連続体の両極端の間に座っています。彼らはプログラムすることを学ぶことができますが、彼らを教えるために必要な努力は、彼らが座っている連続体のどこに依存するでしょう。

3
Simon Tewsi

それが単なるプログラミングかどうかはわかりません。私は同じような現象を見ただけで、人々は単にコンピューターの使い方を学んでいるだけです。大学に戻って、私はシニアクラスのコンピューターリテラシーをホストするラボのラボアシスタントでした。

2週間以内に、基本的に100%の精度で取得できる人とできない人を特定できました。これがコンピュータの動作方法であることを受け入れるか、クラス全体でコンピュータに頭をぶつけます。中間点はありませんでした。 (先輩クラスだったという事実は、私たちがパターンをはるかに明白にするヘッドビーターをたくさん持っていることを意味しました。)

2
Loren Pechtel