シニア、ジュニア、素人の違い

投稿日:

この記事ではプログラマーに代表される、ITを使う技術者に対して「エンジニア」という言葉を使います。

最近、エンジニアを分けるときに自分はよく「シニア」「ジュニア」「素人」という分け方をしています。 この3つは次のように定義しています。

  • シニア: 知識も経験も豊富なエンジニア
  • ジュニア: 経験が足りないが、知識がある、もしくは学ぶ意欲があるエンジニア
  • 素人: 経験の有無にかかわらず、知識がなく、学ぶ意欲もない人

実際には分野によって「シニアエンジニア」だったり「ジュニアエンジニア」だったりします。 例えば自分はバックエンドは経験も豊富なので「シニアエンジニア」と自称していますが、フロントエンドやモバイルアプリは不得意です。 ですが、その話は一旦置いておきます(最後にちょっと書きます)。

ジュニアエンジニアは大事

うちの会社は多くの新卒採用を行っています。だから大事というわけではないです。 なぜ大事かと言うと、一番の理由は誰もが最初はジュニアエンジニアだったからです。 自分も今ではシニアエンジニアを自称していますが、仕事を始めた25歳1の頃はジュニアエンジニアでした。 今ならもっと早く仕事を始める人も多いと思いますが、誰もが最初はジュニアエンジニアだったというのは変わりません。 なので、ジュニアエンジニアを大事にして育てるのはシニアエンジニアの責務だと考えています。

二つ目の理由は「経験が少ない分、属人化した知識に気づく」からです。 慣れたメンバー同士だと、説明をしなくても「xxすればいいよね」の一言で通じます。 しかしそれは言い換えると「少数のメンバーにしか通じない属人化した知識」になっている証拠です。 なので、適度にジュニアエンジニアや、新メンバーが入ることで、その「属人化した知識」に気づき、改善するきっかけになります。 同様に「ツールや手順に曖昧さがあったときに気づいていくれる」というメリットもあります。

最後の理由は「難易度が高いタスクだけとは限らないから」です。 チームで行うタスクの中には「定型タスク」もあります。 シニアエンジニアにとっては物足りない、難易度の低いタスクや雑多なタスクもあります。 でも、ジュニアエンジニアにとってはほどよい難易度のタスクになります。

理由を三つ挙げましたが、自分としては「ある程度ジュニアエンジニアがいたほうがバランスが取れて良い」と考えています。 割合で言えば「シニア : ジュニア(あるいは新メンバー) = 1 : 1」くらいがちょうどいいんじゃないかなと思います。 一気にメンバーが3人増えたときはさすがにキツかったですが・・・。

素人はいらない

一方で、素人はいらないです。二度と素人とは仕事をしたくありません。

素人の例としては転職して2年経った感想の記事に書いた、前の会社で起きた次の2つの事件です。

  1. コンパイルすらできないJavaコードをtrunkに突っ込む人
    • 論外
  2. 全く同じクラス名を持つクラスを2つ持とうとする人
    • 正確にはクラス名だけでなくパッケージ名も同じ。つまりFQCNが同じ。
    • IDEが使えなくなるので論外

実は1つ目の事件は少し勘違いしてて、正確には『「クライアントごとにJavaファイルを変えてコンパイルする」というのを禁止していた(feature flagかFQCNを変えるのがルール)のに、 その禁止されていたコードを突っ込んだこと』でした。まあレベル的には論外で変わらないのですが。

素人とジュニアエンジニアとの違いは「知識がある、もしくは学ぶ意欲があるかどうか」ですが、 これは言い換えると「シニアエンジニアと話ができるかどうか」です。

先程の例で論外と書きましたが、これを言い換えると「素人とは話が通じない」です。 「IDEが使えなくなる」というのが通じません。前の会社ではEclipseを標準IDEとして使っていましたが、 その「素人」の画面を見ると、コンパイルエラーが起きた状態で作業していました。

IDEはただのエディタではありません。 文法の間違いを自動でチェックし、メソッド名を自動で補完するなど、開発を楽にする機能が多数導入されています。 つまりコンパイルエラーが起きた状態で作業することは、IDEが何なのかを知らないのと同じです。 その状態に何の疑問も持ちません。だから「素人」です。

仕組みを壊すのが「素人」

結局、1つ目の事件は解決しましたが、2つ目の事件は解決せず「FQCNが全く同じクラスを2つ作ってもよい」というルールに変えられてしまいました。 これはすなわち「素人がルールを壊した」ことになります。

「仕組み」という観点からすると、次のように言うことができます。

  • シニア: 仕組みを「作る」人
  • ジュニア: 仕組みを「使う」、あるいは仕組みを「強固にする」人
  • 素人: 仕組みを「壊す」人

「強固にする」というのは、先に書いた「ツールや手順に曖昧さがあったときに気づいていくれる」という話です。 もちろんジュニアも「作る」側になることもありますし、シニアも「使う」「強固にする」側になることもあります。

ただ、素人は仕組みを壊すだけです。そして全体のレベルが下がっていきます。 だから、自分は二度と素人とは仕事をしたくありません。

「学ぶ意欲」さえあれば素人から脱出できる

「二度と素人とは仕事をしたくありません。」と書きましたが、素人から抜け出すのは簡単です。 それは「学ぶ意欲」です。自分が無知であることを理解し、学び始める、あるいは学び直す、それだけです。

これは自分も同じです。バックエンドについては経験豊富ですが、フロントエンドの知識は古く、 モバイルアプリケーション開発についてはほとんど経験がありません。なので、自分は学び続けます。


  1. 大学院卒 + 1年留年 ↩︎