[和訳]退屈なものを自動化することで、より良いプログラマになる方法を学びます

Nityesh Agarwal    
Build to Learnで、プログラミングを教えるソフトウェア開発者・フリーランスライター
この記事は、2017年12月に公開された記事の翻訳転載です。著者の許可を得て配信しています。
Learn How To Be a Better Programmer by Automating the Boring Stuff

単に音階を奏でるだけのこと、そして単に細なプログラミングを書くだけのことは互いに良く似ている。残念ながら、単に音階の(a)/(ラ)の音のみを演奏してもそれは全く音楽ではないし、それが(b)/(シ)の音なら地獄のように退屈である。

これはエリック Sレイモンド(Eric S. Raymond)が彼の記事「ハッキングを学ぶ方法」の中で言った言葉です。私は1年以上プログラミングを学んでいますが、私はの言葉に同感を禁じえません。

残念ながら、ティーチングスルースモールプログラム方式(teaching-through-small-programs)は、プログラミングを教える教師、書籍、大学のカリキュラムのほとんどが採用しているアプローチです。

このような教育プログラムによっては、条件付きステートメントとループのしくみ、関数の記述方法のしくみを教えることはできますが、それらのしくみをより深く理解することはできません。

ティーチングスルースモールプログラムアプローチに潜む問題点は、以下の事柄について対応できないということにあります。

・コードのモジュール化手法のような直感を開発すること。
・プログラムを新しいユースケースに拡張して再利用が可能な関数を記述する方法に対処すること
・読み取り可能なコードとコンパクトなコードの記述との交換を考えること
・優れて一貫したプログラミングスタイルの必要性に焦点を当てること

要約すると、このようなアプローチでは大きなプログラムを作成する際に学べるはずの選択肢である、コアデザイン方式を教えることができないということです。


拡張コードは簡単なものではない!

これらの欠陥に加えて、このアプローチは地獄のように退屈なのです!そもそも、プログラムの中にこのような機能を設計することは、プログラミングを楽しくするものなのです。小規模なプログラムには、学生が熟考し、必要な直感を得るべく導くのに十分なスペースがありません。一方、実働のプログラムに取り組むには、これらのスキルが必須になります。

つまり、問題を自分の手に取って、前向きな問題、“良い問題”を見つけ、その問題の解決策をコーディングする必要があるということです。

良い問題を見つける

良い問題はとある種の舞台を提供するものです。その舞台とは、人々がそこに自身の知識を投入し、その効果を観察しつつ、そこから結論を導き改善し、実行に戻ることを可能とする場所なのです。

解決したい問題-気が重いと思われるものであって、然しながら-「この解決プログラムを書いたらかっこいい」と感じるものを選ぶことが重要です。あなたが構築しているプログラムによって、あなたが取り組んでいる問題を解決しようとする時、あなたには、学び成長する意欲が得られます。あなたは常に、ソリューションの改善に取り組む必ことになるでしょう。

取り組むべき良い問題を見つけるのは、最初は難しいと感じるかもしれません。これは、バーを高く設定しすぎているからです。あなたはSNS映画をあまりにも多く見過ぎているので、次にはこのプロジェクトからGoogleとかFacebookを作ろうとする気になるかもしれません。これは、学習の進捗を阻み、非現実的な目標を作成するだけのことであって、これが最も危険なのは、あなたが進歩から取り残されるだけになることです。

あなたの目標は、10億ドルのソフトウェアを書くことではないことに留意してください。その目標は、あなたがあそこで活躍し、学ぶための舞台を提供するプログラムを作成することに過ぎないのです。


舞台を怖がらない舞台!

問題点の見つけ方​

あなたには、仕事が冗長で退屈なので、それをやっている自分が愚かに思えること、それはいかに頻繁なことでしょうか?あなたには、自分に代わって仕事をするインテリジェントなペットや魔神が欲しいと望むこと、それはいかに頻繁なことでしょうか?そしてあなたは、彼らなら、あなたのようにのろ間ではなく、仕事をより素早くこなせることも知っています。

ちょっと聞いてください。あなたはすでにそのようなインテリジェントペットを持っていますーつまりパソコンです。日常のありふれた仕事はそれぞれ、あなたのしたいことをプログラムにして、この「インテリジェントペット」に書き込むことができます。

良いソリューションの書き方

