論理力を鍛えるための本

「自分は論理的思考がニガテなのかもしれない。」

そんな疑念を強く持ち始めたのは、ほんの5年ほど前のことだ。それ以前は、論理的思考がニガテだなど、一度たりとも考えはしなかった。

学生の頃は数学は得意科目。今は職業プログラマーとして食べている。プログラミングというのは、世間的には論理的思考を高度に要求する活動とされている。それを仕事でやっているのだから、知らず知らずのうちに、自分には人より優れた論理的思考力が備わっていると思い込んでしまっていた。なんと非論理的な・・・。

5年前に思い立って論理力を鍛えようと勉強し始めたが、何を学べば自分の論理力なるものを鍛えうるのかなど分からず、手探りしながら右往左往した。それを何年か続けてきて、どのようなことをやると良いのかが何となく見えてきた。同じようなことを望んでいる方向けに、メモとして残しておこうと思う。 

文章の構造を見定める力を鍛える

「論理力」を構成する要素の一つとして、文章の構造を見定める力というのがあると思う。与えられた文章が言わんとしていることを的確に読み取るためには、その文章の構造を分析的に眺めて説明するといったことができなければならない。私が自分に論理的思考力が無いと感じたのは、後から振り返ってみると、この構造を見定めるスキルや感覚の無さを感じていたのだと分かった。

このスキルを身につけるには、実際に文章の分析を繰り返すしかない。とはいえ、上手く整えられた練習問題があれば、自分の段階に合わせて効率よく練習していける。以下の2冊の本には、そのように整えられた練習問題が豊富にある。

論理のスキルアップ - 実践クリティカル・リーズニング入門(アン・トムソン)

論理のスキルアップ―実践クリティカル・リーズニング入門

論理のスキルアップ―実践クリティカル・リーズニング入門

 

この本(練習問題含めて)はまだ半分くらいしか読めていないのだが、それでもとても良いトレーニングになっており、他の人にも第一にお薦めしたい一冊だ。なぜか。文章の論理構造を的確に把握するためには、個々の文の内容と推論の進む方向との関係性のようなものを頭に描く力が必要になる。私の目線からすると、この本では、ある文と別の文とをつなぐ推論にスポットが当てられている。推論がうまくつながる文と、逆につながらない文とを比較して、どのような理由で「つながる」のか、「つながらない」のかを考えられるようになっている。このように「比較しながら考えられる」ことが、とてもよい練習になる。

本書の練習問題から1つだけピックアップする。

練習問題3 理由を見定める

この練習問題は、与えられた「結論」に対する理由が何であるかを見積もるトレーニングである。各問題において、結論に対する理由として適切なものを選び、なぜそれが正しく、他が誤った答えであるのかを述べよ。その理由それ自身が正しいかどうかを気にする必要はない。もし、それが正しいとした場合に、結論を支えるかどうかのみを考えればよいのである。

 

2 結論:ある仕事に対して働き手を選ぶときに、雇い主は、応募者の持つ技術ではなく、性格に基いて、決定を下すべきである。

(a) 性格は時がたてば変わるかもしれないが、技術は時代遅れになってしまう。

(b) 技術を教えるのは簡単だが、性格を変えるのは難しい。

(c) 技術の中には誰でも身につけられるわけではないものが存在するが、性格ならば誰でもよいものを身につけられる。

(p.20、21)

結論として述べたいのは、応募者の技術よりも性格を重視することが、雇い主にとってメリットがある(経済的に等)ということだ。

「論理的な思考のトレーニング」に慣れていないと、回答に迷うだろう。たとえば私たちプログラマーは一般的には持っている技術を重視して欲しいという願望が強いためか、回答 (c) を選んでしまったりする。または諸行無常的哲学を好む人が回答 (a) を選んでしまったりする。この問題は、そういうことを問うているのではない。ここからすでに論理的思考のトレーニングが始まっている。

 論理レーニング101題(野矢茂樹)

論理トレーニング101題

