Webプログラミング初心者への教え方

Written by shoota

最近、いろいろな人に技術的な質問を受ける機会が多くなってきて、今年の夏は通常業務の合間に新人研修の技術教育担当もしました。 そもそも人になにか教えられるほどの技術力なのか、と自問せざるを得ないというのが正直な気持ちです。 それでも沢山の人に質問を受けたりしているうちに、なんとなく教えるべきことというのが見えてきた気がするので、まとめてみました。

そのまえに -前提としていること-

あくまでも僕の経験と考えに基づくものなので、「こうでなくてはならない」、ではありません。つまりタイトルはやや釣り気味です。 「初心者」と一言にいっても、プログラマの初心者の定義はブレが大きすぎるので、最初に対象を絞っておかないといけないかな、と思います。 そういう意味では自分も初心者であるし、それでも研修教育をなんとかできたわけです。

Webプログラミング

サーバ上で動作するアプリケーションのプログラミングをすることを想定しています。僕はオブジェクト指向言語しか扱ったことがないので、それも前提としています。

####目指すレベル

初心者の定義はいつも曖昧になりやすいのですが、研修を担当していたときに、目指すレベルごとにステップを設計してあげるといいのではないかと感じました。 CUIを使ったことのない人が、「入力に対する応答のロジックを実装することができる」くらいが最初のステップなんじゃないかと思います。これにはフレームワークだとかデータベース接続だとか、 アプリケーションの基盤に対する理解は含まれていません。他の開発者とともに、ひとつの画面や動作などの機能要求を満たすことができる能力レベルというのがいちばん近いと思います。

本題 -教えるべきこと(知っているか確認すること)-

  1. 環境変数
  2. 標準入出力
  3. エラーの読み方

この3つだけです。

とはいっても、実際には言語仕様、設計方法、開発環境のつくりかた、ミドルウェアの役割、バージョン管理システムの使い方、 チケットの書き方、コーディング規約、テストの仕方などなど、たくさんのことを教えると思います。 でも初心者にとって、これらの大部分は手を動かしながら身に着けるもので、(文字通り)手を休めて考えるものではないように感じられました。 またそういうものは、ある種の文化に大いに依存したものであるというか、結局は Case By Caseにしかなりえなくて、「教えた」というより「慣れてもらった」という表現のほうがしっくりします。

理由 -なぜ教えるのか、はずせないのか-

####環境変数

これはWebプログラミングに限った話ではありませんが、アプリケーションがOS上で動く以上、プログラマはOSの基礎知識をある程度持っているものと思います。 でもそれは初心者には負荷が高すぎます。GUIでしかコンピュータに触れたことがないのに、その裏でOSがどのような演算をているかなど、考える必要性がないからです。

それならばOSと言語のエンジンを取り持っている環境変数を目で見て触って、そこからOSとの関係を後々導いていけばいいんじゃないかと思いました。 SDKにPATHを通すときに、それがどういう意味なのかを教えてあげると、プログラム処理がCPUの演算まで届く道筋がなんとなーくイメージできているかと。

####標準入出力

Webアプリケーションの入出力のほとんどはHTMLとHTTPを介して行われる一方で、アプリケーションは標準入力で起動し、標準出力やエラー出力にさまざまな情報を出力します。 Webサイトの利用者としては入出力はブラウザ上で完結しているので、標準入出力というものがなんなのかぼんやりとなってしまう。ログとか、コンソールとかは目で見えているのになにか遠い存在のように 思えるみたいです。「標準」という言葉もなんか曖昧でよくない気がします。こわくないよ、プログラムがユーザには聞こえない場所でお話してくれてるんだよ、と教えました。

####エラーの読み方

僕が研修期間中に新人に口が酸っぱくて無くなるくらい言ったことは、「エラーから学んでください」でした。エラーは自分が書いたコードとの唯一の会話手段だと思います。 僕の何がいけなかったのか、プログラムはなぜ困っているのかを明確にズバリと言ってくれるのですが、初めて見ると字面がヤバい感じでパニクってしまうようです。

なので僕の研修では最初に全員にエラーを出させて、コードの変更と内容を対比することから始めました。エラーが読めるか読めないかで大きく成長度が違うはずだからです。 「エラーを読み、コードを直す」のがプログラマの作業の大半だと思いますし、それを突き詰めたものがTDDでしょう。そういった意味でも、エラーの読み方は「慣れるもの」ではなく「教わるべきもの」だと思います。 もしひとつもエラーがでなかったときに、「大丈夫だよ」とエラー出力の心の声が聞こえたら、それが初心者卒業証書です。

一般論とか、僕の考え方

世間にはお金を払って教えてくれる研修サービスがたくさんありますし、僕もそのいくつかに参加したことがあります(会社のお金で)。でもそのとき感じたのは、これらは結局、体系的な知識の詰め合わせコース以上になりえていないことでした。 プログラミングを始めたばかりのひとに、DRY原則やデザインパターンを語るのは悪いことではないと思いますが、さてコードを書くぞ、というときにそれを実体化できる人はいないと思います。 それよりも自分が書いたコードが動かないときの楽しさ、動いたときのうれしさを教えてあげたい。また、上の3点は新しい言語を学ぶときの自分のとっかかりであったりもします。

最近の僕は会社でコードを書く機会がめっきり減ってきていて、それでも困ったときに聞いてくれたりはするんですが、「昼は会社員、夜はプログラマ」みたいな生活になりつつあります。 もっとコーディングがしたい!という思いと、自分よりもすごい人材を育てたいという思いがあって、今回の記事を書きました。

そして、このブログを書き終えたいま、またプログラミングを楽しみたいと思います。