2024年11月19日
Python書籍翻訳者
清水川 貴之
株式会社ビープラウド所属。一般社団法人PyCon JP Association会計理事。
2003年にPythonを使い始め、それがオープンソースとコミュニティー活動に関わり始めるきっかけとなった。本業ではソフトウェアエンジニアとして自社サービスの開発に携わり、上から下まで幅広く担当。本業のかたわら、Python mini Hack-a-thonやSphinx-users.jpなどPython関連イベント運営、カンファレンスでの講演や書籍の執筆翻訳、またOSS開発を通じて技術情報を発信している。
清水川貴之(@shimizukawa)と申します。Pythonは20年ほど使っており、仕事ではDjangoを中心としたWebアプリケーション開発、プライベートではOSS開発やPython関連イベントの運営、また日本国内やアジア地区のPython関連イベントで技術紹介などを行っています。
私が『エキスパートPythonプログラミング』初版の翻訳に携わったのは2010年で、当時はあまり知られていなかったPython自体の深い知識と、Pythonで開発するために必要な周辺情報に惹かれ、4名で翻訳しました。それから13年が経ち、2023年に出版された改訂4版では大幅なアップデートとともに内容も磨かれ、これまでの改訂で最も濃い書籍となりました。最近は多くのPython書籍が日本語で出版されていますが、Pythonを仕事で使って行くうえで押さえておきたい1冊だと思います。
この20年でPythonをとりまく状況は大きく変わりました。Pythonの利用者数も増え続けているようで、それにともなって裾野も広がっています。20年前には1年に数冊程度だったPython書籍の出版も、今では年間100冊ほどと、大幅に増えています。そのため、入門本から上級者向けまで、読者の目的や、レベル感にあった本に出会える可能性はかなり高くなっていると思います。
私も最近は、Google検索やStackOverflowでの調査より、生成AI検索エンジンを使うことが多くなりました。しかし、どちらを使うにしても情報の裏取りは欠かせません。最終的には公式ドキュメントなどの一次情報を確認しています。技術書はそういった裏取りが済んでいる情報として期待できますし、体系的な知識を身に付けるにはやはり書籍が一番だと感じます。本を探すときは、もちろん全ての本から選ぶのは難しいので、信頼する方のおすすめ本を手に取ることが多いです。私自身も書籍の執筆や翻訳に関わってきた関係で、参考書籍として読んだり、レビューを引き受けたりで触れる本もあります。そんな中からいくつか、おすすめの書籍を紹介したいと思います。
本書は、原著では1冊でしたが日本語版では「必修」と「実践」の2冊に分かれています。基礎から学びたい方にも、実践を通して学びたい方にもおすすめできますが、個人的な気持ちとしては、実践編から読んでみるのが面白いと思います。
私自身のプログラミング学習スタイルを振り返ってみると、実践こそがプログラミングを身に付けるために一番大事な要素だったと感じます。だから、プログラミング自体や新しいプログラミング言語を身に付けようと思ったら、まずは何かつくりたいものをつくってみて、足りない知識はあとから身に付けていけば良いと思います。
この本の「実践編」はそういった実践から学びたい人におすすめです。プログラミングの基礎は飛ばして、意味が分からなくてもまずはコードを打ち込んで動かしてみる。そして分からない部分にはマーカーをひきつつ、「必修編」の当該箇所で基礎を押さえながら読み進める方式をおすすめします。
「必修編」 ではPythonの文法や基本的なデータ型が分かりやすく丁寧に説明されています。足場をしっかり固めて、基礎から一歩ずつ学びたい人はこちらから読み始めると良いでしょう。必修編では、Pythonを通じてプログラミングの基本的な概念を学びます。ここで学ぶ変数やデータ型、制御構文などの概念は、ほとんどのプログラミング言語に共通のものです。
初学者がつまずきがちなところには、すぐに解決できるように解決方法が配置してあります。
例えばリスト操作の章ではforループが初めて登場しますが、インデントエラーにありがちな失敗例と修正方法が何パターンか紹介されています。これによって、「本のとおりにコード書いたつもりなのにうまく動作しない」という書籍にありがちな問題にハマりづらい構成になっています。また、本書では例外処理とユニットテストについても触れていて、実践に必要な基礎知識がひと通り網羅されています。ユニットテストは、つくったプログラムの入出力を明確にする設計の一部であり、その後の修正で意図しない変更(バグ)を起こさないためにも必要な、現在のプログラミングではほぼ必須となる大事な要素です。各所に配置された演習問題「やってみよう」は理解度を確認するのによいでしょう。
「実践編」では3つのプロジェクトを通して実践的なプログラミングとデバッグを体験できます。「エイリアン侵略ゲーム」というスペースインベーダーのようなシューティングゲームの他、データ可視化ツールやWebアプリケーションをプログラミングしていきます。この3つのプロジェクトはどの順番でどれを選んでも大丈夫なので、自分で興味のあるものから取り組むと良いと思います。
プログラミングでは、はじめはシンプルに書き進めて、必要になったらより良い書き方に修正していく「リファクタリング」を行うことが良いとされています。実践編でも初めから完璧なコードを目指すのではなく、まずは動かすことを目指して思ったままに書いた愚直なコードを、次のステップでリファクタリングして美しいコードを発展させていく、そんな流れを体験できる構成になっています。実践編を終えたら、いずれかのプロジェクトを足がかりに自分のアイディアを盛り込んでプログラムを進化させるのも良い腕試しになると思います。
この『最短距離で〜』の2冊と合わせておすすめできるのが書籍『独学プログラマー』です。『最短距離で〜』が「つくりたいものをどうプログラミングするか」に焦点を当てているのに対して、『独学プログラマー』は学びに向かうための心構えから始まり、Python言語入門だけでなく、周辺ツールの使い方や、データ構造とアルゴリズム、プログラミングで仕事を得るまでの進み方、そしてチームで働くために必要なことなど、プログラミング全般に関わる知識のエッセンスを紹介しています。
初めに触れたように、今は多数の本が出版されていますので、どういった本が良いか迷ったら本屋さんで見比べてみても良いと思います。
ここで1つお願いがあります。まずは1冊を徹底的に読み込んでコードを書いて動かしてみてください。継続する意味のあることを「断固として継続」することが重要です。夜眠いときもあるし、早起きしてやるのが大変なときもありますが、もうひと頑張りして少しでもやってみてください。一人で難しいと思ったら、仲間を見つけて一緒にやりましょう。「一緒に学ぶ人」を見つけて、時にはその人から教わり、時には新しく入ってきた人に教え、同じくらいのレベルの人が勉強を進めているのを見て自分もやる気になる、そういった環境に身を置くようにしてください。
プログラマーとして仕事をする人におすすめしたい本は、手前味噌になりますが私が執筆に参加した『自走プログラマー』です。本書は脱入門者を目指す開発者向けの指南書です。出版から4年が経ち、扱っているPythonのバージョンなどは少し古くなってしまいましたが、書籍の目的は最新技術の紹介ではなく、先輩プログラマーが蓄積してきた知見の共有なのでここで取り上げさせてもらいました。
本書は、プログラムは書けるけど、レビュー指摘などで手戻りが多い方や、ソフトウェア技術者として信頼され仕事を任されるために必要な設計観点を身に付けたい方、メンテナンス性の高いプログラムの書き方を知りたい方に向けたベストプラクティス集です。
この本では、「自走できるプログラマー」とは、つくりたいものが何なのかをまとめ、設計からコードにし、そしてリリースするまでの全てを1人でも計画してできる人、と定義しています。本当にすばらしいサービスやアプリケーションをつくり出すには、自走できるプログラマーが必要ですが、そんなプログラマーだけを集めてチームをつくれることはほとんどありません。また、新人が独力で技を身に付けていくには時間がかかるし、先輩から学ぶとしても見習うべき事と悪い癖の区別を付けて真似るのは難しいでしょう。そこで本書では、何人もの「自走できるプログラマー」たちの行動を調べ、共通する考え方をまとめました。彼ら彼女らが日々どのようなことにこだわり、思考を積み上げているかを学べます。
本書はPython、Django、Webアプリケーションを題材としていますが、他の言語やアプリケーションでも活かせる知識がたくさんあります。実際の現場で起こった問題とその解決方法を元にしていることもあり、扱っているプロジェクトの規模や、失敗パターンのレベル感もさまざまです。各トピックは独立していて、具体的な問題とベストプラクティス、なぜそれがベストなのかを解説していますので、読みたいところを読むだけでも十分に学べる構成になっています。
全体は120のトピックを5つの章に分けて構成しています。各章では、まず問題の背景やよくある失敗例が示され、次に実際の解決手法や最適なプラクティスが詳述されています。具体的なコード例が豊富に載せられており、これを参考にするだけで、実践的なスキルが自然と身に付きます。
例えば、「第1章 コード実装」は、Pythonプログラミングの入門を終えて普段悩みながらコードを書いている方におすすめです。良い関数名の選び方や、ソースコードのコメントに書いておくべき事、といった実装に際して悩みがちで、コードレビューで指摘される「あるある」なつまづきと改善のトピックを集めています。
また、単なる「こうすればいい」という指南ではなく、「なぜそれが効果的なのか」という裏付けも丁寧に解説されています。これにより、似たような問題に直面した時に、応用できる思考力も養えるのが特徴です。
先ほど「コードレビューで指摘」と書きましたが、本書の多くのトピックはまさに実際の現場でコードレビューをしていて何度も指摘してきた経験を元にしています。そして、指摘しているレビューアーもまた過去に指摘されたり、事故った経験を元にレビューをしているわけです。自分の失敗から学べることには限りがあるし、できることなら事故りたくはありません。本書ならそんな思いをしなくても失敗から学ぶことができると思います。
開発現場で失敗からの学びを活用できるように、自走プログラマー 【抜粋版】を公開しています。
ここでは「第4章 システム設計」の【抜粋版】から具体的なトピックの1つを紹介します。
103:一時的な作業ファイルには絶対に競合しない名前を使う
プログラミング迷子: 作業用一時ファイルが競合
-30分後-
具体的な失敗
この問題は、一時的なファイルが競合する可能性のある名前(例 :receipt-20191121-133815.pdf )で作成されているために発生します。 競合しないようにファイルの命名規則を年月日時分秒で組み立てていますが、秒レベルでの競合は考慮されていませんし、ミリ秒まで指定しても確実とは言えません。
こういった場合、複数のユーザーの操作で1つの同じ作業ファイルに上書き保存されてしまいます。 その結果、領収書ファイルをダウンロードしてみたら知らない人の領収書だった、という漏洩問題が発生します。
ベストプラクティス
一時的な作業ファイルには絶対に競合しない名前を使いましょう。 Pythonであれば tempfile モジュールを使ってください。
多くのトピックはこのような構成になっています。経験豊富なプログラマーであればいくつものトピックの事例で「これ、やったことあるな…」と失敗を思い起こさせるのではないかと思います。また、その事例での失敗経験がない方も、なぜそのコードに問題があるのかを具体的にイメージできると思います。
抜粋版の引用は自由に行ってもらってOKですので、コードレビューで「どう説明しようかな」と思ったときなどにURLを貼るなどして使ってもらえたら嬉しいです。
今回は、実践を通してプログラミングを身に付ける本を紹介させていただきました。
技術を身に付けるには実践が必要です。常識レベルの基礎が身に付いていなければ初歩的なミスを犯しやすく、簡単なことにも時間がかかります。それはプログラミング以外でも同じですが、料理や工作などと違って、プログラミングは失敗しても何度でもやり直しがきくことがほとんどです。まずは実践し、そこで不足している知識を集中的に間を置かずに学ぶ、その方が学ぶ目的が明確になり、収穫も大きいでしょう。
失敗を恐れず、むしろ失敗と成功のサイクルをガンガン回していきましょう!
関連記事
人気記事