論理トレーニング101題

 

 論理のトレーニングと言えばこの本というくらい有名な本(改訂した「論理トレーニング」や、さらに内容を大幅にリニューアルした「大人のための国語ゼミ」もある)。接続表現(接続詞)からスタートし、それを主要な分析の観点として文章の構造を紐解く力を鍛えるような本だ。この本も私はまだ半分くらいしか読めていない。

前半の接続表現のトレーニングでは、自分が普段何気なく使っている接続詞が結構適当で、文章の意味を取りづらくしていることに気づくことができた。当然文章を書くときにも常に接続詞を気にしながら書くようになり、一定の効果があったと思える。

後半は文章の論証の構造を「論証図」に表しながら分析するというトレーニングになっているが、これが私には難しかった(なので途中で挫折中)。

本書の練習問題から、接続表現の入門問題を1つだけピックアップする。

問5 次の①〜⑦を、この順番で、[  ] 内に示された接続表現を各一回ずつ用いて、一連の文章にまとめよ。ただし、内容を変えない程度に文は適当に変更してよい。

[しかし、すなわち、そして、だから、ただし、たとえば、なぜなら]

 

① 論理トレーニングで大事なのは論理的な文章を数多く読むこと。

② さまざまな接続表現に注意することである。

③ 論理とは言葉と言葉の関係にほかならないが、それを明示するのが接続表現である。

④ 「しかし」という接続詞は多くの場合「転換」を示している。

⑤ 「しかし」の前後で主張の方向が変化している可能性が高い。

⑥ 議論の方向を見失わないためには、「しかし」という接続詞に注意することが必要となる。

⑦ ときに接続表現は省略されるので、その場合には自分でそれを補って読まねばならない。

以前の私は「ただし」という接続詞(や、それを変化させた「ただ」)を多用していて、それがおかしなクセだということにこの本を通して気づいた。

古典論理学の基礎知識

「論理力を鍛える」という文脈では、この記事前半で紹介している練習書で問題にあたると効率が良い。そういうことを知らなかった私は、最初は「論理を学ぶなら論理学」という考えで、論理学から攻めていた。教養として知っておくと何かの役に立ちそうなので、2冊の本を紹介する。

議論の論理―民主主義と議論(足立幸男)

議論の論理―民主主義と議論

議論の論理―民主主義と議論

 

この本のメインコンテンツは第二章の「議論と論争の一般理論」で、トゥールミンモデルを元にした議論についての理論解説が素晴らしい。それは別として、第一章「古典的「議論」論」では、三段論法論がいくつかの例とともに簡潔にまとめられており、論理学を体系的に学んでいない私にはありがたかった。

例えば、アリストテレスの成果によって、三段論法は256通りのパターンが可能だが、そのうち正しい推論(妥当な推論)となるのは24通りだ。それ以外は虚偽である。虚偽にもいくつかの分類がなされているが、そのうちの一つ「不当周延の虚偽」の例文は次の通り。

「失業問題を解決できなかった政府はすべて非難されるべきである(all X is Y)。しかし、ナチス政府は失業問題を解決できなかった政府でない(not Z is X)。それゆえ、ナチス政府は非難されるべきでない(no Z is Y)」

p.60

こんな文章が出てきたら、個々の文の意味や書き手の意図を汲み取る以前に、その「形式」だけで虚偽と判定が下される。三段論法って、ありがたい。

 論理学(野矢茂樹)

論理学

論理学

 

命題論理から始まり述語論理を経て、ラッセルのパラドックス、メタ論理、最後にゲーデルの不完全性定理まで到達する。体系的というわけではないけれど、論理学の方法のエッセンスを積み上げながら学んでいける本。私がなんとか読みこなせたのは第2章の述語論理までなのだけれど・・・。

解説は部分的に野矢氏、道元老師、無門老師の掛け合いで進んでいくというのも面白い。分かって無さそうだった無門老師が突然鋭い発言をしたりする。

また、私はこの本を読んで初めて、証明というのが何をすることなのか分かった気がする。

おわりに

