清水川 貴之 氏

プロフィール:清水川 貴之

2003年からPythonを使い始め、そのころからオープンソースに関わりコミュニティ活動を始めた。カンファレンスや書籍、OSS開発を通じてPython技術情報を発信している。著書/訳書:『独学プログラマー』『独学コンピューターサイエンティスト』(日経BP)『Sphinxをはじめよう第3版』(オライリー・ジャパン)、『エキスパートPythonプログラミング 改訂3版』(アスキードワンゴ)、『自走プログラマー』(技術評論社) 。株式会社ビープラウド所属。一般社団法人PyCon JP Association会計理事。Sphinxコミッター。Python mini hack-a-thonやSphinx-Users.jpの運営の1人。

『The Self-Taught Programmer: The Definitive Guide to Programming Professionally』は、Cory Altoff(コーリー・アルソフ)氏が2017年に著した書籍で、2018年にプログラマーである清水川さんが中心になって邦訳し『独学プログラマー』として日経BP社から出版されました。現在19刷と増刷を重ねるほど、読者から支持されている良書です。

清水川さんは、プログラミングの第一線でご活躍されている方ですが、機械学習・AIの開発に広く使用されているプログラミング言語Pythonの普及のため様々な活動にも携わっています。
その清水川さんに、なぜこの書籍を邦訳しようとされたのか、また訳者として読者に伝えたいこと、プログラマーとして大切にしていることなどについてインタビューしました。

プログラマーを目指している方々だけでなく、専門分野が異なる方々にとっても、参考になる内容をお話しいただきましたので、ここにインタビューの内容を紹介したいと思います。

Interview

―最初に、『The Self-Taught Programmer: The Definitive Guide to Programming Professionally』に出会ったきっかけを教えてください。

 出版社の編集の方から本書の評価を頼まれたことがきっかけです。本書は自費出版のような形式で発行されていましたが、当時電子書籍版が5ドル弱で購入できたこともあり、結構売れていた書籍でした。

―清水川さんはどのような評価を出版社に伝えたのでしょうか。

 本書で書かれている内容は、2~3年で古くなるようなものではなく、長期にわたり読者から支持される内容となっています。
他の入門本では「ソフトウェアのインストール方法」や「エディタの使い方」など、プログラミング初学者が挫折しないよう丁寧に説明されています。けれどもエディタは2~3年ごとにトレンドが変わります。たとえ本の内容が良くても、古いエディタを紹介していたり、インストールするソフトウェアのバージョンが古かったりすると、読者にとっての本の価値は減退します。
本書はそういうことが書かれていない代わりに、プログラマーになるための全般的で普遍的な知識やスキルを伝えています。

 その他にも本書はPythonを中心にプログラミングについて教えていますが、Pythonの文法よりもプログラムの便利さに焦点を当てて説明し、読者の世界を広げていく内容となっています。原著は2017年、日本語版は2018年に出版されていますが、その時に書かれた内容そのままでも最新のPythonが動くぐらいの範囲内に書かれているので、特にバージョンを気にしなくても大丈夫です。

―本書の内容は著者コーリーさんが実践した独学法でもあるわけですが、清水川さんが最も賛同した部分、最も参考になった部分を教えてください。

 ひとつだけ選ぶことはとても難しく、各章にそれぞれ賛同した部分や参考になった部分があります。

 例えば第1章の「断固として継続をしよう」の部分は、仕事や学習などにもあてはまることが書かれていると思います。「プログラムをやりたい」と思って、ご自身で頑張り通せる人だったら良いのですが、継続できない人向けに、諦めずに頑張り続けるための工夫やアドバイスが書かれています。

 第2章から第22章までは、いきなり細部を解説するのではなく読者に全体を把握してもらう内容になっています。例えば、プログラミングで何かを作ろうとした時、完成させるのに100個やるべきことがあるとします。その1個1個に対し、「なぜこうなっているのか?」と深く探ってしまうと、1個を調べることに満足して残りの99個には全く手が付いてない状態になってしまう。また2個目を深掘りしていくと、恐らく100個まで完成できないと思います。
ですので、全体を俯瞰しボリューム感を把握したうえで、どこを深くやるべきなのか、完成までの期間に対して何を優先すべきなのかを理解する。それから力を入れるべきところに力を入れていくということが紹介されています。

 第27章の「本質を探る努力をしよう」の部分も、とても参考になります。100個やるべきことを上辺だけやって完成させる人もいるのですが、上辺だけで深さが足りないので、なぜそれが動いているのか作った本人が分からないのです。実際にプログラマーの中には、自分で書いたコードがなぜ動くのかを説明できない方もいます。