問題を選択したら、可能な限り最善の解決策を作成する必要があります。ブライアンWカーニンハン(Brian W. Kerninghan)が『プログラミングの実践』の中で良いソフトウェアについて語っているのを見てみましょう

優れたソフトウェアのベースとなる基本的な原則は、プログラムを短く管理しやすい状態に保つシンプルさであり;人間だけでなく機械にも理解しやすい明解さであり;広範な状況下でうまく作動し、新しい状況の発生にも適応する汎用性であり;機械が人間に代わって仕事をし、人間を平凡なタスクから解放する自動化である。

これらのトピックを取り上げている<add programming language here(ここでプログラミング言語を追加する)>の書物は僅かしかありません。大学のプログラミングコースの多くが、プログラミングのこの側面を完全に無視していることを思うと悲しくなります。

自分で発明した(またはおそらく再発明された)問題がある場合は、留意すべき解決策があります。それは常に改善が求められているソリューションです。

この章では、私の説明を説理解いただくために、私の個人的な経験から採った例を使用します。

だから、たまたまChromeのブックマークを多く使っています。


実に多い!!

長いタイトルのブックマークにコメント追加

よく見ると、これらのブックマークの最後に個人的なコメントが追加されている場合があります。これは、ブックマークの背後にある正確な理由や動機を覚えておくのが本当に難しくなることがあるからです。確かに、タイトルはページに含まれる内容を説明するのにかなり良い仕事をしますが、それは役に立つコンテンツが見つかるとか、リンクを保存していないと見失うのではないかと心配した理由からコメントを追加しました。(一部意訳)

私はChromeが提供するデフォルト名の最後に||を付して、その後にコメントを追加します。

さて、ここで問題があります。

時々、このデフォルト名は本当に長く、コメントを追加するには、最終的に単語全体の多くをCtrl+leftにしなければならないことを意味します。疲れる!

私は、それはあまり深刻そうには見えない問題であると認識していますが、その認識が時には研究の流れを本当に台無しにすることがあります。また、私たちは10億ドルのソフトウェアを作成しようとしていない、覚えていますか?

タイトル付きブックマークのコピー

私は失いたくない重要なものはすべてブックマークして、それに関連する可能性のあるトピックに応じてフォルダ別に整理し、それにコメントを入れています。だから、ブックマークは私にとって大きな価値があります。誰かから私が知っている特定のトピックについて尋ねられるたびに、私はそのトピックのフォルダからいくつかのブックマークを共有できるように会話を操縦すべく試みています。

いいえ、私は自分がすべてを知っていることを自慢したり、自分が利己的でないことを証明したりしようとしてる訳ではありません。私は本当にこれが彼らを助けると思います:

1. フォルダには、そのフォルダ名に関する私自身のノウハウの最高のものが含まれています
2. タイトルと個人的コメントで、ブックマークはそれぞれに十分に文書化されます -依って、人々はハイパーリンクの束を取得するだけでなく、付加価値を得ることになります。
3. 私は、この方が口頭で手取り足取り説明するよりも良い方法だとと信じています。真の学習は、人々が自分でウェブを閲覧する場合にのみあり得るものです。

さて、ここで問題があります。Chrome は、私の知る限り、タイトルと一緒にブックマークをすばやく簡単にコピーする方法は提供していません。ブックマークをコピーしてエディタに貼り付けると、ハイパーリンクのみが表示されます。

だから、すべてを共有したい場合は、編集オプションに移動し、そこからタイトルを選択し、どこかに貼り付け、ハイパーリンクに対して同じことを行う必要があります。そして、ブックマーク全体の多くを共有したい場合は? 各リンクごと、個別にこれを行う必要があります!


非常にありふれたタスク

Chromeにブックマークを追加することを望んでいます

・アドレスバーの右上隅にある星のアイコンに、[名前] と [フォルダ] と共に コメントオプションが表示されことを期待します。


現在のオプション

・私はChromeで、私のローカルテキストファイルとしてローカルマシンにフォルダ内のすべてのブックマークをダウンロードできると期待しています。。このファイルでは、各ブックマークが次の形式で表示されます。

*タイトル -<bookmark_title>
*コメント-<bookmark_comment>
*URL -<bookmark_url>

ここで私は魔法のランプをこすって祈ります「魔神様!これらは私の願いです。どうか実現させても頂けませんか?」

