勉強法
学生時代*1に信じていた勉強法
わんこら式
私が高校生時代に信じて実践していた勉強法にわんこら式というものがある.
これは,高速大回転法とか,7回読みと類似する勉強法である.特徴は以下の通り.
- 問題がすらすらと解けるまで,スピードを落とさず,何度も解く.
- 詰まれば,即座に解答を見ても良い.
- なるだけ短い周期を決め,その周期で決めた範囲を繰り返す.所定の回数を周回したら,繰り返す範囲を変える.
- 問題が難しいならば,どこまでもレベルを落とす.
- 自分が解答なしに解けるかどうかはチェックする.
アジャイル開発
これとは別に,アジャイル開発手法というものがある.
- スプリントという開発サイクルを決め,目標を達成するまでの期間にこれを繰り返す.
- 開発は一つのスプリントで完結させる単位で行う.そしてそれはプロダクトにマージする.
- スプリントの終わりにKPT分析などをして前のスプリントの評価をする.
- 定期的に開発の現状を外部に公表し,評価する.
つまるところ,hello world状態のモデルに周期的に肉付けをしていくのだ.
比較してみて
これらを比較してみてどうだろうか,とても良く似ていると思う.
- 勉強
- 最大の目的は素早く問題を解くこと.
- 一つの問題を解けなくても次に強制的に進むことで,テストまでの時間全てを解けない問題に費やし泥沼化することを防げる.
- 開発
- 開発においては,良い成果物を作ることが目的である.
- 実装できないものに時間を掛けギリギリまでできない実装をしようとすることがない.
回顧
私はわんこら式をやってみたが,上手く行かなかった.それをアジャイル開発を学び,実際に開発を行った経験から,その原因を考えたい.
上手く行かなかった原因
成果の実感
アジャイル開発においては,開発進行具合の確認は比較的容易である.そもそもアジャイル開発においてはスプリント単位で進歩は完結していなければならないため,完了したか遅延しているかは,本体にマージされたかどうかで判断できるため,分かりやすい.
しかし,勉強においては,理解は定量的に図りにくい.問題を解答をなしに解けるかを自分でやってみるということが良いのだが,やりたくないのだ.一つの範囲を比較的時間を掛け,何周も下のにも関わらず,解けなければ,その時間は無駄だったということになる.これが怖くてテストが億劫になってしまい,個人では気持ちが続かない.
結論
もっと原因はあるのだろうが,自分が言いたかったことは,プロジェクト管理とは幅広い範囲に応用できることである.よって,様々なメソッドが出て来るが,根本的な部分は共通している.といういことが言いたかったのだ.そして,アジャイル開発により,効率的にブロジェクト管理をできたならば,もう一度これをやってみて,過去の復讐をしたいと思うのだ.
*1:学生とは本来大学生を指す.
猫も杓子もマストドン
ふつうのHaskellのコードについて
サンプルコードが正しくない.
ふつうのHaskell内容がjavaを例示しながら書かれているシンプルで分かりやすい本である.
私にはすごいHaskellより分かりやすい.しかし,古いためサンプルコードが動かない.
先達
2016-01-11 『ふつうのHaskellプログラミング』 もくもく読書会(第12章) の振り返り - SE情報技術研究会’s blog
ファイルの文字列検索 ~emacs,shellコマンド~
目的
複数のファイル間で,あるいはあるディレクトリ配下全てで,文字列検索をしたい.
動機
サンプルプログラムを,ダウンロードしてきて,このコードを使ってるコードを網羅的に探したい.
emacs
M-x grep-find
C-o,o,C-p,pなど色々面白い.ただ,見るためにバッファが全て開かれる.これは良くない所.ほかにいいのないかな.
C-x C-b (あるいはC-x b)して, markをつけて, C-z (あるいはtab,Function)でpatternで選択, kill bufferを選んで一気に消さなければならない.
shellコマンド
どこからかコピペしてきたやつ.申し訳ありません.
########################## # grep # -r : 再帰的にgrepコマンドを実行する # -n : 行番号を出力する # -w : 文字列全体にマッチする場合 # -l : (option)これをつければファイル名だけを出力(マッチした部分は省く) # # Usage # # 現在いるディレクトリ配下から「httpd」という文字列を含むファイルすべてを抽出する # $ grep -rnw . -e "httpd" ########################## grep -rnw 'directory' -e "pattern"
Haskell ~入出力~
入出力
コード
main = do out <- getLine -- input: out putStrLn (out ++ "は大事")
% stack build;stack exec project1-exe project1-0.1.0.0: unregistering (local file changes: src/Lib.hs) project1-0.1.0.0: build (lib + exe) Preprocessing library project1-0.1.0.0... [1 of 1] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/Lib.o ) Preprocessing executable 'project1-exe' for project1-0.1.0.0... [1 of 1] Compiling Main ( app/Main.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe-tmp/Main.o ) [Lib changed] Linking .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/project1-exe/project1-exe ... project1-0.1.0.0: copy/register Installing library in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/lib/x86_64-osx-ghc-8.0.2/project1-0.1.0.0-AckhfDVtQB568iPvGBSrt7 Installing executable(s) in /.stack-work/install/x86_64-osx/lts-8.11/8.0.2/bin Registering project1-0.1.0.0... % stack exec project1-exe hellowordl hellowordlは大事
do式
コードのレイアウト
do式の複数の式を束ねる構文である.Javaのブロック構文に相当する.
do式のように複数の式を束ねる構文では,複数の式のインデントを揃えることが属するブロックを表す.
この規則を,レイアウト
,またはオフサイドルール
という.
do式と遅延評価
Haskellの特徴は遅延評価である.よって,命令型のプログラム言語のように上から順に実行されるわけではない.do式を使うと,上から処理されていく.
参考
ふつうのHaskell
ここの記事が小さく良くまとまって書いてある. Haskellで競技プログラミング IO編 - Qiita
Haskellの学習する動機
なぜhaskellを学ぶか
注意この記事は,全く固まっていない私の考えを形にするためのものです.
これにはいろいろな記事が言語問わずある.
今日2017/04/19時点で学ぶ動機は,現状,まだ使われている純粋関数型の生き残りであるからである.
純粋関数型と呼ばれる言語は数あれど,現在いまだ使われているものは少ない,そのなかでも,変数や引数の評価の際に,融通がきかないのはHaskellくらいである.他の言語は人間に歩み寄り,本来の純粋関数型の形では通らない表現が可能である.
よって,純粋関数型を勉強したいと思った時Haskellが適切である.これは,別にHaskellが生産性が高く,直感的で,コミュニティが活発で,パッケージが充実していて,などそういった尺度で選ばれたわけではない.
結論
純粋関数型の勉強のため
追記2017/04/19
あまりにもあまりになので「ふつうのHaskellプログラミング」を読んでみた.
「ふつうのHaskellプログラミング」作者が言うには,,,
- 柔軟なプログラミング
- コンパイル時の型のチェックが強力
- 多相型という機能があり,様々な型を使いたいときに統一的に扱うことができる.これはJavaの総称型とほぼ等しい.
- 可読性が高い
- 再代入ができないことは,現代の大人数のソフトウェア開発においても,代入の乱用による可読性の低下を0にできる.
- 遅延評価
markdown記法について
空白はめちゃくちゃ大事.
特に,記号をリストとかにしたい時,記号の後に空白入れないといけない
"「* 」でリスト表現,ただし,タブか空白文字4つで階層を表さないといけない"
* hoge * fuga * piyo
- hoge
- fuga
- piyo
- fuga