「私は」好きだ: Flutter学習中
Flutter学習中。新しいソフトウェア技術について学ぶ方法というのは、私にとっては誰か優れた人の書いたコードを読む事だった。読めないかもしれないコードの山を前にすると、まるで外国語で書かれた本を目の前にしたような気分になり、これを読破するのは、自分にはとても無理なのでは?と弱気になってしまう。なので、ほどほどの長さのコードを見つけることからはじめる。コードを呼んでいる途中で、使い方がわからないクラス、メソッド、プロパティが出てきたら、その都度、辞書を引く(この場合はAPIリファレンスを参照)、を繰り返す。
公式チュートリアルなどは、まず読まなければならないものの筆頭だろう。特にcodelabsのMDC 101 Flutter: Material Components (MDC) Basicsの101から104までを実際に動かしてみて、いっぱしのFlatterアプリを作ったような気になったのは大きな収穫だった。そこでは画面遷移やGridViewなどといった、多くのアプリで使うであろうコンポーネントが入っていたので、いつか自分で作ってみたいアプリに必要なコンポーネントの使い方を、ここから学習した。
次は、やはり公式チュートリアルからリンクが貼られているGitHub上のプロジェクトを読むことにした。
インターネットの無い紀元前では、それは雑誌や本に書かれたコードを「写経」することだったのだけど、今はGitHubで良さそうなプロジェクトをcloneしてきて観察できる。とはいっても私はGitHubで好みのプロジェクトを探し出すノウハウが無いので、公式サイトのお勧めぐらいにしかたどり着けない。
作者であるベトナムの彼、若いのに凄いねえ。ちょうどよい長さのコードだったので、これをcloneしてコード読みをしようと思う。
結局、私がなにかの技術を習得できるかどうかはひとえにこのような参考になるプロジェクトのコードを発見できるかどうかにかかっているのではないかと最近思う。
私はFlutterの何が気に入ったのかというと、以前からDart言語が気になっていたのもあるけど、何よりFlutterの、そのコンポーネントの豊富さである。自分でコンポーネントなど作らなくても良さそうだ。これが、私のプログラマー人生の大部分を占める「ありものを組み合わせて何かをでっち上げる」作業にぴったりだと思った。Flutterの弱点としては、複雑なコンポーネントになるとネストが深くなり可読性が下がるようだけど、そんなものは別コンポーネントに切り出してしまえばよい。括弧閉じだらけになるのは、言語をPythonにでも切り替えない限り解決できないので、これは慣れるしか無い。もしくはLispのように、複数の綴じカッコは1行にまとめてしまうとか(カンマで区切られているからカッコ悪いけど)。
FlutterでWebを検索していると、おおむね好意的な意見ばかり見つかる。まだブームにすらなっていないのだから、ハイプ・サイクルでいうと流行期も迎えていないのだから、その後の幻滅期はまだのようだ。なので、無理やり否定的な意見で、しかも日本語で書かれた記事を見つけようとすると、こんなのが引っかかった:
個人的にJavaが嫌いなので流行ってほしくない。いやDartはそれ自体はいいと思うのだけど、こういうUI継承ベースのフレームワークが主流になるような開発環境で仕事をしたくない。嫌な思い出しかない。Backbone も Flash も Unity も。
これは好みの問題なので、Flutterが好きな人もいれば嫌いな人もいる、というだけの話で、私はこの文章において、他人の好みに対し特定の意見を強制する意図はまったくありません。
私、FlashもUnityも大好きだし、Javaは好きとか嫌いとか以前に一番キャリアが長かったので、まあ、コードを書けと言われれば書きます。もし、新規プロジェクトにJavaを採用しようとするなら「今どきはもっと楽に書ける言語もありますよ。Javaの有用なライブラリを使いたいのなら、KotlinなどのJVM言語も検討してみませんか?」とサジェスチョンもしたくなりますけど、例えばそのプロジェクトが金融系で、Javaの豊富な金融系ライブラリがすでにあり、それらを使いたいというのならその選択はとても賢明だ。「流行っているから」という理由で技術を採用すべきではない。パワフル、という理由で技術の選定をしたいものだが、実際はなかなかそうはいかない:「Javaで金額の計算をするのにいちいちBigDecimal使うのは面倒くさいでしょう?Lispだと分数の計算だって標準で出来ますよ」と言っても開発者を集められないのだから、それは単なるワガママだ。
しかし彼はJavaを散々嫌っておきながら好みがJavaScriptなのだから笑止なのである。
それに、コペンハーゲンにあるGoogleのDartチームが「Java屋」なのかどうかは知らん。Dart言語設計者であるラルス・バークはV8 JavaScriptエンジンの開発に携わったのだから「JavaScript屋」ではないか(彼がFlutterに関わったかどうかは知らないけど、Flutterを作ったのは、彼の周辺のデンマークGoogle…V8チーム…の連中であることは確かだ)。
逆に私は全くもってパワフルではないJavaScriptが嫌で、Dojo ToolkitもjQueryも嫌な思い出しかない(※1)、いや違った。嫌な思い出が多い(Reactは業務でちょっと触れただけなので感想を書くほど大したことはしていない)。JavaScriptでUIコンポーネントと言われても、結局はdivタグの矩形にCSSでひたすらデコレーションしていくだけであり、結局HTMLのUIコンポーネントって、テキストフィールドとボタンだけじゃないか(その後HTML5で少し増えたようですが)。そんな「UIモドキ」をdivタグだらけで1から作っていく時間なぞ私には無い。
この記事を書いたMizchiという人は元Qiita(※2)の開発者であり、彼は最新のWeb技術についてはてなブログ(※3)上で気を吐いていらっしゃったり、素晴らしいコードをお書きになるそうですが、こと日本語となると怪しいところが散見され:
しかし人は平気でUI継承してprotected を埋め込み参照階層に暗黙のルールを発生させる。
「人」って、あなたの事ではないのですか?あなたではないとしたら、誰と誰の事ですか?もしかして、人類全員の事ですか?だとしたらその証拠は?
彼はブログの文章中でよく「我々は」「人は」「俺たちは」などと書きますけど(例:○○はなぜ俺達の魂を震わせるのか)、筆者以外、誰のことでしょうか?こういうのは、最近の気持ち悪いネット用語でいう「主語がでかい」というやつなのでしょうが、ヒトラーやスターリンや、その他大勢の煽動者に「我々は!」と実体のない虚構の共同体があると騙されて数千万人の死者が出た第二次世界大戦から随分経つのに、まだ歴史から学べない奴がいるのだと。「私は好きだ」「私は嫌いだ」「私はよく間違える」と、なぜ言えないのか?
彼の発言には数年前にやたら流行って今や誰も言わなくなった「エモい」や、去年あたりからの「強い」の誤用(※4)が散見されるなど、狭いコミュニティの中の薄っぺらな流行を敏感に察知する能力に長けている様子なので、彼はこれからもボスザルに取り入って繁栄のおこぼれに与れることでしょう。サルの天国ではバナナが食べ放題だとボスザルから聞いたら「魂が震える」のか?ちなみに私の体の中のどこを切っても”魂”と呼ばれる光る玉など無いので、震えません。
プログラマーとして優れた人が書く本は、文章も素晴らしい傾向があると「私は」感じた。つまり、コードを書く能力と自然言語による文章を書く能力には何らかの関係があると「私は」思う。ゆえに、ひどい文章を書くプログラマーの能力を「私は」信用しない。「私は今のところはそのように感じる」。
まあつまり私もMizchiもFlutterに「Java-Flash臭さ」を感じているところは同じであり、あとは個人の好みであると。
(※1)「しかない」わけないでしょう?「私の人生は嫌なことしか無い」?楽しい日だって確実にあった筈だ。嘘を言って自分自身を不幸にするのは止そう
(※2)私は毎日読んでいる、大好きなウェブサイトです!随想の事をポエムと言って揶揄する不愉快な連中のたまり場
(※3)田舎の学校では優等生だとチヤホヤされていたのが東京に来たら周囲にもっと頭の良いヤツがたくさんいたのでドロップアウトしたような中途半端な連中のたまり場
(※4)「強いエンジニア」って何が強いの?握力?