ソリューション

先月まで、私は実際にそれを行うためのもっともらしい方法があるとは思っていませんでした。私はそれが可能になる唯一の方法は、オープンソースのブラウザを使用し、私のニーズに合わせてコードを微調整する方法だと思っていました。

いくつかの初歩的研究の後、私は決してそれは行なうべきではないことに気づきました。ブラウザは、ソフトウェアの最も困難で最大の部分の一つであり、私は確かにFirefoxのオープンソースコミュニティをいかに取り入れたとしても、そのコードはいじくり回していません。

次に、Quoraサイトで「初心者向けの素晴らしいプログラミングプロジェクトは何か」という質問に対する答えを読みました。そこには、初心者がFacebookのニュースフィード内のすべての写真を猫の写真に置き換えるChromeブラウザ拡張機能を作成する方法が述べられています。

私がブラウザの拡張機能の力を認識し、私の要求を満たすのに役立つと思ったのは、この時でした。

API Chrome のブラウザ拡張機能とChrome*

Chrome ブラウザには、chrome.* API と呼ばれるきちんとした API があります。それは、名前がChromeで始まるすべての API を意味します。

誰もが独自のブラウザ拡張機能を作成するためにそれを使用することができます。基本的には、開発者がより抽象的なコードを簡単に作成するために使用できるいくつかの関数にアクセスできます。

ブラウザ拡張機能は、JavaScript と共に通常の HTML/CSS を使用します。私は初心者でも、簡単なブラウザ拡張機能を作成するのは簡単であることを書物で読みました。この作成に必要なのは、HTML/CSS と JavaScript に関する少しの知識です。

私は少し前にヘッドファーストHTMLとCSSを書物でマスターしていましたが、JavaScriptを知りませんでした。私はそれに疎いことを恥ずかしく思っています。結局のところ、私はすでに知っている言語(PythonまたはC++)の流暢さを磨くプロジェクトをフォローすることにしたいと思っています。

しかし、私はまた、私のGithubプロファイルに紹介するプロジェクトも必死に追いかけていました。

新しい言語の習得

私は、変数や関数の宣言や定義、ループ、条件など、JavaScriptの基本を学ぶことにしました。これはほとんど時間を要しませんでした。それはすべての言語で基本的に同じことが言えるのように思えます。

私は拡張機能の作成に関するチュートリアルとガイドで習得した以外の部分のJavaScriptの機能を学びました。私自身の能力を拡大する時期が来ていたのです。

ドキュメンテーションを読むことを通じて習得

Chrome ブラウザ拡張機能の作成に向けるためのチュートリアル ビデオや記事はごくわずかです。これはおそらく、ブラウザの拡張機能があまり熱くなったことがないのが原因と思われます。

私が必要としていたものは、chrome.bookmarks API内に存在することがわかりました。これはやや珍しい要求であることが判明しました。それを使用する拡張機能は比較的少数にと止まっています。このことは、それを使用する方法についてのチュートリアルがないことを意味するものでした。

私が以前から今まで学んだすべては、トピックが手取り足取りで、うまくパッケージ化されたチュートリアルやガイドの中に含まれています。しかし、今回は、ドキュメントを調べることのみを頼りに学ばなければなりませんでした。

それは、メソッドとしての全ての武器が、小さなユーザーリファレンスマニュアルと一緒に、私の目の前に並べられているようなものでした。私はそこで、自分の目標を達成するために最も役立つツールを自分で特定しなければなりませんでした。

このすべてを行う中で、私は「Hello World」プログラムの重要性に気付きました。

「Hello Worldプログラム」は高く評価されているといつも感じていました。

私が言いたいのは、それが新参者を含むすべてに歓迎されるものですが、それはすべてのプログラミングブック/チュートリアルで始めるほどに素晴らしいものではないということです。

それは自分で書いて試すほどに、決して魅力的なものではありませんでした。

私は、ブラウザが端末機から拡張機能を読み込むことができるように、ブラウザを設定していました。私はドキュメントからの指示に従って、いくつかの必須ファイルを作成しました。今は、ブックマークAPI を使用して実際の拡張機能をコーディングすべく開始することが可能です。

