imple is Best

レッスンを始める前に

この記事は投稿から 3 年以上経過しています。
最新の情報は各種公式ドキュメント等をご覧下さい。

少し前に友人からプログラミングを教えてほしいと言われたので、これはいっちょやってやるかと意気込んで色々本格的に教えることにした。

私も友人も、フィンランドに留学中で非常に時間がある。なので、1つの言語のみをみっちり教えるのではなく、言語以外の考え方やサービスの使い方などさまざまな視点から総合的にエンジニアとしての頭を作っていこうかなと考えている。日本で小中学生に対して言語のみを教えることはやっていたが、今回のように1からエンジニア脳を育てるというのははじめて。色々今後に活かせることが多いと思うので、このようにして毎レッスンごとに記録を取っていこうと思う。

レッスンの目標

最大の目標はやはり「エンジニア脳の構築」。ある程度自力でコードが組めて、わからなかったらとりあえずリファレンス読んで、エラー出たらググった大半は解決できますというレベル。しかし、帰国まで残り3か月しかないのであまり満足の行くようなところまではいけないと思う(経験値的に)。日本ではそれぞれの高校生活や大学受験があるので、帰国後にこのレッスンを続けていくのは難しい。なので最低限、レッスンが終わってからも独学でプログラミングが続けられるようにはしてあげたい。プログラミングは合う合わないが激しいものなので、もし合わない場合はこんな世界もあるんだよという紹介程度になればいいかなとは思う。

2020年度よりプログラミング教育の義務化が始まり、私達より若い世代がより論理的思考力に強くなると期待されている中、本レッスンを受けた我々も負けはしないぞと言えるぐらいにはなって欲しい。

レッスンの概要

私が今考えているものは以下の通り。

  • C言語
  • MarkDown
  • Git & GitHub
  • Nodejs(ES6+)
  • ググり方
  • 記事の内容をどれくらい信頼するか
  • エラーに出会ったときの対処法
  • 日々の情報収集
  • 各サービスの使い方

今どきではないC言語スタート型。私の主観だが、C言語はいい意味でも悪い意味でも文法に癖がなく、素直な書き方ができる(最近のモダンな言語に比べてと言う意味)。あとコンピュータ上で情報がメモリに保存されていることを早いうちに理解するのにもちょうどいい気がする。変数の説明に箱型とかラベル型などは使わず、メモリに0と1で保存されているということを教える。幸い時間はたくさんあるので、多少理解に時間がかかっても大丈夫だ。

C言語をある程度(ポインタとか構造体辺りかな)教えたら、JavaScript を教える(要望によって変えるかもしれない)。Nodejs と書いているが実質は ES6 を教えるだけ。わざわざ HTML とかを教えるのが面倒くさい。なんか最近バックエンドからブラウザ以外のクライアントまで JS で組めるようなので、とりあえず JS を知っとけばなんか気に入ったものができるかなという楽観的考え。いくら ECMAScript と呼ばれる仕様書ができたとは言え、まじかよっていう挙動があったり年々変な方向に行ったりして教えるにはひと癖もふた癖もあるが、頑張る。可能であれば Java とか Go も同時に教えたいがそれはなかなか負担かなと思う。

その他はエンジニアが普段何も考えずに使っているものばかりだと思う。総合的にエンジニア脳を育てていくというのはこういうこと。

Lesson 0

まずは Lesson 0 と称してレッスン全体の目標やどのような進め方をしていくかを紹介した。レッスンで利用するツールのアカウント作成や、各自のPCのスペックを確認もした。

Lesson 0 で利用したスライドは こちら

レッスンの流れ

まずは私がスライドやその他資料を利用しつつ色々伝える。講義形式ではあるが、私含め4人と少人数なため、ひとりひとりの疑問を丁寧に解説していく予定。このときは Google Meet を利用する。私が G Suite を契約しているので、それを利用する。手動で URL を発行する場合は組織外のアカウントと通話するのに毎回許可をしないといけないが、Google Calendar でゲストとして登録しておくと自動で承認された状態の Meet が利用できるらしい。そこら辺の事情も含めてレッスンのスケジュールは Google Calendar で管理をする。

