ツイッターでこんな投稿を見た。
《ゆる募》
— えいじおー@Webサービスを作った (@eizio_studio) August 29, 2019
「考える」という作業ができない偏差値低めのプログラマを育てる方法
画面項目の出力値がおかしいとユーザーから指摘あり→えーと、うーんと、何していいか分かんないやのプログラマ
苦労している発注者やチームリーダーは多いはず。与えられた手札制約はつらいよね
皆さんの知恵をplz
まじめに、問題と対策を考えてみる。
どうして何をしていいのか、わからないのか?
コンピュータの中にいる小人さんと対話するスキルが足りないのでは!!
というのは古典ジョークだが、問題が起きた時に、その経緯に基づいた仮説・可能性が立てられていないのだと思う。
一般能
- 画面項目の出力値がおかしい?
- ・・・????わからん。なにこれ?
プログラマ能
- 画面項目の出力値がおかしい?
- 表示だけがおかしい?(可能性1)
- 計算結果だけがおかしい?(可能性2)
- 入力がおかしい?(可能性3)
- 状態がおかしい?(可能性4)
原因の可能性を考えられないのは?
まず、十分な時間をかけて、ドキュメントやソースコードを理解できていないのではないだろうか。
私みたいな変人だと「ひゃっはー!どうせドキュメントなんぞ陳腐化して、実装と剥離するから、ソースコードよこせー」とやりかねないが…
普通の人はドキュメントをベースに、ちょっとずつ認識を広めていく必要がある。
でも、普通の人は「コンパイルされたバイナリ」と「よくわからない大量のソースコード」を目の前にすると、ぐへえ、ってなるのですよ!!
「失敗する経験」不足
たしかこれは、https://twitter.com/yontengop 氏の話でもあったと思うが、失敗を恐れすぎて何も手が動かせない可能性もある。
PC9801で、MS-DOS使ってた時代は?
「バグってPCとまったら、
電源ぷちーして再起動したら、万事解決じゃーい!
全部、元通りに戻って、全部ちゃらー」
ってなってた。
それが、ハードディスクが付き、Windowsになり、データベースと連携し、クラウドに連携し……と、いろんなものがごちゃごちゃ付きすぎたせいで、
「失敗したら壊れる」
「でも、何が起きているのかわからない」
という"ナンダカ ヨク ワカラナイ モノ"担ってしまっている。
いや、本質は何も変わらないし、物理的にぶっ壊さなきゃ、大体なんとかなるようになってるんですけどね!
ではどうしたらいいのか?
小規模でいいから、自分で物を作らせてみる。
画面表示がおかしい、というプログラムをいきなり保守しろというと固まるので、まず、簡単にでいいので、それを計算するプログラムをPC上で単組させる。
計算過程がどうなっているのかを観察させる。
もしくは、printf debugでいいから、計算の過程を確認しながら進めさせる。
とにかく、プログラムの中に手を突っ込ませる。
ちょっとずつでいいから、手を動かして、暗中模索を刺せる。
「わからなかった、ということが分かった」
手を実際に動かしてもらうときに重要なのは、
「わからなかった、ということが分かった」という事。
そこまで到達するには時間がかかるかもしれないが……。
「うまくできませんでした」という報告は突き返していい。
「どのように、うまくいかなかったか」という報告にさせる。
"どのように"の部分を突き詰めることで、原因を考えるようになる。
あるいは、おもちゃを与える。
もし教育プランに余裕があるならば、おもちゃを与えるのもよい。
arduino https://www.arduino.cc
プチコン4 https://www.petc4.smilebasic.com/
ヒューマン・リソース・マシーン https://ec.nintendo.com/JP/ja/titles/70010000000753
セブン・ビリオン・ヒューマンズ
https://ec.nintendo.com/JP/ja/titles/70010000014082
壊してもいい環境をちゃんと提供しましょう。
「ここの環境は、あなたが実験するための環境なので、
何をやってもいいし、何をプログラム的に壊しても、
すぐに直せるsandbox(砂場)です。」と、伝える。
実際に、自分で壊してから、復旧させるのが一番いい。
組み込みシステム開発で一番最初にやることは環境構築なのはもちろんだけど…
そして、環境ぶっ壊しだよ!!!派手にディスクとかFLASHとか(論理的に)ぶっ飛ばすよ!!
というのもの、ぶっ壊した環境を復旧できる手段を確立しなかったら、実際に壊れた時に、何も作業できなくなるもの。
「壊していい」ということを体感させておけば、いろいろ考えられるのではないか?
ほめるほめるほめるほめる。
成功したリザルトをほめるのではなく、
成功するために考えたプロセスをほめる。
成功するかどうかなんて、時の運。
ぶっちゃけ同じやり方をやっても、次は失敗するかもしれない。
だから、どうやったら成功するか、考えたプロセスをほめる。
まとめ
リソース厳しい、このご時世。物を壊したら怒られるんじゃないのかーって考える新人とかも少なくないと思う。
だけど、本当にヤバい破壊パターンは、組織としてつぶしておかねば、誰がいつしでかすのかわからない。だからこれは個人じゃ気にする必要が無い(やらないように気を付ける必要がある)。
その上で、「壊していい」をベースに、調査をさせるしかないと思う。
手を動かせる人材って、たぶん「壊せる人材」だと、私は考える。