「誰もがプログラマーになれるわけではありません」と研究されていますか?


182

多くのプログラマーが固執する古い格言は、「プログラミングを学ぶにはある種の心がかかり、誰もがそれをできるわけではありません」です。

今、私たち全員が逸話的な証拠の独自の集団を持っていると確信していますが、これは科学的に研究されていますか?


63
良い懐疑論者の質問のように聞こえます。
チャドハリソン

10
プログラミング方法を学ぶことは、実際に貴重なプログラマになれることとは大きく異なります。ほとんどの場合、プログラミングは非常に簡単です。仕様を読んで、それに応じて実装してください。テスト。繰り返す。はい、誰でもプログラマーになれます。すべての人が貴重なプログラマーになるわけではありません。特に、特定のタスクは他のタスクよりもはるかに多くの思考と実験を必要とします。そのようなことは、実際にそれを楽しんでいる人々に残しておくのが最善です。例としては、低レベルのコンストラクトを実装し、最新のプログラム移行ツールなどを使用せずにクロックサイクル、ビット、バイトをカウントすることができます。誰もがそれを処理できるわけではありません。
zxcdw

9
@zxcdw-「誰もが優れた/貴重なプログラマーになれるわけではない」とは本当に質問していません。「誰もが良い/価値のあるXになれるわけではない」というのは、職業としてのXのほとんどすべての価値に対する普遍的な真実であるためです。私が疑問視しているのは、プログラミングを学び、一般の人のために頭をラップする能力です。
システムダウン

37
格言はプログラマーで毎日真実であることが証明されています<sigh>
-yannis

15
この質問の精神はプログラマの質に関するものではなく、「誰もが問題を取り、非人間の言語で論理的に正しい解決策を概説するように訓練できるか」ということだと思います。誰もができること。人間以外のマシンの非物質ベースの動作を指示するロジックを設計する概念は非常に抽象的であり、このレベルの抽象化では、それぞれの製品に触れることができないため、多くの論理的間接性を精神的に追跡できる必要があります手で踏みます。
ジミー・ホッファ

回答:


87

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

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

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

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


24
「... 1年目のJavaプログラミングコース...」<-問題が見つかりました。
ジョンギャロウェイ

4
Bornatは、オリジナルの紙を後退を超え、2009年の結果-に私を再現する試みを説明し、彼らが奨励ていないようだ。eis.mdx.ac.uk/staffpages/r_bornat/papers/...を
Blaisorblade

6
前述のように、これに関する元の論文は撤回されました。retractionwatch.com/ 2014/07/18

92

はい、「プログラマーになるために誰を切り取るか」を多かれ少なかれ決定するように設計された、かなり有名なオンラインの論文があります。

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

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

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

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


ここだジェフ・アトウッドのブログ記事結果を解釈し、コンテキストにいくつかのものを置きます。

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

経験豊富な教師は疲れていますが、この事実を決して忘れません。古い人たちが間違ったことをしているに違いないと信じる明るい初心者は、苦い経験から真実を学びます。そのため、1960年代に主題が始まって以来、ほぼ2世代にわたっています。


46
公平を期すために-その研究は、学校の摂取量の30〜60%が仕事をすることを気にかけられないことを証明しています。これは、すべての科目で常に当てはまります!
マーティンベケット

15
これは非常に興味深い論文であり、誰もがプログラムに参加できないという考えを裏付けています。残念ながら、著者のその後の作業(リンクされたページでも)は、テストが当初考えられていたよりも予測性が低いことを示しています。「プログラミングヤギを非プログラミングヒツジから分離すると主張することはできません。結果が当初の約束を満たしていないことは残念ですが、探査の扉を完全には閉じていません。」
AShelly

26
2006年からの最初の論文はドラフトに過ぎず、決して公開されなかったことを明確にするため。そのため、厳密には科学的にレビューされていません。著者のページで後の研究を見るほうがいいかもしれません。
ジェフアトウッド

17
アカデミックコースでの成功を調査することは、この現象を研究する奇妙な方法です。まず、講義はおそらくプログラミングを教えるのに最も適した方法ではありません。第二に、すべての人が講義から(よく)学ぶわけではありません。私にとっては、それは設計上の偏りが大きすぎます。
ラファエル