学生の頃にもっと国語を真面目に勉強しておけば良かったという、小並な気持ちもあるけれど、その一方で、大人になってから思い立って勉強するのも悪くないし、遅くもないとも思える。大人になっていろいろ経験した自分だからこそ、本に書かれていることがズシリと腹に落ちるような学び方ができるんじゃないだろうか。

知るを知るとなし、知らざるを知らずとなす、これ知るなり (論語)

 

「哲学思考トレーニング」を読んだ

職場での雑談で「趣味は哲学」などと折に触れてネタのように話している。それに触発されたのか、はたまたそろそろ私を黙らせてやろうとでも思ったのか、真相は定かではないが、アラフォー仲間でもある同僚が『哲学思考トレーニング』読み始めたとのこと。私もKindleで買って読んでみた。

哲学思考トレーニング (ちくま新書 (545))

哲学思考トレーニング (ちくま新書 (545))

 

 

どんな本か?

この本は、「(著者の言う)哲学的クリティカルシンキングを、思考に関する論理や哲学の方法による補強を加えながら、解説したもの」だ。書名に「トレーニング」とあるが、問題が掲載されているようなスタイルではない。

中心にあるのは「(著者の言う)哲学的クリティカルシンキング」であり、この方法によって、いくつかの問いにどのようにアプローチし、分析し、考え、結論を出すのかを、この分量の本にしては比較的丁寧に書いてある。解説は平易で、たまに哲学の用語などが出てくるが、その用語を作った哲学者のエピソードなども手短に書かれているため、親切だ。

このような本なので、たとえば、仕事で参加しているミーティングで、話し合いや議論が苦手だと思っている方や、議論はある程度できるが、もっと鋭く議論を進めたいと思っている方が読むと、新しい視野を開くガイドにはなると思う。

感想

私は哲学を完全に趣味・独学でやっているだけなので、網羅的な基礎知識はない。アリストテレスの三段論法論など良く知っている部分もあったし、逆に懐疑主義だったり科学哲学のあたりは、まともに本を手に取ったことすらなかったので、私としては新鮮な気持ちで読めた。

 

PHPerKaigi 2018での発表でベストトーク賞をいただきました

3月9日・10日と開催されたPHPerKaigi 2018に参加し、「SOLIDの原則ってどんなふうに使うの?」と題した発表をしてきました。今回の発表で私が目標としていたことや、その他PHPerKaigiで何人かの方と個別にお話した内容などをメモしておきます。

phperkaigi.jp

 

スライドの公開など

所属先の技術ブログで公開しています。

tech.quartetcom.co.jp

(トークスクリプト付きのKeynoteファイルも配布しておりますので、見てみたい方はリンク先からどうぞ)

発表の目標

今回は、次のような目標で内容を作りました。

  • 発表の30分の中で、聞いた方が「理解した」と感じることができる内容・構成
  • 設計原則などにあまり触れたことがない方にも、理解してもらい、設計って面白い、役に立つかもと感じてもらう
  • 理解した内容を、使えそうという感触を持ってもらう

この目標を達成するために、伝えることを明確にした上で1つに絞りました(それが「オープン・クローズドの原則」)。

私は凡庸なトーク力しか持ち合わせていないため、1つに絞った内容を「どのようにしたら、上手く伝えることができるのか」という点でも、苦心しました。発表した形式になるまでに、構成の仕方が異なるバージョン(その中には、幻の手書きスライドバージョンなどもあったりします)を4つほど作成しました。

目標に掲げた3つの制約を、30分の時間で満たすようにするというのは、なかなか手ごわい条件でしたが、ある意味この30分という条件のおかげで、内容をコンパクトにまとめることができたように思います。

 

賛否両論の「先輩と新人の掛け合い方式」は、斬新で面白かったかもしれませんが、このような講演で採用するのは今回が最初で最後にしようと思いました。

発表について

