こんにちは、エンジニアの @muttsu_623 です。
この記事は、株式会社アトラエアドベントカレンダー2020 25日目の記事です。昨日の記事は Docker の申し子 小倉 の GCP AI Platform Pipelines 選定時の観点と運用した所感 でした。
今回は、タイトルのように 複数の言語にチャレンジしたからこそ感じた、1つの言語をしっかり学ぶ重要性 について自分なりの考えを書こうと思います。
いわゆるポエムですね。
これまでの仕事
2018年4月に内定者インターンとして入社後、2年ほどyentaのAndroidアプリをKotlinで運用、改善をしておりました。
今年に入ってから、世の中へより素早く価値を届けていくためAndroid(Kotlin)以外にも書けた方がいいと判断し、iOS(Swift)やWebフロント(Vue)での開発も挑戦し始めました。
また、9月からは 転職サイトGreen の、アプリの開発をFlutterで行なっています。
複数の言語で開発をするに至った背景
ほぼ同時期にすべての言語に手をつけ始めました。
上記にも記述していますが、それまではAndroid(Kotlin)のみでどの言語もしっかりと開発したことはありませんでした。
きっかけはあるプロジェクトを担当していた際、開発の進捗がよくない状態が続いていました。
自社開発・運用のプロダクトのため、正直自分たちが立てた目標・リリース期日を延ばすことはできますが、リリース期日は一度延ばしてしまうとズルズル延びていってしまうという経験があったため、どうにか延ばさず期日に間に合わせる方法を考えました。
他のチームから人手を借りる方法もありましたが私が担当していたAndroidの開発がはやめに終わったこともあり、プロジェクト内でリソースを間に合わせたほうがいいことも踏まえ、iOS, Webフロントの開発に着手しました。
複数の言語にチャレンジして感じたこと
まず第一に、 書いてみると意外といける と感じました。今もAndroidメインで他の言語の開発を行なっていますが、この感情は変わりません。
もちろん言語仕様の違いや、フレームワークの違いによりAndroidとは違う部分が多々あります。
しかしながら、『EntityやAPIの処理をつくり、Viewをつくり、ViewModel(Controller)をつくる。』この大枠の流れは変わりません。
フロントエンドでClean Architectureを適用してみる(+サンプルコード)より引用
この図、よくクリーンアーキテクチャが語られるときに用いられますよね。この図をそのまま受け入れるとクリーンアーキテクチャが理解しにくいなど色々と語られますが、それは今回置いておきます。
大事なのは、一番外の青い領域以外は言語やフレームワーク、クライアントやサーバなどは関係なく用いられるデザインパターンやクラスであるという点だと思っています。
多少違いはあるでしょうが、モバイルアプリでもWebフロントでも以下の流れはほとんど変わらないと思います。
[View] ⇄ [ViewModel(Controller, Presenter)] ⇄ [Usecase] ⇄ [Repository] ⇄ [Dao] ⇄ [API, Local DB, etc...]
そして、サーバサイドは以下の流れだと思います。
[Controller] ⇄ [Usecase] ⇄ [Dao] ⇄ [DB]
iOSやWebフロントを実際に書いてみたからこそ、上記はほぼ変わらないことを実感しています。あまり違いがないと分かっていれば、あとはその言語やフレームワーク特有のお作法や仕様を把握しひたすら経験を積むことで、最初の言語を習得して時間より圧倒的に早い時間で言語を習得することができます。
1つの言語をしっかり学ぶことの重要性
ここで認識いただきたいのは、私は 複数の言語にチャレンジすることが必ずしも善ではない と思っています。
私の話になりますが、まだAndroidを1人で担当するのも怪しい頃、領域を広げればより活躍できる!と自分が活躍したいことばかり考え、領域を広げようとしていた時期がありました。(笑)
そんなとき、先輩方から
焦って複数の言語の習得を一気にやるよりも、1つの言語を一定自信を持って書けるようになったほうがいいよ。そうすれば、他の言語はすぐ習得できるから。
と言われました。
当時はもちろん全然わかりませんでしたが、今になると身をもって実感しますし、先輩方のありがたい言葉のおかげで今の状態になれていると思います。
内定者の頃から先輩にたくさんレビューをいただきながら2年半ほどかけて、
などをAndroidアプリの開発を通して何度も何度も経験してきました。
結果として、今複数の言語の開発を行うようになった状態でも上記の経験は多分に生きており、そこまで苦なく開発を行うことができています。
私個人の意見として、エンジニアになりたての方には焦って多くの言語に取り組むよりも、1つの言語をじっくりしっかり学んでいただきたいです。
守破離という言葉がまさにこの営みを表していると感じています。
「守」は、師や流派の教え、型、技を忠実に守り、確実に身につける段階。「破」は、他の師や流派の教えについても考え、良いものを取り入れ、心技を発展させる段階。「離」は、一つの流派から離れ、独自の新しいものを生み出し確立させる段階。
エンジニアは職人気質と言われますが、実際職人だと考えています。
焦ってやるよりも、重要な基礎を着実に積み上げていくことで圧倒的に成長し活躍の幅が一気に広がる職種なので、ぜひ守破離を意識しつつ、1つの言語をしっかりと習得することから始めてほしいなと思います。
最後に
経験が少ない中で恐縮ながら、 複数の言語にチャレンジしたからこそ感じた、1つの言語をしっかり学ぶ重要性 という題でブログを書かせていただきました。
私自信、Kotlinのスキルが伸びきったとは思っていませんし、まだまだ伸ばしていけると感じています。自戒を込めて、着実に成長していこうと思います。
もしこの記事を読んで少しでもアトラエや私自身に興味を持ってくださった方がいたら、ぜひこちらをご覧いただければと思います。