ソフトウェアエンジニアとして働くということ

先日、ソフトウェアエンジニアリング協会の勉強会に参加してきました。そこで話されていた内容がとても興味深かったのでまとめておきます。

ソフトウェアエンジニアだけにとどまらず、ある分野の専門家として仕事をするとはどういうことかが解像度高く語られていました。 専門家としての目的は何か。その専門家となるために必要となる知識はなにか。その知識の特性とは何か。その知識を得るための方法はなにか。など多くのお話がありました。 以下、専門家とその目的という観点からスタートし、ソフトウェアの専門家として何が必要でどうそれを習得すべきかという話まで紹介したいと思います。

専門家には目的がある

まず、ある分野の専門家が仕事として何か活動を行う場合、その専門技術を使う目的が存在します。 例えば、「人名を救う」という目的が存在するとします。医療技術を用いてこの目的を達成しようとする専門家集団は”医者”と呼ばれ、一方で同じ目的を火事現場において達成しようとする専門家集団は”消防士”とよばれます。 このように、仕事という場にあって、専門家というのは何か達成したい目的があってそのために特定の技術を使う人のことを指します。では、ソフトウェアエンジニアの目的とはなんでしょうか。

ソフトウェアエンジニアリングの目的は?

まず、エンジニアリングの目的を「自然科学や人文科学の知識・技術を用いて、公共の効用のために事物や環境を構築すること」としてみます。そうしたとき、この目的を特にソフトウェアの技術を用いて達成しようとする専門家集団を”ソフトウェアエンジニア”と呼びます。 ここで疑問なのが、一体どの程度の知識と技術を持っていれば目的を達成するためのソフトウェアエンジニアという専門性が認められるのでしょうか。

専門家と認められるには”常識”が必要である

ある分野の専門家として仕事をするための最低限の条件は、その分野における”常識”があることです。その分野において当然持つべき知識・技術が欠けている人を専門家とはいえないでしょう。(この"常識"という言葉はとおても面白い性質を持っているのですが、それは後述します。) ここで、専門家になるための"常識"の身につけ方は専門分野の特性によって大きく二種類に分けられます。

認定型専門家

認定型専門家とは、何かしらの資格をもって認定され、他の方法ではなることができないタイプの専門家です。医者・弁護士・会計士などがこれに当たります。 認定型の特徴は、すべての人がある程度正規化された教育課程または試験を通ることを求められるため、資格を得た時点で概ね”常識”を身につけられることです。したがって、他の専門家は相手がはその資格を有しているか否かでである程度”常識”があるかどうかが判断できます。 まとめると、認定型専門型の”常識”を身につける方法は、基本的にその資格試験を頑張ること一択となります。

非認定型専門家

非認定型専門家とは、特定の資格によっては認定されない専門家を指します。ソフトウェアエンジニア・カメラマンなどがこれに該当します。非認定型の特徴は、自称ができる点です。つまり、肩書によってその人の専門性を測ることが原理的にできません。そもそも"常識"とはだれが決めるのでしょうか? それは、すでに活躍している専門家達が決めます。非認定型においては"常識"は専門家集団の内部に閉じているという性質があります。 非認定型の専門家になるための"常識"を身につけるためには、その専門家になにが"常識"であるかを聞く必要があります。 ここで、"常識"とは一体何なのでしょうか。専門家に質問するとき、常識をどのように定義すればいいのでしょう?

常識の性質

ある分野の"常識"を考えるとき、面白い性質が2つあります。

相手がそれを分かっていることが分かる

ある分野の"常識"が持つ性質は、同じ分野にいる別の人と相対したときに、「相手がこの知識を知っていることが分かること」です。 例えば、日本で教育を受けた日本人が現れたとき、相手がひらがなを知っていることは何となく自分にもわかります。"大分県"を「オオイタケン」と読むであろうこともわかります。 言い換えると、同じ分野の8~9割の人が、他の8~9割の人も知っているであろうと思うことが常識となります。

分かっていることについて特別な感情をもたない

2つ目の特徴は、"常識"はそれを知っていることに対して何か特別な感情を抱くことがないという点です。 例えば、私達日本人は50音すべてを発音できることに何ら特別な感情は抱きません。当然もっているはずの"常識"だからです。逆に、日本語を勉強し始めたアメリカ人は正確に50音を発音できることに達成感や優越感を抱くかもしれません。 ある分野について知っていることが当たり前であるときそれは"常識"となります。

一つ0だと全部0

3つ目の特徴は、ある分野の"常識"が一つでも欠けていると、他の"常識"をいくら知っていても無意味になるということです。"常識"を評価される場合、その評価は一番弱い"常識"に律速されます。 例えば、多くの日本語の語彙と難しい漢字を知っていて、喋るのがペラペラだったとしても、カタカナを一切知らない人は日本人としては”常識がない人”と認識されてしまいます。 仕事においてもこれは同様で、求められる"常識"はすべてをカバーしていなければならず一つでも足りていない場合は"常識不足"と判断されてしまいます。

以上の性質を考慮すると、非認定型専門家になるために"常識"がなにかを質問する時は以下のように聞くと必要な情報が手に入りやすいはずです。

「専門家集団で全員ができることはなんですか?その知識を得るための標準的な本はなんですか?」

このように聞くことで、"常識"という曖昧な表現より少し具体度があがります。自分の会社に凄腕の人がいるならその人に聞いてみるといいかもしれません・

ソフトウェアエンジニアとして働くとは

ここで、ソフトウェアエンジニアとして働くとはどういうことなのか考えてみると、「ソフトウェアに関する十分な"常識"を備えたうえで、公共の効用のために開発を行うこと」説明できると思います。自分が"常識"を持っているのか。自己満足ではなく、価値を創出するような開発が行えているか。もう一度考えて見ようと思います。

自分が十分な"常識"をもっているかどうかを測るのは単純な資格試験がない分難しいですが、GoogleAmazonなどのトップティアの会社で働く専門家から仲間と認められるかどうかを基準にしてもいいかもしれません。

まとめ

ソフトウェアエンジニアという専門職には明確な目的とそのために求められる”常識”がある。"常識"は知っていて当然のことで、抜け漏れがあってはならない。ソフトウェアエンジニアは非認定型の仕事であるため常識は内部の専門家から教えてもらう必要がある。"常識"を身に着けたうえで、価値を創出するような開発をしよう