お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2018-10-27

SIer5年目が自社新卒3年目までを対象にプログラミング研修の講師をしてきた

2020年、小学生がプログラミング必修化と騒がれている中で、私が所属している会社は良くも悪くも運用・保守がメインなのでプログラミングには縁が無い部署ばかりである。 (幸いなことに、私自身はコードを書く機会に恵まれているというか、ソロプレイながらもそういった機会を見つけて取り組んでいる)

所属本部もプログラミング出来る人間が育成したいというビジョンがあり、私も必要だと感じていて本部長と話していたのが今年の2月頃。

そして昨日、ようやく集合形式での研修を終えたので振り返ってみる。

目次

  • 大事にしたい内容と目標
  • どうやって学ばせるか?を考えた
  • 実施してみて
  • 今後の動き

大事にしたい内容と目標

元々考えていたのは、「プログラミング研修」とはいえ、「If文やfor文の使い方を教えたり、書き方を教えたりする研修はつまらない」だということだ。

プログラミング言語にしろ、それぞれの書き方にしろ、プログラミング自体は「手段」でしかなくて、「プログラミングを使って何を作るのか」を身につける力をつける機会を得られるようにしたいと思っていた。

事務局として動いてくださった本部長を含む部課長陣もこれには大きく同意下さり、方針はそういった形で進むこととなった。

どうやって学ばせるか? を考えた

さて、「プログラミングを使って何を作るのか」ではまだ曖昧で、ふわっとしている。 プログラミング研修と謳っているからには、「考え方を学ぶ場」であると同時に受講者が「プログラミング出来る」と実感できるような場にもしなくちゃいけない。

そこで、自分がどうやってコードを人並みに出来るようになったかを思い出してみた。 大きく力がつくきっかけになったのが、この2つの出来事かなと思った。

2000年代頭に流行ったホームページ作成ブーム

まだIEが市場を支配していたあの頃、誰でもちょっと勉強すればテキストエディタでホームページを作って公開し、そして黒歴史を生み出す時代があった。 当時小学生だった私はそのブーム真っ只中にいて、いろいろなWEBサイトを巡ってはあんなサイトを作りたいと、解説サイトを開きながら見よう見まねでホームページを作っていたのを覚えている。 もちろん、最初から作るのは出来なかった為、「テンプレート」を素材サイトからダウンロードし、自分好みにカスタマイズして使っていた。

  • あのメニューはどうやって作っているのだろうか
  • 音楽を流したいけど、どうやったら出来るのだろうか

そういった疑問を持っては調べて実装し、いつの間にか私はHTMLとCSSを使う程度であれば(当時のお作法の中で)使いこなして、ホームページを作るようになっていた。

Androidアプリコンテスト

専門学生時代の私はお山の大将で、何でも出来ると思っていた。 だからやる気のある後輩を集めて技術教育(にはならないが、学ぶきっかけを作ったり)をしていた。

そんな中で偶然参加したAndroidアプリコンテストでは、既存のコードを解析して、自分たちで考えた要件を実装するといったことをどっぷり浸かってやっていた。

あれで雰囲気でしか掴んでいなかったJavaのクラスやメソッドからなるオブジェクト指向を理解して実装に取り入れる事ができたし、「正常に動いていたものを自分の頭に落とし込んで、独自のコードを書く」この繰り返しで大幅に自分は成長する事が出来たと思う

2つに共通していること

これら2つに共通している事は、「真似をする」こと、「0から作り上げるのではなく、未完成を完成に持っていく為に試行錯誤すること」だった。

人は、要件も不明確なものを0から作り上げるのは大きな時間と努力と、意志が必要で、**「8割完成していて残りの2割を自分でどうにかしなきゃいけない」**といったシーンで、「ちょっと頑張ってみるか」という気持ちになれるのではないかと考えた。

どうやって学ばせるか

今回の研修では、以下のようにした

初級編

Javascriptで書かれた200行程度のテトリスを題材とした、 これは、普通に実行すると「X字」のブロックが落ちてきたり、「ラインを揃えて消しても消した行数が反映されない」、「テトリスボードの大きさがめちゃくちゃ」といった仕様の問題を抱えている。 受講者は、まず手始めに慣れる事を目的としてこれらのコードの解析をしてもらいながら、正しく動くように実装してもらった。

