みなさんは普段、どのような言語・フレームワークを使って開発しているでしょうか。私はここ5年ほどはFlutterというフレームワークでiOS/Android向けのモバイルアプリを開発しています。
では、その言語やフレームワークは「いつまでも使える」技術と言えるでしょうか。
おそらくほとんどの場合、その答えは「No」だと思います。
ソフトウェア開発の歴史を振り返っても、何十年と同じ知識と同じコードで成り立っている技術は私の知る限りありません。時間が経てば新しい言語が登場し、従来の課題を解決する新しいフレームワークが作り出され、さらにはその技術自体の開発やメンテナンスが止まってしまう可能性すらあります。
たとえば私が使っているFlutterも、開発を主導しているGoogleが「これ以上Flutterの開発にリソースをかけない」と決めたらどうなるか、予測はできません。そのリスクを理由にFlutterは使わないと判断している開発者も少なくないでしょう。
ではそれが現実になったとき、次に使う別の技術の学び直しは「ゼロからやり直し」になってしまうのでしょうか。今まで学習に費やした時間と労力はすべて無駄になってしまうのでしょうか。
これは「学び方による」と考えています。
そこでこの記事では、別の技術を学ぶ際に「強くてニューゲーム」できる学び方について考えてみたいと思います。
※「強くてニューゲーム」とは
ゲームを一度クリアした時点(もしくは進行途中)のアイテムやレベルデータを引き継いで新たに最初から始めること。一度目よりも効率的にゲームを進められ、一味違った楽しみ方ができるシステムです。
学び方を学ぶ
「強くてニューゲーム」するためにはいくつか学び方のコツがあります。そのひとつ目は「学び方を学ぶ」ことです。
たとえばモバイルアプリ開発を例にとった場合、GPSデータを扱いたい、アプリケーション全体の設計を考えたい、環境構築をしたい、などのいろいろな課題に対し、みなさんはどのように調べてどのようにそれを解決するでしょうか。
もしもパッと検索して出てきた適当な技術記事を真似して済ませているようであれば赤信号です。
たしかに「とりあえず動かす」ことを目的とするのであればそれで良いかもしれません。しかし、「この場合は、こうする」のような場当たり的な調べ方や学び方は、扱う技術が変わって前提が変わった時に役に立たなくなり、「ゼロから学び直し」が発生してしまいます。
一方で、課題を分解して整理し、適切な調べ方を考え実践し、より適切な解決策を模索する、そんなひとつひとつのステップを意識することで、「学び方」や「考え方」という基礎的なスキルが身につき次の技術を学ぶ際に活かせます。つまり「強くてニューゲーム」できるというわけです。
ちょうど良さそうなコードを拾って適用する、というやり方ではなく、GPS自体の仕組みについて調べるところから始めたり、アプリケーション設計について議論している本を読み、公式ドキュメントで正確な情報を得る、という学び方や調べ方を実践してみてください。他にもGitHubやDiscordなどのコミュニティで質問する、記事を書いてフィードバックをもらう、ライブラリを作って公開する、などの経験は扱う技術に関わらず活かせるスキルになるはずです。
比較する
2つ目のコツは「比較する」ことです。
人の脳の作りとして、同じ情報をインプットするにしても、ただ頭に入れようとするよりも何か既存の知識に紐づける方が理解が早く深くなるそうです。
たとえばFlutterには「宣言的にUIを構築する」という考え方があるのですが、このことをただ覚えようとするよりも従来の「命令的なUI構築」と比較する形で学ぶことでより学習が効果的になると実感しています。
言語同士の考え方や機能の違い、プラットフォームごとの特性や制約の違い、システム全体における各レイヤーの優先順位の違いなど、ソフトウェア開発する上で「比較」できる観点はいくらでも存在します。
しかし、「比較する」ためには既存の技術に対する確かな知識が不可欠です。あやふやで不正確な知識を基に比較をしても意味がありません。たとえば「命令的なコーディング」を知らない状態で「宣言的なコーディング」と比べようとしても学ぶべきものが2倍に増えるだけです。
比較をすることで学習は効率的になりますが、そのためには比較対象としての今扱っている技術への理解が不可欠です。その意味でも、よくわからないまま実装して動いたからOKとするのではなく、先述した通りに課題や調べ方を考え、その仕組みを深く理解することを今から実践してみてください。
まとめ
目の前の技術を学ぶ目的は、決してその技術を使うためだけではありません。適切な学び方で身についた確かな理解は、別の技術を学ぶ上で大きな助けになるはずです。
そう考えると、「今何の技術を学ぶのに時間を費やすべきか」という点はあまり大した問題ではなくなります。今やりたい技術が将来的にどれだけの期間使い続けられるかと悩んでいるくらいであれば、少しでもその技術を深く学ぶことに時間を費やし、少しでも早く実際のソフトウェアを開発する経験を積むべきだと考えます。
何かひとつ技術を習得すれば別の技術を学ぶことは難しくない、とはよく言われますが、それはこの記事に書いたようなことが理由にあるのではないかなと思います。
技術の将来性というのはとても不確かな要素です。それを気にするよりも、今使っている技術や気になっている技術をより深ぼって詳しくなることに集中してみてください。将来的に別の技術を学ぶことになったとしても、今の技術に対する理解と経験は必ず活かせるはずです。
いかがでしたか?
読んでからすぐに意識できるTips満載でしたよね。記事の内容について気になることがあれば、TechTrainの面談からちゅーやんさんに質問も可能です!
みなさんの「記事、読みました!」の声がメンターにとっても運営にとっても励みになります。ぜひ読んだ方は感想などを伝えてもらえたらとても嬉しいです。
メンター執筆シリーズについて
メンター執筆シリーズはこれからも定期的に配信中。
次回の記事も続々準備中です!公開を楽しみにしていてくださいね〜。
ちゅーやんさん直伝「強くてニューゲーム」なFlutterの学習ロードマップも公開中!