konbu's blog

PHP/Ruby/Python あたりが仕事で使っている言語です。プログラミング、学習や教育ネタを書いていきます。

プログラミングを OJT で教えていて思うこと

最近業務の中で若い子 (具体的な年齢は知らない) にプログラミングを教えることがあって、その所管を書いておく。 その子のスキルと現場の方向性としては、下記のような感じ。

現場

PHP / Laravel / MySQL で、フロントは Vue.js だったり/ jQuery だったり。

学習者

管理画面の基本的な CRUD な画面は作成できる。 JS もプラグイン導入や簡単な動きをつけるくらいはできる。 DB の基本操作はGUIツール、エディタは VSC という感じ。

結構いろんなタスクを振られるようで、対応可能な作業は以外と多い。

本題

当該の子と深くコミュニケーションをしたわけではないので、想像の余地が大きいけど、 技術に対して苦手意識はないように感じる。

多分 Laravel 主体で開発を覚えたのかなという感じで、気になるポイントがいくつかあった。

  1. Class とオブジェクト、インスタンスという言葉やプログラミングにおけるそれらの役割と挙動を知らない
  2. 1 次元配列 2 つによる総当たりを書くイメージがない
  3. 集合を知らない

他にもユニットテストとか、知らないものをあげると色々あるけど、 それは業務中のどこかで知るし (テストは教えたけど)、業務で直接的に支障でそうだなというものをピックアップしてみた。

オブジェクト指向系の言語で class やらインスタンスやらが分かっていないのが一番の驚きだったことで、 $this やらインスタンス生成からメソッド実行まで色々書いている実績もあるんだけど、というのが衝撃だった。 自分は理屈で理解できないと全く書けない人間 (比喩ではなく、確信が持てないと書いても的外れなエラーになるので構造の調査を良くやる) なので、よくわからないけどテンプレートで書くっていうパターンでお願いした動作をするものが上がってくるのが不思議で仕方なかった。

ソースも確認して、レビューはしてる (言うことは勿論多いが言いすぎると進まないので少しずつ改善するようにしてる。) けど、そんなそぶりはないコードだったのを考えると、 実は自分が思っている以上に、詳細はよく分かってないけど目的の動作をするものを作れてる人は多いのかなと思った。

配列の総当たりの話にしてもそうだし、集合の話もそうなんだけど、 Webフレームワークを学習する中で別に必要にならないんだよな、と思うと途端に必要な筋力以外が発達してない感じかと納得がいった。 Webフレームワークに乗っかってルーティング、コントローラ、モデルを使ってビューに流し込みって言う流れの中で、1, 2, 3 のどれも (それ以外にも色々) 詳しく理解する必要がないのだとすると、 業務だけでは学ぶ機会が無くて、もしかしたら長い期間このままであることがあり得るなぁと思った。

結論

上記のようなことがふつうに起こりうることで、実際目にしたことを考えると、 プログラマーとして生きていくためには業務の時間外で勉強することはやっぱり必要だなと感じた。

それは、業務を業務外でやれとか言う話ではなく、 業務に全く関係ないことでも良いし、関係あるけど業務中で調べたり、勉強するのが憚られるものをやれば良いと思う。

もし勉強の目標がない人はとりあえず CS (計算機科学) を勉強すると良いと思う。 あと、自分が普段使っている言語の機能などの詳細な挙動や原理、使われてる概念の勉強も必要かな。