プログラマーは理系の仕事?

f:id:kyart:20210717010540j:plain
数学は必要か?

プログラマーは理系の仕事?

イメージとして多くの方が持っているのが、プログラマーは理系の人がやる仕事だという先入観です。

  Listening.prototype.off = function(name, callback) {
    var cleanup;
    if (this.interop) {
      this._events = eventsApi(offApi, this._events, name, callback, {
        context: void 0,
        listeners: void 0
      });
      cleanup = !this._events;
    } else {
      this.count--;
      cleanup = this.count === 0;
    }
    if (cleanup) this.cleanup();
  };

例えばこんなコードのサンプルを見ると、複雑な数学や物理の公式などを駆使しているように見えますよね。実際のところどうなのでしょうか?

分野によっては理系の素養が大切

数学が得意であると数理な場合や、そもそも特定の分野のプログラミングができないということがあります。例えば今流行りのAIなどのプログラミングを行いたい場合は、配列や統計などの数学の知識が必要です。Σとかの記号が全くわからないようだと、大した仕事はできないでしょう。
ゲームプログラミングも、趣味で行うだけでなく任天堂セガなどのガチなゲーム開発会社にプログラマーとして就職を目指す場合には必須と言えます。
最近セガがゲーム業界における数学の仕様に関するノウハウを公開して話題になりました。
techblog.sega.jp
その他株取引関連、宇宙にロケットを飛ばしたいなど数学や物理の知識が大いに必要です。

文系プログラマーの仕事が圧倒的に多い

しかしながら、現在仕事の需要が多いウェブ業界を見てみると、ガチガチの理系出身の人ばかりかというとそうでもありません。そうではなく、ストーリー性をきちんと把握できる人のほうが求められていると言えると思います。
例えば単純な会員登録サイトを例に取ってみましょう。どんな情報を登録する必要があるでしょうか。

  • 名前
  • 電話番号
  • メールアドレス
  • 住所
  • 生年月日
  • ログインユーザー名
  • パスワード

などがすぐに思いつく項目です。ではそれらを文字入力のフィールドで入れてもらって、それを会員情報データベースに登録するだけで良いでしょうか。
単純に考えるとそれだけでは困ったことになります。
例えば名前のふりがなは必要でしょうか。
姓と名を分ける必要がありますか?
メールアドレスはちゃんとメールが送れるでしょうか?
パスワードに使える文字は英数字だけにしますか、記号にしますか?

このように単純に見えることでもきちんと詰めていかないと行けない事柄がたくさんあります。これらは要件定義と呼ばれるものです。チームによってはそのような細かい詰めをSEなどの別の担当者が行い場合もあります。
それでも詰めきれていないことを質問しなければなりません。

例えば生年月日はカレンダーで選ぶ事になっているとします。では初期設定では何月何日を表示しますか?今日の日付を表示しているカレンダーから数十年前の自分の生年月日を選択するのは結構手間です。では生年月日はプルダウンメニューから選んでもらったほうがよいでしょうか?

このように会員登録という単純そうなことでも、必要になってくる手順や道筋を言語化する力、それが現代のプログラマーに求められているのです。