プログラマーの雇い方

日本では、やっと小学校や中学校でプログラミング教育を始めようとしているが、日本が海外から、特にアメリカから、ソフトウェアで大きく遅れを取った理由を述べる。

コンピュータやインターネットの普及で、安く、短時間でソフトウェア開発が出来るようになった。創業と、イノベーションで制約があるのは、初期投資となる開発費であり、その節約のためには、設備投資と人件費を安くしなければならない。アメリカが日本のような輸出主導の製造国に市場を奪われ、他の分野に進出せざるを得なかったのは無理からぬことだ。彼等は、初期費用の安価な、インターネットやソフトウェアに活路を求めたのだ。

クリントン政権下の情報スーパーハイウェイ構想以後、この分野でアメリカでは創業が相次いだ。それは、ベンチャー起業支援が充実しているからだ。更に、創業者や人事担当者等の役員にプログラマー出身者が多いことも忘れてはならない。

日本ではどうか。

政府は大企業にシステム開発を随意契約で発注する。その元請けは仕事の殆どを下請けや二次下請け、つまり孫請けへ丸投げする。それが寡占化の進む日本の現実だ。彼等がそのようなことをするのは、自前で優秀なプログラマーを雇えていないことにも一因がある。サーバ管理やプログラミングの出来ない国家公務員の発注者にも問題がある。年金やマイナンバーを知る者ならば、その、お粗末さを味わっているだろう。あらゆるシステムでオープンソース・ソフトウェアを活用するか、オープンソースで発注すれば良い。デジタル庁の創設により雇われるであろうハッカー公務員により解決されるか期待したい。

日本の流通業では「中抜き」と呼ばれる問屋等の中間業者の排除が進んだ。同様に、政府は公共サービスの構築を発注する際に、この手法を用いて、「丸投げ」の元請けを「中抜き」すべきだ。 政府は即戦力としてアウトソーシングを増やしつつある。しかし、外部委託といえば、すぐに人材派遣会社に頼もうとする。データサイエンスに限定すれば、KaggleSIGNATEのようなクラウドソーシングのコンペティションによる開発手法は、個人プログラマーへの直接発注を可能にするのだ。報酬の支払いについても、PatreonGitHub Sponsorsを活用すべきだ。 GitHub等の開発支援サービス業者に提案したいのは、プロジェクト開発支援のみならず、それを用いた創業支援も行って欲しいということだ。例えば、ソフトウェア、CADデータ、文書データ等を用いて事業化したい場合、社員や出資者を募ることが出来るようなサービスを用意して欲しい。

最近はプログラマー出身の経営者が日本でも増えた。だが、未だに以下のような募集要項を目にする:

  1. プログラミング実務経験何年以上

  2. 理系出身者

  3. TOEIC等の英語の試験の高得点者

これらのような募集要項に何の根拠があるだろうか?職歴は、面接に受かったというだけの証明だ。実務能力とは関わりがない。文系か理系か、プログラミングに区別があるだろうか?挙句の果てには、プログラミングに資格云々まで口にする人までいる。

プログラミングに数学や統計学の知識が必要な分野もある。それは事実だ。ノイマン型なのだから、プログラミングの考え方に、数学や記号論の影響があるのも事実だ。だが、プログラミングは数学そのものではないし、文系出身者が全く数学を知らないと信じこむのは何故だろうか?そもそも、独学のプログラマーに学歴は不要なのだ。

例えば、複雑系経済学では、経済モデルの意思決定にシミュレーションを利用するから、LCS等のアルゴリズムについて知らなければならないし、統計処理でグラフも表示する。当然、それらの知識が必要だし、論文に目を通さなければならない。そもそも、経済学は、特に理論は、数学を知らなければ理解できない。

