Slide 1

Slide 1 text

プログラミング写経のすすめ 2024.10.17 1 @natsutan

Slide 2

Slide 2 text

アジェンダ 2 ・写経イントロダクション ・初級編 ・中級編 ・上級編 ・写経の先に

Slide 3

Slide 3 text

写経イントロダクション 3

Slide 4

Slide 4 text

4 プログラミングにおける写経とは 書籍に書かれているコードをそのまま写し動かしてみる行為 ・コピペは基本NG ・Copilotも基本NG ・写すだけじゃ無くて動かす ・宗教的な意味での写経とは無関係(とする) 写経から得られる物 ・プログラミング言語の基本文法の理解 ・コーディングをする際のメタスキルの向上 ・コーディングにおける基本スキルの向上 ・中規模開発の設計能力 自分自身のレベルによって適切な写経教材を選ぶことで、どのレベルであっても技術力が向上する。

Slide 5

Slide 5 text

5 写経は素振り プロ野球選手でも素振りをする。 プロに入れる時点で凄い能力を持っているにもかかわらず練習として素振りをする。 超一流選手の素振りエピソードも多い。 語学の勉強 少しずつで良いから毎日継続する事が大事。 読む、書く、シャドーイング、自分のレベルにあった事を毎日する。 自分で目標を立てて継続してプログラミングの勉強をできる人はそれをやりましょう。 そうで無い人は写経を日々の勉強として写経をしよう。 写すだけだから簡単。

Slide 6

Slide 6 text

6 写経を取り巻く環境はよくなっている 写経はどんどんやりやすくなっている。 最近は難しめの内容でも最後まで行けるように工夫されているので頑張ってやろう 書籍のみの時代 CDROMとインタ ーネットの時代 書籍に全ソースコードが印刷されている。 規模的には小さめのプログラムのみ 例:ベーマガ(マイコンBASICマガジン) ソースコードがCDROMに入っていたり、インターネッ ト経由でダウンロードできるようになる。 サポートページの 時代 出版社や筆者のサポートページが増えていく。 正誤情報が早く正確になっていく。 Githubの時代 ソースコードがgithubで公開されるようになる。 書籍の内容とbranchが対応していて、大きなプログラム でも写経しやすい。

Slide 7

Slide 7 text

7 自分に合ったレベルのテキストを選ぶ 写経を3つのレベルに分けて説明します。 自分のレベルにあった写経テキストを選ぶのが大事です。 初級 プログラミングを今から始める人。新しいプログラミング言語に挑戦するときはここから。 開発環境の構築と基本的な文法を学ぶ 中級 特定のテーマに沿って写経をする。 そのテーマで使われるライブラリや、よくある決め事を身につける。 上級 3ヶ月~半年かけて一つの大きな物を作る 一歩進んだ設計能力とプロジェクトの進め方を学ぶ その先 写経の先の学習に挑戦

Slide 8

Slide 8 text

8 写経で考えていること Copilotの様な強いサポートがある時代だからこそ、自分でコードの善し悪しを判断できるようになり たい。 毎日30分だけは写経で良いのでプログラミングに向かう時間を作る。 写経での失敗は全く問題ない。ここで失敗して、実務に活かす。 毎日毎日プログラミングに向かうことで、何年か後には自然に良いコードが書けるようになりたい。 天才じゃないから努力でカバー。 本の著者に感謝しつつ、著者に少しでも近づけるようになりたい。

Slide 9

Slide 9 text

初級編 9

Slide 10

Slide 10 text

10 初級編でやること まずはPythonならPythonが自分のPCで動くとはどういうことかを学ぶ。 1.開発環境のインストール 2.IDEのインストール 3.プログラムの入力 4.実行する これを自力でできるようにする。 最初は誰でも難しいです。 これができると「○○やったことあります」って言えるレベル。 まずはここから。

Slide 11

Slide 11 text

11 初級編で買ってくる本の選び方 はじめての~とか、いかにも初心者向けの本を選ぶ。 その手の本は初心者向けに表紙もかわいく作ってあるので表紙も参考に。 チェックポイント ・開発環境のインストールが一から書いてあること。画面のスクリーンショットがあるとよし。 ・開発環境が自分の環境と一致していること 例えば自分はWindowsで開発したいのに、開発環境の説明がUbuntu中心の場合は避けた方が良い。 DockerやWSLという単語が出てきたら避けた方が良い。 ・エディタやIDEのインストール方法が書いてあること 色分けや構文チェックは、プログラミングの理解の強い味方。 ・中身がちょっとでも楽しそうと思えること。

Slide 12

Slide 12 text

12 3ステップでしっかり学ぶPython入門 最初の一冊向けの本を紹介 表紙がかわいい 開発環境のインストー ルが詳しい エディタのインストー ルが詳しい

