SSブログ

第2期社内Go言語研修 [プログラミング言語Go研修]

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)

  • 作者: Alan A.A. Donovan
  • 出版社/メーカー: 丸善出版
  • 発売日: 2016/06/20
  • メディア: 単行本(ソフトカバー)

第2期の社内Go言語研修を今日から開講します。第1期(現在11名受講)はまだ終了していませんが、並行して第2期を開講します。第2期の受講生は7名です。
※ 社内での正式名称は「プログラミング言語Go基本技術習得」コースです。

テキストは『プログラミング言語Go』です。毎回、あらかじめ指定された範囲の内容を読んで質問をまとめて、練習問題のプログラミングの解答を提出してもらいます。質問はGoogle Drive上の共有されたGoogle Sheetに記入してもらい、練習問題は各人のGithubリポジトリを介して提出してもらいます。

第1期と第2期のほとんどの受講生は業務でGo言語を使用していませんし、Java研修もそうですが、20代の人が多いです。

練習問題の解答からみるエンジニアのレベル [プログラマー現役続行]

長年行っているJava研修(Java 8研修も含む)はテキストとして『プログラミング言語Java第4版』『Java SE 8 実践プログラミング』を使用しています。また、今年から始めたGo言語研修『プログラミング言語Go』を使用しています。どのテキストにも、プログラミングの練習問題が豊富に含まれています。

基本的にプログラミングの練習問題は事前に解いてもらいます。そして、研修の場で解答の確認を行います。つまり、ソースコードを研修の場で開くわけです。私自身は事前に解答のソースコードを見ておくことはしませんので、研修の当日に受講生のソースコードを見ることになります。

練習問題であってもソースコードの可読性という視点でも分類はできますが、解答できているかというレベルで分類すると次のようになります。
  • 全く解けていない
  • 一見すると解いているように見えるけど、バグがある
  • 練習問題が求めているものと解答が異なる
  • 解いているが、動作の確認が目視になっている
  • テストコードも整備されてきちんと解かれている

全く解けていない

練習問題にもさまざまな難易度があるので、サービス問題ともいえるやさしい問題から難易度が多少高いものがあります。練習問題なので、難易度がものすごく高いものはあまりないです。それでも、「解けていないのはどういうこと?」と思われる難易度の低い問題を解いていない人は、全体として解けていない問題が多くなります。
※ ソフトウェア・スキル・インデックスでいえば、レベル1(初心者)と2(見習い)の間でしょうか。

一見すると解いているように見えるけど、バグがある

実は、これがおそらく最も多いです。研修の場で初めて私自身が受講生の解答を見るのですが、エディターやIDEでコードを開いて見た瞬間に「何か臭う」と思い、よく読むとやはりバグがあるのです。そこで、解答を作成した受講生にどこかおかしくないかと聞くと、最も多い返事が「だいぶん前に書いたので忘れました」という回答です。研修は一月に1日だけなので、進捗によっては一か月前もしくは二か月前に書いたコードとなります。

練習問題の解答のソースコードは短いものが多く、「忘れた」と回答したら済まされるという思考はソフトウェアエンジニアとして正直許されません。そのような回答をされると私が言うのは、「覚えているかどうかではなく、今読んで理解して問題点を見つけなさい」です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

練習問題が求めているものと解答が異なる

これも意外と多いです。つまり、練習問題の設問内容をきちんと読まずに、間違った解答もしくは機能が少ない解答となっています。多くは、練習問題で複数の機能が要求されているのに、全部を実現していない場合です。そして、どうして全部実現していないのかと聞くと、「練習問題の内容を読み落としていました」という回答が圧倒的に多いです。そもそも、練習問題はせいぜい2,3行で書かれています。それでも、最後まできちんと読まずに解いてくるわけです。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

解いているが、動作の確認が目視になっている

すべての練習問題でテストコードが容易に書けるわけではありませんが、容易に書ける練習問題でも、動作の正しさを、実行して目視で確認するだけと言うものです。そして、バグがあるけれどテストケースが少ないためにそのバグに気づけていないことが多いのは、目視で結果を確認するようになっている解答です。
※ ソフトウェア・スキル・インデックスでいえば、レベル2(見習い)と3(初級職人)の間でしょうか。

テストコードも整備されてきちんと解かれている

これは何も言うことはありません。
※ ソフトウェア・スキル・インデックスでいえば、レベル3(初級職人)でしょうか。

研修の練習問題であっても、「許される無知の範囲は開発経験年数に反比例する」で書いたのと同じように、経験年数が長いほど期待される解答のレベルは高くなっていきます。

許される無知の範囲は開発経験年数に反比例する [プログラマー現役続行]

UUUM社の採用に関するブログ「優秀なエンジニアを採用するために面接で気をつけていること」でエンジニアの学習に関して次のように書かれています。
採用を決める時の一番重要なポイントは実力ですが、20代の若い方は将来性を期待して、ポテンシャル採用をすることもあります。 ポテンシャル採用で重要なのは、なんといっても向上心。 「いろんな技術を勉強したいんです」というのは誰でも言いますよね。 本当にそう思っているのであれば普段から勉強しているはずなので、中身をちゃんと理解できているのかを確認させてもらいます。 20代に関しては、現時点での実力が多少低くても採用します。 その代わり、しっかり勉強してもらって、ちゃんとした技術力を身につけてもらいます。

30代になってくると、やはり実力が求められます10年近くもエンジニアをやっていながら、技術的な知識の薄い人が多いのには驚かされます。 それだけ長い時間をかけて実力が伸びてないということは、今後の伸びも期待できないので、残念ながら不採用となってしまいます。 なので、20代の若い方達には、今のうちにしっかりと勉強して実力を身につけてもらいたいと思います。

以前書いた「継続した学習」では、中途採用の面接の際に行っていた読書した書籍の確認の話を書いています。面接時に読んだ書籍の一覧を用いた確認は前職の富士ゼロックス情報システムの頃からやっていたのですが、本当に「10年近くもエンジニアをやっていながら、技術的な知識の薄い人が多いのには驚かされます。 」
※ この一年は自分で率いるプロジェクトもなく、部下なしの状態なので中途採用の面接をすることはありません。

私が行っている社内研修であるJava言語研修Go言語研修には、入社2年目や3年目ぐらいの若いエンジニアが受講することが多いのですが、コンピュータの基本構造、「データ構造とアルゴリズム」、オペレーティングシステムなどの基礎的な事柄を知らない人が多いのです(「ハッシュテーブルの季節」)。

研修後の懇親会などでは、「新卒新人や入社して2、3年目で知らないで許される範囲は多少広いが、経験年数を経るごとに許される範囲は狭くなっていく」という話をします。つまり、きちんと学習を継続していかないと、だめなわけです。

しかし、継続的に学習を続けていくことの重要性を教えることなく、与えられた開発業務をこなせればよしとするソフトウェア開発組織が多いのではないでしょうか。その結果、10年が過ぎて他の会社に転職しようとしても不採用になってしまうエンジニアの集団になってしまう可能性が高くなります。(「ソフトウェア開発組織が持つべきカルチャー 001」)