hello, world して10年が経った学生が今思うこと

この記事は Qiita全国学生対抗戦 Advent Calendar 2024 25日目の記事です。

https://qiita.com/advent-calendar/2024/student

# はじめに

こんにちは、梅雨です。

今日はクリスマス当日、アドベントカレンダー最終日です。24日間にわたる記事投稿はとても大変でしたが、なんとか完走することができました。

今回は人生で初めての、自分語り系（ポエム）記事に挑戦してみたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671591/92e93dca-9a8a-3fd5-5ace-77042f1123cd.png)


自分が普段感じていることをつらつらと書き連ねるだけのものとはなりますが、エンジニアの方もそうでない方も、ぜひ最後まで読んでいただけると幸いです。

# 開発遍歴

タイトルにもある通り、「[hello, world](https://ja.wikipedia.org/wiki/Hello_world)」してから今年で10年が経ちました。

長かったようで短かった10年ですが、まずは自分が10年間でどのような開発に触れてきたかを紹介しようと思います。

## はじめての開発

12歳のとき、親に勧められて参加したプログラミングキャンプが初めての開発です。右も左もわからない中、[Objective-C](https://ja.wikipedia.org/wiki/Objective-C) で iPhone のアプリを作成しました。

この時は教えられた通りにコードを書いて、あとはひたすら Segue で画面を遷移させるようなお粗末なアプリしか作れませんでしたが、当時スマートフォンを持っていなかった自分にとっては非常に楽しい経験だったことを覚えています。

プログラミングキャンプが終わった後も独学で勉強をすすめていましたが、明確な目標があったわけでもなく半年も経たないうちに熱は冷めてしまいました。

## Web開発との出会い

13歳のとき、1年前と同じプログラミングキャンプに参加して今度は Web 開発に触れました。当時はフロントとバックで分かれた開発というものはあまり主流ではなく、[Sinatra](https://ja.wikipedia.org/wiki/Sinatra) と [ERB](https://ja.wikipedia.org/wiki/ERuby) を用いて Web アプリケーションの開発をしました。

この時に Web 開発と出会えていて良かった、と今でも感じています。

iPhone などのモバイルアプリと異なり Web はほぼリアルタイムでアプリケーションの公開が可能であるため、**自分の作ったものがすぐに誰でも見られる状況にできる**ということに感動しました。

加えて、先ほども書いたようにまだスマートフォンを持っていなかった（というか高二まで持っていなかった）ため、自分が唯一与えてもらっていたお下がりのパソコンで開発が完結することもとても嬉しかったです。

## フロントエンドにハマる

中学生の間は、比較的理解しやすかった HTML、CSS、そして JavaScript のライブラリである jQury を使って、動きのあるウェブサイトを作ることにハマっていました。

この頃のフロントエンドは jQuery を使っていないサイトはないといっても過言ではないぐらい **jQuery 隆盛の時代**であったと記憶しており、ガキの自分は jQuery ができれば一人前のエンジニアだと勝手に思っていました。

ハンバーガーメニューやスクロールアニメーションなどが一通りできるようになったぐらいでマスターしたと思い込んでいた自分を今からタイムマシンで殴りに行きたいです。🤛🤛🤛

## バックエンド難しい

高校に入ったぐらいの時期に、フロントエンドに飽きて本格的なアプリケーションの開発に興味を持ち始めました。

中学校の頃やりたくても技術的（＆知識的）にできなかった、ログイン機能を持つアプリケーションの開発を目標に [Ruby on Rails](https://ja.wikipedia.org/wiki/Ruby_on_Rails) をコツコツと勉強していました。

とはいえ、通信やデータベースの基礎的な知識がない状態だったため中々苦戦し、教本などの内容をなぞるので当時の自分は精一杯でした。

実装を完全に理解することができなったとしても、この時に**分からないコードを1行ずつ理解していく**癖をつけられたことが、今の自分を形作る大事な要素になっているように感じます。

## モダンなフロントエンドに触れる

受験などを挟み、大学入学したころに [React](https://ja.wikipedia.org/wiki/React) や [Vue.js](https://ja.wikipedia.org/wiki/Vue.js) のようなモダンなフロントエンドのライブラリが流行り始めました。

「jQuery オワコン」のような記事を見かけたことで若干の焦りと共に Vue.js の勉強をし始めましたが、3~4ヶ月触って React に切り替えました。

React に切り替えた理由としては、**React の方がなんか流行りそう**、という勘でしかなかったのですが、この時の判断は今振り返ってもなかなか良い選択だったのではないかと思っています。

大学生になって金銭的にも多少余裕ができたので、[Udemy](https://www.udemy.com/ja) などで講座を取ったりもしていました。

https://www.udemy.com/course/react-complete-guide/?couponCode=ST12MT122624

https://www.udemy.com/course/nodejs-express/?couponCode=ST12MT122624

## 総合的なアプリケーションの開発

ここ2〜3年は、今まで得てきた断片的な知識を用いて総合的なアプリケーションの開発に触れてきました。

高校時代にはどうしても足りなかった通信やデータベース等の知識が補完されたことによりフロントエンド・バックエンドそれぞれの振る舞いを**体系的に理解**するに至り、業務レベルでの開発もほとんど問題なく行えるようになりました。

また、2024年に入ってからはスタートアップで業務委託のエンジニアとして活動を始めたことで、チーム内の他の人のコードを読んだり議論を行ったりする機会も増え、より**自身のコードを客観的にみる**ことができるようになりました。

以上が現在までの開発遍歴となります。

# 自分が10年も続けてきたことに対する驚き

ここまで自身の開発を振り返ってみて、改めて**10年という時間の長さ**を思い知りました。現在23歳なので、人生の半分弱をプログラミングに触れて過ごしてきたことになります。

自分は決して継続力がある方ではなく何事も３日坊主で終わるタイプなので、10年もプログラミングを続けてこられたことにシンプルに驚いています。

このことについて、自分なりに分析をしてみました。

## 根底にあったのは"技術に対する興味"

「プロダクトを完成させてリリースする」という行動にあまり興味がなかった自分にとって、モチベーションとなっていたのは技術に対する興味であったと思います。

技術に対する興味といってもライブラリや言語の内部実装レベルではなく、「**この実装はどんな技術を用いているのだろうか？**」というものです。

同時に、「**自分の持っている知識だけでこの実装をできるだろうか？**」ということにも非常に興味を持っており、あえて教材を用いないで気になる実装を再現することなども行っていました。

この"縛りプレイ"とも言える姿勢が、３日坊主の自分でも長い期間プログラミングを続けることができた１つの要因であると思います。

教材をなぞるような学習は**知識をつける上では最短の道**であるかもしれませんが、あまり面白味のない勉強方法であることも事実です。

一方で、実装の結果のみを解として試行錯誤しながら実装の再現を行うことは、回り道とはなりますが自分にとって非常に楽しい作業でした。

これが長い期間モチベーションを損なわずプログラミングを続けることができた秘訣なのではないかと考えています。

この方法はたくさん時間があることが前提となるため、大人になってから行うことはほとんど不可能であり、ある意味小さい時からプログラミングを始めたことの数少ない特権であったのではと思います。

## 無理して開発をしない

長い期間プログラミングを続けることができもう１つの要因として、**気が向かないときに無理して開発をしない** というものもあったと思います。

少なくとも中高生の間はあくまでも趣味でプログラミングを行っていたため、気が向かないときには当然開発をすることはありませんでした。

長い時では**半年程度ほとんど何も触らない期間**もあったと思います。

それでも、久しぶりに開発がしたくなった時はすぐに開発を行うようにしていました。

実際、物事を続けるコツとして「続けようとしないこと」という禅問答のような答えがあることは、実体験として納得できる方も一定いると思います。

これは決してプログラミングには限らないことですが、一度義務感を感じたものには向き合う姿勢が根本から変わってしまうことも少なくないため、もし長い期間続けたいと思っているのであれば、とにかく**無理をせずできるときにやる**ことが大事だと思います。

（業務だとそうもいかないと思いますが ^_^;）

# 他の人に勧めたいこと

今度は、皆さんに勧めたいことを２つほど話そうと思います。

突拍子もないことではなく、割とありふれたことですが、自分が身をもって経験したことを交えて紹介させていただきます。

## 本、読みましょう

その１つ目が、本を読むことです。

試行錯誤しながら実装の再現を行うことがモチベーションの維持に繋がると話した手前、**結局一番成長できるのは教本**だと個人的には思います。

自分も（決して多くはないですが）色々な本を読んできました。

![IMG_8932.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671591/846b733a-30e6-d637-a177-6e1aa87d7ab1.jpeg)

もちろんインターネット上には数え切れないほどの有用な記事が溢れており、それら全てを読むことができれば教本を読むまでもありません。

しかしそんなことは不可能であり、必ず**限られた時間で必要な知識を身につける**必要があります。

教本はこのような状況では最も効果を発揮します。というのも、ネット記事とは異なり本は**限られたページ数で必要な知識をまとめる**必要があるからです。

そのため、本からは可能な限り不要な部分を削ぎ落とされた情報を得ることができ、そこで得られた情報をパッチするようなイメージで記事を参考にすることで最も効率よく成長できるのではないかと思います。

加えて、本は**情報が体系的にまとめられている**ため、初めて学ぶ言語やフレームワークでは非常に大きな効果を発揮してくれます。

「なにから始めていいか分からない」という経験をして挫折をしたことのある人には、是非本を読むことをおすすめしたいです。

## LT 会やイベント、行きましょう

２つ目に、LT 会やイベントへの参加をお勧めしたいです。

自分自身も参加し始めたのは割と最近のことなのですが、イベントへの参加は非常に良い刺激となります。

直近では Sansan株式会社の **TypeScriptを活用した型安全なチーム開発 2024**や Findy Tools 主催の**アーキテクチャConference 2024**などに参加してきました。

https://sansan.connpass.com/event/337268

https://architecture-con.findy-tools.io

LT 会に参加すると有益な情報が得られるというのは言うまでもないことですが、それ以外にも参加して良かったと思うことがいくつかあります。

まずはモチベーションの維持がしやすくなるという点です。LT や講演で"すごい"人のお話を聞くことで**自分に足りていないものが何かを再認識**でき、学習のやる気が出てきます。

自分に足りていないものを認識することは意外と難しく（無知の知のようなもの）、普段通り開発をしている中では気づくことのできないことも多いです。

定期的にイベントに参加することで業界のレベルと自身のレベルを相対的に見ることができ、慢心することなく成長できるのではないかと考えています。

そのほかにも、自分以外のエンジニアと開発における悩みを相談し合うことで**心理的な安心感**を得られたり、場合によっては**悩みを解決**することができたりします。

例えば、自分は AWS の [Amplify](https://aws.amazon.com/jp/amplify/) を用いた開発にかなり苦痛を感じていたのですが、その悩みをいくつかのイベントで出会ったエンジニアの方々に相談したところ、共感してくれる人たちがかなりいて安心しました。さらに脱 Amplify をしてからどのような構成にしたかなどの話を聞くこともでき、今後の開発における指針を決める上での参考にもなりました。

ありがたいことに、これらのイベントはほとんどが無料で参加することのできるものとなっているため、もし参加したことのない方は是非一度参加してみて欲しいです。

# 最近思うこと

最後に、この頃感じていることをだらだら書き連ねてこの記事の締めとさせて頂こうと思います。

## プログラミング適性ってなんだろう

プログラミングの適正ってなんだろう、と思うことは最近よくあります。

自分の中で今現在出ている結論としては**アナロジーの能力**です。これは言い換えるならば**物事を抽象的に捉える力**だと思います。

具体から抽象を導き出して理解することで、その抽象を再度別の具体に落とし込むことができるようになります。

プログラミングを始めた頃は言語やフレームワークに重きを置いており、別の言語やフレームワークを学ぶには同じだけの労力や時間がかかると思っていました。

しかし、最近では新しいものを学ぶ際に初めて学んだ時の半分以下の時間で身につけることのできることがほとんどであり、これはまさしく正しいアナロジーによって**物事の本質的な部分を理解できる**ようになっていることを表していると思います。

例として、多くの言語はオブジェクト指向という抽象的な概念を持ち、それゆえに言語が違っても共通する仕組みや仕様を多く持ちます。

これを開発の中で直感的に認識できている人が「プログラミングの得意な人」として存在しているのではないでしょうか。

## 一番怖いのは〇〇

自分はまだまだ若いですが、この歳になって一番怖いなと思うのが**努力のできる人**です。月並みかもしれませんが。

天才の65536倍ぐらい怖いなと感じます。

イベントや Twitter で自分よりも努力している（してそうな）人を見るたび、焦りを感じています。その中でも、とりわけ**継続力のある**人は怖いなと思います。

始めにも述べたとおり自分は継続力がなく、たまたま運が良くプログラミングをここまで続けることができただけなので、そのような人たちにはすぐ知識や技術で追い抜かれてしまうはずです。

ですが、これは裏を返せば、自分よりも知識や技術のある人たちも同じことを感じているということでもあり、その人たちと対等なレベルに到達するためには同じように**継続的な努力**をするしかないということになります。

今年はアドベントカレンダーでなんとか継続力を身につける訓練を行いましたが、来年からはもう少し**コツコツと何かしらの努力をしてレベルアップしたい**です、という決意で締めさせていただこうと思います。

# おわりに

自分語りの駄文を最後までお読みいただきありがとうございました。

今年のアドベントカレンダーは自分にとって少なからず成長になったと感じています。来年以降も定期的に記事投稿を行おうと思っているので、いいねやフォローなど是非よろしくお願いします。（本当に励みになります）

経験の長いエンジニアの方も、そうでない方も、記事への感想や意見などがあれば是非コメントしていただきたいです。

それでは、よい年末を！