Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プログラミング写経のすすめ
Search
Minoru Natsutani
October 17, 2024
Technology
0
570
プログラミング写経のすすめ
Minoru Natsutani
October 17, 2024
Tweet
Share
More Decks by Minoru Natsutani
See All by Minoru Natsutani
ロボット模倣学習勉強会
natsutan
0
45
スモールデータ勉強会発表資料
natsutan
1
860
Robotics勉強会資料
natsutan
0
42
Human-in-the-loop機械学習社内勉強会
natsutan
0
1.2k
linear.pdf
natsutan
1
260
FLTV_i.pdf
natsutan
1
93
Gauche-Tkで簡単GUIプログラミング
natsutan
3
1.5k
Other Decks in Technology
See All in Technology
Microsoft Azure全冠になってみた ~アレを使い倒した者が試験を制す!?~/Obtained all Microsoft Azure certifications Those who use "that" to the full will win the exam! ?
yuj1osm
2
110
なぜCodeceptJSを選んだか
goataka
0
160
マルチプロダクト開発の現場でAWS Security Hubを1年以上運用して得た教訓
muziyoshiz
2
2.2k
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
180
watsonx.ai Dojo #5 ファインチューニングとInstructLAB
oniak3ibm
PRO
0
160
統計データで2024年の クラウド・インフラ動向を眺める
ysknsid25
2
840
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
PHPからGoへのマイグレーション for DMMアフィリエイト
yabakokobayashi
1
170
KubeCon NA 2024 Recap / Running WebAssembly (Wasm) Workloads Side-by-Side with Container Workloads
z63d
1
240
[Ruby] Develop a Morse Code Learning Gem & Beep from Strings
oguressive
1
150
MLOps の現場から
asei
6
640
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
150
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Six Lessons from altMBA
skipperchong
27
3.5k
It's Worth the Effort
3n
183
28k
Fireside Chat
paigeccino
34
3.1k
Code Review Best Practice
trishagee
65
17k
How STYLIGHT went responsive
nonsquared
95
5.2k
Writing Fast Ruby
sferik
628
61k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
5
440
The Pragmatic Product Professional
lauravandoore
32
6.3k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
Transcript
プログラミング写経のすすめ 2024.10.17 1 @natsutan
アジェンダ 2 ・写経イントロダクション ・初級編 ・中級編 ・上級編 ・写経の先に
写経イントロダクション 3
4 プログラミングにおける写経とは 書籍に書かれているコードをそのまま写し動かしてみる行為 ・コピペは基本NG ・Copilotも基本NG ・写すだけじゃ無くて動かす ・宗教的な意味での写経とは無関係(とする) 写経から得られる物 ・プログラミング言語の基本文法の理解 ・コーディングをする際のメタスキルの向上
・コーディングにおける基本スキルの向上 ・中規模開発の設計能力 自分自身のレベルによって適切な写経教材を選ぶことで、どのレベルであっても技術力が向上する。
5 写経は素振り プロ野球選手でも素振りをする。 プロに入れる時点で凄い能力を持っているにもかかわらず練習として素振りをする。 超一流選手の素振りエピソードも多い。 語学の勉強 少しずつで良いから毎日継続する事が大事。 読む、書く、シャドーイング、自分のレベルにあった事を毎日する。 自分で目標を立てて継続してプログラミングの勉強をできる人はそれをやりましょう。 そうで無い人は写経を日々の勉強として写経をしよう。
写すだけだから簡単。
6 写経を取り巻く環境はよくなっている 写経はどんどんやりやすくなっている。 最近は難しめの内容でも最後まで行けるように工夫されているので頑張ってやろう 書籍のみの時代 CDROMとインタ ーネットの時代 書籍に全ソースコードが印刷されている。 規模的には小さめのプログラムのみ 例:ベーマガ(マイコンBASICマガジン)
ソースコードがCDROMに入っていたり、インターネッ ト経由でダウンロードできるようになる。 サポートページの 時代 出版社や筆者のサポートページが増えていく。 正誤情報が早く正確になっていく。 Githubの時代 ソースコードがgithubで公開されるようになる。 書籍の内容とbranchが対応していて、大きなプログラム でも写経しやすい。
7 自分に合ったレベルのテキストを選ぶ 写経を3つのレベルに分けて説明します。 自分のレベルにあった写経テキストを選ぶのが大事です。 初級 プログラミングを今から始める人。新しいプログラミング言語に挑戦するときはここから。 開発環境の構築と基本的な文法を学ぶ 中級 特定のテーマに沿って写経をする。 そのテーマで使われるライブラリや、よくある決め事を身につける。
上級 3ヶ月~半年かけて一つの大きな物を作る 一歩進んだ設計能力とプロジェクトの進め方を学ぶ その先 写経の先の学習に挑戦
8 写経で考えていること Copilotの様な強いサポートがある時代だからこそ、自分でコードの善し悪しを判断できるようになり たい。 毎日30分だけは写経で良いのでプログラミングに向かう時間を作る。 写経での失敗は全く問題ない。ここで失敗して、実務に活かす。 毎日毎日プログラミングに向かうことで、何年か後には自然に良いコードが書けるようになりたい。 天才じゃないから努力でカバー。 本の著者に感謝しつつ、著者に少しでも近づけるようになりたい。
初級編 9
10 初級編でやること まずはPythonならPythonが自分のPCで動くとはどういうことかを学ぶ。 1.開発環境のインストール 2.IDEのインストール 3.プログラムの入力 4.実行する これを自力でできるようにする。 最初は誰でも難しいです。 これができると「◦◦やったことあります」って言えるレベル。
まずはここから。
11 初級編で買ってくる本の選び方 はじめての~とか、いかにも初心者向けの本を選ぶ。 その手の本は初心者向けに表紙もかわいく作ってあるので表紙も参考に。 チェックポイント ・開発環境のインストールが一から書いてあること。画面のスクリーンショットがあるとよし。 ・開発環境が自分の環境と一致していること 例えば自分はWindowsで開発したいのに、開発環境の説明がUbuntu中心の場合は避けた方が良い。 DockerやWSLという単語が出てきたら避けた方が良い。 ・エディタやIDEのインストール方法が書いてあること
色分けや構文チェックは、プログラミングの理解の強い味方。 ・中身がちょっとでも楽しそうと思えること。
12 3ステップでしっかり学ぶPython入門 最初の一冊向けの本を紹介 表紙がかわいい 開発環境のインストー ルが詳しい エディタのインストー ルが詳しい
13 実際に写経して実行して見よう エラーがでてもOK! エラーメッセージをゆっくり読んで、直してみましょう。 どう間違えると、どういうエラーがでるのかの経験を積むのが大事。
14 本と同じ結果が表示されるまでがんばろう 本と同じ結果が表示されるまで頑張りましょう。 上手く行ったら自分を褒める!
15 写経のチェックポイント 上手く動いたときのエディタ の色は注目してください。エ ラーがあるときは、色の雰囲 気が違います。 駄目な例 “~“の対応が間違ってる よく使う記号がキーボードのどこにあるのかもゆっくり覚えていってください。 最初はみんなわからないです。
16 その他お勧め本の紹介 第四版まで改訂されていて、内容はとても良いです。 文法の説明、取り上げられているトピックともわかりやすく、万人に お勧めできます。 ただ、開発環境の説明が初心者では混乱しそうな所があります。 一部ソースコードは記述が古くそのまま動かないところがあります。 周りに聞ける人がいれば、Pythonの最初の一冊にお勧めです。
17 その他お勧め本の紹介 弊社内で流行っているUnityの本。 イガグリのゲームがでてくるので、イガグリ本と呼んでます。 他の人と同じ本だと何かあったら聞けるので、最初の一冊にはお勧めです。
18 初級の終わり 開発環境をインストールして、何かコードを書き、動くかどうか確認できる所まで来ました! 初級の本を一冊終えても、まだまだ仕事とはギャップがあります。 よくあるギャップ ・実務ではGoogle ColaboratoryやAnaconda使ってない。そもそも使っちゃ駄目だったりする。 ・本のコードと実務のコードが全然違う。 ・本で使っているライブラリと実務のライブラリが違う。自分たちで作ったライブラリを使ってる。 ・コードレビューで変数名や関数名で指摘が入る。良い名前がつけれられない。
ギャップは一気に埋めようとしないで一つずつゆっくり埋めていきましょう。 実務とのギャップが理解できたら中級に進みましょう!
中級編 19
20 中級編では何か一つのテーマを扱った本を買ってくる 中身を見て興味がわいて、動かした結果が載っている本を探してきましょう。 チェックポイントは ・やりたい事と本の内容が近い事。 ・ソースコードと実行結果が載っていること ・章、項目毎の内容が独立していること 中級編で学べること ・その言語での定番ライブラリ ・その言語のよく見る書き方
・テーマにあった変数名、関数名
21 中級の本の例 オライリーの翻訳本があればお勧め。 質が高いレベルで安定してる そもそも原書が良い本でないと翻訳されない。翻訳 が出る時点で内容は面白い。 翻訳時に最新の環境で動作確認している。古い環境 に対する補足が入っている事が多い。 原書の時点でレビューされているのでソースコード の品質が高い。
翻訳の質も良く、専門用語は専門用語として正しく 訳されている。筆者の独自用語が無い。 オライリー以外にも良い本はいくらでもあります。 自分に必要な本を自分で選べるようになったら一人前です。
22 中級の本の例 ◦◦100本ノックとか、◦◦100問とかも、内容に興味があるならOK。 とにかくコードが載っていて、動かした結果がわかる物で、どこから初めても良さ そうな物を選んでください。 ソースコードを見て、格好いいな、こんなコード書けるようになりたいなって思っ たら写経する価値があります。 写経に向かない本 ・プログラミング◦◦のように、文法を一通り説明する本。定番ライブラリの使い方はあまり載ってなく、挫折しやすい ・独自の「◦◦駆動××」みたいな用語を使っている本
・変数がx, xxみたいな本。 ・フォントいじりしている本 この辺は当たり外れがあるので、最初は避けた方が良いです。
23 機械学習のエッセンスを写経 機械学習のエッセンスp270から 実行結果
24 写経で学べること 定番ライブラ リの記述 _を使ってルー プ変数を使わな いことを明示 ループの前に空 リストを作り、 ループの中で
appendする。 乱数を使うとき はseedを設定 グラフを並べる 書き方 気になる所があれば調べるが、一つ一つ公式ドキュメントを調べたりはしない。 動けばOKです。その代わりに毎日続ける。 なんかseed使ったなくらいが記憶に残れば十分
25 中級の終わりに 写経を続けることでこのような知識が自然に身につきます。 条件分岐や繰り返しのバリエーション 実務でプログラムを書いたとき、写経したことが無いパターンになったら処理を理解できていない可能性が高い。やり たいことをちゃんと整理できてないから上手く書けない。 よく使われる関数名、変数名 円周率はpiを使うとみんなわかりやすい。書きたいプログラムで普通に使われる名前を選べるようになる。有名ライブ ラリで使われている関数名、変数名は自分がプログラムを書くときの良いリファレンスになる。例えば統計の処理を書 くときは、平均はaverageではなくmeanが良く使われる。
「こういう処理を書くときに普通はこうするよね」の普通を身につける。 たくさんのコードを見るのが一番の近道で、写経を続けることで普通を身につける。 継続が自信につながる
26 写経の縛りプレイ 毎日写経をやっていると飽きるので、時々縛りプレイを入れて楽しむ。 縛りプレイ1 絶対キーボードを見ない。記号もキーボードを見ないで頑張ってみる 縛りプレイ2 エディタの機能を一つマスターする。 例えば、関数の先頭にジャンプ(ショートカット)を覚えて、その日だけはその機能を使い続ける。移動にマウスやカ ーソルキーを使わない。 視線を画面から外さないようにするとコーディングの速度が上がります。
集中力を保ったままいろんな操作ができるようになります。
27 写経でCopilotはありか?コピペはありか? CopilotはOFFにしよう このレベルのソースコードだと、やりたい事をコメントで書くだけで100%動くものを出してきます。写経の意味が無 くなるので、写経中はCopilotをOFFにしましょう。 コピペは状況次第 どうしても動かすことができず、手元にソースコードがある場合は、コピペして動かしてみよう。 まれに、コピペでも動かないときがあります。その時は次に進みましょう。 挫折して写経を止めてしまうよりは、コピペしてでも先に進んで毎日続けよう。
上級編 28
29 上級編は冒険 三ヶ月から半年かけて、大きめのプロジェクトをやりきる。 ・何もないところからプログラムを書く力 ・中規模なプログラムのマイルストーンの作り方 ・マイルストーンでの動作確認方法 ・実践的な関数分割、クラス設計、エラー処理 大作RPGを攻略サイトを見ながら進めるイメージ 根気があればだれでもクリアーできる。 レベルアップ!
30 上級編の本紹介 三冊まとめてやってほしい。 既存のライブラリを使わず自力 でDeep Learningのフレームワ ークを作る本。 https://www.sigbus.info/compilerbook ライブラリを使わずに Cコンパイラを作る本。
OSを1から作る本。 USBに入れて自分の PCでブートする。 最近の本の中で、写経して楽しかったものを紹介します。
31 Githubが写経の味方 だいたい全部githubに全コードがあり、進捗がtagとして管理されてます。 例:ゼロからのOS自作入門のgithub https://github.com/uchan-nos/mikanos 書籍は30日で作る体裁になっ ていて、それぞれの日に対応 するソースコードが取得でき る。これは必ず動く 絶対完走できる!
32 Githubで差分を取る https://github.com/uchan-nos/mikanos/commit/78425a08c2a9c32aad466f2f41564c035c19c131 tagがついているので、差分が取れます。 書籍では全ての変更点について記載されていないことがあるので、書籍とこの差分を追いながら変更 点を写経していきます。
33 プロジェクトの進め方を学ぶ 中規模のソフトウェアの作り方が学べる 写経を通して上手く行くプロジェクトを体験しておくことが、スキルアップにつながります。 土台 土台をしっかり作って、機能を少 しずつ足していく流れを体験出来 る。これは実務での経験不足をカ バーしてくれる。 写経で学べるプロジェクトの進め方
駄目な進め方 適切にモジュール化出来てない 後から機能を足そうとすると破綻する。 そもそも各機能が上手く結合できるように 作られてない。
34 ゼロからのOS自作入門の場合 新しい機能を追加するときは、まずmainで動かしその後切り出す。 このループをずっと繰り返す。 こういう開発手法を学べる。 新しい機能をmain関数に追加する。 main関数で動くことを確認する。 main new main
new new 動いた部分を切り出し、インターフ ェイスを定義し、あるべき場所へ移 動させる。同じように動作すること を確認する。
35 関数、クラスの設計力が上がる 中級の写経は関数やクラスが無くてもなんとかなる規模のプログラムを書く。 上級ではしっかり設計した関数、クラスが出てくる。 写経しながらその設計思想を学んでいく。 段階を経て機能を増やしていくので、設計初期のクラスが途中で他のクラスに置き換わったり、統 合されたりしていく様子も体験出来る。関数、クラスの役割分担(責任範囲)に敏感になれる。 良いクラス設計を知っていると、実務でやるときに変な設計になりかけたときにブレーキがかかる。 レビューするときも、駄目なコードは嫌な感じがするので、上手く整理して言語化していく。 なんか設計がすっきりしてない
ぞ。どこが問題なんだ・・・
36 守破離の破を学ぶ 中級までで教科書的な書き方を学び、それに沿って書けるようになる。 次はそこから外れるケースを学ぶ。How toではなく、考え方を身につける。 エラーの通知方法を学べる。 中級まではエラーの処理が無かったり、文法の説明で終わる。上級ではエラー処理と実践的な通知方法を学べる。 ここにはエラーを無視するも入り、どんなときならエラーを無視して良いのかを学ぶ。 トリッキーな制御を使う時を学べる 単純なループになっていないときに、なぜ出来ないのかを考える。筆者が苦労したところなので解説がある。
ややこしい依存関係を学ぶ どうしても綺麗に書けないところがでてきて、なんでそうなるのかを考える。 小さい変更の影響範囲を学ぶ。 一部の機能を変更したときに、どこまで影響があるのか。想像していたより変更が少なかったり、大きかったりを 体験する。 実践的なテスト技法を学ぶ 最小限の労力で、上手くテストする手法を学ぶ。 XUnitやPytestのようなテストのフレームワークだけがテスト手法では無い。
37 コピペをするとき 上級の写経では場合によってコピペします。 自分の力で絶対デバッグ出来ない箇所 結構ボリュームがあり、ここを写し間違えたら手も足も出ないような所はコピペします。 動かなくてもう嫌になったとき 止めるくらいならコピペして先に進みましょう。 最後までやりきることの方が大事です。 差分を取ろう コピペをする前に、この後説明するソフトを使って差分を調べよう。
これでだいたい間違いがわかるはず。それでも駄目ならコピペしよう。
38 写経に役立つツール類の紹介 写経を続ける為のツール。 何もしないでやると続かないので、あの手この手で継続する。 ・github ・WinMerge ・qovo.jp ・メモソフト ・SNS
39 Github 一人gitでgitになれよう。 草生やす運動。 リポジトリをPublicにしておくと業務中になんか書いたことある・・・という時に自分のソー スを探す事ができます。 草生やす
40 WinMerge どうしても動かないときの手段 WinMergeを使うとソースの差分が見れます。 これを使って、正解のコードと自分が写経したコードを比較できます。 怪しい関数をよく見ると間違いがわかることがあります。 実務でも役に立つソフトなので、使えるようにしておきましょう。
41 Qovo 簡単な進捗管理ツール。ポモドーロ、バーンダウンチャートに使ってます。 今やっている 勉強を登録 本の章立てを そのままタス クに ポモドーロタイマー バーンダウンチャート
日々の勉強時間の確認
42 メモソフト 良いのを模索中 実行したコマンドの履歴や、写経のデバッグ過程、参考にするURL等を記録する。 30分でさっと続きをしないといけないので、仕事よりも詳しく書く。 一週間、二週間と間が空いた時に再開しやすい。 TaskPrize Obsidian
43 SNS 勉強の進捗を毎日SNSへ上げていくと最後まで行きやすいです。 なかなか最後まで進められない人は是非やってみてください。
44 写経して良かった本達
その先 45
46 写経の次は 少し変えてみる 新しい機能を追加するのは難しくても、少し表示を変えるくらいなら簡 単。 別の言語で実装してみる 別の言語で実装することで理解が深まる。 理解していないと動かせない。 別の言語に該当するライブラリがない場合、自分でその機能を実装する。 写経を超えた次の冒険へ繰り出そう
ゼロから作るDeep Learning⑤をRustで再実装中
47 まとめ プログラミングのスキルを上げるためには写経はとても有効。 素振りだと思って毎日やろう 写経にもレベルがあるので自分のレベルにあった本を選びましょう。 初級の写経が終わっても、まだまだ写経は有効です。