しかし、待ってください。その設定に問題がある場合はどうなるのでしょうか?そのドキュメント化で重要なものを見逃した場合はどうなるのでしょうか? 私はそれが起こり得ないことを確認する必要があったので、実際にいくつかをやってみて、それがおそらくは作動し得ないと認識するだけのために、かなりの時間を費やしました。

‘Hello World’の拡張機能を作成すべくその必要性を感じたのは、その時のことでした。

Hello Worldプログラムは、物事が機能することを保証するものであるため、最初のプログラムではありません。適切に行えば、私のプログラムも機能します。

問題点1;解決済み

これは私がその夜に思いついたものです:

タブURLをブックマークします

私は、ウェブページのタイトルは、ブックマークにぴったりのデフォルトタイトルとしても機能することを確認しました。したがって、ポップアップにタイトルフィールドを追加しませんでした。

そのコードは、書く時点では十分なドキュメント化、またはモジュール化がなされていないか、、または何もなされていません。それはただ作動するのみです。私は将来的にそれをするつもりです。そうすることが本当の意味で私のプログラミングレッスンなのです。

問題点2:解決不能?

私が見た限りでは、Chromeはブックマークを使用してユーザーの端末機にテキストファイルを生成してダウンロードする方法を提供していません。このことは、ブックマークもダウンロードできないことを意味します。😦

ページの上書き

このドキュメント自体が私にある解決策の提示になりました:

Chrome.* API documentation

それを読んで思ったのは、それは私がやろうとしているものであるということです

私はブックマークページに、私が独自にデザインしたブックマークマネージャページで上書きすることにしています。

そのページで、ブックマークは現在行われているような選択タブへの表示はされません。


Chrome.* API documentation

他のほとんどの Web ページと同様に、デザインにブックマークごとに簡単なテキストを含める方が適切です (たとえば、読んでいるもの)。テキスト内ブックマーク各々のスクリプトは次のとおりです。

* Title- <bookmark_title>
* Comment- <bookmark_comment>
* URL- <bookmark_url>

私はまだこのページを作成していませんが、近い将来にそれを行うつもりです。

完読ありがとうございます。


コメントを読む

新着ピック  






















新着ニュース

モジラが会長のミッチェル・ベイカー氏を新CEOに迎える | TechCrunch Japan

フランスが新型コロナ抑制のためのBLEを利用した感染者追跡アプリの準備を正式表明 | TechCrunch Japan

Red Hat新CEOにポール・コーミア氏が就任 前CEOのジム・ホワイトハースト氏はIBMプレジデントに

ユダヤ教の過越の祭が新型コロナの影響で今年はZoomに、来年こそエルサレムで | TechCrunch Japan

5Gスマートフォンを安価に売るためのカギは? ミリ波対応が難しいのはなぜ?

165Hzで「量子ドット」採用のゲーミングディスプレイ「KIG270QD」の実力は?

台湾、政府機関でビデオ会議サービス「Zoom」の使用禁じる--セキュリティなど懸念

米国株は新型コロナ減速の兆候で再び反発、SaaS株も復調 | TechCrunch Japan

Customized Icons for Alteryx Macro | Developers.IO

Customized Icons for Altery...

DevelopersIO / 3時間前


Alteryxマクロのカスタムアイコン作成 | Developers.IO

グーグル兄弟会社Wing、ドローンによる医薬品や食料品宅配が急増--新型コロナで

格安スマホ各社、データ容量の無償提供など学生支援策を発表--内容にはバラつきも

新型コロナに乗じたハッキング、英米のセキュリティ当局が警告

ビデオ会議ツール「Google Meet」、1日あたり200万人超の新規ユーザーを獲得

React でページ内の目的の箇所まで自動スクロールさせる | Developers.IO

Disney+の有料会員数が半年を待たずに5000万人を突破 | TechCrunch Japan

SnowflakeのWarehouse一覧をPythonで取得してみた | Developers.IO

リモートワークの普及に取り組むキャスターが6億円調達、既存サービスの利用企業数は1300社を突破 | TechCrunch Japan

NASAが2022年の月への貨物輸送にMasten Space Systemを指名、同社の月着陸船XL-1と連携 | TechCrunch Japan

Google、新型コロナ対策支援で「Stadia Pro」を2カ月無料に(日本は対象外)

もっと見る
記事をPICKする
会員登録
Register
記事をPICKする

会員登録すると、もっと便利に利用できます。