私の講義(?)が終わると実践タイムに入る。最初は PaizaIO を利用してオンラインコーディングをする。頃合いを見て各人ローカルに開発環境を構築する。このとき、一緒に Git と GitHub を教えて課題やサンプルコードを GitHub 経由で渡せるようにしたい。ここまでは Meet でつなぎながら進めていく(コーディングなどは原則各自のペース)。

最後に1レッスン通じたまとめを各自で書いて Qiita へアップロードする。これは通話後に各自のタイミングで行う。まぁ、ある意味課題。次回のレッスンまでには投稿しておいてもらう(認識が曖昧と感じたところは今後のレッスンで重点的に教えていきたい)。私の課題はこうやって教え手としての記録を取ることと、次回の教材を作ること。

なんでわざわざ Qiita を使ってまとめなんか書くかという理由は次のセッションに含まれている↓

インプット・アウトプット

プログラミングに限らず何か学ぶ際にはインプットとアウトプットをするところを定めておくと続きやすいし、ものになりやすいというのが持論。なのでまずはどのように知識を得て、どのようにアウトプットをするのかというところを説明した。

インプットは主に私からのレッスンやネットからの情報。とりあえずググる癖をつけようという話をした。何でもかんでもググるのは良くないと言う風潮もあるが、もうすでに高校生で、しかもプログラミングに関することであればウンウンと小一時間悩むよりササッとググったほうが時間も節約できる。このときに「なかなか自分の欲しい情報がパッと出てこない」という話があったので、少しみっちりググり方を教えていこうかなと思った。Google 先生のお陰でかなり自然言語に近い形で検索できるようになったとは言えど、やはり検索エンジンに向いた単語の使い方などがあるので、全体を通して身につけていってほしいなと思う。

アウトプットは実際にコードを書くことと Twitter、そして Qiita。釣りが多くなってきた Qiita ではあるが、やっぱり日本エンジニア界隈では有名なプラットフォームであり、各自でブログを開設することに比べると変な責任感もなく軽い気持ちで続けていくことができる。もしレッスンを通じて本格的にプログラミングの世界に入った場合、Qiita の記事はひとつの財産になる。全員タイピングの計測をして、レッスンを聞きながら軽くメモを取ったり、Slack などでとくにストレス無くスムーズに会話が進められるレベルであることは確認した。なので、タイピングによるアウトプット障壁は少ないと考えられる。あとマークダウンに早いうちから慣れてほしい。

利用するサービス

最後にレッスンで利用する予定のサービスのアカウントを取得して終了とした。

事前に Gmail を持っていることを確認していたので、まずは GitHub のアカウントから取らせた。GitHub へ Push できるようになるのはもちろん、Issue を用いた軽い課題管理や、PR でコードレビューができるレベルまでにはなって欲しい。GitHub アカウントがあると他のサービスも大体連携で取れるのでまずは GitHub を取らせた。

次に Qiita と Paiza のアカウントを取らせた。Paiza はスキルチェックに使う予定。

所感

私が主導で何かをやる場合、よく色々なツールをバコバコ詰め込んで他の仲間を混乱させてしまうということが起こる(悪い癖とは分かりつつも各ツールに慣れてしまうとどうしても使いたくなる)。今回も例に漏れずさまざまなツールを駆使してやっていくので、計画段階で少し心配ではあったがやはり新しい世界に興味があるのかとくに反感もなく各ツールの説明を聞いてくれた。レッスンを進める上で致命的な理解不足が無ければ多少辛くても今の状態を続けようと思う。色々なツールと言えど Slack や G Suite、GitHub などほとんどデファクトスタンダードであるツールばかり。ぜひ時間のある今のうちに色々挑戦しながら使い慣れていってほしいなと思っている。

次回はいきなりコーディングをするのではなく、「コンピュータとは何か」や「コンピュータの五大機能」などすぐに役に立つわけじゃないが後々効いてくる基礎知識中心のレッスンをしようと考えている。RAM や CPU、入出力装置、記憶装置から学ぶ入門者はあまりいないかなと思っている。しかし、これをせずに進んでいくとそのうち少し複雑な処理をしようとして詰まってしまうのではないかなと私は思う。ので、みっちりやっていく。