Learnで、プログラミングを教えるソフトウェア開発者・フリーランスライターこの記事は、2017年12月に公開された記事の翻訳転載です。著者の許可を得て配信しています。Stuff単に音階を奏でるだけのこと、そして単に細なプログラミングを書くだけのことは互いに良く似ている。残念ながら、単に音階の(a)/(ラ)の音のみを演奏してもそれは全く音楽ではないし、それが(b)/(シ)の音なら地獄のように退屈である。Raymond)が彼の記事「ハッキングを学ぶ方法」の中で言った言葉です。私は1年以上プログラミングを学んでいますが、私はの言葉に同感を禁じえません。残念ながら、ティーチングスルースモールプログラム方式(teaching-through-small-programs)は、プログラミングを教える教師、書籍、大学のカリキュラムのほとんどが採用しているアプローチです。このような教育プログラムによっては、条件付きステートメントとループのしくみ、関数の記述方法のしくみを教えることはできますが、それらのしくみをより深く理解することはできません。ティーチングスルースモールプログラムアプローチに潜む問題点は、以下の事柄について対応できないということにあります。・コードのモジュール化手法のような直感を開発すること。・プログラムを新しいユースケースに拡張して再利用が可能な関数を記述する方法に対処すること・読み取り可能なコードとコンパクトなコードの記述との交換を考えること・優れて一貫したプログラミングスタイルの必要性に焦点を当てること要約すると、このようなアプローチでは大きなプログラムを作成する際に学べるはずの選択肢である、コアデザイン方式を教えることができないということです。拡張コードは簡単なものではない!これらの欠陥に加えて、このアプローチは地獄のように退屈なのです!そもそも、プログラムの中にこのような機能を設計することは、プログラミングを楽しくするものなのです。小規模なプログラムには、学生が熟考し、必要な直感を得るべく導くのに十分なスペースがありません。実働のプログラムに取り組むには、これらのスキルが必須になります。問題を自分の手に取って、前向きな問題、“良い問題”を見つけ、その問題の解決策をコーディングする必要があるということです。良い問題を見つける良い問題はとある種の舞台を提供するものです。その舞台とは、人々がそこに自身の知識を投入し、その効果を観察しつつ、そこから結論を導き改善し、実行に戻ることを可能とする場所なのです。解決したい問題-気が重いと思われるものであって、然しながら-「この解決プログラムを書いたらかっこいい」と感じるものを選ぶことが重要です。あなたが構築しているプログラムによって、あなたが取り組んでいる問題を解決しようとする時、あなたには、学び成長する意欲が得られます。あなたは常に、ソリューションの改善に取り組む必ことになるでしょう。取り組むべき良い問題を見つけるのは、最初は難しいと感じるかもしれません。これは、バーを高く設定しすぎているからです。あなたはSNS映画をあまりにも多く見過ぎているので、次にはこのプロジェクトからGoogleとかFacebookを作ろうとする気になるかもしれません。これは、学習の進捗を阻み、非現実的な目標を作成するだけのことであって、これが最も危険なのは、あなたが進歩から取り残されるだけになることです。あなたの目標は、10億ドルのソフトウェアを書くことではないことに留意してください。その目標は、あなたがあそこで活躍し、学ぶための舞台を提供するプログラムを作成することに過ぎないのです。舞台を怖がらない舞台!問題点の見つけ方​あなたには、仕事が冗長で退屈なので、それをやっている自分が愚かに思えること、それはいかに頻繁なことでしょうか?あなたには、自分に代わって仕事をするインテリジェントなペットや魔神が欲しいと望むこと、それはいかに頻繁なことでしょうか?そしてあなたは、彼らなら、あなたのようにのろ間ではなく、仕事をより素早くこなせることも知っています。あなたはすでにそのようなインテリジェントペットを持っていますーつまりパソコンです。日常のありふれた仕事はそれぞれ、あなたのしたいことをプログラムにして、この「インテリジェントペット」に書き込むことができます。問題を選択したら、可能な限り最善の解決策を作成する必要があります。Kerninghan)が『プログラミングの実践』の中で良いソフトウェアについて語っているのを見てみましょう優れたソフトウェアのベースとなる基本的な原則は、プログラムを短く管理しやすい状態に保つシンプルさであり;人間だけでなく機械にも理解しやすい明解さであり;広範な状況下でうまく作動し、新しい状況の発生にも適応する汎用性であり;機械が人間に代わって仕事をし、人間を平凡なタスクから解放する自動化である。here(ここでプログラミング言語を追加する)>の書物は僅かしかありません。大学のプログラミングコースの多くが、プログラミングのこの側面を完全に無視していることを思うと悲しくなります。自分で発明した(またはおそらく再発明された)問題がある場合は、留意すべき解決策があります。それは常に改善が求められているソリューションです。この章では、私の説明を説理解いただくために、私の個人的な経験から採った例を使用します。Chromeのブックマークを多く使っています。実に多い!!長いタイトルのブックマークにコメント追加よく見ると、これらのブックマークの最後に個人的なコメントが追加されている場合があります。これは、ブックマークの背後にある正確な理由や動機を覚えておくのが本当に難しくなることがあるからです。確かに、タイトルはページに含まれる内容を説明するのにかなり良い仕事をしますが、それは役に立つコンテンツが見つかるとか、リンクを保存していないと見失うのではないかと心配した理由からコメントを追加しました。(一部意訳)私はChromeが提供するデフォルト名の最後に||を付して、その後にコメントを追加します。ここで問題があります。時々、このデフォルト名は本当に長く、コメントを追加するには、最終的に単語全体の多くをCtrl+leftにしなければならないことを意味します。疲れる!私は、それはあまり深刻そうには見えない問題であると認識していますが、その認識が時には研究の流れを本当に台無しにすることがあります。私は失いたくない重要なものはすべてブックマークして、それに関連する可能性のあるトピックに応じてフォルダ別に整理し、それにコメントを入れています。ブックマークは私にとって大きな価値があります。誰かから私が知っている特定のトピックについて尋ねられるたびに、私はそのトピックのフォルダからいくつかのブックマークを共有できるように会話を操縦すべく試みています。いいえ、私は自分がすべてを知っていることを自慢したり、自分が利己的でないことを証明したりしようとしてる訳ではありません。-依って、人々はハイパーリンクの束を取得するだけでなく、付加価値を得ることになります。私は、この方が口頭で手取り足取り説明するよりも良い方法だとと信じています。真の学習は、人々が自分でウェブを閲覧する場合にのみあり得るものです。ここで問題があります。私の知る限り、タイトルと一緒にブックマークをすばやく簡単にコピーする方法は提供していません。ブックマークをコピーしてエディタに貼り付けると、ハイパーリンクのみが表示されます。すべてを共有したい場合は、編集オプションに移動し、そこからタイトルを選択し、どこかに貼り付け、ハイパーリンクに対して同じことを行う必要があります。コメントオプションが表示されことを期待します。現在のオプション・私はChromeで、私のローカルテキストファイルとしてローカルマシンにフォルダ内のすべてのブックマークをダウンロードできると期待しています。このファイルでは、各ブックマークが次の形式で表示されます。-<bookmark_url>ここで私は魔法のランプをこすって祈ります「魔神様!これらは私の願いです。実現させても頂けませんか?」ソリューション先月まで、私は実際にそれを行うためのもっともらしい方法があるとは思っていませんでした。私はそれが可能になる唯一の方法は、オープンソースのブラウザを使用し、私のニーズに合わせてコードを微調整する方法だと思っていました。いくつかの初歩的研究の後、私は決してそれは行なうべきではないことに気づきました。ブラウザは、ソフトウェアの最も困難で最大の部分の一つであり、私は確かにFirefoxのオープンソースコミュニティをいかに取り入れたとしても、そのコードはいじくり回していません。次に、Quoraサイトで「初心者向けの素晴らしいプログラミングプロジェクトは何か」という質問に対する答えを読みました。そこには、初心者がFacebookのニュースフィード内のすべての写真を猫の写真に置き換えるChromeブラウザ拡張機能を作成する方法が述べられています。私がブラウザの拡張機能の力を認識し、私の要求を満たすのに役立つと思ったのは、この時でした。