!Mac OS X-10.15.7 !ruby-2.7.1p83
概要
Rubyの初心者向け教科書が適切なのが見当たらないので,自分で書くことにしました.これは,Ruby = TDD + English という図式が自分の中で出来上がっていて,でも,それをうまく学生に伝えることができないもどかしさからです.
プログラミングを勉強するには,「数学の問題を解くときと同じように試行錯誤しなさい」と言います.でも,その試行錯誤のやり方を本当に教えられているのか疑問です.解答を丸写しするのでなく,動作を理解するために,解答を分解して作り上げていく作業が必要になります.これを実践する手順に,欧米では,TDD(Test Driven Development:テスト駆動開発)と名が付けられたんだと思います.
日本では,写経と呼ばれますが,さらにわかりにくくなりますね.そこで,日本で昔からお馴染みのチャート式に従って,どうやって動く綺麗なコードを書くかを紹介します.
チャート式の体裁と内容
チャート式と言った時,「たくさんの問題をずらずら解いて行くこと」と思っている研究者がいて驚きました.チャート式の本質はそこではなく,
- 簡単なお題
- 詳しい解法
- 類題
です.この基本に沿って
- puts ; 出力のみ,先ずはhello worldでしょ
- variable and method ; method, Kent Beckの至言がある
- if, case, array, each by leap year ; TDDでcaseまで
- assert_equal ; gem, colorizeの継承, require, 重複実行の予防
- recursive Fibonacci ; recursion(再帰)をtestで
- hello class ; class化
なんかを紹介します.チャート式のもう一つの本質である「体裁」は,htmlなんで,諦めてください.
仕上げ問題
次のような課題が解決できるはずです.
- roman numerals ; ローマ数字
- google recruit ; Googleの有名なリクルート問題
Ruby開発周辺環境
Rubyの言語仕様を覚える前に,Rubyが足場にしているLinuxの思想に馴染んでください.CUI, option, pipe, filterなんかです.その他いくつかのRuby開発における便利ツール(ecosystemと呼ばれることも...議論あり)がありますので,紹介していきます.
- Shell + Emacs ; hello worldの,その前に
- my_help ; CUIでメモ,org-modeの使い方
- bundler ; scaffold(足場)構築, CoC, gem
- rake ; なんでも自動化, system
- rubular ; 正規表現, rubular
- fsm ; ファイルの読み込み, finite state machine(有限状態マシン)
- thor ; 複雑なCLI, Rubocop
などかな.
学生の作業
(これは2019年度の反省メモです,2020では改良してqiitaを使っています)学生が類題を独自に解いたかどうかをどうやって判定するかが問題になります.
- tddのred状態を残す
- green状態を残す
- refactoringを晒す
というのが一つの解になるのではと期待しています.まさに,gitのlog状態...うーーーん.そこを残すのは...
文書作成
- 学習者自らが文書を作成するというのをやってみてください.
- 自分の書いたcodeを表示させるというやり方です.
- 卒論を仕上げるのと同じようにして,文書を書くという作業を通じて,codeを覚えていくというものです.
- platexと違って,html outはどんな環境でもできるのでそいつを使います.=> qiitaに変更(20f)
- source ~/git_hub/ruby_docs/chart_style_ruby/README_chart_style_ruby.org