Pythonを身につけるために必要なこと


ノンプロPython1章連載用

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

来る2021/08/02に、拙著「Pythonプログラミング完全入門 ~ノンプログラマーのための実務効率化テキスト」(通称「#ノンプロPython」本)が発売となります。

今回、出版をお願いしております技術評論社さまのご厚意により、当ブログに「本書の第1章を全文掲載しても良い」と許諾をいただきました。

ということで、本シリーズでノンプロPython本の第1章「Pythonを学びはじめる心構えを整えよう」をお送りしております。

前回の記事はこちら。

ノンプログラマーがPythonを選ぶべき理由
「Pythonプログラミング完全入門 ~ノンプログラマーのための実務効率化テキスト」が発売になります。本記事では、本書(通称ノンプロPython本)の第1章から「ノンプログラマーがPythonを選ぶべき理由」を抜粋してお送りします。

今回はそのつづき、「Pythonを身につけるために必要なこと」です。

では、行ってみましょう!

スポンサーリンク

習慣にすること

Pythonは初学者にもやさしく作られているのは前述の通りですが、それでもノンプログラマーが適当にトライしてなんとかなる代物ではありません。ノンプログラマーは時間も環境も不足していますから、Pythonをものにしてその価値を高めるためには、限られた時間を、効果的に活用する心構えと、それに伴う行動が必要になります。そのいくつかの心構えについて見ていきましょう。

まず、ノンプログラマーがプログラミングを学ぶ上で、もっとも大事なことは学習を習慣にすることです。多くの場合、本書のような書籍を購入したり、Webサイトやオンラインサービスにアクセスして、いきなり学習をはじめてしまいますが、そのスタートの仕方は危険です。

なぜなら、プログラミングを身につけるためには、大量の学習時間が必要だからです。一般的にプログラミング技術を身に着け、ある程度活用ができるようになるまで200~300時間が必要と言われています。それを知らずに学習を開始した場合、なかなか習得ができないと感じてしまうため、「自分には向いていない」と挫折をしてしまうのです。しかし、実際は向き不向きが原因ではなく、学習時間の不足に原因があることのほうが圧倒的に多いのです。

図は、週あたりの時間によって、習得に必要とされる200~300時間にどれくらいの期間で到達するかを算出したものです。概算ではありますが、習得したい時期から逆算した場合に、どれくらいのペースで学習をすればよいかの参考になります。

学習頻度と必要期間

週末に数時間ずつ学習時間をとったとしても、200時間に達するためには50週、100週という期間が必要になります。月になおすと1~2年もかかってしまいます。何年も活用ができないもののために、ずっとモチベーションを保って学習を続けるのは困難です。

つまり、プログラミング技術を身につけるためには、学習のペースを上げて、毎日のように学習する習慣を作る必要があります。表1-1から読み取れるとおり、1日1時間でも少し不安が残るくらいなのです。

まず、学習を始める前に、日々の生活を見返して学習の習慣作りの計画をしましょう。おすすめは、仕事をはじめる前の朝の時間です。1時間早めに家を出て会社やカフェで学習をする、加えて帰宅後や週末に時間をとれば、比較的早い段階での習得の道筋は見えてきます。

実務で活用すること

実務で活用できるかどうかはノンプログラマーがプログラミングの学習を習慣化する上でたいへん重要です。

プログラマーであればプログラミングが仕事ですから、業務時間内にプログラミングをするのは当たり前です。一方で、ノンプログラマーはプログラミング以外に本業があります。ですから、業務時間内にプログラミングをするのは、わずかな時間であっても困難な場合が少なくありません。そうなると、業務時間外に学習時間を捻出しなければならず、そのことがノンプログラマーのプログラミング学習を困難にしている1つの要因となっています。

しかし、本業に役立つプログラミングであれば、業務時間内に携われる可能性が出てきます。図の円グラフにあるように、実務の中で「実現したいこと、かつ実現できそうなこと」をいち早く見つけて、業務時間を充てられるようにすることは非常に重要です。

1日のスケジュールのサンプル

習得までの期間を短縮できますし、学んだことが実務の役に立つのはモチベーションを
高めます。さらに、業務の効率化により時間を生み出すことができますので、その時間を新たなチャレンジに回すといった生産性アップの良いスパイラルに入ることを期待できます。

しかし、プログラミング学習の最初の段階では、プログラミングの考え方や文法などの基礎的な内容ばかりです。数学の教科書を思い出してください。「これが、何の役に立つのだろう」と思っていた方も多いと思いますが、プログラミングも同様です。初期の段階ほど、実務では使えない、または実務で使えるイメージが沸かないが、学習をしなければいけない期間となります。ノンプログラマーにとっては、この厳しい期間を乗り越えることを、いきなり試されることになります。

それを乗り越えるための、本書の活用の方法をお伝えしておきます。

まず、学習をはじめる前に、本書の7章以降をざっと眺めていただいて、Pythonでどのようなツールが作れるかのイメージを焼き付けておくと良いでしょう。また、6章までの基礎の部分では、「これは実務のツールづくりではどのように役に立つのかな」と業務に関連付けながら学習を進めましょう。一方で、業務時間内では「この作業はPythonで効率化できるかな」という視点で業務に取り組んでみてください。このように、学習内容と自分のことの関係性を意識することを「関連付け」といいます。関連付けられた記憶は定着しやすいので学習効率もよくなることが期待できます。

これらを参考に、初期段階を勢いよく乗り切りましょう。そして、実務で使えるような簡単なツールが作れるようになったのであれば、途切れなく次の「実現したいこと、かつ実現できそうなこと」を見つけてトライしていけるのが理想です。

常に情報収集をすること

お伝えした通り、PythonはOSSであり、そのプログラミング言語としての魅力も相まって、優秀な開発者が活発に開発を行っています。また、それにより豊富なライブラリが提供されていて、私たちはその恩恵にあずかることができます。

しかし、開発が活発であり、豊富なライブラリが提供されていることによるデメリットもないわけではありません。それだけアップデートが速いので、それについて行かなければならず、選択肢が豊富にあるので「目利き」が必要になるということです。

たとえば、Python3.6から「フォーマット文字列」という書き方が使えるようになりました。
以下の「formatメソッド」と「フォーマット文字列」のコードをご覧ください。現時点では、コードの意味はわからなくてよいので、それぞれぱっと見た印象がどのようなものかを確認してみてください。

formatメソッド

a = 123
print('{}'.format(a))

フォーマット文字列

a = 123
2 print(f'{a}')

「formatメソッド」に比べると「フォーマット文字列」のほうが、文字数や使われている記号の種類も少ないですよね。これらのコードは、いずれも同じことを実現するものですが、Pythonが重視している「シンプルさ」を追求してバージョンアップした結果、新たな書き方が使えるようになったのです。

このようなバージョンアップが頻繁に行われています。ですが、それを採用し続けるためには、新しい情報をキャッチして、過去に得た知識をアップデートしなければいけません。

もうひとつ、例を示しておきましょう。HTTP通信を行う「requests」(リクエスツと読みます)というパッケージがあります。このパッケージはとても人気があり、本書でも紹介するものです。

ただ、Pythonのパッケージ管理サイトPyPIで「requests」を検索すると、図1-9のように「requests」「requests2」「requests3」という3種類が出てきてしまいます。
どれを使うべきでしょうか?

PyPIで「requests」を検索した結果

大きい数字のほうが新しい、一般的にはそのように考えますし、実際にそうであることも多くあるのですが、実はこのケースでは数字が振られていない「requests」を使っておくのが良い選択といえます。

現時点では、皆さんがその判断するのは困難なので、わからなくても気にする必要はありません。ただし、Pythonとその能力を十分に引き出して、良い活用をしていくのであれば、より良い選択は何か?という視点を常に持ち続ける必要があり、いつの日かは自身で情報を取得し、判断をする力を身につけなければなりません。

読みやすいコードを書くこと

Pythonは「Readability counts.(読みやすさが重要)」とあるとおり、「コードの読みやすさ」を重視しています。なぜ、コードの読みやすさが重要なのでしょうか?

まず、Pythonで作成したプログラムは完成したらそれで終わりではありません。業務が変わればプログラムを修正する必要性が出てくるかもしれませんし、機能を追加したり改善をしたりといったニーズも生まれます。さらに、前述のとおりPython本体やパッケージのアップデートによるコードの改変もあり得ます。そのときに、読みやすいかどうかは、それらの作業の効率に大きく影響します。

また、他の人が見る可能性もあります。作成したプログラムを他の誰かが参考にしたり、引き継いだりすることがあるかもしれません。また、チームで開発運用をするケースも当然あります。普通の人であれば、他の人が書いた解読に時間がかかるコードは読みたくないものです。

つまり、読みやすいコードであれば、速く理解し、速く改変し、速く再利用することができるのです。コードを書き残したとき、それらが読みやすいのであれば改変や再利用がしやすい資産であり、逆に読みにくいのであれば苦労して保守しなくてはいけない負債となります。その差はたくさんのコードを書けば書くほど出てきます。

Pythonはその言語仕様として、誰が書いてもなるべく読みやすいコードになるように作られています。しかし、それでもコードの書き方によって読みやすさの差は出てきます。

簡単な例として「コードの読みやすさA」と「コードの読みやすさB」のコードを比べてみてください。コードの意味はわからなくてもかまいませんが、これらはいずれも同じ処理を実現するものです。ぱっと見た印象を確認してください。

「コードの読みやすさA」

a = input('>')
b = int(a)
c = b + 1
for d in range(1, c): print(d**2)

「コードの読みやすさB」

number = int(input('任意の整数を入力してください >')) + 1
for i in range(1, number):
    print(i**2)

後者のほうが、単語やテキストで意味をとれる箇所が多く、読みやすそうと感じるのではないでしょうか。少し学習を進めれば、「B」のほうがはるかに速くその意味を理解できるということがわかると思います。

Pythonでは、私たち全員が統一的で読みやすいコードを書くためのガイド「PEP8」 (ペップエイト)が用意されています。本書でもそれに準拠したコードを紹介します。また、都度読みやすく書くためのポイントをお伝えしますので、読みやすいコードが書けるように意識して学習を進めていきましょう。

アウトプットをすること

学習を進める上で「アウトプット」はとても効果的です。脳はアウトプットした情報を重要なものと認識して、その情報に関する記憶をより定着させ、より取り出しやすい状態にします。

プログラミング学習において基本となるアウトプットは、サンプルコードを自ら入力、実行して、実際に動かすということです。お坊さんがお経を書き写す作業と似ていることから、一般的に「写経」といわれています。手を動かすことで脳の運動をつかさどる機能も活動しますし、実行結果として知識に関連付けることができるフィードバック情報を得ることができます。

また、ノンプログラマーの場合、勉強仲間を見つけることを、強く意識しましょう。どんな勉強をしているのか、どこが難しく感じているのか、どのようなツールを作ろうとしているのかなど、アウトプットをしあえる環境は学習効率を大きく跳ね上げますし、モチベーション維持にも絶大な効果を発揮します。できれば、職場の同僚が理想です。仕事とプログラミングを関連付けてアウトプットをしあえるからです。もし、職場に見つけられなければ、プログラミングを学ぶコミュニティなどを活用するのもおすすめです。

さらに、別のアウトプットの方法としてTwitterなどのSNSやブログで、学習で得た発見や過程を発信するのも良いでしょう。アウトプットの効果はもちろんありますし、多くの人に見られながら学習することは、ほどよい緊張感を生み出します。また、フォロワーが学習を応援してくれたり、補足情報を提供してくれたりといった効果も期待できます。

このように、できることの範囲内でも、少しの工夫の積み重ねで、学習効果を大きく高めることができます。

1章では、ノンプログラマーにとってプログラミングを武器にするメリットとその置かれている学習環境が決して優遇されていないこと、Pythonの特徴と身につけるための行動指針についてお伝えしてきました。

学習が成功するかどうかは、本章の理解とそれに基づいた行動が大きく左右しますので、常に心に留めながら、Pythonの世界へと踏み出していきましょう。

(本書の2章につづく)

書籍「Pythonプログラミング完全入門~ノンプログラマーのための実務効率化テキスト」関連記事

書籍「Pythonプログラミング完全入門~ノンプログラマーのための実務効率化テキスト」に関連して、本書自体や、執筆に関する裏話や出来事、ノウハウ、イベントレポートなどを連載していきます。
  1. ノンプログラマー必見!書籍「Pythonプログラミング完全入門」発売についてのお知らせ
  2. ノンプログラマーがプログラミングを最強の武器とする方法(前編)
  3. ノンプログラマーがプログラミングを最強の武器とする方法(後編)
  4. Pythonで得られる新たな「働く」の体験
  5. ノンプログラマーがPythonを選ぶべき理由
  6. Pythonを身につけるために必要なこと
  7. 書籍「Pythonプログラミング完全入門」で書いた文字数とかかった時間、その他いろいろを晒します
  8. 本日発売「Pythonプログラミング完全入門~ノンプログラマーのための実務効率化テキスト~」のあとがきを全文無料公開
  9. 「Pythonプログラミング完全入門」でもやったよ!都内の大型書店の行脚レポート

タイトルとURLをコピーしました