読者です 読者をやめる 読者になる 読者になる

try! Swift 書き起こし コードリーディングについて #tryswiftconf Day1-3

try! Swift 2016

新しいコードを読み解くことを、私たちはしばしば行いますが、それはエネルギーと時間を消費します。そこで、スラスラと新しい言語を読めるようにする方法と、進化に付いていく方法をお話しします。

twitter.com

f:id:niwatako:20160302113022j:plain

大学では日本語を勉強していましたが時間が経つと、自己紹介しか話せない。

みなさんのように最近外国語を学びました、Swiftです。いい時もあればやりにくい時もある。 新しい言葉を学ぶ経験に繋がる。 どうやって流暢にコードを使うか、どのように読めるコードを書くか。

プログラミングは新しい言葉を学ぶことと共通する。

f:id:niwatako:20160302113307j:plain

新しい外国語を学んで、クラスメイトをコヒーに誘って、断られたとしても、それは相手が理解してくれたということで良いこと。 数週間後に他のクラスメイトを誘って、Yesと言ってもらって、天気や家族、過去形の話も出来れば先週末の話もできる。会話としては退屈だが、素晴らしい、お互い分かり合えた、複数行でも理解できたとなる。

ところが発展的になると、意見が違ったりして、2回めはデートに誘わないとか。

コードでも、面接に来た人がKVO大好きと言い出すと二回目の面接には呼ばないとか。

テーマ

流暢性を言語やプログラムで考えるとニュアンスや微妙な所を考えていくことになる。

第二外国語を学ぶと第三外国語も学びやすい。 ドイツ語で男性名詞女性名詞が有るとすると、それをフランス語でも流用できる。

でも適用できない場合もある。thanksという言葉をアメリカの言葉ちょっとしたことの感謝に使うが、文化によっては、「ここまでやってくれたのか」と本当に感謝した時にしか言わないところもある。

SwiftでC Styleのループを使わないのと同じ。

みなさんはSwiftの流暢なリーダーとライターになりたいと思う。 読めるコードとは何でしょうか。

こんなことはありませんか

一人がレビューで「パターン変えてくれる?」と言ったら、もう一人が「いやこの方が読みやすいだろ?」という。こういう時、わたしたちは誰が読み手か考えずに、読みやすさについて言ってしまいます。

f:id:niwatako:20160302113747j:plain

読み手を特定してパターンを考えていく必要がある。

f:id:niwatako:20160302113807j:plain

f:id:niwatako:20160302113819j:plain

蛇が自分が動く権利を交渉し、太陽が給料を受けるために登る時、トゼがバラを。。。。その時こそ素晴らしい日動物的な人間を信じる

いい意味で困惑しますね。何回読んでもわからない。何回も読んでパターンが分かり、こういうことかと分かる。10回読んでわかりました。

このようにポエムを読むことは良いかもしれませんが、その背後にある美しさを10回読まなければならないことは、コードではあってはなりません。

f:id:niwatako:20160302114000j:plain

コードは、それぞれ理解度が違います。

ファクトリークラスではバインドを使うということで関係を明確化するには良い、でもチームの人達がわかっていなければ意図が伝わらない。プロなら分かって当然だと考えるのは仕事ができないと言っているようなもの。

f:id:niwatako:20160302114152j:plain

すべてのエンジニアがすべての領域でプロフェッショナルなわけではない。

f:id:niwatako:20160302114226j:plain

他のエンジニアが新しいコードをどんどん作っている。語彙がどんどん増える。流暢でいつづけることは不可能。解読する、それが我々の仕事。解読して、良いツールを使って、意味を読み解いていきます。

でも、解読するプロセスがどう働いているか考えたことがありますか?

作業メモリと読む力

作業メモリはどこかに注意が惹かれると消えてしまいます。何か2つ覚えておこうと思っても3つ目4つ目を見てしまうと最初の2つは忘れてしまう。

でも、7つをちゃんと一度に見れますよね?単語など。どうやって呼んでいるのでしょうか。チャンキングと呼ばれるものがあります。一つのグループに分ける

f:id:niwatako:20160302114449j:plain

テキストから意味を読み込むのはグループとして抽象化して理解している。

きょうは、暗号的な解読できるコードの話ではなくて、最終的に、なんでも買い得は可能だが、読み取れるということと意味が違う。

f:id:niwatako:20160302114548j:plain

これは読み取れますか?

f:id:niwatako:20160302114559j:plain

買得は力を使います。メンタルリソースがないとコードを読み取れません。

f:id:niwatako:20160302114615j:plain

意思決定する箇所を捨てていく必要があります。エネルギーが必要です。

f:id:niwatako:20160302114756j:plain

コードを書く、チームメンバーが読めることが大事。自分が書いているものは読めると思いますが、あったことがない人にとってどうかは想像しにくい。

違う言語の人が聞くスピーチではスラングなどを使わない。

こんなのわからないですよね

f:id:niwatako:20160302114900j:plain

スラングや、方言などを使うのはやめましょう。

パターンを使う

パターンを明確に作っていきましょう

f:id:niwatako:20160302115016j:plain

f:id:niwatako:20160302115028j:plain

何が違うのか見取りやすくなります。

f:id:niwatako:20160302115052j:plain

目を細めて見て、構造が読み取れるようにすること。

一貫性を常に持たせて、チームメイトが直感的に読めるように、エネルギー無く読み取れるようにしましょう

共感をもって書く

なんでこれ読めないんだ?って思ってしまうことがあるかもしれません、自分が悪かったのかと思うことがあるかもしれません。でも、共感を持って、どんな情報がかけているのだろう、なぜ読み取ってもらえないのだろうと考えることで、読み取ってもらえるコードを書けるようになる。何が自分に見えていないのだろう?

f:id:niwatako:20160302115229j:plain

最後の質問

読めるものを作るためにどれくらい時間を書けますか? 私のコーディングガイドラインでとても好きなモノがあります。「コードに議論の余地があってはならない」

f:id:niwatako:20160302115333j:plain

自分が読めるだけでなく、チームメンバーが皆読めるようにする。 ぜひ、エネルギー、やる気を効果的に使えるコードがどのように書けるか、パターン、共感などを利用して新しいコードを作って頂きたい

気に入った記事は はてなブックマーク

はてなブックマークアプリiOS開発チームから来ました! はてなブックマークにはSwift特集があります! 良い記事を見逃さないように、ご利用ください! http://b.hatena.ne.jp/hotentry/it/Swift

そして良いまとめ記事があったらはてなブックマークでブックマークしましょう! try! Swift の記事で盛り上がると嬉しいです!