みんなのPython 第四版のサンプルコードを公開に向け整備していたとき,ちょっとしたオマケの文章があるといいかなと思って書いた見たところ,一部に好評だったので公開してみたいと思います。
オマケ : プログラミング力上達のコツ
このNotebookでは,拙著を読んで,その後どうすんだ,ということについて,書籍には載せないような砕けたかんじで書いてみたいと思います。プログラミングを上達させるためのコツについて,つらつら書いてみました。どうぞ。
目標を設定しよう
まずは,Pythonを使ってなにがしたいのか,ゴールを明確にしましょう。
「Webアプリを作りたい」「Raspberry PiでIoTデバイスを作りたい」「人工知能を活用したい」「データ分析をしたい」など,できるだけ具体的な目標を立てましょう。
「世の中を変えたい」「お金を稼ぎたい」「異性にモテたい」「とにかくビッグになりたい」というような抽象的な目標をたててはいけません。
煩悩は知的成長を助けないのです。
簡単なことからはじめよう
目標を立てたら,目指す方向に向かって,ゆっくりとでいいので歩き始めましょう。
プログラミング上達のコツは,日々プログラムを書くことです。まずは簡単なプログラムから書き始めましょう。
まず,どんなプログラムを作りたいかを決めます。次に,プログラムの作り方を頭で考えてみます。思考実験してみるのです。
その時,処理の実現方法が想像できないくらい難しい部分が,まったくないくらいの簡単さがちょうどよいと思います。あってもせいぜい,難しそうな部分が一つか二つくらいの簡単さがちょうどいいでしょう。
想像の外にある事柄は実現不可能なのです。
退屈な作業を自動化しよう
では,具体的にどんなプログラムを作ればいいでしょうか。一番お勧めなのは,日々の作業を自動化するプログラムです。
日常の業務や,日々の暮らしで毎日実行していることならなんでもよいのです。データの集計,その日の天気をメールで送信するなど,手動で実行すると数分かかってしまうような作業が必ずあるはずです。そのような作業を,Pythonを使って自動化するのです。あるいは,自分のためのプログラムではなく,家族や友人のためのプログラムを作ってもいいかも知れません。
一度作ったプログラムは,少しずつでいいので改良してゆきましょう。プログラムに満足できたら,別の作業を自動化する新しいプログラムを作りましょう。そうすることで,日々プログラムを書く習慣をつけることができます。
そしてここが大事なのですが,もし業務での作業をPythonで自動化したら,そのことを上司や同僚に話してはいけません。作業を自動化して浮いた時間は,プログラムの勉強に充てましょう。そうやって勉強時間を増やしてゆけば,プログラミング力がより向上します。プログラミング力が向上すれば,より複雑な作業を自動化できるようになって,より多くの時間を勉強に割くことができるようになります。
楽をするためにがんばるのです。
「車輪の再発明」は悪くない
よく知られた道具を,それと知らずに自分で作ってしまうことを「車輪の再発明」と言います。無駄なことの比喩としてしばしば使われる言葉ですが,車輪の再発明はまったくのムダではありません。なぜなら,車輪を再発明することで,車輪の作り方を学べるからです。
プログラミングなら,すでにあるプログラムやライブラリなどを自分で作り直すことを車輪の再発明と呼びます。Pythonに限定すると,たとえば標準ライブラリにある関数やクラス,組み込み型のメソッドの機能をわざわざ自分で作ってみることなどが相当するでしょうか。
組み込み型のメソッドにあるような機能は,処理が単純です。特に初心者のうちは,そのような機能を自分で実装してみるのはとてもよい勉強になります。
車輪を再発明した結果,ムダな時間を使ってしまったり,プログラムの見通しが悪くなってしまうかも知れません。しかし,自分で再発明したコードを既存の機能で置き換えることで,プログラムの質を高めることの大切さを,身を以て知ることになるはずです。
痛みが血肉となるのです。
チャレンジする心も忘れずに
「簡単なことから始める」というのは,低い階段を確実に登りステップアップすることに他なりません。この手法は楽で確実ですが,高い場所に登るのに時間がかかる,階段を上っていて退屈になってくることがある,という欠点も持っています。
プログラミングに慣れてきた頃に,すこし難しめの課題を設定するのも楽しいものです。階段を上ることになれて,つまづきに対する耐性もついてくると,チャレンジする心が自然と芽生えるかもしれません。そんなときは,壁のようにそびえる高い階段をよじ登るような,難しい課題を設定してみてもいいでしょう。そり立つ壁にはじき返されたときは,何食わぬ顔で低い階段に戻ればいいのです。
高い壁ほど乗り越えた喜びも大きいのです。
コードを書く前に調べよう
プログラミングの学習が進んでくると,少しずつ高度な課題に取り組めるようになってゆきます。プログラムを作るとき,分からないことが出てきたら,まずはネットなどを使って調べるようにしましょう。
Pythonの場合は,課題を一発で解決してくれるモジュールが見つかる可能性も大いにあります。まずは標準ライブラリを検索しましょう。その後,サードパーティのライブラリについて調べてみましょう。
調べる過程で,データ構造やアルゴリズムといった,プログラミングにおいてより抽象的な知識について学ぶ機会が増えてくるかもしれません。そうなったら,あなたか初心者を抜け,中級者になりつつある証拠です。
単にコピペすることは避け,コードを理解しよう
ネットを調べると,実動するコード片が多く見つかります。ブログやコード共有サービスで数多くのプログラムが公開されている現代は,プログラムを学ぶにはとても良い時代だと思います。
ネットで見つけたコードは,できるだけ内容を理解してから使いましょう。そのままコピペするのではなく,コードを読んでプログラムの動きを把握してから使うようにしましょう。コードを自分流に書き換えると,プログラミングの学習にはとても効果的です。
コードの行間を読むのです。
質の良いコードを読もう
プログラムは,作るだけでなく読むことでも学べます。プログラムを読むことを「コードリーディング」などと呼びます。コードリーディングもプログラミングの学習に効果的な手法です。
コードリーディングをするときは,できるだけ質の高いコードを読みましょう。著名なフレームワークやライブラリ,Pythonの標準ライブラリに搭載されているもののうちPythonだけで書かれたモジュールなどを探すと,質の高いコードを読むことができます。そのようなコードの多くは,適切にコメントがついていたり,処理がすっきりしていて,とても読みやすいはずです。
知識を横に広げよう
目標とする分野のプログラムを作り慣れてきたら,視点を変えてみましょう。視野を少しずらし,慣れたフィールドに近い別の分野を選んで,プログラムを作ってみましょう。
一言でプログラミングと言っても,分野が違えば異なった種類の知識を要求されます。似通った分野のプログラムを作ってみることで,知識の幅を広げることができます。幅広い知識を持つことで,より多くの問題をプログラミングの力で解決できるようになります。
良い知識はT字型の分布を示すのです。
書籍はコスパが高い
プログラミングの勉強はネットで十分,という人がよくいます。この言説は半分合っていますが,半分間違っています。
ネットには,プログラミングに関してかなりの量の情報が公開されています。そのような情報は,たいてい書いた本人の問題を解決する過程を公開しているだけに過ぎません。そのため,扱う範囲が狭く,散逸していて,統合されていません。
読者のことを考え,特定の分野について学ぶべきエッセンスを,必要な順番に並べてまとめた書籍を使いましょう。そのような書籍を使って学べば,より短い時間で必要な知識を得ることができます。あなたの時給を相当低く見積もって800円としましょう。ネット上の断片的な情報で勉強して,4時間無駄に時間を費やしてしまうのだとしたら,3000円の書籍を買う方がお得なのです。
安いものだけを追い求めるコスパ厨は貧乏人への一本道なのです。
道具にこだわろう
削れる苦労を笑顔で背負ってはいけません。面倒に思えることがあったら,最大限の努力をもって楽をする方法を考えましょう。
プログラムを作るためには,いろいろな道具を使います。エディタは誰もが使う道具です。コードを書く時間を削減してくれる,手になじむエディタを選んで使いましょう。沢山の道具を試し,手になじむエディタを使うことで,生産性がおおきく向上します。エディタに準じるIDEも同様です。
中級者になると,テストやCIのツールを使うようになるかもしれません。たくさんのツールを試し,使いやすいツールを自分で見つけるようにしましょう。
面倒くさがりな者こそ優秀なプログラマになれるのです。
メンターを見つけよう
プログラミングの師匠を見つけるのは意外と難しい。なぜ難しいかというと,師匠となり得る人は絶対数が少ないからです。
師匠になり得るような人は,たいてい忙しくしていますし,接触するのがむずかしいのが常です。ただ,今はネットがあります。SNSやGitHubがあります。そんな現代において,メンターと繋がるためには,どんな戦略をたてればいいかを考えましょう。
まず,この人こそ,と思う人を見つけましょう。ネットでその人と繋がる手段を見つけましょう。次に質問の仕方をよく考えましょう。相手を尊重して,相手の時間をできるだけ削がないような質問方法を考えるのです。質問をする前に問題について脳内で反芻しましょう。自分が分からないことが本当は何かを理解してから,質問を書き始めましょう。
メンターになり得るような良い人は,丁寧で要点をついた質問は放っておけないのです。
英語を勉強しよう
多くの新しい技術が海外,特に英語圏からやってきます。そのような技術の解説が日本語化されるころには,その分野はすでに熾烈な戦場と化しており,有象無道の無礼者どもによって死の地となってしまっています。
新鮮で競争力の高い技術をいち早く血肉とするためには,最低限英語を読めることが必要です。英語を書くことができれば,一次情報にコンタクトでき,情報を発信できます。英語を話すことができれば,海外に行って生の情報に触れたり,技術の成長点の雰囲気を味わい大きなモチベーションを得ることができます。
英語で文学作品を書きたいとか,ハリウッドやブロードウェイで役者として成功したいというわけでないのであれば,文法や発音にこだわる必要はありません。ITの世界で使われている英語はもともと,誤解を恐れず言えば「めちゃくちゃ」です。この分野には,ヨーロッパやアジアの人々が沢山働いています。英語を母国語にする人たちもそういう状況に慣れているので,くだけた英語に寛容です。分からなかったら聞き返してくれます。そして同様に,分からなかったら聞き返せばいいのです。
英語を使う上で最も必要なのは文法ではなく,伝えたいと思う意志なのです。