「なぜ動くのか」という疑問は、原理原則を調べて理解し身につけるチャンスだと思います。
 私は、全ての疑問を勤務中に解決できるとは思っていません。仕事では完成までの期間や作るべきものの要求があるので、「いったんこれ位で完成としよう」という感じで進めてみます。その上で「そもそもあそこで出てきた現象はよく分からないが、どういう仕組みなのだろう?」という疑問がわいてきます。こういった場合は、結構プライベートな時間を使って、深く調べています。
きちんと習得するという意味で「本質を探る」ことはすごく重要だと思います。

 第25章では「チームで働く」ことについても言及されています。
プログラミングの学習は自分一人でもできますが、他の人と組んでチームで働く際、チームメンバー間で知識や技術の差が出てくることがあります。例えば、コンピュータ・サイエンスの知識が全くないメンバーが入ってきた時に、基礎から教えなければいけない他のメンバーの気持ちをどう思うかなど、チーム同士でコミュニケーションをとって仕事をすすめていくためのコツなども書かれています。

―この本は、単なるPythonの入門書ではなく、採用されるプログラマー、つまりEmployabilityを持つプログラマーになるためのロードマップということですね。

 はい。プログラミングに関連する広範囲の話題を扱っているところが本書の最大の特徴です。

―結果として、日本語版も19刷発行、発行部数が合計10万部突破*と、まさにベストセラーになっている訳ですね。(*2022年10月インタビュー時点)

―清水川さんは、長年Pythonでシステム開発する仕事に従事されており、とても多忙な日々を送っているにもかかわらず、Pythonの普及活動にも従事されていますが、そもそもPythonという言語に着目して、仕事をしていこうと思った理由は何ですか。

 Pythonでのプログラミングが楽しかったからです。
 私がPythonを学び始めたのは2003年頃でした。Pythonは1993年頃に最初のバージョンが公開されたので公開から10年ほど経っていましたが、まだまだ日本ではほとんど知られておらず、海外でもそこまで知られている状態ではありませんでした。
2003年当時、私は20代後半の社会人でプログラマーとしてプログラムを書いていました。その頃はC言語や、Python系列でいうとRubyやPHPというプログラミング言語がありました。 
 元々C言語を使っていたのですが、別のプログラミング言語のPerlを使おうと思い、難しくて挫折しました。Pythonを使う機会があって触ってみたところ、コードを書きやすいと感じました。自分が思ったように書けるという達成感もあったのかもしれません。

―清水川さんは、一般社団法人「PyCon JP Association」の運営に携わっていらっしゃいますが、「PyCon JP Association」組織と活動内容について教えてください。

 一般社団法人「PyCon JP Association」は、Pythonのカンファレンス「PyCon JP(Python Conference in Japan)」を主催する非営利団体です。「PyCon」の本家は米国にあり、各国で「PyCon xx」が開催されていますが、それぞれの組織は独立しており、独自の運営が行われています。
 日本においては、PyCon JPイベントを1年に1回開催しており、そのイベント運営は一般社団法人PyCon JP Associationからイベント運営メンバーに委任しています。一般社団法人のメンバーや、イベント運営メンバーはすべてボランティアで運営されています。

 「PyCon JP Association」が直接運営するイベントもあります。Python Boot Camp(通称PyCamp)は、Python入門者にハンズオン形式でPythonを教えるチュートリアルイベントです。日本各地で行われるPyCampは、その地域で開催したい方が地域スタッフとして立候補してもらい、地域スタッフが運営をします。PyCon JP Associationからはイベントの開催マニュアルの提供や、講師派遣、必要経費の支払い、参加費の管理などを行います。私も講師として2017年から日本各地を訪問しています。

 PyCampの開催目的は、各地域でPythonを学びたい方にその機会を作ること、派遣した講師とその地域のスタッフやイベント参加者の方々が交流できる場を作ることです。東京や大阪の大都市ではPythonを学習している方と交流できる可能性があります。でも地方へ行くと、誰がPythonをやっているのか分からない、そもそもPythonに限らずプログラミングをやっている人が何処にいるのかも分からないという状況があると思います。
 Pythonにしろ何にしろ、自習だけではモチベーションは維持しません。やはり仲間同士で教え合ったり、誰かが何かをやっている姿に、インスパイアされて自分も試してみたりと、1人では困難な学習や様々な体験が他者と交流することで可能になり、モチベーションを維持できます。
 ですので、このチュートリアルイベントをきっかけに、その地域で新しいPythonコミュニティが立ち上がって欲しいと思っています。

