レベル4:中級職人 [ソフトウェア・スキル・インデックス]
「ソフトウェア・スキル・インデックス」では、7つのレベルを定義しています。その中で、レベル4である中級職人は、次のように定義しています。
必要な技術を仕事の上で自然に自動的に使っている拙著『プログラマー”まだまだ”現役続行』では、次のように解説しています。
このレベルの解説として付け加えるなら、次のようになります。レベル4:中級職人
このレベルは、多くのソフトウェアエンジニアが到達して、ここで停止してしまうレベルです。
つまり、五年以上のソフトウェア開発を経験して30代になり、すでに過去の開発業務で使用している技術であれば、問題なく使用してソフトウェア開発を遂行できるレベルです。
このレベルで停滞すると、キャリアパスとしては危ない状態になってしまいます。とりあえず業務は遂行できるために、新たな技術を学ぶのを止めてしまい、気づいたら最新の技術は知らないまま、30代後半から40代になってしまいます。
特に、組込みソフトウェア開発の分野では、このレベルの人が非常に多いです。ずっとC言語しか使用したことがない人が、「C言語だけでも仕事はやっていける」と錯覚して、このレベルで成長が止まってしまっているのです。
そして、最近はこのレベルで40代になってしまう人が多く、その人たちは非常に中途半端な立場に置かれてしまいます。若手を指導できるわけでもなく、かといって古い技術しか知らないし、新たな技術を学習することもないのです。継続して学習する習慣を失ったうえに、新たな技術を用いた開発であっても、必要な技術教育は会社が行ってくれるべきだと受身の姿勢になっていたりします。
中級職人から上級職人へのレベルアップは、年数で決まるものではなく、それまでの本人の取り組み姿勢や考え方に大きく左右されます。
新たな技術を用いた開発でも、その技術を積極的にプライベートの時間を使用して学習するのではなく、与えられた仕事に直接関連する部分を業務時間内に学習するということがあります。場合によっては、何か問題に直面すると他の人に助けを求めることになります。たとえ、それが本を読めば書いてあることであってもです。レベル5の上級職人であれば、新たな技術を使用するとなると、その技術に関する書籍がすであれば購入して、プライベートの時間に読みます。それに加えてその技術の公式なサイトがあれば、英語であってもそのサイトにある技術情報を読んで学習します。
レベル1 初心者 [ソフトウェア・スキル・インデックス]
「ソフトウェア・スキル・インデックス」では、7つのレベルを定義しています。その中で、レベル1である初心者は、次のように定義しています。
ソフトウェア開発を行うには、プログラミングの基礎知識や、コンピュータに関する基礎知識が不足している拙著『プログラマー”まだまだ”現役続行』では、次のように解説しています。
レベル1:初心者この解説を読み返してみると、初心者には次のことを最初の一年で教え込まないと、次のレベル2にはなれません。
今日、ソフトウェア業界に就職する若手のほとんどが、このレベルだと思います。コンピュータの動作原理の理解や基礎知識がなく、プログラミングの基礎知識や経験がなかったりします。
このレベルでは、しっかりと基礎知識を身につける必要があります。単に、与えられた簡単な仕事をこなせるだけの知識を修得するだけでも、初級職人や中級職人まではなれるかもしれませんが、それ以上を目指すとなると、コンピュータの基礎もマスターしておく必要があります。
それと、もう一つ忘れてはならないのは、プログラムは動作すればよいというものではなく、人が理解できる読みやすいコードを書く必要があることです。その重要性をしっかり学習しておく必要があります。
初心者レベルでは、業務で使用するプログラミング言語をきちんと学習するだけでなく、コンピュータのハードウェアの基礎知識、およびデータ構造とアルゴリズムをきちんと学習しておく必要があります。
しかし、多くの職場では、プログラミング言語は、使用する機能だけという表面的な学習だけで、きちんと言語を学習しないことが多いのではないかと思います。それに加えて、データ構造とアルゴリズムの基礎を学習しないまま、ソフトウェア開発を行っている人が多いと思います。その結果、ソフトウェア開発の経験年数がかなりあっても、たとえばハッシュテーブルやO表記といわれてもまったく理解していなかったりします。
そして、初級職人の域を出ないレベルのまま年数を経ているため、組織上は開発グループのリーダーをやったりしていますが、中級職人や上級職人になることなく、中途半端な状態で年を重ねていたりします。
初心者に対して、プログラミング言語、ハードウェアの知識、データ構造とアルゴリズムを教えるには、「本を読んで勉強しなさい」といっても無理があり、かなり強制的に学習させる必要があります。
一方で、初心者は書かれたプログラムを動作させるだけで精一杯かもしれませんが、それでも、業務で開発させるソフトウェアは読みやすくなければなりません。したがって、プログラムが読みやすく書かれているかどうかは、常にチェックして、指導していく必要があります。そのために、しっかりとした中級職人以上のソフトウェアエンジニアが、直接教育や指導を行う必要があります。
初心者自身は、自分を指導する人が、きちんと指導してくれるレベルの人なのかどうかを判断することはできません。初心者の教育やOJTには、継続した学習を行っていて、読みやすいコードを書くことに常に注意を払っている先輩を担当させる必要があります。逆に、経験年数は長いけれど、普段まったく学習もせずに、きたないコードを書いているような人に、初心者の教育やOJTを担当させないようにしなければなりません。
間違ってこのような人をトレーナーとしてしまうと、初心者はいい加減な知識のまま、本人は仕事をこなせるようになったと錯覚するだけで、たかだか中級職人の域で止まってしまう可能性があります。
初心者レベルは、まったくのプログラミングの初心者ならば、就職してから半年から一年ぐらいだと思います。
『プログラマー”まだまだ”現役続行』(p.38)
- 1つのプログラミング言語をきちんと学ばせる
- コンピュータの基礎(ハードウェア、OSの仕組み、データ構造とアルゴリズム)を学ばせる
- 読みやすいコードを書くことを徹底させる
- 1つのプログラミング言語をきちんと学ぶとは、たとえば、Java言語であれば『プログラミング言語Java第4版』と『Effective Java 第2版』を学習させることです(「プログラミン言語Java教育」)。
- ハードウェアに関しては、いろいろな書籍があるとは思いますが、最低限、『Introduction to Computing Systems: From Bits and Gates to C and Beyond』に書かれているような内容です。OSに関して言えば、たとえば、Linuxであれば、『Linux Kernel Development』の内容程度です。データ構造とアルゴリズムに関して言えば、『プログラミング作法』の第2章の内容程度です。
- 読みやすいコードを書くことに関しては、徹底してレビューして指導していく必要があります。