令和のプログラミングの教え方
はじめに
こんにちは。テスト自動化アーキテクトの牧野です。最近ダーツを始め、カウントアップで400がちょくちょく出るようになってきて楽しくなってます。
弊社は公認ダーツ部があり、いくつかの大会にも参加させていただき、ダーツ祭り企業対抗戦ページ に社名が掲載されている通りこちらにも参加致します。本記事が公開されているころには既に本イベントが終わっているかもしれませんが、社内・社外問わずよろしくお願いします。
イントロダクション
現代のプログラミングにおいて求められる知識は非常に多いです。
昔が少ないわけではありませんでしたが、あらゆるテクニックやツールが普及し、個人が発揮できる出力の最低値は確実に高くなり、公式・個人問わず学習リソースは増加し、その形態も紙書籍や英語のマニュアルだけではなく、動画による解説やWeb上で実行できるインタプリタを通した実践など多岐にわたります。
選択肢が非常に多く、学ぶことや初めの一歩を達成する難易度は下がったかもしれませんが、学ぶ知識や方法の取捨選択の難易度は上がったかもしれません。プログラマーは独学で知識を身につけられた方が多く、新しい技術の習得のためその方法に慣れるべきかもしれませんが、取捨選択の難易度を下げるためにもはじめは適切な教育を受けたほうが良いのではないでしょうか。
本記事では、現代のプログラミングを始める方に向けた学習・教育の方法について、プログラマーだけでなく 技術に興味を持つすべての方に向けて解説します。
本記事では特に断りがない場合、TypeScriptとその周辺ツールを学習対象とします。
習得するべき項目
プログラミング言語(本記事ではTypeScript)
現代開発ツール
Git
GitLabやGitHubなどのリモートリポジトリ
パッケージマネージャ
プロジェクト作成からビルドまでの一連の経験
プログラマーの常識
変数名の付け方
コメントの書き方
美しいコードとは
プログラミング知識の調べ方
参考にすべきWebページ
書籍の選択と購入の方法
本記事では以上の知識を学習・教育するためのリソースや方法を紹介いたします。
学習の目標
プログラミングを経験し、達成した実績を得る
現代プログラミングのツールと利用方法を理解・経験する
現代プログラミングのプロセスを理解・経験する
プログラミングの学び方を経験する
学習・教育の際は以上が達成出来ているかを意識することで達成度を測りやすくなります。
推奨参考書
Web上のリソースが増えた現代でも紙の書籍は体系的な知識と高速・手軽に知識へアクセスできる優秀な学習リソースです。
個人的には、ブルーライトが発生しないこともオススメする理由の一つです。
プログラミングTypeScript
O'ReillyのTypeScript本は非常に優れたリファレンスです。体系的に言語知識を習得するために読んでもらい、分からない部分があったときのリファレンスとしても使ってもらいます。コーチは重要な章をマークし、予習復習や自習のガイドとして活用できるようにすると良いでしょう。
リーダブルコード
「リーダブルコード」は、平成時代の名著ですが、令和でも十分に使えます。良い変数名の付け方、美しいコードの書き方、「良いコード」とは何かを学ぶために最適な一冊です。
技術トレンドを問わず必要となる、普遍的な「プログラマーの常識」を学ぶために何度も読み直してもらいます。
プログラミングの教え方
座学
何もわからないまま実践しても、予想以上に達成感も知識も得られません。
実践を楽しく達成感のある充実したものにするために、学ぶべき事柄や用語について事前に少し学んでおきましょう。
用語
プログラミング中に頻出する用語について、学習を進めるために必要な範囲で用語を学ぶことをお勧めします。
少なくとも以下の用語について学習・教育することをお勧めします。
プロジェクト
ソース
「src」などメジャーな略称
プログラミング言語
TypeScript
実行環境
TypeScriptの場合
node.js
可能であればnodebrew
IDE
VSCode
ビルド
ビルドツール
tsc
デプロイ
バージョン管理
Git
パッケージマネージャー
npm
HomebrewやChocolatey,apt-get
実践
「現代的な」プロジェクト作成でHello Worldを作成し、テストと開発の実践により「現代的な」開発プロセスを経験・達成します。
本稿では主に教育者の立場で実践すべき事柄・事例を紹介いたします。
わからない時は詳解した書籍を活用し、少しずつ知識と経験を増やしてもらいます。
プロジェクト作成
最初にnpm initを使ってプロジェクトを作成する方法を教えます。無用な混乱を避けるため詳細な説明は避け、「このコマンドでプロジェクトを作成して」と伝え、毎回その方法で始めてもらいます。
Hello World
まずは簡単なプログラムを実行し、達成感を味わってもらいます。例えば、console.logで「Hello World」を表示させ、「おめでとうございます。これであなたはプログラマーです」等と言うことで達成感を感じてもらいます。
実装とテスト
四則演算、ユニットテスト、実装を覚えてもらうため、plus, minus, multiply, divideそれぞれの計算機能を持つクラスを作る課題を出します。最初にplusとminusを一緒に実装・テストし、multiplyは自分で実装・テストにチャレンジ、divideはテストから先に作り実装してもらいます。
進捗や学習者の状態を見て、べき乗のテスト・実装の課題を出すのもおすすめです。
ツールの教え方
ツールの目的や各種設定の詳細説明は後回しにし、まずは基本的な使い方を教えます。
作ったプロジェクトをPushさせる
学習の進捗を保存・確認するためにも、作成したプロジェクトをリモートリポジトリにPushしてもらいます。
初めは付き添い、ユーザー名やsshキー登録からリモートリポジトリの登録から初回Pushまで、ほぼ全ての設定を代わりに行うくらいが良いでしょう。Gitで初めてPushするまでのステップは非常に複雑かつ多く、これらの知識が必要となるのは少し後です。
Gitのcommitとpushを重視
頻繁にcommitやpushを行うことで、メッセージの書き方やリズムに慣れてもらいます。
リモートにこまめにバックアップを取る習慣が付いている方は意外かもしれませんが、慣れていないうちのcommit,pushは結構恐怖心があるものです。慣れてもらいましょう。
cloneは後回し
cloneは重要ですが実践する頻度が多くないため、経験を積みにくいです。
重要なのはもちろんですが、最低限必要なタイミングで、最低限教えるだけにとどめるほうががパンクを避けるためにも良いかと考えます。
branchも基本的に後回し
始めは複雑さを避けるためにもシングルブランチで学習してもらうことが良いでしょう。
cloneと同じ理由で実践の頻度も多くないため、触れずとも良いかと考えています。
本格的に開発に参加する段階までは優先度を下げます。学習の初期段階では基本的なcommit,push操作に集中してもらいます。
とはいえチームの状況によってはbranchを多用してもらうかもしれません。その場合は講義のたびにブランチを作成し、メインブランチのマージリクエストを作って講義の完了とするなどの方法でbranchの教育をすることをお勧めします。
パッケージマネージャや周辺ツールは最小限
活用の頻度が低く、復習がしずらく学習を深めにくいため紹介に留めて教えすぎないように注意します。
現代のプログラミングのツールは多いため取捨選択が必要となります。チームに求められるものに合わせて学習内容の取捨選択を行うことが重要です。
プログラマーの常識
変数やメソッドなどの命名や「美しいコード」とは何かといった、プログラマーが自然に持つ共通認識の身に着け方を学びます。
「リーダブルコード」を適宜読んでもらう
良い命名や「美しいコード」は身に着けるべきですが、経験が必要な知識です。
主観が入りやすい知識でもあるため、多くのプログラマーの共通認識である「リーダブルコード」から学んでもらう方針とし、都度一緒に読み合せる、書き方に悩んだとき本書を参考にすることを教える程度に留めることをお勧めします。
プログラミング知識の調べ方
参考にすべきWebページ
プログラミングに関する情報はインターネット上に豊富に存在し、新しい知識やツールを学ぶ際に活用すべきです。
ただし、信頼できる情報源を活用し効率的に知識を得るため、信頼すべきサイトがどのようなものか知っておく必要があります。以下に、参考になるサイトを紹介します。
MDN Web Docs (Mozilla Developer Network)
主にウェブ開発に関する情報が充実しています。JavaScriptやTypeScriptのリファレンス、CSS、HTMLの詳細な解説が揃っています。
公式ドキュメント
使用するライブラリやフレームワークの公式ドキュメントは、最も信頼できる情報源です。例えば、TypeScriptの公式ドキュメントは詳細で分かりやすいです。
GitHub
オープンソースプロジェクトのホスティングサービスです。リポジトリの中で他の開発者がどのようにコードを書いているかを学ぶことができます。また、プロジェクトのWikiやREADMEも各ツールの公式サイトと同様に有用な情報源です。
Stack Overflow
プログラミングに関するQ&Aサイトです。具体的な問題に対する解決策が見つかりやすく、多くのプログラマーが利用しています。
二次ソースのため情報の新しさや自身の課題に適用できるかを判断する能力は求められますが、やがて活用できるようになるべきでしょう。
可能な限り一次ソースとなる提供元の情報を活用する事が重要です。
ZennやQiitaのような個人が記載する記事は、情報の取捨選択の難易度が高く、初めは利用しないことをお勧めします。
本の買い方
インターネット上の情報も便利ですが、体系的に学ぶためには書籍が有効です。以下のポイントを参考にして、自分に合った書籍を選びましょう。
著者の経歴を確認
著名な開発者やエキスパートによって書かれた本は、内容が信頼できることが多いです。著者の経歴や専門分野を確認しましょう。
内容の確認
書店で実際に本を手に取って内容を確認できる場合は、目次や冒頭の数ページを読んで、自分に合ったレベルかどうかを確認します。
推奨書籍リストを活用
多くのプログラミングコミュニティや教育機関が推奨する書籍リストを参考にするのも良い方法です。
O'Reilly(オライリー) の書籍を活用
動物の絵の表紙が目印となるオライリーが刊行する書籍は一般に評判が良いものが多く、迷ったらこちらが出版している書籍を活用することをお勧めします。
終わりに
プログラミングを教えることがあり、その際に意識している事をブログにしました。
プログラミングを学ぶ理由も内容も様々になった令和の時代、教わる・教えるどちらの方にも本記事が参考になりましたら幸いです。
また、私がプログラミングを教えた一人が弊社のブログ記事を執筆しています。よろしければこちらもお読みいただき「スキ!」をいただけますと幸いです。
お問合せはお気軽に
https://service.shiftinc.jp/contact/
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/
PHOTO:UnsplashのBen Griffiths