5
Bornat教授は、当時のメンタルヘルスの問題のため、後にそのドラフトを自発的に撤回することに悩まされました。eis.mdx.ac.uk/staffpages/r_bornat/papers / ...さらに、Sec。3は、他の人が結果を再現できなかったことです。彼らが言うように、2009年のメタ分析の結論でさえ「少なくとも文化的環境と教育慣行の影響を受けます」。全体として、私の最善の推測はコースが悪かったということです。「プログラミングを効果的に教える方法」は研究上の問題なので、驚くことではありません。
ブレイザーブレード

33

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

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

人々が抽象化を理解するのは、複数の具体的なインスタンスですでに作業を行った後、最も容易に理解できること、つまり、ほとんど既に知っているまで何かを学べないことはよく理解されています。したがって、抽象から始めることは、プログラミングを教えるためのまったくばかげた方法です。リアルタイムのフィードバックをより具体的な環境の中で教えられている場合(例えばのようにpremisconceived「メンタルモデル」の上につまずく多くの人々が繁栄するでしょうCSのためのカーンアカデミー、その後することが奨励)抽象のはしごを登る、彼らはそれのために準備ができているとき。Learnable Programmingは、Bret Victorによる最近のエッセイであり、プログラマーが学習で直面する不必要な環境課題に注目しています。

場合によっては、クラスに失敗するのは学生です。知的怠と意図的な無知は、人間の大規模なグループに存在します。優秀な人たちも例外ではありません。素晴らしいクランクと主張した人なら誰でも証明できます。しかし、特にプログラミングと数学の場合、多くの場合、生徒が失敗するのはクラスです。


7
基本的な音楽を学べるのと同じように、ほぼ誰でも初歩的なコーディングを学べると思う。しかし、それから生計を立てるのは別の問題です。たとえば、私はギターを弾くのが大好きですが、マルチシティスタジアムツアーに参加したり、すぐにメジャースタジオアルバムに出演したりするつもりはありません。
jfrankcarr

4
Sergの回答にリンクされている論文をご覧ください。彼らが最初に考えたいほど明らかではない場合でも、真実はということですいくつか:例えば-人々はちょうどでも、クラスの1,2ヶ月後に、最も基本的なプログラミングの概念を中心に自分の頭をラップすることはできませんx = 1; y = x;」との質問ですxand の値は何yですか?」
イズカタ

3
こんにちは、ようこそ!非常に新しいので、おそらくあなたはこれを知らないでしょう、しかし、私たちは本当にオープンエンドおよび/または議論y質問を好きではありません。私はIs it true that not everyone can learn how to program?質問からその行を削除しました。経験豊富なメンバーはそれを無視し、ガイドラインに合わないことに気付き、質問の研究/科学的側面に回答を集中しました。同じことをしてもらえますか?
ヤニス

3
@jfrankcarr-専門的または競争力のあるレベルのスキルは、多くの実践者を置き去りにします。ほとんどの人は、自然言語でさえ専門的に話すことも書くこともできません。
dmbarbour

3
@Izkata-Sergがリンクした論文は疑わしい科学的価値があります。同様の結果は、教訓の乏しいクラスからも達成されるでしょう:主題をすでに理解している人々はうまくやった。そして、あなたの質問例に関して:より一般的なのは、命令型セマンティクスを仮定した質問であり、それは確かに直感的ではありません。並行性がないと仮定できない場合は、独自の質問に答えることもできますか?
dmbarbour

19

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

多くはそれがどのように教えられているかに関係しています。

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


5
欲求がこれにどのように関係するのかと思うことがよくあります。一般大衆の大多数にとってまったく面白くないプログラミングがどれだけのことかを知っています。コンピューターが動作します。
ジミー・ホッファ

6
@ジミー:ゲーム、科学、金融、音楽など、彼らにとって魅力的なものについての個人的なプロジェクトに参加させて、面白くしようとしました。プログラミングは、目的を達成するための手段である場合、はるかに興味深いものになります。
マイクダンラベイ

2
@Den:まあ、彼らは宿題のために小さなプログラムをしなければならなかった、彼らはクイズとテストを持っていました、そして、彼らはそれぞれ重要な個人的なプログラミングプロジェクトをしなければなりませんでした。コースは必須でした。
マイクダンラベイ

1
@MikeDunlavey学生には常にプログラムできる友人がいて、宿題は簡単にだまされます。
スルタン

2
@スルタン:私のクラスではそうではありませんでした。いくつか試してみました。いくつかは、テストで他からコピーしようとしました。それは明らかでした-コードは他の誰かのものとあまりにも似ていて、同時に明らかな間違いを含んでいました。プロジェクトに関しては、2人は同じではありませんでした。クイズや宿題の平凡な仕​​事をしているが、美しいプロジェクトを提出する人のように、赤旗を掲げるものはありません。別のテストを作成して、それを彼らに渡します。彼らがどちらの道が進んでいるのかはっきりと分からない場合、私は彼らに良い成績を与える義務はありません。または、別の教授を呼び出すことができます。
マイクダンラベイ