Slide 13

Slide 13 text

13 実際に写経して実行して見よう エラーがでてもOK! エラーメッセージをゆっくり読んで、直してみましょう。 どう間違えると、どういうエラーがでるのかの経験を積むのが大事。

Slide 14

Slide 14 text

14 本と同じ結果が表示されるまでがんばろう 本と同じ結果が表示されるまで頑張りましょう。 上手く行ったら自分を褒める!

Slide 15

Slide 15 text

15 写経のチェックポイント 上手く動いたときのエディタ の色は注目してください。エ ラーがあるときは、色の雰囲 気が違います。 駄目な例 “~“の対応が間違ってる よく使う記号がキーボードのどこにあるのかもゆっくり覚えていってください。 最初はみんなわからないです。

Slide 16

Slide 16 text

16 その他お勧め本の紹介 第四版まで改訂されていて、内容はとても良いです。 文法の説明、取り上げられているトピックともわかりやすく、万人に お勧めできます。 ただ、開発環境の説明が初心者では混乱しそうな所があります。 一部ソースコードは記述が古くそのまま動かないところがあります。 周りに聞ける人がいれば、Pythonの最初の一冊にお勧めです。

Slide 17

Slide 17 text

17 その他お勧め本の紹介 弊社内で流行っているUnityの本。 イガグリのゲームがでてくるので、イガグリ本と呼んでます。 他の人と同じ本だと何かあったら聞けるので、最初の一冊にはお勧めです。

Slide 18

Slide 18 text

18 初級の終わり 開発環境をインストールして、何かコードを書き、動くかどうか確認できる所まで来ました! 初級の本を一冊終えても、まだまだ仕事とはギャップがあります。 よくあるギャップ ・実務ではGoogle ColaboratoryやAnaconda使ってない。そもそも使っちゃ駄目だったりする。 ・本のコードと実務のコードが全然違う。 ・本で使っているライブラリと実務のライブラリが違う。自分たちで作ったライブラリを使ってる。 ・コードレビューで変数名や関数名で指摘が入る。良い名前がつけれられない。 ギャップは一気に埋めようとしないで一つずつゆっくり埋めていきましょう。 実務とのギャップが理解できたら中級に進みましょう!

Slide 19

Slide 19 text

中級編 19

Slide 20

Slide 20 text

20 中級編では何か一つのテーマを扱った本を買ってくる 中身を見て興味がわいて、動かした結果が載っている本を探してきましょう。 チェックポイントは ・やりたい事と本の内容が近い事。 ・ソースコードと実行結果が載っていること ・章、項目毎の内容が独立していること 中級編で学べること ・その言語での定番ライブラリ ・その言語のよく見る書き方 ・テーマにあった変数名、関数名

Slide 21

Slide 21 text

21 中級の本の例 オライリーの翻訳本があればお勧め。 質が高いレベルで安定してる そもそも原書が良い本でないと翻訳されない。翻訳 が出る時点で内容は面白い。 翻訳時に最新の環境で動作確認している。古い環境 に対する補足が入っている事が多い。 原書の時点でレビューされているのでソースコード の品質が高い。 翻訳の質も良く、専門用語は専門用語として正しく 訳されている。筆者の独自用語が無い。 オライリー以外にも良い本はいくらでもあります。 自分に必要な本を自分で選べるようになったら一人前です。

Slide 22

Slide 22 text

22 中級の本の例 ○○100本ノックとか、○○100問とかも、内容に興味があるならOK。 とにかくコードが載っていて、動かした結果がわかる物で、どこから初めても良さ そうな物を選んでください。 ソースコードを見て、格好いいな、こんなコード書けるようになりたいなって思っ たら写経する価値があります。 写経に向かない本 ・プログラミング○○のように、文法を一通り説明する本。定番ライブラリの使い方はあまり載ってなく、挫折しやすい ・独自の「○○駆動××」みたいな用語を使っている本 ・変数がx, xxみたいな本。 ・フォントいじりしている本 この辺は当たり外れがあるので、最初は避けた方が良いです。

Slide 23

Slide 23 text

23 機械学習のエッセンスを写経 機械学習のエッセンスp270から 実行結果

Slide 24

Slide 24 text

24 写経で学べること 定番ライブラ リの記述 _を使ってルー プ変数を使わな いことを明示 ループの前に空 リストを作り、 ループの中で appendする。 乱数を使うとき はseedを設定 グラフを並べる 書き方 気になる所があれば調べるが、一つ一つ公式ドキュメントを調べたりはしない。 動けばOKです。その代わりに毎日続ける。 なんかseed使ったなくらいが記憶に残れば十分

Slide 25

Slide 25 text

