PHPカンファレンス福岡で登壇します!

3月のPHPerKaigi 2018に続いて、6月16日(土)に開催されるPHPカンファレンス福岡2018でも登壇させて頂けることになりました。

phpcon.fukuoka.jp

 

トーク概要は以下のとおりです。

  • 時刻:【Fusicホール】13:00〜13:45
  • 「SOLIDの原則ってどんなふうに使うの?オープン・クローズドの原則編 拡大版」
  • 対象:中級
  • セッション内容:PHPerKaigi 2018でベストトーク賞の講演の拡大再演版です。理解を深めるためのトピックを追加してお話します。
    オブジェクト指向プログラミングを勉強したことのある人なら、一度は聞いたことのあるSOLIDの原則。特にオープン・クローズドの原則って、意味が分からない! という感想を持った方は少なからずいらっしゃるかと思います。この講演では、PHPのコード例を示しながら、どのような状況でSOLIDの原則を持ち出すのか、および、原則を適用するとコードがどのように変化するのかを、新人PHPerと先輩との掛け合い形式でお話します。

このトークにかける思い

私の「SOLIDの原則ってどんなふうに使うの?」は、講演を聞いていただく参加者のみなさんに、コード設計が効果を発揮する場面を、擬似的にではあるけれども体験してもらえる内容になっています。このような体験によって、コードを設計していく上で重要になる「コードの設計を見る目」を、参加者のみなさんが獲得するきっかけになってほしい。これが私のねらいです。

PHPカンファレンス福岡に参加される多くの方は、PHPerKaigiには参加していらっしゃらない方だと思います。また、ひょっとするとPHPerKaigiで私の講演を聞いて頂いた方が、またいらっしゃるかもしれません。

基本的な内容はPHPerKaigiのときのものと共通になりますが、取り上げるコード(実装要件の部分)は少し変更します。初めての方でも、オープン・クローズドの原則をきちんと理解いただけますし、2回目という方には、より理解を深めていただける内容になるかと思います。

 

すでに参加募集が始まっています。是非ご参加を!

eventon.jp

eventon.jp

論理力を鍛えるための本

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

そんな疑念を強く持ち始めたのは、ほんの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