若干のトラブルがあったので、自分のためにメモ

  • スライドの最初の方の部分で、なぜか表示されない?アニメーションがあって焦った。記録モードにしていたのをやめて、普通の再生モードに切り替えた。微妙にパニック状態だったので、本当に「アニメーションが表示されなかったのか」どうか記憶があいまい・・・。
  • 途中で水を飲んだが、その時にペットボトルの蓋を閉め忘れた。そのため、質疑応答の際に手が当たって水がMBPの上にこぼれてしまい、また若干パニックに。蓋は閉じよう!

 

発表外で、お話したこと

以前、所属先の技術ブログで、指導中の新人が次のブログを書きました。

tech.quartetcom.co.jp

このブログ記事で、最後の「リフレクションを使った例」について、なぜそういったものが必要になるのかよく分からないという質問をいただきました。なので、そもそも記事の元ネタになっている問題をお見せして、その場でその方なりの解き方などをある程度話し合った後に、実際の私のコード全体をお見せし、何をどのように表現しているから「リフレクションを使う仕組みが必要」になるのかお話したりしました。

このようなプログラミング問題でコード設計力を磨くというのを、私は地道にやっています。よく題材として使わせて頂いているのは、横浜へなちょこプログラミング勉強会さんのものです。

横浜へなちょこプログラミング勉強会 | Doorkeeper

 

また、別の方とのお話で、設計について学びたいけど、自分が読むのに良い本を見つけられていないという件がありました。これについては、私が人に本を薦めることに慎重なこともあって、「これを読めばOK」と即答できるような書籍がたしかに思い当たりません。これには、以下の理由があります。

  • 設計というのは、勉強してできるようになるような「科目」とは違って、いろいろな要素の総合力が必要な活動
  • いわゆる「設計」とカテゴリされるような方面の知識だけでは良い設計はできず、実装力も同時に伸ばす必要がある

関連しそうな、過去に書いた記事

blog.hidenorigoto.com

blog.hidenorigoto.com

tech.quartetcom.co.jp

イベントについて

随所に「コミュニケーションできる場」ということを意識されていたのが良かったですし、そのことが多くの参加者にも好評だったように私は感じました。Ask The Speakerのコーナーやラウンドテーブル、アンカンファレンス等もそうですが、規模としてそんなに大きすぎない、一体感を感じられる人数だったのも良かったのかなと思いました。

私はこのようなカンファレンスにスピーカーの側で何度も参加していますが、私がカンファレンスに求めていることは、まさにコミュニケーションなんです。それも、自分の話した内容についてもっと話したいということとは全く違って、自分ではない他の人が、現場でどのような問題に取り組んでいて、どう苦労しているのか、工夫しているのかといった話を聞いたり、それについて意見を言ったり、共感したりといったことをしたいんです。他のカンファレンスでそれが全く出来ないってことはないですが、今回のPHPerKaigiは、そういったコミュニケーションをしやすい空間になっていたなーと思いました。

最後に

PHPerKaigのスタッフの皆様、素晴らしいイベントをありがとうございました!

ベストトーク賞で国内カンファレンス参加費補助!という、今の私に最高のご褒美をいただけたので、次は関西、福岡、東京のどれかのカンファレンスに、是非またスピーカーとして参加できるよう、渾身のプロポーザルを作ります!

 

PHPerKaigi 2018にトークが採択された(&ボツネタ)

2018年3月9日(金)・10日(土)で、PHPerKaigiというイベントがある。

phperkaigi.jp

参加チケット販売はこちら 

passmarket.yahoo.co.jp

 

PHPerKaigiは、今年初めて開催されるイベントで、参加者同士・発表者と参加者との交流、距離の近さなどを意識されているようで、とても魅力に感じた。そして、これは発表しなくては!と思いトークを申し込んだ。なんとしても発表者として参加したかったので、30分枠3つ、LT枠1つの計4つも応募したほどだ。

 

採択いただいたトーク

タイトル

SOLIDの原則って、どんなふうに使うの?

概要

