仕事以外の時間もプログラミングやその他技術を学習するなどして過ごしているエンジニアも多いと思いますが、自分もその一人でした。インプットとして技術書などもよく読んでいるのですが、勉強する中で下記の様な不満を慢性的に持っていました。
- 買う前と買った後のギャップが大きい技術書が少なくない
- 技術書は比較的高価なことが多いので、ダメージが大きい。。。
- 何か良い書籍ないかな〜とブラウジングするのに適したプラットフォームがない
- amazonを基本的に利用しているものの、amazonの検索UIは様々な商品に適合する様に汎用的なデザインになっているため技術書のブラウジングに関してはあまり使い勝手が良くない
- 他のエンジニアさんがどんな技術書を読んでいて、それをどの様に評価しているのかリサーチして自身の学習方針の参考としたい
- amazonでレビュー自体は確認できるものの、参考とするには内容が薄かったり投稿主に関する情報が少ないため信憑性が判断できない
いっそのこと自分で作ってしまおうかな、とリリースしたのが"Hello Books"です。この個人開発経験を通して、個人開発には(特に自分の様な若手には)大きなメリットがあると思ったのでその布教も記事後半でさせていただきます。
"Hello Books"って?
エンジニア向けの技術書籍プラットフォームです。利用技術は簡単にまとめるとそれぞれこんな感じで使ってます。
- フロントエンド:TypeScript(React)
- バックエンド:Kotlin(Spring Boot)
- インフラ:GCP(App Engine、Cloud Run、 etc)
簡単にCI・CD環境も構成しているので、開発の内容を自動で本番にリリースすることもできる様にしてあります。
UIはこんな感じになっています(サービスロゴは検討中のためとりあえず白い四角にしてます。。。)。 詳細な条件での検索はもちろん、書籍・著者ごとのレビュースコアを確認しながら書籍をブラウジングできます。
よく技術書を読む方は「読んだ書籍のアウトプットしていきたいな、でもブログだと少し重いしSNSでバンバン投稿するのは気がひけるしな。。。」という方もいらっしゃると思います(少なくとも自分はそうでした)。"Hello Books"を利用すれば自身の学習アウトプットとして気軽にレビューを投稿できます。
また、レビューは各アカウントページから一覧で参照することができるので他エンジニアさんのアカウントページにお邪魔することでどんなエンジニアが・どんな技術書を読んで・どんなアウトプットをしているのかを参考にすることもできます。
リリースして日も浅く大小様々な課題がありますが、みなさんの学習の助けになれる様なプラットフォームを目指して毎日ぬるぬると励んでいます。「パッと見た感じここがクソ!」「この機能性が無いのか。。。」「この動作重すぎ」などのフィードバックがありましたらコメントにてどしどしもらえると嬉しいです。やる気になるので良いフィードバックも(もしあれば)お願いします。
## 個人開発のすすめ
以上長々と宣伝してしまってすいませんでしたが、本題に入りたいと思います。あくまで自身の一意見ですが、(特に自分の様に経験・実力のないエンジニアは)個人開発に取り組むのはとてもよいことだと実際に開発・運用してみて思いました。そう思っている理由はいくつかあります。
アウトプットする機会は意外と確保しづらい
エンジニアは日々新しいことを学習していく必要のある職業だと思うので、読書・講座受講・勉強会参加などを日常的に行っている方は少なくないと思います。しかし、それらインプットした知識をアウトプットする機会を日常的に持てている人は(実際にはわかりませんが)少ないのではと考えています。
個人開発を継続的に行うことで、日々の学習で得た知識をアウトプットする機会を日常的に確保することができます。業務・学習を通して様々なインプットがあると思いますが、何の制約もないためそれらをすぐに試すことができることも個人開発ならではの良さだと思います。
業務でさわれていない技術スタックにも取り組める
自分の様な駆け出しエンジニアの中には「サーバサイドだけではなくフロントもやってみたいな」「クラウドインフラの経験がほしけど、仕事では携われなさそう。。。」「CI・CD環境を自分で構成したりしたいけど、業務的には不要な作業で取り組む機会なさそう」といった様に興味のある技術に業務を通して携われていない方も多いと思います。
でも諦めないで!個人開発はこの問題は解決するにはうってつけです。何しろ個人で勝手に開発しているだけなので、使う技術は自分の趣味・趣向で勝手に選ぶことが許されているのです(テックリード以上のエンジニアが持つことが多いであろう"開発が進んだ後で自分が選定した技術スタックに後悔する"という貴重な経験すら持てるかもしれません)。自分の場合にはサーバサイドKotlinの採用・Reactによる開発・GCPによるアプリケーション構成などどれも素晴らしい経験になったと感じています。
「趣味で利用したくらいでは実務的には役に立つスキルにはつながらない」といった反論があるかもしれませんが、これは基本的にはおおむねその通りだと思います。しかし、趣味レベルでも経験を持つことで次の仕事・プロジェクトでその技術スタックで業務する機会を獲得することもできるので問題ないと思っています(自分は先日転職が決まりましたが、次の会社ではReactでweb・モバイルを開発できますし、クラウドインフラも担当できます)。
日々の業務に取り組んでいる時の視座が高くなる
もちろん個々人の差はあれど、仕事で開発をしている時にはコードそれ自体だけではなく様々なこと(パフォーマンス・ユーザビリティ・etc)を気にしているとは思います。しかし、多くの場合それら重要な事柄は日常的なコーディング業務からは隠蔽されていると思います。例えば、認証などは既に基底でロジックが組まれていたり、セキュリティなどについてもフレームワークやチームのコード作法に則ることである程度カバーできる、といった具合です。
個人開発を行うと、「ちゃんとしたサービスを作るためにはこんなにもたくさん考慮しなければいけない事柄があるのか」といったことを実感できます。何しろそこにはベースとなるコードすらない状態なので、全てを自分で対応していく必要があります。これを全て完璧にこなすことが非常に難易度が高いと思いますが(もちろん自分のケースでは圧倒的に対応できていないと感じています)、我々若手エンジニアにとって重要なのはキャリアの早い段階で正当なwebサービスを成立させることに必要となる圧倒的考慮の一角を目の当たりにすることだと思います。
個人開発を通してこの様な実感を持てることで、いつもの様に仕事でコーディングする際にも前よりも広い視野を持って開発に取り組める様になると考えています。
勉強のサイクルを継続的・効果的に回せる
実際に個人開発をしてみると、自分には知らないことがたくさんありすぎることがよく分かります。未知の事柄に取り組んでいく経験を通して"何が分からないかが分かる"ことがあります。この様に自身がカバーできていなかった領域を認識することで、それら分からないことを勉強して分かる(ほとんど全ての場合、分かった気になる)ことができます。
その様なことは個人開発を通して繰り返し経験するので、未知の事柄にぶつかる -> それについて勉強する -> 開発が一歩前進する -> 未知の事柄にぶつかる -> それについて勉強する (以下繰り返し)
と言った雰囲気で勉強のサイクルを継続的かつ効果的に回していくことができます。闇雲に手当たり次第勉強を進めていくよりは、この様に実際の開発経験を通してぶつかる課題のアプローチとして勉強を進めていくことでカバーするべき方向が大きくずれていくことを防げると思います。
## 最後に
自分はエンジニアになってまだ日が浅いですが、キャリア初期の段階で個人開発に真剣に取り組んで本当に良かったと感じています。実際、"Hello Books"が結果的にポートフォリオ的な役割を果たしてくれたこともあり自分の納得のいく環境に転職を決めることもできました。
日々学習に取り組んでいく中で時には「しんど」と思うこともあります。それでも、技術研鑽のプロセスに個人開発を取り入れることで自分の未熟さ・開発の面白さを再確認する機会を持てる様になり、それがこの職業で生きていきたいと自分で決めた時の気持ちをいつでも思い出させてくれる様になりました。
かつての自分の様にエンジニアになりたいと思って勉強に励んでいる方・今の自分の様にこれからエンジニアとしてのキャリアを積んでいくために頑張っている方の参考になれば幸いです。最後までお読みくださり、ありがとうございました!