$shibayu36->blog;

プログラミングの話や自分の考えを色々と書いています。特にperl、emacsや読んだ本の話が多いです。

実践に繋げるように勉強する

を読んで、なんとなく気分が高まったので、自分の学習のことについて書いてみる。

以下の様なことを書いているつもり。

  • 勉強は実践につなげると知識が定着すると思っている
  • 実践課題を探すのではなくて、実践の目処のあるものを勉強する
  • 一番簡単な実践課題として、自分の言葉でまとめ直すということをしている

実践に繋げる

僕は勉強する時は、いろいろ本を読んだり、情報を調べたりして、まず知識をつけようとすることが多い。ただし、それだけだとだめで、実践しないと知識が定着せず、どんどん忘れていき、結局意味ないということになる。実践大事。

大事なのはわかってるんだけど、実践するのは意外と難しい。本に練習問題あったりすることもあるけどあんまり面白くないし、良い実践課題を見つけるのも結構難しい。

そこで最近は実践するために以下のことを意識するようにしている。

  • 実践の目処があるものを学ぶ
  • 自分の言葉でまとめ直す

実践の目処があるものを学ぶ

最近は、実践するものを探すのではなく、実践の目処があるものを学ぶというという方向のほうが良いのでは、と考えている。

実践の目処があるものって何かって考えたときに

  • 今まさに必要なもの
  • 今非常に興味があるもの

のどちらかを学ぶと良いのではないかと思った。


今まさに必要なものというのは分かりやすい。仕事でもプライベートでもなんでも良いのだけれど、今まさに取り組んでいる課題の中で知識が足りないと感じているものを学習する。必要なものを学ぶ時は、実践を探す必要が無くて、取り組んでいる課題自体が実践となる。

僕の例で言えばそこそこユーザ数が多いWebアプリ作らないといけないときに、DB周りがネックになりそうだったので、MySQLのインデックスの話学んだりした。そうすると実際にそれを作る中で、問題が起きたり、それを解決する方法を学んだ知識から考えたりできるので、それ自体が実践課題になった。


今非常に興味があるものというのは、直近で必要ではないのだけど、自分が本当に学びたいと思っているもののこと。自分が非常に興味があるものであれば、あんまり深く考えなくてもどんどんやりたいことが出てくるので、それを実践課題として利用できる。

僕の中で「非常に興味がある」という閾値は結構高めに設定してて、学習してるときに、今学習してると思わないくらいに興味が有ることしかやらないようにしてる。例えば、AWSでのインフラ構築とかChefみたいなツールは仕事では使わないので必要はないのだけれど、その辺りに非常に興味があったので勉強したりした。この時、単にそのツールを動かしているだけでも楽しかったので、あんまり勉強と思わずにいろいろ手をつけることが出来た。


まとめると

  • 実践するものを探すのではなくて、実践の目処があるものを学ぶようにしている
  • 実践の目処があるものは、今必要なものか興味があるものだと思い、そういうものを選ぶようにした

自分の言葉でまとめ直す

出来るだけ実践が出来る物を学ぶといったけど、とはいえ物によっては、実践のタイミングを逃してしまったりすることもある。そんな時どうしたら良いだろうと考えた時、一番簡単な実践課題として、自分の言葉で一度勉強したことをまとめ直すということをすると、頭の中が整理されて少し知識が定着するのではないかと思った。

そこで僕は何かを学んだ時、それを必ずブログとかにまとめ直すようにしている。まとめ方はなんでも良くて、自分の好きなようなまとめ方をしたら良いと思うけど、コピペではなく自分で構造とか整えなおしてまとめた方が良い。とにかく自分の言葉でまとめるというのが大事。

例えば

みたいな感じ。

せっかく学んだのだから、少しでも身につけたい。そのために簡単にまとめ直すのは、かかる時間がそんなに多くない割に学習効果高いような気がしている。

まとめ

時間は結構限られているので、何か学ぶ時は出来るだけ役に立つ知識を効率的に学びたい。今回は上のようなことを書いたけど、他にもいろいろやり方がありそう。こういうことに気をつけているということがあったら教えて下さい。

液体チョーク

最近ボルダリングに行っていて、少し登れるようになったからか、手がすべるようになってきたので、チョークを買うことにした。

粉チョークか液体チョークかで迷ったのだけど、ひとまず安いというのとチョークがどういう感じか知りたかったので、液体チョークを買ってみた。

買う時に聞いたけど、液体チョークだけだと最終的に滑り止めとして物足りなくなってくるということだった。一回登るとだいぶ剥がれてくるから、もっとばさっとつけたくなるとのこと。とはいえ一度液体チョーク使ってみたけど、今のところはこのくらいで十分っぽかった。

もうちょっと上手くなってくると、聞いた話に実感できるようになりそうなので、どんどん登りたい。

夏アイテム

今週のお題「夏アイテム」

昔寮に住んでいた頃は電気容量的にエアコンが使えなくて、なんとかして寝るためにアイス枕と卓上扇風機をベットに括りつけるということをしてた。夏の暑い時でも最低限寝れるようになる。

あと最近はエアコンの省エネ化が進み、電気容量が足りるようになったらしい。技術進歩してる。

マルチタスク

今日は人の話。

最近やることが多くてマルチタスクになりがち。マルチタスクになると頭の中でコンテキストスイッチが起こるので、非常に効率が悪くなる。だから出来るだけマルチタスクは避けたほうがいい。けれど、プロジェクトの中には割り込みが多いものだったり、締め切りが長いものだったり、まあ他にもいろいろあって結局マルチタスクになったりする。