7

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

テストは、IQテストで見たもの(シーケンスの次の番号など)に似ていました。

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

悲しいことに、HRドローンはこれらのテストを理解していなかった(そしてそれらを受験したときに失敗した!)ので、最近の募集はHRドローンが理解するものに依存しています-良い大学、コミュニケーション、スーツ着用スキル。

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


1
+ HRを経験したことがない(ほとんどない)ことにとても感謝しています。
マイクダンラベイ

4

DehnadiとBornatのダブルハンプまたはヤギ対ヒツジの研究を引用している人にとって、彼らがそれを複製しようとするCaspersenら(2007)によるメンタルモデルとプログラミング適性をチェックすることは価値があります:

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

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

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


4

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

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

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

一方、プログラミング言語は、1950年代のコンピューターを考えた場合、コンピューターがどのように機能するか、どのように機能するか、どのように「接続」する必要があるかを説明する方法にすぎません。したがって、プログラマは、プログラミング言語を完全に「話す」場合でも、メモリに格納されているバイト、ポインタとしての文字列などを見るこの抽象化レベルに到達できない場合、何もできません。地球に戻ってそれを問題に結びつけてください。したがって、すべての人間が(アセンブリ言語で...)プログラムできるわけではありません。

これとは別に、仕事と何かを生み出すために必要なすべての資質が必要になります。あなたが望むものを非常によく知って、他の人が理解/完成/レビューするのを簡単にし、目的に集中するなど...しかし、建築家のように、作家、音楽家、義肢..aehh義肢装具士など

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

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

Peter Norvig の記事「Teach Yourself Programming in Ten Years」の記事に、プログラミングの学習方法の非常に簡単な分析があります。彼は、生まれつきのプログラマーはいないと考えているようです。


3
こんにちは、ようこそ!あなたの答えが質問にどのように答えるかについて、私は少し混乱しています。これは、これが研究されているかどうかについてです
...-ヤンニス

申し訳ありませんが私は、「送信」ボタンを台無しに...私は、これは、より理にかなって願っています
イヴ・

あなたは正しい軌道に乗っていますが、プログラミング言語をハードウェア(コンピューター)と密接に結び付けています。プログラミングは、コンピューターと話す能力だけではありません。プログラミングとは、一貫した方法でプロセスを記述することです。他の人間にプロセスを記述することは、高レベルのプログラミング言語でコーディングすることに似ています。最大の違いは、人間は曖昧さに対してより寛容であることです。
オリオーニ皇帝12

私はこの観点を擁護しませんが、人々がプログラミング言語とその使用方法をタスクの説明(高レベルのプログラミングとスクリプティングにとって重要)として見る傾向があるという事実を指摘しようとしました。 「コンピュータープロセス」の説明として(たとえば、低レベル言語は、プログラミング言語であっても、VB.NETよりもVHDLモデリング言語に近いようです)。これら2つのアプローチは非常に異なりますが、同じコインの2つの側面です。彼らは、定量化が難しい人間の知能のさまざまな側面を主張しています。だから、それらを勉強するのは難しい。
イヴ

3

何年も前、私は軍事指導者の理論を含むいくつかのコースを行いました。理論の一部は、自然な指導者である者から犬をひもにつなぐことができない者まで、指導者の連続体が存在するということでした。アイデアは、人々がこのリーダーシップの連続体で釣鐘曲線で分配され、ほとんどの人が両極端の間のどこかにいるということでした。極度の「犬を導くことができなかった」終わりの少数を除いて、ほとんど誰もがリーダーシップの技術を教えることができました。誰かをリーダーに変えるために必要な努力の量は、彼らが連続体のどこに座るかによって異なりました。

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


ひもにつないで犬を正しく導かない人がたくさんいます。以前は、街中でさえも綱なしで犬を歩くことができました。なぜ人々は犬を気にしないのだろうといつも思っていました。

2

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

2週間以内に、それを手に入れる人と、基本的に100%の精度で手に入れられない人を特定することができました。あなたは、これがコンピューターの仕組みであると認めるか、クラス全体で頭を打ちました。妥協点はありませんでした。(それが先輩クラスであるという事実は、パターンをより明確にする多くのヘッドビーターがいたことを意味していました。)

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