そもそもあんまりそういう助言というものをもらった記憶がないなあ。人の話を聞かないタチで聞き流していたのかもしれないが。
英語で書くか、日本語で書いてから翻訳するか
英語よりも日本語……という話で思い出したけど、大学院生のとき、英語で文章(論文とか)を書くときの指導として「なるべく最初から英語で書いてなれたほうがいい」という指導と、「日本語でまず書いてみて論理構成を検証するべし。それから英語に訳すといい」という指導があるようにおもう。で、自分はわりと後者を聞かされていたが、これは誤りだった……というと語弊があるが、自分には合わなかったな、という結論をえた。
後者の意図はわからなくもない。構成がしっかりしているか、話の理路がたっているか、をただしく検証するべし、というのはただしいし、英語が苦手な状況でいきなり書き始めても語学力の低さに足を引っ張られてそういうことがうまくできないことがある、というような話だったと記憶している。それはたぶん正しい。でも日本語で書いてしまってから英語に書き直そうとすると、どうしても日本語の言い回しに引きずられることがあるので、あんまりうれしさがないというのが自分の感想だった。構成とかは、文章で書き下すのではなく、もっと別な方法で検証するのがいいんじゃないだろうか。それよりは英語の論文を読んだりして、言い回しをまねたりして書いていくのがたぶん速いし、上達も速いんじゃないか、という気がする。
その後外資系に就職して仕事のコミュニケーションがもっぱら英語のみになると、まあ日本語で書いて訳すとかやってらんなくなる。そうやって考えると、英語で書く機会が少ないような、そして英語が苦手な学生に対してだけ一時的に有効なテクニックなのかもしれない。でもけっこう世に見られる指導な気もする。まあどっちみち検証されたなにかではないので、個人の感想の域を出ないわけだけど。
外資系はすぐクビになるという話
karinoさんが挙げているこれも、そういえばよく話に聞いていた気がする。実際に入ってみればそんな簡単にクビになることはない。いやまあローパフォーマーがクビになるとかあったりするだろうが、それでもなぜか世の中に出回っているような、異様な気軽さでクビになることはないだろう。そういえばQuoraにもこういうタイプの質問がたくさんあり、そのうちのひとつにわたしはマジレスしたことがある。ただ、こういう質問へのほかの生々しい回答(たまにある)を見ると、まあ職種や業態による面もあるのかもな、という気はする。会社のカルチャーもある程度は関係していることだろう。が、すくなくとも自分の体験としては、そうホイホイクビになるわけでもない。プログラマは専門職で替えが効きづらいし、クビにしてもあたらしいやつを見つけるのも大変だしね……。
Lispをなぜ学ぶか
もうちょっと技術者っぽいネタも入れておこう。
自分が大学院生のころにポール・グレアムの文章がはやっていて、自分も『ハッカーと画家』買って読んだりして大いに影響をうけた。さて有名な「普通のやつらの上を行け」には、エリック・レイモンドの「ハッカーになろう」(これも学生時代に読んだなあ)を引用する一節がある(ところで「ハッカーになろう」、地味に改定が進んでいていつのまにかJavaじゃなくてGoを勉強しろってなっている。邦訳も追随しているのはすごいしえらい)。
LISPは、それをものにしたときのすばらしい悟り体験のために勉強しましょう。この体験は、その後の人生でよりよいプログラマーとなる手助けとなるはずです。たとえ、実際にはLISPそのものをあまり使わなくても。
これはまるでラテン語の勉強について語っているみたいじゃないか。ラテン語を勉強しても就職には役に立たない(まあ、古典の教授を除いては)。でもそれはあなたの心を豊かにし、英語なり何なりの実際に使う言葉をよりうまく使えるようになる。
でもちょっと待った。このメタファーをそこまで敷衍していいのか。ラテン語を勉強しても職が無いのは誰もそれを話さないからだ。ラテン語で何か書いたって、誰も読んじゃくれない。でもLispはコンピュータ言語だ。コンピューターは、何であろうとプログラマが選んだ言語を話すんじゃないか。
さて、わたしはポール・グレアム派だったので、Lispがいい言語なら使うのがいいというのをそのまま受け入れていたし、Lispはパワフルなすごい言語なんだ、というのを真に受けていた。が……けっきょくこの年になっても、仕事でLispを書いたことはないし、趣味でもそんなにLispをやってはいない。すごい言語ではあるだろうけれど、使う機会はなかったし、今後使いたいかというと、そうでもない気もする。今では私はエリック・レイモンドの言説に軍配を上げる。
ポール・グレアムが間違っていた、というよりは、それよりは書かれた文章が時代を反映しているという話なんじゃないかという気がする。エリック・レイモンドが「ハッカーになろう」を書いたとき、書いたコードはだいたい、使う場所にインストールされるようなものだったんじゃないか。そういう世界だとLispで書いたプログラムよりは、どこにでもあるようなPerlやPython、あるいは微妙な環境の違いを吸収しつついろんな環境でビルドできるCやGoなんかがいい、という話になる。いっぽう、ポール・グレアムが「普通のやつらの上を行け」を書いたとき、念頭にあったのはサーバプログラムだった。クライアントからはブラウザなりなんなりでアクセスできればよく、必要なプロトコルをしゃべれればサーバの実装言語は比較的自由がきく。だからLispみたいな言語で書くのがいいんだという。
ところがいまはまた状況が変わってきていて、この言説の正しさを脅かしている。具体的には、
- サーバサイドのソフトウェアは大規模化し、フレームワークの重要性が上がった。必要な機能をふくむフレームワークを作るのは大変で、サーバサイドで使う言語は人気があってちゃんとメンテされたフレームワークのある少数の言語に集約されてきた
- 一方クライアント側(フロントエンド側)もそれなりにちゃんと作らないといけなくなって、そこでまともに使えるプログラミング言語は限られている(Java / Kotlin / Swift / Javascriptなど)
サーバ側については、マイクロサービス・ポリグロット化が進んで言語選択の自由度が上がる機運もあった。が、けっきょくあんまりにも多様すぎるとメンテ不能になるので、プログラミング言語は多種使えるにしてもそこそこの数に絞るのが普通という方向性になってきている気がする。そうやって時代の変遷を経て、今はまたエリック・レイモンドに分があるフェーズに来ている。
今後また揺り戻しはあるだろうか? フロントエンド側はウェブならたとえばWebAssemblyが発展し、バックエンド側はコンテナ化・サービスメッシュ化によって、なかで動くプログラミング言語の自由度が高まる可能性は、まああるかもしれない。でもまあ、それでLispが復権するかは疑問かなあ……。
ところでそもそも今でもLispってやったほうがいいの? なんで? というのも悩ましいところ。ここでいう「悟り体験」ってどのレベルの話なんだろう。関数プログラミングという程度の話なら、ほかの言語のほうが今はむしろいいのかも、とすら思う。が、たとえば『On Lisp』(これもポール・グレアムだ!)でも読んで勉強してみれば、おもしろトピックがほかにもあって楽しめるし啓発されるしいいことあるんじゃないの、とは思っている。