25 中級の終わりに 写経を続けることでこのような知識が自然に身につきます。 条件分岐や繰り返しのバリエーション 実務でプログラムを書いたとき、写経したことが無いパターンになったら処理を理解できていない可能性が高い。やり たいことをちゃんと整理できてないから上手く書けない。 よく使われる関数名、変数名 円周率はpiを使うとみんなわかりやすい。書きたいプログラムで普通に使われる名前を選べるようになる。有名ライブ ラリで使われている関数名、変数名は自分がプログラムを書くときの良いリファレンスになる。例えば統計の処理を書 くときは、平均はaverageではなくmeanが良く使われる。 「こういう処理を書くときに普通はこうするよね」の普通を身につける。 たくさんのコードを見るのが一番の近道で、写経を続けることで普通を身につける。 継続が自信につながる

Slide 26

Slide 26 text

26 写経の縛りプレイ 毎日写経をやっていると飽きるので、時々縛りプレイを入れて楽しむ。 縛りプレイ1 絶対キーボードを見ない。記号もキーボードを見ないで頑張ってみる 縛りプレイ2 エディタの機能を一つマスターする。 例えば、関数の先頭にジャンプ(ショートカット)を覚えて、その日だけはその機能を使い続ける。移動にマウスやカ ーソルキーを使わない。 視線を画面から外さないようにするとコーディングの速度が上がります。 集中力を保ったままいろんな操作ができるようになります。

Slide 27

Slide 27 text

27 写経でCopilotはありか?コピペはありか? CopilotはOFFにしよう このレベルのソースコードだと、やりたい事をコメントで書くだけで100%動くものを出してきます。写経の意味が無 くなるので、写経中はCopilotをOFFにしましょう。 コピペは状況次第 どうしても動かすことができず、手元にソースコードがある場合は、コピペして動かしてみよう。 まれに、コピペでも動かないときがあります。その時は次に進みましょう。 挫折して写経を止めてしまうよりは、コピペしてでも先に進んで毎日続けよう。

Slide 28

Slide 28 text

上級編 28

Slide 29

Slide 29 text

29 上級編は冒険 三ヶ月から半年かけて、大きめのプロジェクトをやりきる。 ・何もないところからプログラムを書く力 ・中規模なプログラムのマイルストーンの作り方 ・マイルストーンでの動作確認方法 ・実践的な関数分割、クラス設計、エラー処理 大作RPGを攻略サイトを見ながら進めるイメージ 根気があればだれでもクリアーできる。 レベルアップ!

Slide 30

Slide 30 text

30 上級編の本紹介 三冊まとめてやってほしい。 既存のライブラリを使わず自力 でDeep Learningのフレームワ ークを作る本。 https://www.sigbus.info/compilerbook ライブラリを使わずに Cコンパイラを作る本。 OSを1から作る本。 USBに入れて自分の PCでブートする。 最近の本の中で、写経して楽しかったものを紹介します。

Slide 31

Slide 31 text

31 Githubが写経の味方 だいたい全部githubに全コードがあり、進捗がtagとして管理されてます。 例:ゼロからのOS自作入門のgithub https://github.com/uchan-nos/mikanos 書籍は30日で作る体裁になっ ていて、それぞれの日に対応 するソースコードが取得でき る。これは必ず動く 絶対完走できる!

Slide 32

Slide 32 text

32 Githubで差分を取る https://github.com/uchan-nos/mikanos/commit/78425a08c2a9c32aad466f2f41564c035c19c131 tagがついているので、差分が取れます。 書籍では全ての変更点について記載されていないことがあるので、書籍とこの差分を追いながら変更 点を写経していきます。

Slide 33

Slide 33 text

33 プロジェクトの進め方を学ぶ 中規模のソフトウェアの作り方が学べる 写経を通して上手く行くプロジェクトを体験しておくことが、スキルアップにつながります。 土台 土台をしっかり作って、機能を少 しずつ足していく流れを体験出来 る。これは実務での経験不足をカ バーしてくれる。 写経で学べるプロジェクトの進め方 駄目な進め方 適切にモジュール化出来てない 後から機能を足そうとすると破綻する。 そもそも各機能が上手く結合できるように 作られてない。

Slide 34

Slide 34 text

34 ゼロからのOS自作入門の場合 新しい機能を追加するときは、まずmainで動かしその後切り出す。 このループをずっと繰り返す。 こういう開発手法を学べる。 新しい機能をmain関数に追加する。 main関数で動くことを確認する。 main new main new new 動いた部分を切り出し、インターフ ェイスを定義し、あるべき場所へ移 動させる。同じように動作すること を確認する。

Slide 35

Slide 35 text