―プログラミング書籍の執筆や英語書籍の翻訳、PyCon JP Associationでの活動など、清水川さんは積極的に活動されていらっしゃいます。これらの活動は清水川さんご自身がやりたいと思ってやってきているのですね。

 そうですね。仕事とプライベートという垣根が私にはあまりないですね(笑)。現在は子育てなどもあり、プライベートな時間の振り分けが以前と少し違います。以前より会社の業務以外の活動にあてられる時間は減っていますが、それでもPyCon JPのようなイベントがなくなってしまうと、同じような境遇の人たちと話す機会がなくなってしまいます。そのような場所がなくなってしまうのは、一番つらいことだと思います。

 最初に翻訳を手掛けたきっかけも、自分が欲しい情報が日本では手に入れられなかったからですね。知人に紹介されて英語で書かれているプログラミング書籍を読んでみたら、自分が欲しい情報がとても詰まっていたんです。これは自分だけでなく他の人も絶対興味があるだろうと思い、何人かと一緒に翻訳をすることにしました。だから、「これを伝えたい」という強い気持ちがあってやっていますね。

―デジタル関係の書籍を読んでいると、日本と海外とでは歴史というか、これまでの蓄積の違いをとても感じます。日本語でも良い書籍はありますが、とりわけ英語で書かれた書籍には良いものが多いと感じています。

 そうだと思いますね。元々の情報源が英語から発信されているので、英語圏の人たちは母国語で読んで身につけられますが、日本人の場合、なかなかそうはいかないです。
書籍の場合、どれだけのボリュームで売れるかということも挙げられると思います。日本語で書くと市場は日本だけになりますが、英語の場合は市場が世界になり、市場規模が全く違いますからね。
 最近はこうやって日本語に翻訳して再展開する人がどんどん減ってきてしまっているみたいです。そうなってしまうと、多くの人が日本の中に閉じこもってしまうことになり、日本語の情報だけインプットしている人の世界は、さらに狭まってきてしまう感じはしますね。

―コーリーさんは、自分の独学法が「一般にコンピュータ・サイエンスで教えられるのとは正反対である。」と告白しています。清水川さんは、この点についてどのようにお考えですか。 プログラマーを目指す学生は、大学で理論を学び、大学外の様々な民間スクールや独学でプログラミングを学ぶと言った努力が必要なのでしょうか。

 何かを新しく学び始めるとき、基礎を学ぶことはとても重要だと思います。未経験の分野では、その分野の常識や言葉が分からないだけでつまずいたり、誤解して何時間も苦戦したりすることがよくあります。だから「基礎から学びたい」と考える人もいると思います。けれども私は基礎をしっかり身につけてから始めようという気にはなりません。
私の場合、プログラミングであれば「簡単でも実践的なもの」を作って、完成までの流れを把握してから、そこで必要になった基礎知識をその都度寄り道しながら学ぶ方が楽しめます。

 プログラマーを目指すのであれば、実際に何かを作ってみてください。それができる環境にご自身を置いてください。それができるのであれば、独学でも、大学の授業でも、民間スクールでも、サークルでも、プログラミングのアルバイトでも何でもかまいません。
その上で、作ろうとしているものを完成させるために必要な理論はしっかり学んでください。大学は理論を学ぶのには良い環境ではあるかと思います。

―AIがコードを書けるように進化してきています。そのような中で、今後プログラマーを目指す学生達にアドバイスがあれば教えてください。

 AIというか、コンピュータが代わりにプログラムを書いてくれて動くならそれで良いという分野も当然あると思います。ただ、プログラミングができない人だけでAIを使用した場合、ちょっとした問題を修正するなり機能を付けるなりといったことは、同じAIに任せるしかないという状況になり、完全にブラックボックス化になってしまうと思います。本人がそれで良いのであれば良いのかもれませんが、コンピュータに任せきりで完成した物を使用する分野のほうが少ないと思うので、きちんと中身を知っておいた方が良いと思います。

 このような話は、プログラミングが認知されるようになる前から何度も繰り返されてきていると思います。
 プログラミングは、パンチカードに穴を開けてコンピュータに動作を指示することから始まっています。原始的なプログラムは、コンピュータに理解できる様に人間が動かし方をパンチカードに翻訳し指示を出すという仕組みでした。
