慢性的なIT人材不足(IT人材の最新動向と将来推計に関する調査結果~ 報告書概要版 ~)という状況の中、新しく優秀なIT人材の獲得ではなく既存の人材を教育することによって会社のIT人材のスキルを高めようと考えている企業も多いのではないでしょうか。特に社内のエンジニアに関しては、単なるプログラマーではなく、業務も含めてシステム設計をできるようなシステムエンジニアを期待するのではないでしょうか。その観点では、代表的なポイントとして次のような項目が挙げられます。
・技術教育…言語習得、アルゴリズム実装、技術動向など
・マネジメント教育…リーダーシップ、プロジェクト管理、タスク管理など
・業務知識…会社全体の業務知識、適切な業務システムの構築
優秀なエンジニアというと、より「上流工程」に意識が向かいがちなのではないでしょうか?しかし、アプリケーションがビジネスそのものになりつつある現在においては、システムエンジニアだけで質の高いアプリケーションを開発できる状況ではなくなってきているのも事実です。そこには優秀なプログラマーがいて初めて成り立つのです。そこで今回はプログラミング教育のポイントについてご紹介します。
知っている、使える、使いこなせるの3段階
プログラマーの習熟度は大まかに「知っている」「使える」「使いこなせる」という3段階に分類できます。
①知っている
この段階は単にその技術についての「知識を持っている」という状態です。技術に関する知識を得るためには書籍を読む、Webで学ぶ、人に聞くなどの方法があります。情報を収集するだけでなく、各情報を記憶して必要に応じて知識として引き出せる状態になって初めて「知っている」と言えるでしょう。
②使える
この段階は簡単に言えば「知識を持って課題を解決できる」という状態です。知識として吸収した技術は、いつどのように適用できるかを理解して初めて使えるようになります。多くの場合はその技術の基本パターンというものがあり、パターン通りに技術を使えるようにすることが大切です。チュートリアルなどを利用すると一通りのパターンは使えるようになるでしょう。
③使いこなせる
この段階は「技術の構造やその内容を理解し、できることとできないことの判断がつけられる」という状態です。たとえば同じ機能を実装するにしても様々なパターンがある場合、何がベストなのかという答えを導き出せると、「使いこなせる」と言えるでしょう。
まずは大まかに、プログラマーの習熟度をこのように分類して考えます。ただしすべての技術で「使いこなせる」段階を目指す必要はありません。システム構築プロジェクトでは多数のエンジニアやプログラマーが関わるため、各分野におけるスペシャリストが集まって質の高いシステムを構築できるでしょう。
プログラミング教育は教えるだけでは終わらない
では具体的に、プログラミング教育ではどのような点に注意すればよいのでしょうか。プログラミングスキルに関する情報を教えるだけでいいのか?まずプログラミングの習得には3つのステップがあります。
ステップ①言語習得
プログラミング教育の基本はまず「言語を習得すること」です。言語とは、実際に機能などを実装するためのもの(C#、Java、PHP、Ruby、Python、HTML、CSSなど)、データベースを構築するためのもの(MySQL、PostgreSQL、Oracleなど)があります。プログラミングのスキル向上のためには言語習得は絶対ですが、そこばかりに注力してしまうと思うようにスキルは向上しないでしょう。
ステップ②アルゴリズム
アルゴリズムとは平たく言えば「コンピューターで行える計算方法」です。システムというものは基本的に膨大なデータ(数字や文字列)を扱います。そのデータを必要に応じて整列したり計算したり、引き出せるようにするのがアルゴリズムです。言語習得だけでは単に記述だけなので、アルゴリズムを学ぶことで処理の中身を適切に作ってゆくことができます。
ステップ③実装
実装とは「プログラミング言語やアルゴリズムを使用して実際にプログラムを作成すること」、あるいは「既存のアプリケーションを理解し、新しい機能を追加したり修正すること」です、プログラミング教育では言語やアルゴリズムの習得に集中するだけでなく、実際に何度も実装してみることでスキルを向上させていきます。実装しないと気づけない事象などもあるため、欠かせない教育プロセスです。
以上のステップを踏むことで確実にプログラミングスキルを向上していけます。しかし、言語やアルゴリズム、実装について「教えるだけ」では十分なスキルが身についたとは言えない可能性があります。理由は、プログラミングはある程度「使える」状態になると自己流でできてしまう部分があるためです。
たとえばAという機能を実装するためにベストな方法があったとしても、複数のパターンを組み合わせることで同じAという機能を実装できます。しかし、そうした場合は往々にしてプログラムが複雑になるため、他の機能を実装する際に問題が生じたりプログラムが理解しにくくなったりします。
多くのデータや数式を扱うプログラミングですが、数学のようにただ一つの答えはありません。無数にある答えの中から「ベストな答え」を導き出すためのスキルが大切です。なので「教えるだけ」では「使える」状態にしかならず、「使いこなせる」状態までに成長するには本人の意識や周囲からのフィードバックなどがないと難しいでしょう。
客観的なスキル評価が大切
プログラマーのスキルを効率良く向上させていくためには、まず客観的にスキルをアセスメント(評価)するための環境が必要です。つまり一定の基準を設けることで各プログラマーのスキルを同じように評価して、段階に応じた教育を施していきます。
プレグラミングスキルのアセスメントには「TOPSIC(トップシック)」というサービスがおすすめです。
TOPSICはJavaやC#、Ruby、Perl、PHP、Python、Scala、COBOLなど主流のプログラミング言語にすべて対応したプログラミングスキル判定サービスであり、サービスはクラウドにて提供されます。6段階の難易度の問題が組み合わされ60分~90分のテストを行うことで、サービスが回答を自動採点してスキルを判定します。問題を作成しているのは世界的なプログラミングコンテストを運営しているAtCoder社です。TOPSICを使用することで人事担当者でもIT人材のスキルの管理ができ、かつ手間をかけずにテストが行えます。
もう一つ大切なことは、フィードバックを必ずすることです。プログラミングテストの結果を本人にフィードバックして、何が間違っていたのかを伝えることで新しい気づきや意識を持ちスキルが向上するでしょう。こうしたフィードバックに関しては信頼関係のあるマネージャーなどから行うことでより効果的になるでしょう。
皆さんの会社では、IT人材不足という大きな課題に対しどういった取り組みをしているでしょうか?社内のIT人材が不足しているし優秀な人材を確保するためのリソースが少ないという場合は、社内の人材を教育し、スキルアップをしてゆくことが有効です。その第一歩は、各自がどのくらいのスキルレベルであるかを客観的に評価し、把握することです。そのためにTOPSICを活用し、効果的なスキルアップを実現していただければと思います。
- カテゴリ: