きのこ先生
今年の新卒の研修に参加できることになり、twadaさんのエンジニア心構えの講演を聞けた。感想とメモを置いておく。
感想
twada先生の話で何度も強調されたのは「可処分時間が減るから効率的に学びなさい」ということだった。認めなければならないと思った。可処分時間が余りまくっていた学生だから勉強していたんだということを。学生の頃と比較してアニメを見る数は減っていないのに勉強する時間が減っている現状を思うと、可処分時間が減ったぶん、そのまま勉強する時間が減っているというのは自明だった。というわけで生活を見直すことにした。勉強することを生活の中心に据えなければこの先生きのこることはできないのだ。
メモ
- 2つの本を下敷きに今日話すことのテーマを持ってきた
- プログラマが知るべき97のこと
- 電車の中で1本読もうみたいな感じでやれる
- きのこ本
- 達人プログラマ
- プログラマのキャリアの考え方
- ひとつだけ持って帰ってほしいのは"学び続ける姿勢"(きのこ本の18番)
- プログラマは学び続けないと限界が来る
- どうやって学び続けるか
- "常にあなたの知識ポートフォリオに投資すること"(達人プログラマ)
- 技術を学ぶのではなく、技術の学び方を学ぶ
- 自分の自由に使える時間は短くなってく
- 効率よく学ばないとダメになってく
- 技術者におけるメタ認知とは何か
- Agenda
- 学び方を学ぶ
- 現役プログラマにいるために
- おわりに
学び方を学ぶコツ
四半期毎に技術書を読む(達人プログラマーより)
- 3ヶ月に1回は技術書を読む
- (ちょろいな。)と思ってない?これを20年続けるってどういうことかわかる?
- 初期のころは四半期よりもうちょっと頑張ったほうが良い
- 脱線して人間の学びの仕組みについて
- 感覚記憶(0.5~2sec)、短期記憶(15~30sec)、長期記憶(死ぬまで?)
- 長期記憶は入っているけどアクセスできなくなる(忘却)
- 脳のストレージは無限にあると考えて良いが、インデックスが貼られてないとアクセスできない
- ピッカーを育てる方法
- 反復練習(これは効率的だと知られている)
- 連想記憶を育てる(他の本や、技術と紐付ける)
- たとえば時系列に並べる
- (余談)1999年は当たり年でその後の20年のソフトウェアを牽引する本が出た
- (余談)アンディとデイブ(プログラミングルビーの著者、達人プログラマーの著者のうちのひとり)
- 本は過去の本、自称しか参照できないので、この本を書いたときはこの本は知っているだろう、ということがわかる
- DDDはrailsの登場によってソフトウェア開発が激変したことを知らない
- railsは登場より前に出た本に書いてあることをいいとこ取りしようとした
- railsの作者は2000年のプログラミングルビーを読んでいるだろうし、プログラミングルビーは達人プログラマーの著者の2人が書いてる、みたいな感じで紐付けていく
- railsの著者は過去の本を良く読んでいて、本に出ていたアイディアをプログラムとして実装したもの
- 時系列でまとめると次読む本を決めるヒントが得られる
- 過去方向に遡るか、未来方向に遡る
- 自分は読んだ時期とそのとき何があったっけをまとめたことがあるな
- たとえば時系列に並べる
手を動かして学ぶ(きのこ本より)
- 人ができるようになるのは強いFBループがあってこそ
- できるようになってからやるのでなく、やるからできるようになる
- FBサイクルを回すためにアウトプットする
- 最初は何が面白いんだコレと思うけどやっていくうちに好きになる
- 逆手に取って言うと、モノを始める際に感情は関係ない
- もうひとつ有名なやつで、デールの円錐という学習モデルがある
- ひとは2週間後にどれくらい覚えているか
- 読んだだけのモノは10%覚えている
- 聞いただけのものは20%覚えている
- 見たものは30%覚えている
- 見て聞くと50%覚えている
- ここまでは受動的な学習
- 発話したものは70%覚えている(議論とか説明したもの)
- 発話して行為を伴ったものは90%覚えている
- 同じだけの時間をかけても定着率が違う
- なんらかの形でアクティブに勉強しよう
- twadaさんがおすすめのやり方は写経
- twitter見て
- 全部やると辛いから、これはマスターすると決めたものは写経する
- 3ヶ月に1冊は写経でやるとか
- ほかは脳内インデックスを貼る
毎年少なくとも一つの言語を学習する(達人プログラマーより)
- この教えが一番有名だし実践している人もいるし難易度が高い
- どんな言語を学ぶ?仕事で使う言語が良いでしょう。
- 最初の数年は仕事で使う言語を深く学ぶ
- その先は仕事で使わない言語も学ぶ
- そのときのコツはパラダイムを段々変えること
- 動的な言語をやったら静的な型付をやるとか
- ちょっとずつ軸を変える。色んなものを変えすぎると自分の仕事にFBが弱くなってしまう。
- 違う言語の良いパラダイムを学ぶことで仕事で使う言語に輸入してくるためにこれをやる。
- 最初の数年の戦略とその後の戦略はちょっと違う
- 他の戦略としては、周りを見る。今後来そうな言語とか。
- 四半期に一回TECHNOLOGY RADARをthoughtworksから出るからそれを見てみる
- 専門分野において↑を見て手をつけるのは遅い。答え合わせみたいな感じで使う。専門外は参考にする。
- あとは英語やろうね。英語の一次情報にスムーズにアクセスしましょう。喋れるまでいかなくてもスラスラ読めるように。
身の回りをプログラミング対象にする
- 上の疑問の答え。最初は仕事の言語でやるから良いけど、その後新しい言語を学ぶときにやることは身の回りのこと。
- twadaさんは出版社とのやり取りをプログラミングしている
アウトプットを行う
- 「人に教える」はよい
- アウトプット自体がインプットになる
- 量は質に転化する
- たくさんやろう
- アウトプットどこでやるか。twitterとかqiitaとか書籍、github。
- ブログを書くことについて
- 「新規性のあること書けないです」
- 情報発信、blog、発表、公開などは数学の証明ではなく、料理のようなもの
- 二番煎じでも三番煎じでもいいよ
- "いつ書かれたか"も大事。バージョンを記す。日付を記す。
- 意見でもよい。使ってみてこう思ったみたいなやつ。
- ブログって日本だけ?海外のブログ文化みたいなの無いんですかね?<?
- 雑誌とか
- ブログか講演から声がかかるよ
質問
- Q.今は本で学べばいいんだっけ?
- A.2000年代は本がトレンドを引っ張ってた。今は企業が引っ張ってる。
現役プログラマでいるために
毎日コードを書く
- twadaさん、今は40歳。プロとしてコードを書いてお金をもらい始めたのは20歳くらい。
- John Resig、jQuery作者。週末にコードを書くの頑張ろうとして失敗した。
- 平日と同じ馬力で書けない。土日全部空いてるわけではない。Write Code Every Day.
- 毎日コードを書くこと。コードを書いてからブログ、ドキュメント書くこと。
- 意味のあるコードを書くこと。可能ならばリファクタリングもカウントしない。
- 日が変わる前に終わらせること。
- 書いたコードをすべてgithubにpushしOSSにすること。
- 必要最小限のコードへの集中
- 30分とか1時間しか空いてない日もある。短いコードで意味のあるコードを書かないといけない。
- プログラミングの習慣化。
- 不安との戦い。進んでいるという実感は、実際の進捗と同じくらい大事。
- 週末の過ごし方。他の日もコードを書いているので、土日に躍起にならなくなった。
- バックグラウンドにコーディング状態ができた。
- コンテクストスイッチがなくなった。
- ワークライフバランスがよくなった。毎日続けるにはバランスが大事。
- まわりからの理解。毎日コードを書くを公言した。
- どれだけコードを書いたか。
- 続けるコツ
- 小さなイライラを無視しない(ちょっとした改良を続ける)
- 有名になると自然に仕事が増える
- 自分のためのツールをコツコツ作る
- 勤太郎CLIとか
- 住む場所を工夫する
- 意図的にオフライン時間を作る。
- やや遠くなっても良いので始発駅に住む。座れるから。
- or 会社の近くに住む。
年下から学ぶ
- 一生プログラマーでいれるかどうかは、言い換えれば年下から学べるか否か。
- イノベーションは年下から起こる。
- 世の中が変わったことに気づけなくなる
- ベテランはベンチマークとアンラーニングが必要
- 積極的に外部に出て自分のスキルを相対化する
- 使う道具を定期的に変える
- 若者から学ぶ
- 若者と同じ土俵で競う
- ペアプロ
過去から未来を学ぶ
- 技術は振り子のように見えるが螺旋
- デブサミ講演参照(これは僕も前聞いた)
- 行ったり来たりしているから、過去のブームを知っていれば、今のブームは差分を見れば良い
人の作る渦を見る
大事なことに集中する
- エッセンシャル思考
- 自分の中で大事なこととそうでないこと