科学には様々な視点が必要だ。基礎研究も応用もある。Artificial Neural Networkは神経に見立てるので、当然生物学の影響を受けただろう。Deep Neural Network (DNN)が最近、目覚ましい成果を挙げている。一から生み出すものばかりでなく、複雑系、data science、machine learningでは、様々な研究の成果を組み合わせて新たに生み出すものもある。Deep learningでは、Convolutional Neural Network (CNN)、Long Short-Term Memory (LSTM)、Generative Adversarial Network (GAN)、seq2seqやTransformer、GPT等が次々と生まれ、企業のサービスで導入されつつある。

現在のプログラミングはオブジェクト指向が主流だ。インスタンス作成で引数を渡したり、クラス継承で一部だけ上書きする能力が問われる。その場合にもポリモーフィズムでメソッドなどの書き方が決まっていることが多い。PythonやRubyのように、パッケージ管理がしっかりしていて、オープンソースで開発が行われている言語は、コードを再利用しやすく、これらの開発手法に向いている。呼び出し方や拡張の仕方を知っていれば、例えばdeep learningのpre-trained modelsを呼び出せば、かなりの水準のコードが書けるのだ。

プログラミングにおいては数学の概念を借りてきているから、確かに数学を知っていれば役立つことはあるだろう。見えてくるものもあるだろう。だが、全てが数学に関わりのある分野ばかりではない。様々な応用分野があるのに、文系や理系の区別があるだろうか?そのようなことを口にする人々は、本当にプログラマーだろうか?彼等は、自社に優秀なプログラマーがいても、その存在に気付かないだろう。

学習段階において、From scrachは確かに重要だろう。だが、共同開発を前提に設計されたソフトウェアでも必要だろうか?機能を限定し、他のプロジェクトからimportできるソフトウェアは重宝がられるだろう。libraryやframeworkを書く人々がいなければ、アプリケーションばかり書くプログラマーは困る。何もかも一からやり直し、自前に、こだわることに何の意義があるのか?

私だったら、募集要項には次の事柄を重視する:

  1. GitHub等の開発支援サイトでのアカウント名と、開発に携わったプロジェクト名

  2. 得意な言語と、得意分野

  3. 知り合いのプログラマーの評判

  4. モデレーターやメンター等の、オープンソース・ソフトウェアの開発プロジェクトでの役割

開発するソフトウェアの用途により、必要な言語がいくつも増えたり、関連する知識が増す。これまでに似たようなソフトウェアの開発を手伝った経験があるなら、それらの知識を吸収しやすい。

笑われることを覚悟の上で、ここからは私の経験を書こう。

私は大学卒業時に就職できず、職歴がない。大学院に進学した後、リクルートスタッフィングという人材派遣会社に登録し、その研修を受けた。子供でも知っているような表計算ソフトの使い方の研修だ。彼等は、私に職歴がないと知ると、控えの部屋でゲラゲラと笑い、便所ではフンと鼻で笑った。何度仕事に応募しても、決して仕事を回してくれなかった。

植草益氏が、学会で発表をしたことのない者は博士論文を審査しないと決めたせいで、私は博士号を取得できずに東洋大学大学院を退学したが、その後、パソナテックという人材派遣会社に登録した。9時に来るよう電子メールの案内が書かれていたので、その通りにしたら、早く来すぎたと言ってビルの玄関まで戻され、寒い中を1時間待たされた。自営業しか職歴がないと答えると、リクルートスタッフィングの社員と同じく、彼等も私に侮蔑の言葉を浴びせ、控えの部屋で同じようにゲラゲラと笑っていた。当然、彼等も私に仕事を回してはくれなかった。

経済ニュースと経済学は同じではない。経済学は数学を多用する。応用研究だから、様々な分野の基礎研究が生かされる。学際的な視点で、統計学、会計学、数理科学、computer scienceの利用や物理学の概念を取り入れることなどは、以前から行われてきた。「意欲のある者は文系でも構わない」と募集要項に書かれていても、信じてはならない。浜松町にある東海ソフトの面接では文系は営業だと言われた。

最後に、私が就職活動をしていた頃、新宿にあるJR東日本情報システムの社長に言われた言葉で結ぶ。「文系の学生が何故ここにいるんだ?」