オブジェクト指向プログラミングを勉強したことのある人なら、一度は聞いたことのあるSOLIDの原則。
特にオープン・クローズドの原則って、意味が分からない! という感想を持った方は少なからずいらっしゃるかと思います。
この講演では、PHPのコード例を示しながら、どのような状況でSOLIDの原則を持ち出すのか、および、原則を適用するとコードがどのように変化するのかを、分かりやすくお話します。

日程

3/10 11:10〜(30分)

 

この内容は、応募した中では、今回私が一番話したいと考えているものだったので、選んで頂けてありがたい。初心者の方から上級者の方まで学びがあり、役に立つと思って頂ける内容を目標としている。乞うご期待。

 

採択いただけなかったトーク

他に申し込んだトークを公開しておく。採択頂いたトークに引けを取らない、面白い話ができる自信のある内容なので、何か別の機会に使いたい。

 

[30分枠]「実録、中途採用したPHPerを鍛え直した3ヶ月」

中途採用したPHPエンジニアに対して、3ヶ月間実施した教育の方針や内容を、実際に新人が書いたコードややり取りの紹介も交えながらお話します。
これから力をつけていこうとしている方には、学び方のヒントに、教育する側の方には、自走できる(自分で学びのサイクルを回していける)エンジニアに育てるための教え方のヒントになるかと思います。

 

[30分枠]「ドメイン駆動設計から始まった私の学びの旅 ー あの頃の私は何も知らなかった」

私が本格的に設計などについて学びを深め始めたのは、ドメイン駆動設計からです。
それ以前は、多くの本を読んだりしていましたが、知識をバラバラの点としてしか飲み込めておらず、結局は何も自分のものにできていない、無知な状態でした。
そこから様々なことを学び、今では点どうしがつながった世界を見渡せるようになりました。
私が学んできたことを紹介し、ドメイン駆動設計のような技術に対して広い視野から見下ろせるようになるお話をします。

 

[LT枠]「「それはどういうこと?」と問いまくる読書会をやったら学びが深まった話」

新人教育の一環で「アジャイルソフトウェア開発の奥義(第2版)」を週に2回、1時間弱の時間で読書会をしていった。
この際、書いてあることをサラッと理解するだけに留めず、「どういうことを言わんとしているのか」を自分たちで説明可能になるまで考え合うようにした。すると学びがかなり深まった。実際に考えた部分をいくつか紹介し、本を深く読み込む面白さをお伝えします。

 

トークのボツ案

まだ自分の中で考えが煮詰めきれていないが、いつかは人前で発表できるように仕上げたいと思っているネタ。

  • Coding We Live By プログラマーの論理
  • ソフトウェア開発における「モデル」とは何か。「モデリング」「設計」とはどのような行為か。
  • 設計力の磨き方

 

さいごに

PHPerKaigi、是非ご参加を!

phperkaigi.jp

2017年振り返り

2017年の振り返り。

このブログを始めた

このブログを作ったのはちょうど2017年の1月で、最初の記事は2月11日に公開した。ブログを作るに至ったモチベーションは、興味を持っている事柄について、より深く探求し続けていきたいから。しかしその探求というのは、どうやら誰かが用意してくれている道ではないため、自分の力で切り開いて進んで行かなければいけないような気がする(だからこそ興味もあるのだが)。そうだとすると、まず興味を持っている事柄について、現時点ではたとえ稚拙だとしても、自分の理解を自分の言葉で表現し、先人たちの用意してくれている概念や理論などと照らし合わせながら、足場を固めなければいけない。そう考えたのだ。

ブログ開設当初に、1つの目標としていたEvansのドメイン駆動設計についての見方の整理は、ある程度満足のいくアウトプットになった。

しかし、おそらく多くの人も同じだと思うのだけど、アウトプットした記事数の何倍も、下書きのままの記事や、書きかけて消した記事がある。思うように筋や落とし所が見いだせず、アウトプットまで到達できないということに苦しみ続けた。

今年書ききれなかったテーマのうち、以下の2つは公開されているどの記事よりも時間をかけて取り組んだにもかかわらず記事に仕上げることができなかった。来年に持ち越して、再チャレンジしたい。

