2017年08月

YAGNIでいいと思った

下記の記事がおもしろかった。おもしろかったんだけど、ちょっと疑問がある。

値引き条件などというものは、ビジネス上の都合により変更されやすいものです。このケースのように注文数量だけで値引き可否が決まるというケースもあるかもしれませんが、発注金額も考慮し、あるいは発注者が上得意かどうかも判断要素に含める、というように変更されるかもしれません。一方で、注文数量・金額・発注者が誰かなども含む受注内容に応じて値引き可否が決まる、という点はたぶん変わらないだろうと考えられます。

PHP Mentors -> 「現場で役立つシステム設計の原則」批判 (1) 〜何のために、「データとロジックを一体に」するのか?〜

うーん。「たぶん変わらないだろう」という楽観にもとづいている点で、批判対象の設計と同じ穴の狢のように見えるんだよなあ。

たとえば、「前回の発注に製品Aが含まれ、かつ、今回の発注に製品Bが含まれる場合、値引き可とする」という条件が追加される可能性だってあるだろうし。


かくいうぼくは、「値引きは数量のみに基づいて行われる」というビジネス要件だったら、まず下記のように書く。要件が変わったら、設計を見直す。起こるかどうか分からないことを考えるより、さくっと書いてリリースするのが、ビジネス的にもメンタル的にも吉なのでは。

class DiscountJudge
  def initialize(discount_criteria)
    @discount_criteria = discount_criteria
  end

  def discountable?(quantity)
    quantity >= @discount_criteria
  end
end

class AmountCalculator
  def initialize(discount_rate)
    @discount_rate = discount_rate
  end

  def discount(unit_price, quantity)
    unit_price * quantity * (1 - @discount_rate)
  end

  def amount(discount_judge, unit_price, quantity)
    if discount_judge.discountable?(quantity)
      self.discount(unit_price, quantity)
    else
      unit_price * quantity
    end
  end
end

discount_criteria = 5
discount_judge = DiscountJudge.new(discount_criteria)

discount_rate = 0.2
amount_calculator = AmountCalculator.new(discount_rate)

unit_price = 100
quantity = 6
amount_calculator.amount(discount_judge, unit_price, quantity)

夏休みRubyプログラミング講座に講師アシスタントとして参加した

この土日、株式会社まちづくり三鷹が主催している「夏休みRubyプログラミング講座」に講師アシスタントとして参加した。子供たちにプログラミングを教えると、予想していなかった事態がいろいろと起こる。疲れるが、楽しい経験だった。

ぼくが参加したのは「Webアプリケーション制作コース」。2日間で、Ruby on Railsのアプリケーションを2つ作る。参加者は小学生から高校生まで、全12名だった。

教える前は、小学生にRailsアプリが作れるのか不安だったが、意外に大丈夫なものだ。Cloud9というサービスを使えば、アプリケーションの開発から実行まで、すべてブラウザで済んでしまう。初学者にはうってつけのサービスだと思った。

以下は気づいたことのメモ。

  • キータイプに時間がかかる。経験を積めば速くなるのだろうが、その前に嫌にならないか心配だ
  • コマンド実行を怖がる。「おかしなコマンドを実行しても何とかなる」と、しつこく伝えたほうがよい
  • 講師の話を聞かない。これは仕方ないだろうから、テキストを充実させるのが得策だ
  • 細部にこだわる。たとえばクイズアプリの問題を考えるのに夢中になり、進行が遅れる
    • 短期の講座には、◯×ゲームなど、誰が作っても同じ結果になるものが向いていそうだ
  • 困っても聞かない。手を挙げて知らせることはしないが、そばによると目で訴えてくる

一部の子に、こういう傾向が感じられた。だからといって、子供たちを批判したいのではない。ぼくの子供時代はもっとひどかった。教える側が、子供の特性を理解して、工夫すべきということだ。

2017年11月発売の気になる技術書

2017-11-04発売


2017-11-14発売

量子計算理論 量子コンピュータの原理
森前 智行
森北出版
売り上げランキング: 15,026

2017-11-16発売


2017-11-17発売

演習で身につく要件定義の実践テクニック
水田 哲郎
日経BP社
売り上げランキング: 163,938

Machine Learning実践の極意  機械学習システム構築の勘所をつかむ! (impress top gear)
Henrik Brink Joseph W. Richards Mark Fetherolf
インプレス (2017-11-17)
売り上げランキング: 13,735

2017-11-21発売

新しいシェルプログラミングの教科書
三宅 英明
SBクリエイティブ
売り上げランキング: 211,433

[改訂4版]TCP/IPネットワーク ステップアップラーニング
三輪 賢一
技術評論社
売り上げランキング: 209,944

2017-11-22発売

入門 PySpark ―PythonとJupyterで活用するSpark 2エコシステム
Tomasz Drabas Denny Lee
オライリージャパン
売り上げランキング: 5,594

2017-11-23発売


Rプログラミング本格入門: 達人データサイエンティストへの道
Kun Ren
共立出版
売り上げランキング: 220,527

Pepper最新事例に学ぶロボアプリ開発 ~Google Cloud PlatformとWeb APIを活用したPepper機能拡張の実践編~
ジーアングル 森 宏晃 ブレインパッド 下田 倫大 ブレインパッド 師岡 一成
ナレッジオンデマンド (2017-11-23)
売り上げランキング: 26,514

統計的自然言語処理の基礎
Christopher D.Manning Hinrich Schutze
共立出版
売り上げランキング: 92,229

2017-11-24発売

あなたの知らないセキュリティの非常識
辻 伸弘
日経BP社
売り上げランキング: 12,696


2017-11-25発売


2017-11-28発売

Pythonによるテキストマイニング入門
山内長承
オーム社
売り上げランキング: 14,479
プロフィール
知識欲と謎解き欲が旺盛なWebエンジニア。AWS認定ソリューションアーキテクト - アソシエイト。JAPAN MENSA会員
記事検索