その後、パンチカードがアセンブラに置き換わり、C言語が登場して、人間が分かりやすい言葉で書いたコードをアセンブラに変換してプログラムを動かすという仕組みになりました。
PythonはC言語で作られていて、C言語をラップしてPythonという使いやすい言語にしたものを人間が使っているんです。そういう抽象化と隠蔽の歴史がどんどん積み重なってきて今がある状態です。ですが、「Pythonをやる人間はC言語を知らなきゃ駄目だ」というつもりは全くなく、Pythonを使っていて満足であればそれで構わないけれど、C言語も知っておくと何かあった時に中身に手を出せるし、理解することができます。
GUIプログラミング(GUI:グラフィカル・ユーザー・インターフェース)という、プログラムコードを書かずにグラフィカルな画面をマウス操作してアプリケーションを作る方法もあります。GUIプログラミングも中身を知らなくても使えますが、中身を知っていればもっと扱いやすいです。AIも同じことが言えるのかなと思います。

 コンピュータにやってもらって楽ができることはどんどん取り入れていけばいいと思います。ただ、アセンブラからC言語、Pythonと移ってきた世界で、プログラマーの需要が無くなってしまったかというと、全くそんなことはありませんでしたので、AIがプログラムを書くならプログラマーは要らないなんていうことにはならないと思います。

―最後にプログラマーを目指す方たちにアドバイスがありましたらお聞かせください。

 先ほどもお話しましたが、プログラマーを目指すのであれば、実際に何かを作ってみてください。作るものは本当になんでもいいと思います。今はコンピュータなしでは何もできない時代になってきています。なので、仕事であれば「ここが自動的にできると嬉しい」と思ったときに、Excelのマクロを書くのもいいですし、GoogleスプレッドシートであればJavaScriptを使ってそういうコードを書いてもいいと思います。

 以前、気温の変化を知りたくて温湿度計を自分で作ったことがあります。小さい電子部品を買ってきて組み立てて、そこにプログラムを書き込みました。基板がWi-fiに繋がるようになっているので、10分に1回プログラムが起動し、気温と湿度を収集したデータをWi-fiでクラウドに飛ばすという仕組みで作りました。
一般的な製品でも、収集したデータは専用アプリから見ることができます。ただ、その製品を作った会社の専用ツールで見れるだけで、データを取り出して自分で使いたいと思ってもできないことが多いです。ベンダーロックインとよく言われます。
でも自分で作ることで、収集したデータを自分が使用できます。完全に自分のコントロール下で何かを作るのは個人的には楽しいですし、それをやるためには電子部品の何が必要かとか、プログラムをどう書いたらいいのかといった色々な細かいことを知らないといけないので、それなりに試行錯誤と情報収集をして作りました。温湿度計1個作るだけでもやることが多いですよね。プログラミングはこういうことができる世界だと思います。

 できるということを分かった上で、ちょっとこういうことをやりたいというものを具体的に作ってみる。何かを作ろうとアウトプットすることが、技術を身につける一番の方法だと思います。その上で、作ろうとしているものを完成させるために必要な理論はしっかりインプットして学んでください。

 また、人に質問したり、逆に教えたりすることにもチャレンジしてみてください。質問しようとすることで自分の知識ややりたいことを整理することができます。教えようとすることで自分の理解度を測ることができます。うまく説明できないところは自分が理解できていないところなので、学ぶチャンスだと考えると良いと思います。

―今回インタビューを通して、プログラマーの世界でも、人と人とが協力してやっていく上で大切なこと、自ら積極的に学んでいくこと、プログラマーとしてのセルフマネージメントの大切さについてもこの本の中に書かれていて、インタビューでは清水川さんがご自分なりの解釈も入れて説明してくださいました。

プログラミングはこれからの社会で生きていく人たちにとって、教養のひとつとなっていることは間違いないと思います。プログラマーを目指す人にとって、何かを作りたいという好奇心や意欲はとても大切なことなのだと、清水川さんのお話から教わりました。このことは生涯学習が求められるこれからの時代では、すべての人にとっても大切なことだと思います。本日は貴重なお話をありがとうございました。