35 関数、クラスの設計力が上がる 中級の写経は関数やクラスが無くてもなんとかなる規模のプログラムを書く。 上級ではしっかり設計した関数、クラスが出てくる。 写経しながらその設計思想を学んでいく。 段階を経て機能を増やしていくので、設計初期のクラスが途中で他のクラスに置き換わったり、統 合されたりしていく様子も体験出来る。関数、クラスの役割分担(責任範囲)に敏感になれる。 良いクラス設計を知っていると、実務でやるときに変な設計になりかけたときにブレーキがかかる。 レビューするときも、駄目なコードは嫌な感じがするので、上手く整理して言語化していく。 なんか設計がすっきりしてない ぞ。どこが問題なんだ・・・

Slide 36

Slide 36 text

36 守破離の破を学ぶ 中級までで教科書的な書き方を学び、それに沿って書けるようになる。 次はそこから外れるケースを学ぶ。How toではなく、考え方を身につける。 エラーの通知方法を学べる。 中級まではエラーの処理が無かったり、文法の説明で終わる。上級ではエラー処理と実践的な通知方法を学べる。 ここにはエラーを無視するも入り、どんなときならエラーを無視して良いのかを学ぶ。 トリッキーな制御を使う時を学べる 単純なループになっていないときに、なぜ出来ないのかを考える。筆者が苦労したところなので解説がある。 ややこしい依存関係を学ぶ どうしても綺麗に書けないところがでてきて、なんでそうなるのかを考える。 小さい変更の影響範囲を学ぶ。 一部の機能を変更したときに、どこまで影響があるのか。想像していたより変更が少なかったり、大きかったりを 体験する。 実践的なテスト技法を学ぶ 最小限の労力で、上手くテストする手法を学ぶ。 XUnitやPytestのようなテストのフレームワークだけがテスト手法では無い。

Slide 37

Slide 37 text

37 コピペをするとき 上級の写経では場合によってコピペします。 自分の力で絶対デバッグ出来ない箇所 結構ボリュームがあり、ここを写し間違えたら手も足も出ないような所はコピペします。 動かなくてもう嫌になったとき 止めるくらいならコピペして先に進みましょう。 最後までやりきることの方が大事です。 差分を取ろう コピペをする前に、この後説明するソフトを使って差分を調べよう。 これでだいたい間違いがわかるはず。それでも駄目ならコピペしよう。

Slide 38

Slide 38 text

38 写経に役立つツール類の紹介 写経を続ける為のツール。 何もしないでやると続かないので、あの手この手で継続する。 ・github ・WinMerge ・qovo.jp ・メモソフト ・SNS

Slide 39

Slide 39 text

39 Github 一人gitでgitになれよう。 草生やす運動。 リポジトリをPublicにしておくと業務中になんか書いたことある・・・という時に自分のソー スを探す事ができます。 草生やす

Slide 40

Slide 40 text

40 WinMerge どうしても動かないときの手段 WinMergeを使うとソースの差分が見れます。 これを使って、正解のコードと自分が写経したコードを比較できます。 怪しい関数をよく見ると間違いがわかることがあります。 実務でも役に立つソフトなので、使えるようにしておきましょう。

Slide 41

Slide 41 text

41 Qovo 簡単な進捗管理ツール。ポモドーロ、バーンダウンチャートに使ってます。 今やっている 勉強を登録 本の章立てを そのままタス クに ポモドーロタイマー バーンダウンチャート 日々の勉強時間の確認

Slide 42

Slide 42 text

42 メモソフト 良いのを模索中 実行したコマンドの履歴や、写経のデバッグ過程、参考にするURL等を記録する。 30分でさっと続きをしないといけないので、仕事よりも詳しく書く。 一週間、二週間と間が空いた時に再開しやすい。 TaskPrize Obsidian

Slide 43

Slide 43 text

43 SNS 勉強の進捗を毎日SNSへ上げていくと最後まで行きやすいです。 なかなか最後まで進められない人は是非やってみてください。

Slide 44

Slide 44 text

44 写経して良かった本達

Slide 45

Slide 45 text

その先 45

Slide 46

Slide 46 text

46 写経の次は 少し変えてみる 新しい機能を追加するのは難しくても、少し表示を変えるくらいなら簡 単。 別の言語で実装してみる 別の言語で実装することで理解が深まる。 理解していないと動かせない。 別の言語に該当するライブラリがない場合、自分でその機能を実装する。 写経を超えた次の冒険へ繰り出そう ゼロから作るDeep Learning⑤をRustで再実装中

Slide 47

Slide 47 text

47 まとめ プログラミングのスキルを上げるためには写経はとても有効。 素振りだと思って毎日やろう 写経にもレベルがあるので自分のレベルにあった本を選びましょう。 初級の写経が終わっても、まだまだ写経は有効です。