もちろん、OSSで落としてきたコードなので、普通に見たらよくわからないコードの羅列だ。 そのため、私は日本語でコメントを大量に残す事を意識しつつ、答えを与えない程度のヒントを書き連ねた。

中級編

レガシーなテクノロジーを学んでも仕方ないし、PythonやRubyは他の部署で研修実績として取り扱っていたので、引き続きJavaScript/ Node.jsを使ったWEBアプリケーションを題材にした。

WEBアプリケーションはCLIプログラムとは違って

  • GUIアプリケーションとして実装する敷居がとても低い
  • 簡単に動くものが作れるので、達成感を味わいやすく、動く楽しさがモチベーションになる
  • WEB業界はやっぱ活発なのでその仕組をしってもらいたい

これらの理由からNode.js + Vue.js を使った未完成の簡易スケジュールアプリを作ってもらうこととした。

しかし、初学者が初級から中級に飛ぶにはとてもハードルが高かった

普段オペレーションやっている人間が割とモダンなテクノロジーでWEB開発をするって、かなりハードルが高いと思う。それこそ趣味でやっている経験があるレベルじゃないと、とても難しくて、投げ出してしまう。もし私が受講者の立場だったとしたら「こんなのは講師の自己満足研修でしかない」といって放り投げていたかもしれない、

そういった事も踏まえて、「初級」と「中級」の間にもう一つクッションを挟んだ

「チョットナレル」

WEB開発の登場人物(HTML5(PUG)/ CSS3(Bulma)/ Javascript(Vue.js)/ Node.js/ express)の役割を説明し、それらの基礎的な使い方を実践するセクションを挟んでみた

  • Expressにチョットナレル
  • Express + MySQLにチョットナレル
  • PUG & HTML5にチョットナレル

この3つの「チョットナレル」を一通り実践することで、「サーバとDBが連携し、フロントにデータを受け渡す」までの一連の流れを体系的に学ぶ事が出来る。 大体これらのレクチャーは2時間ぐらいかけて行い、その後、中級のスケジュール管理アプリの開発に着手してもらうといった形だ。

実施してみて

研修当日は、以下流れで行った。

  • 開催挨拶
  • アイスブレイク
  • 初級編
  • (お昼休憩)
  • チョットナレル
  • 中級編
  • 今後のお題

大体午後から本題のチョットナレル〜中級に取り組めるような形で、午前中はウォーミングアップの時間としておいた。

実施する前と後で、受講者は「プログラムを書く力」はつけきれていないものの、「プログラムを読む力」は少しずつ付いたんじゃないかなと思っている。

それに、「フロントエンドではこうする」、「バックエンドではこうする」といった仕組みを知っているのと知らないとでは実装の仕方に大きな差が出てくる。

今後の動き

お題として出した「スケジュール管理アプリ」は、未実装の機能がたくさんある。

例えば、

  • スケジュール登録画面はあるが、登録ボタンがなく、サーバへ送信(POST)もしていない
  • 編集機能がない
  • 削除機能がない
  • データベースにユーザの概念はあるが、マルチユーザ未実装

今後、受講者は3ヶ月かけて自宅や職場のスキマ時間を利用してこのアプリケーションの開発を行っていき、最終的に上記に加えて独自のアイデアで考えた機能を実装し、発表する所までを研修としている。

大方、これらを完遂させるためには「サンプルプログラムを読み込む」のと同時に「Googleで必要な情報を検索して自分の頭に落とし込む」事が必要になる。

もちろん、調べてもわからない、やりたいことがふわっとしていてどうやって調べたらいいかわからない、そもそも何から手を付けていいかわからない といったGoogleでも解決しきれない場合の為に、私がいつでもチャットで質問を受け付けるような仕組みにしている。

逆にここまで出来ると、「自分の力で要件が明確なものを作りあげる事が出来る」になると踏んでいる。 3ヶ月後、受講者は地獄のような試練を乗り越えてどのような成果を発表するのか、非常に楽しみです。

次回、1月ごろの結果を踏まえて続きを書こうと思う

/以上

よかったらシェアしてください!