その他、数は少なかったがインスピレーションをもらった本の感想を、読後感が消えないうちに書くということもできた。

来年も同数以上のアウトプットはキープしたいところ。

 

プログラマー仲間とのツアー×2

ただでさえ普段岐阜の山奥に引きこもっているのに、年々勉強会やミートアップへの参加が減ってしまっていて、プログラマー仲間とのコミュニケーションの機会がめっきり減ってしまった。そんな危機感もあったため、私の中ではかなり長い付き合いになってきているSymfonyユーザー会がらみの仲間とガッツリ遊べそうなタイミングは逃さなかった。

1度目は、7月に開催されたPHPカンファレンス関西に合わせて、郡山さん、polidog、gilbiteが東京から車移動というのに便乗した。そして、せっかく関西に来たのだからと、翌日はpolidog、gilbiteと私の3人で奈良の法隆寺・東大寺観光(夜はgilbiteと二人でスーパー銭湯)、さらにその翌日は郡山さん、gilbiteと私の3人で祇園祭、宇治観光してから帰るというツアー。奈良では、学校の教科書でしか観たことがなかった仏像を直に観て、その佇まいにひたすら圧倒された。

2度目は、11月に開催されたDCI Tokyo Reviewのイベントの前日に、郡山さん、polidog、gilbite、勢田さん、花井さん、おかぽん、私の7人で、草津温泉ツアー。この時は郡山さんの車1台に全員乗って、比較的長時間の車移動だったため、それぞれの仕事のことを話したりしていた。そういう時間も楽しかったし、何より、紅葉のシーズンの最後くらいで、雪もちらつくほどの寒さを感じながら、午後の済んだ空気のせいか近く見える山の、その上を速く流れる雲を見上げながら、熱さの刺激も心地よく感じる草津温泉が最高だった。

来年も、この仲間たちとのツアーは是非行きたい。

 

仕事で新人教育をやった

私はこれまで、プログラミング関係にかかわらず、何らかの教育という活動を多く行ってきた。しかし、本を書いたり短期間のトレーニングコースだったり、座学の研修スタイルなどばかりだった。今回は初めて、自分と同じチームで仕事をする、自分の直属の部下になる人を、自分のカリキュラムで、1から育てるということをした(現在進行中)。

教えることにおいて、「What=何を」の部分(つまりカリキュラム)は、これまでの教育経験や今やっている仕事の経験から、良い内容を最初から用意することができた。しかし、それを「How=どうやって」教えるのかという部分が、私にとってチャレンジの部分だった。2つのことを意識した。

教育は、相手があってのものなので、私のやり方が絶対的に正しかったということはできないが、新人の素直さや勤勉さにも助けられたおかげで、3ヶ月たった現時点で、一緒に仕事をしていける信頼関係のスタート地点には、十分に到達できたと感じる。

来年は、この新人の実務指導と並行して、数値的な予定では別の新人も入ってくることになるはず。業務的な課題はいろいろあるが、私個人としては、その時その時の新たなチャレンジとして楽しんで取り組みたいと思う。

 

買い物

  • iPad Pro(10.5インチ)を買った。アイデアや考え事のダンプ先にずっと迷っていたが、完全にライフチェンジした。
  • 車のタイヤ(+ホイール)を、わずかだけどスポーティなデザインのものにした。車に乗る頻度が高いので、その度に自分の気分がちょっとだけ良い。
  • 数年悩んでいたが、ようやく年末になって椅子を買った(買う決定をした)。届くのは来年だが、ライフチェンジになるはず。
  • iPhoneを6→8に機種変更したことに合わせ、積極的にiPhoneを使ったQUICPay支払いを使うようにしてみた。財布がかなりかさばっているので、それを出し入れする手間が省けるのはかなり良い。

 

総括

目立つアウトプットなどができなかった反省はあるが、全体としては2017年はよい一年だった。

 

 

職場の仕事仲間の皆様、プログラマー仲間の皆様、twitterなどで絡んでいただける皆様、いろいろとありがとうございました。

2018年もよろしくお願いいたします!