最近マルチタスクになりすぎて全く作業が進まなくなって、厳しい状況が続いていたのだけど、いくつか気をつけるようにしたら、少しはかどるようになった。


例えばプロジェクト1とプロジェクト2をマルチタスクで行っているとする。

まずマルチタスクになっている時は、一日単位で、今日はプロジェクト1をする、明日はプロジェクト2をするみたいに一日ごとに分けたほうが楽ということが分かった。もちろん厳密に一日単位にしているわけではなくて、一日やって切りが悪いところだったら、その次の日もちょっとするようにしている。

あと今日はプロジェクト1の日と決めているときに、プロジェクト2の割り込みがあった時は、割り込みだからすぐにそっちをするのではなく、

  • 本当にいますぐにやらないといけない割り込みか判断する
  • 今すぐやらないといけないなら、仕方ないからやる
  • 明日でも可能なくらいの割り込みだったら、プロジェクト2のタスク入れに放り込んで、今日はプロジェクト1に集中する

みたいなふうにしてる。割り込みは非常にスイッチにコストがかかる、かつ全てが今すぐにやるべき割り込みではないので、そこを判断するようにする。

また、出来るだけイベント駆動にするように心がけている。今プロジェクト1でやるべきタスクないっけみたいな感じで何回も見てると時間の無駄になるので、例えばこの日からしかできないタスクみたいなのがあったら、カレンダーに開始日を登録して通知が来るようにしてる。他にも一週間に一度一週間分のタスクを眺めて整理するとかも効果的。とにかく何度も今やるべきものはなんだっけと思わないようにする。


マルチタスク出来るだけ避けたい。しかし、なんだかんだ仕方ない理由でマルチタスクになる場合もある。そういう場合なんとか工夫をしてマルチタスクじゃないように自分に見せかけると少しはかどる。


ここまで話してて、マルチタスクとか、コンテキストスイッチとか、割り込みとか、すぐにやるべき割り込みとそうでない割り込みとか、イベント駆動とか、人の話をしていたのに、コンピュータの話にしか思えない内容になった。職業病っぽい。

壁登り続けてる

壁登り始めた - $shibayu36->blog;
一ヶ月ほど前に行き始めたボルダリングだけど、結局ずっと行き続けているし、完全にはまってる。

今ようやく一番初心者用のピンクが大体全部出来るようになって、最近はその次のステップの赤色をクリアしようと頑張ってる。赤色は今のところ5つくらい出来るようになった。

壁、どうやって上達するかが結構難しくて、本当に微妙な体重移動の差とか、ホールド力の差で登れたり登れなかったりする。ここ二日くらいでいきなり上達したんだけど、その前2週間くらいはずっとほとんど上達しなくて辛い期間が続いていた。僕の場合は掴む力が不足していたようで、そこを強化したのと、両足とも頑張って石に乗せようとしすぎてバランスを崩していたので、片足縛りにしたらそれが解消されて上達した。次の課題は指の本数縛りとか、手に力を入れながら力を抜くとかそういうのを意識していけると良さそう。既にこいつ何言ってんだ状態になってる。

結構はまってるので、もう良い物を揃えていこうと思って課金し始めた。とはいってもボルダリング、そんなに高い課金アイテムなくて、大したこと無い。月額会員15000、スポーツパンツ8000、靴17000、プロテイン5000、握力鍛えるやつ3000、靴下2000くらい。どうせ買うなら良いものを買って行きたいのでどんどん課金していきたい。

http://www.flickr.com/photos/86146954@N00/9242765268
photo by kikikiliii

pecoで最近更新されたブランチにcheckoutする

昔、最近commitされたブランチをanythingライクに絞り込んでcheckoutする、というものをzawの時もpercolの時も実装していた。

最近はpecoを使うようになったので、ほぼコピペで再実装した。

設定方法

git-recent-branches.zshのようなファイルを用意し、peco-git-recent-branchesとpeco-git-recent-all-branchesを実装する。

function peco-git-recent-branches () {
    local selected_branch=$(git for-each-ref --format='%(refname)' --sort=-committerdate refs/heads | \
        perl -pne 's{^refs/heads/}{}' | \
        peco)
    if [ -n "$selected_branch" ]; then
        BUFFER="git checkout ${selected_branch}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-git-recent-branches

function peco-git-recent-all-branches () {
    local selected_branch=$(git for-each-ref --format='%(refname)' --sort=-committerdate refs/heads refs/remotes | \
        perl -pne 's{^refs/(heads|remotes)/}{}' | \
        peco)
    if [ -n "$selected_branch" ]; then
        BUFFER="git checkout -t ${selected_branch}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-git-recent-all-branches

.zshrc上で、keybindを設定する。

bindkey '^x^b' peco-git-recent-branches
bindkey '^xb' peco-git-recent-all-branches

これだけで使える。

デモ

こんなかんじで最近commitされた順でブランチが並び、pecoで更に絞り込んでcheckoutできる。使ってみないと良さはわからないけど、結構ライフチェンジング感あるのでおすすめ。
f:id:shiba_yu36:20140726150359g:plain

Tips

ちなみに昔書いたけど、更新した順でbranchのリストを取得するには、git for-each-refを使ったら出来る。他にもいろいろできそう。

ローカルブランチを更新した順に取得

git for-each-ref --format='%(refname:short)' --sort=-committerdate refs/heads

リモートブランチも一緒に取得

git for-each-ref --format='%(refname:short)' --sort=-committerdate refs/heads refs/remotes

まとめ

とにかく便利なのを何度も紹介したいので、pecoが出たタイミングでもう一度紹介しました。

twitter
hatena
rss
Social Icon ブログパーツ