ほんじゃーねっと

おっさんがやせたがったり食べたがったりする日常エッセイ

新人にはまずプログラムを「読む」スキルを身につけていただきたい

f:id:piro_suke:20160411005004j:plain

会社の新入社員研修の事を考えていてふと思いついた。

社内で何がしかの開発を行っている場合、

全員がプログラマになるわけではない場合でも

一通りプログラムの基礎を身につけておこう、と新人研修に

プログラミング研修が含まれていることがある。

そこでは「プログラムを"書く"スキルを身につける」ことを前提として

研修を行っているわけだが、

ここで視点を変えて

「プログラムを"読解する"スキルを身に着けて活用する」

という目的で研修内容を考えてみるのはどうか。

プログラムを読む力を身に着けることで、

例えば

営業担当者が

Excelで資料作成する時に他の誰かが作成した一括変換用のVBAを

ちょっと変更して自分のファイルで使えるようにしたり、

事務作業で

既存のバッチファイルやシェルスクリプトの中身をアレンジして

自分の作業効率化に活用できるようにしたり

することができる。

オバマ大統領の

「これからはすべての人にとってプログラミングの教養が必要になる」と

いう発言が以前ニュースになっていたが、

そこでまず重要になるのは、

「1からプログラムを書けるスキル」の前に

「既にあるプログラムを理解して自分の課題解決に活用するスキル」

を身につけることではないかと思うのだ。

プログラム活用のステップは、

  1. 誰かが作成したプログラムを「用意された使い方に従って」使う
  2. 誰かが作成したプログラムを「自分が使いやすいように変更して」使う
  3. 自分が使うためのプログラムを作成する

という3段階に分かれるとすると、

1が既存のソフトをそのまま使うことであり、

現状の一般的な活用方法。

3がプログラマの仕事となる。

ここで2ができる人を増やしましょう、というのが今回の話だ。

「プログラマがプログラムを用意し、かつそれを説明してもらって初めて使える、」

というレベルから

「プログラマが作ったプログラムを自分で読み解き、必要とあらば変更を加えることができる」

レベルになることで効率化の幅を広げることができる。

実際は

プログラムに変更を加えようと思ったら「プログラムを書くスキル」を

多少なりとも身に付ける必要はあるのだが、読むことに重点を置くことで、

開発研修が自分にとってどのような価値を持つのかが、

開発者にならないメンバーにとっても明確になり、

会社にとっても社員の作業効率化意識の底上げになるのではないかと思う。

プログラムを読むために必要な内容

プログラムを読解することを基準に置く場合に

ポイントになりそうなことを考えてみた:

ファイル構成を理解する

  • 拡張子からファイルの種類を把握する
  • プログラムのファイル構成を把握する
  • 設定ファイルを探す

プログラムを構成する要素を理解する

  • コメントとドキュメントを読む
  • キーワード、記号の使い方を把握する
  • ファイルの中のブロックを見分ける
  • 変数の種類を見分ける
  • 変数・関数の宣言と呼び出しを見分ける
  • 条件分岐とループを図解できるようになる

プログラムの流れを追う

  • プログラムの開始点を見つける
  • 関数から関数へ、クラスからクラスへ処理を追う
  • 値の生成、変更、スコープを追う
  • ログ出力を元に目的の場所を見つける
  • デバッグツールを使ってプログラムの流れを追う

プログラムに変更を加える

  • 設定を変更する
  • 条件を変更する
  • 処理を追加する

どの言語を使うのが適当か

言語の仕様としては

読みやすく、できるだけ他の言語を学ぶ時に流用できる書式が良い。

と考えるとC言語の文法の流れを継承したものが良さそうだ。

実行環境は

研修で作ったものをそのまま実用化できるよう、

Windows/Macで簡単にインストールできて、

パッケージマネージャーが使えるものが良い。

自分が教えるなら、このブログでも扱っている

node.jsベースのJavascriptを使いそうだけど、

非同期処理+コールバックが理解しづらいかもしれない。

PythonとRubyも良いけど、

最初の言語はブロックを中括弧で表現する言語にした方が

知識として汎用性高い気がする。

PHPは分かりやすいけど、WEB以外で使うイメージがないな。

Groovyなんかどうだろう。そんなに癖がないイメージだし、

Java関連の情報がそのまま使える。

社内プロダクトがJavaベースの場合なんか最適じゃなかろうか。

実際やるとしたら、

元々は開発者になるメンバーのための研修なので、

そのプロダクトで使っている言語を選択するのがベストか。

おわり

思いつきで書いたけど、

研修を受ける側もせっかく受けるなら自分の仕事に役立てる方法が

あることが明確になってる方がモチベーションも上がるだろう。

自分が研修を担当することになったら、試してみよう。