プログラミングと書くこと
メンター募集の内容をみていると、未経験からプログラマーを目指している方がたくさんいることに気づきました。誰でも最初は未経験なのでそれ自体は普通です。私もジョブチェンジする前はプログラマーではなく、未経験からプログラマーになったと言えます。
私の場合、プログラマーとして働き始めてからすでに10年以上経ちました。いくつか自身の経験で大事なこと、役に立ったことなどが蓄積できてきました。本稿では 書くこと をテーマにプログラミングとの関係を書いてみます。
書くスキルを身につける
Lisp ハッカーとして著名な竹内郁雄氏が 国語力とプログラミング力の関係 解説編 の記事で次のように発言しています。
日本語、より正しくいうなら、人間同士のコミュニケーション手段である自然言語できちんとした文章が書ける人じゃないと、ちゃんとしたプログラムあるいはソフトウェアは書けない
この発言は、私の経験とも一致します。仲のよい友だち、一緒に開発プロジェクトで働いた同僚たち、プログラミングコミュニティの知人など、私が今まで出会ってきたプログラマーで文章を書くスキルとプログラミングスキルの多寡は相関があるように実感しています。
もちろん、それを測る基準があるわけでも統計を取ったわけでもないので定性的な感覚でしかありません。しかし、論理的に考えてもその根拠はみえてきそうに思います。例えば、日本語もプログラミング言語も言語というカテゴリで分類できます。言語というカテゴリから共通点を洗い出してみましょう。
- 文法があり、正しい構文で書かないと意味を取れない
- 意図があり、目的を果たすための手順がある
- 抽象的な概念を具象的な文字やコードで実現する
私がパッと思いついた内容をあげましたが、それ以外でも構いません。文章を書くのも、コードを書くのも同じ能力やスキルを必要とする場面が多々あるはずです。そのため、文章を速くうまく書ける人は、プログラミングを行う場面でも、既に身につけているスキルを駆使できているのかもしれません。
ここで逆説的に考えてみましょう。
プログラミングスキルを高めるために日常生活の中で文章を書く機会を多く設けるのです。例えば、ブログや日記を書いたり、日々の活動記録をメモしておくなど、身近なところから始めるとよいです。目的は文章を書くことにあるのですから、Web 上で公開する必要もありません。
大事なことは当たり前のように日々の生活の中でたくさん書くことです。そうやって生活しているうちにいつしか、自然に速くうまく書けるようになっていくはずです。
スキルの習得には個人差がある
MENTA や SNS などで未経験からプログラマーになって活躍している人はすぐに見つかります。これは 生存者バイアス と呼ばれるもので成功した人がどうしても目立ちます。例えば、数ヶ月でフリーランスとして独立したといった情報です。中にはそういう人たちもいるでしょう。しかし、うまくいっていない人たちも世の中にはたくさんいるのですが、そういった情報はあまり発信されないように思います。
得意・不得意など、個人には能力差があるので同じことを学んでも3ヶ月で習得する人もいれば、6ヶ月かかる人もいるでしょう。仕事では納期という制約があるため、時間は大きな要素の1つになりますが、学ぶという過程においては時間はあまり大きな要素にならないと私は考えます。
とくにプログラミングの文脈で学ぶことは、計算機科学をはじめ、様々な技術体系や構成要素があり、非常に多岐に渡ります。初学者のよくある質問に「一人前になるにはどのぐらいの時間が必要ですか?」という質問があります。私には何ができれば一人前という基準を満たすのか、そして自分を例にとっても個々の技術の習得にどのぐらいの時間をかけたのか、正直よくわかりません。
従って、プログラミングについて学ぶことに関する私の答えは1つです。生涯ずっと学ぶことになる。その時、その時の状況で必要なことを学んでいけばよいでしょう。
閑話休題。特定の技術を学ぶのに数ヶ月や数年の個人差があったとしても、これから何十年も学んでいくのを考えれば、習得時間に個人差があってもあまり大きな要素にはなりません。速く学ぼうとすることよりも、自分が理解できるまでちゃんと学ぶことを重視した方が結果的に速く学べるように私は思います。
長く続けているとわかるようになる
知人から言われて納得した言葉です。プログラミングもそうです。
私は過去に SICP 本を読もうと挑戦して挫折していた時期に なんでも継続 という記事をみつけました。初学者の方は読まなくてもよいです。
計算機科学に 継続 という概念があります。初学者がこの記事を読んで何のことを書いているのか、自分で理解できるようになるにはかなりの時間がかかると思います。初めてこの記事を私が読んだとき、プログラマーになって2-3年程度だった気がしますが、全く理解できませんでした。
いまもちゃんと理解できているかというとわかりません。プログラミング言語の中には、コルーチンを言語機能として提供している言語があります。コルーチンは継続の実装の1つです。私が Python でコルーチンを学び始めたとき、コルーチンのサンプルプログラムとして Trampoline のサンプルコードを動かしてみて、これが何の役に立つのか、すぐには理解できませんでした。
それから何年か経ち、実際の業務で継続を適用すると便利な状況や場面を経験しているうちに、意識的に学ばなくてもなんとなく分かるようになっていました。
少し話がずれました。ここで言いたいことは途中でやめずにずっと学び続けることです。前節でも書いたように頑張り方は自分のペースで構いません。いまわからないことで諦めてしまわず、いつかわかるようになることを期待して続けるようにしましょう。
まとめ
プログラミングに限らず 書く というスキルには汎用性があります。どんな仕事をするにしても速くうまく書けると情報共有や意思疎通を迅速に正確にできます。特定のフレームワークやライブラリなどはその時点での流行りがあり、多くのケースで数年で廃れてしまいます。
しかし、プログラミングを人間が担う上で、コードを書かなくなることは、少なくとも数年といった時間軸で訪れる未来ではありません。アウトプットが少ない初学者の方は、学びのために書くことを意識してやってみるとよいのではないでしょうか。