スーパーエンジニアへの道

スーパーエンジニアへの道―技術リーダーシップの人間学

スーパーエンジニアへの道―技術リーダーシップの人間学

気になったので読んでみた。
と、言ってももう1ヶ月前の話。
タイトルからは”優れたエンジニアになるにはどうすればいいのか”
という内容が書かれているかの様な印象を受けるが、
実際はエンジニアで突き当たるマネジメントの問題をとらえている本。

今、学生のうちに読むと理解度は低いかもしれないが、将来ぶち当る壁だと思う。またその時読み返したいと思える1冊。

民族の世界地図

民族の世界地図 (文春新書)

民族の世界地図 (文春新書)

【書評】
友人から「"民族"が露骨な陣取り合戦や政治的な駆け引きに使われているのは、実は近代だけの話。」と聞いたのが、読むきっかけとなった本。
私は高校時代に日本史をとっていたせいもあり、世界史…人種や国名、民族、宗教全てに疎かった。…というか、未だに疎い。
この本は、私の様に世界に疎い人が広く浅く世界について知りたい場合に凄く役立つ本なのではないかと思った。この本を読んでから中国が抱えるチベット問題や、ウイグル自治区の問題、つい最近のグルジアの問題も少しは理解できるようになった。多分、読む前までは無関心だったと思う。

議論のレッスン

最近ミーティングをよく行うのだが、無駄な話が多い。
クリティカルシンキングロジカルシンキングが唱われているけども、実際の手法ってわからない…。
って時に出会った一冊。

議論のレッスン (生活人新書)

議論のレッスン (生活人新書)

【書評】
議論にはルールがある。「主張」、「根拠」、「論拠」が議論モデルの主役である。

タイトルからは「議論」のHow to本かと思えるが、議論の捉え方・分析の仕方がわかる本である。
議論はお互いの個々の発言からなっており、それを支えるのは個々の「主張」であり、「主張」を支える「根拠」や「論拠」なのである。
これを意識することで、相手が言っている事の妥当性や質疑応答の質が簡単に意識できるようになる。「根拠」を掘っていくと凄く傲慢な意見だったり、「主張」のみを取り出して聞いていたら全然噛み合っていない議論だったり。
切り口は「議論」の本だけども、結局は議論の要素である個々の発言の分析になり、結局はロジカルシンキングに繋がる本。議論に対する視野が広がる。

Exercise 1.5

(define (p) (p))
(define (test x y)
  (if (= x 0)
      0
      y))

Then we evaluates the expression

(test 0 (p))

What behavior will it with an interpreter that uses applicative-order evaluation?

(test 0 (p))
->(test 0 (p))
->(test 0 (p))
->.....

When the interpreter uses applicative-order evaluation, it evaluate first (p). And it will be evaluated as (p) all the time.
So, if the interpreter uses applicative-order, the 'test' procedure will not come to an end.

What behavior will it with an interpreter that uses normal-order evaluation?

(test 0 (p))
->(if (= 0 0) 0 (p))
->0

When the interpreter uses normal-order evaluation, the (p) procedure will be evaluated later.
So, the behavior will be an end.

Exercise 1.4

Use this observation to describe the behavior of the following procedure;

(define (a-plus-abs-b a b)
  ((if (> b 0) + -) a b))
> (a-plus-abs-b 1 5)
->6
> (a-plus-abs-b 1 -5)
->6

Scheme can allows for combinations whose operators are compound expressions!
That's funny!

Exercise 1.3

(define (square x) (* x x))
(define (sum-of-square x y)
  (+ (square x) (square y)))

(define (top-two-sum-square a b c)
  (cond ((and (>= b a) (>= c a)) (sum-of-square b c))
        ((and (>= a b) (>= c b)) (sum-of-square c a))
        (else (sum-of-square a b))))

> (top-two-sum-square 1 1 1)
->2
> (top-two-sum-square 1 1 2)
->5
> (top-two-sum-square 1 2 1)
->5
> (top-two-sum-square 2 1 1)
->5
> (top-two-sum-square 1 2 3)
->13