再読:達人プログラマー
- 作者: アンドリューハント,デビッドトーマス,Andrew Hunt,David Thomas,村上雅章
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/11
- メディア: 単行本
- 購入: 42人 クリック: 1,099回
- この商品を含むブログ (347件) を見る
読み返してた。 DRY、窓割れ理論、ゴムのアヒルちゃん、曳光弾、毎年少なくとも1つの言語を学ぶこと、シェル遊び、エディタを熟知するなどは、引用されることも多く記憶に残りやすい。
よく読むと、期待マネジメントすること、バクの再現をまず先にすること、見積もりを行うこと、ポリシーの分離すること、ドメイン領域に近い言語を使うことでプログラマが一歩ドメイン領域に寄り添うこと、テスト実行可能なドキュメントをつくること、テストしやすいコードを記述すること、ユーザーとともに働くこと、疎結合にすること、コードジェネレーションなどなどにも触れている。多岐にわたって書いてある。
読書:開眼! JavaScript
開眼! JavaScript ―言語仕様から学ぶJavaScriptの本質
- 作者: Cody Lindley,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/06/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
JavaScriptの文法(this, プロトタイプチェーン、スコープチェーン、関数などなど) を改めて勉強し直すのに役立つ本。
言語解説を、徹底して簡潔にわかりやすく説明することにこだわりを感じた。
JavaScriptらしく、サンプルをネット上で用意してて、すぐに実行確認できる。
例えばこんな感じ。 http://jsfiddle.net/jseja/WsqgJ/
ディシプリンド・アジャイル・デリバリー
ディシプリンド・アジャイル・デリバリー エンタープライズ・アジャイル実践ガイド (Object Oriented SELECTION)
- 作者: Scott W. Ambler,Mark Lines,藤井智弘,熱海英樹,天野武彦,江木典之,岡大勝,大澤浩二,中佐藤麻記子,永田渉,西山泰男,三宅和之,和田洋
- 出版社/メーカー: 翔泳社
- 発売日: 2013/06/22
- メディア: 大型本
- この商品を含むブログ (6件) を見る
ぱらぱらしただけ。著者の導入の経験をもとにRUPの簡易化、実用化、Scrum、XP、リーンとのハイブリット化
をしたような感じの内容。継続デリバリーとの関係は薄そう。
少し大きめの会社で、Scrum, XPで語られていない何かについて知りたいなら。
(例えば、方向付け、構築、移行のフェーズ別のゴールなどが記載されている。)
客先の導入のお手伝いをしていると、0からスタートで再学習するよりも、予め知ってて良いようなことが記載されている。
週末に読むかな。
素振りメモ
帰り際の同僚との会話が混じりながら、メッセージ指向でと考えいたら、なんか変なのになった。
自動販売機との相互作用を確認したいのって、自動販売機の中身の要素のコラボレーションいうより自動販売機を観察している何者かってこと???
class VendingMachine def initialize @cach_register = CashRegister.new end def observer(ob) @observer = ob end def set_cash_register(cach_register) @cach_register = cach_register end def insert_billcoin(bill_coin) back_cash = @cach_register.add_cash(bill_coin) if back_cash @observer.receive_refund_billcoins back_cash end @observer.know_total "#{@cach_register.total}円" end def refund @observer.receive_refund_billcoins @cach_register.refund @observer.know_total "#{@cach_register.total}円" end end class CashRegister def initialize @current_cashs = [] end def add_cash(cash) if [10.yen, 50.yen, 100.yen, 500.yen, 1000.yen].include?(cash) @current_cashs << cash return nil else return cash end end def total @current_cashs.map(&:value).reduce(:+) || 0 end def refund begin return @current_cashs ensure @current_cashs = [] end end end class BillCoin < Struct.new(:value) end class Fixnum def yen BillCoin.new(self) end end describe VendingMachine do let(:__allow_p) { d = double('person') allow(d).to receive(:know_total) d } let(:person) { d = double('person') subject.observer(d) d } subject { target = VendingMachine.new target.observer(__allow_p) target } describe "お金の投入と払い戻しについて" do specify "お金の投入すると、合計金額がわかる" do [10.yen, 50.yen, 100.yen, 500.yen].each{ |coin| subject.insert_billcoin(coin) } expect(person).to receive(:know_total).with('1660円') subject.insert_billcoin(1000.yen) end specify 'お金を投入してから払い戻しでお金を受け取る。合計金額は0円' do coins = [10.yen, 50.yen] coins.each{ |coin| subject.insert_billcoin(coin) } expect(person).to receive(:receive_refund_billcoins).with(coins) expect(person).to receive(:know_total).with("0円") subject.refund end end describe '扱えないお金について' do let(:invalid_billcoins) { [1.yen, 5000.yen, 10000.yen] } specify '想定外の投入金額の場合は、加算せず釣り銭を返す。合計金額は0円のまま' do invalid_billcoins.each do |c| expect(person).to receive(:receive_refund_billcoins).with(c) expect(person).to receive(:know_total).with("0円") end invalid_billcoins.each{ |coin| subject.insert_billcoin(coin) } end end end