この記事に技術的な話はありません。
ただ「プログラミングって楽しいなあ」と実感させてくれたのが、一番嫌いだったJavaScriptだったという話です。
もし、自分にはプログラミングの才能がないと思っている人がいたら、**「それでもプログラミングと一緒に人生を歩けるかもですよ?」**という同じ初心者からの感想をここに残しておきたいと思います。つまり、**爆速で○○ができなかった人間でも「プログラミングを楽しむことは平等に可能」**なのかもと。
ただちょっと、時間と参考書の縁が必要なだけで。
##はじめに
手短に自己紹介させていただきますが、いま僕はSE系の会社でDjango/Angularメインでシステムとインターフェース関係をやってます。
プログラミングをはじめて2年強のアラフォーで、いまの会社は知人のツテで入りました。その頃は「HTMLとCSSをかろうじて触れます」レベルのひどいものでした。
いまもひどい部類なのによく会社も我慢してくれているもんだ。
####学習の歩みと反省
プログラミングの基礎部分を作るときこそ、学習の手順および、書籍・本・動画そしてメンターや講師といった情報源の巡り合わせが本当に重要だなと思います。
僕は当時、Sのつくスクールで始めましたが講師との相性がおそらく相当に悪く、「これはお作法です」を鵜呑みできない自分の性分もあって、結局何も成果物がないまま半年が終わりました。それでもHTMLとCSSは多少触れるようになったので、友人知人の簡単なwebページを作ったりして小銭稼ぎをしていました。
その際に、JavaScriptはよくわかんないけどコピペでちょっと入れる的な使い方をしてました。ただJavaScriptは構文エラーがあってもページ自体は表示して、でもクリックイベントは反映しない、という無機質な感じにイライラして、深く学ぶ気持ちは起きませんでした。避けられる限り避けてやると決めたくらいに嫌いでした。
##おいおい地獄か? AngularとTypeScript
そんな状態でなぜか入れていただけた会社は初日に、
「じゃあこれ引き継いで」
と業務管理アプリの開発を丸投げされます。担当は私一人。
Angularも知らなければもちろんTypeScriptなんぞ触ったことすらありません。
型定義もわからず、何に値を格納しているんだこれは・・・と混乱し、フレームワークのメリットもわからず、前任者もサーバーサイドはともかく、「Angularはこのひと月しか触ったことないから」と質問すらできない始末。なので一人、触ってはエラー。学んでは忘却。ひと月ふた月と過ぎていきます。
途中、
「DjangoでAPI作ってJSONを非同期通信して、うんぬんかんぬんでよろしく」
と、JavaScriptでなにか作っていたらどうってことのないワードも、このときは日本語なのに意味わからん状態。帰ってから手当たり次第本を読むも、目は書いてある文字を滑り続けるし、写経しても翌日には忘れることの繰り返し。「自分、本当にプログラミングの才能ないんだな」と自己評価は地中深くに潜っていきます。
とくにAngularは他のフレームワークに比べて利用者が少なく、そもそもの情報量が少ない&バージョンアップが早いので書籍は無いわAngularJSの情報も混ざるわで、本当に地獄の日々でした。
##コード百遍、自ずから意通ず
読む。わからない。読む。わからない。
こんな繰り返しのある日、急に自分の中に仮説が立つようになりました。
(……あれ? あのメソッドってこういう時に使うんじゃね?)
(あれをこうすれば意図通りのものが作れるんじゃね?)
コードの基礎的な読み方や前任者の意図を読む精度は依然低いままでも、仮説を立てられるようになったところから、こう、主体的にコードを書けるようになった感覚が芽生えて、グッと面白さが湧いてきたのを覚えてます。
####そのきっかけがJavaScriptだった
まあ正しくは触ってたTypeScriptなのですが、基礎的な部分の意でJavaScriptです。
構文のルール、()の意味、{}の役割などなどようやく線で繋がって、プロトタイプのメソッドとfunctionで作るメソッド、Asyncの意味や注意点、デバッグの有効性、ようやく「あ、いまの自分なら教われば覚えられそう」という予感がしました。
そこからは買ってホコリをかぶっていたJavaScript コードレシピ集や、JavaScriptリファレンス 第6版を片手に、UdemyのThe Complete JavaScript Course 2020を、へー! すげー! と進めてたりして、いまでもUdemyさんのコンテンツにはめちゃくちゃお世話になってます。
もしかしたらどこかで「ある日突然、コードが読める」という言葉を聞いたことあるかもしれませんが、人のターニングポイントはそれぞれで、僕の場合は**「ある日突然、コードの仮説が立つようになる」**がターニングポイントと思っています。
きっとこうすればこう動く。とか、これはバックエンド側の方で処理する方がスマート。と、パズルゲーム感覚のプログラミングは、ヘマもしますが本当に楽しいです!
そして、触れていない言語は山ほどありますしこの認識が正しいことかわかりませんが、本当に納期優先な最悪ケースでならJavaScriptでゴリゴリすればいいのかも、というJavaScriptの全能感はいまの僕に安心感を与えてくれています。
##つまりJavaScript楽しい
現在だって僕はまともにプログラミングできてるなんて毛ほども思ってませんが、ようやく、使えるもの・世の中の役に立つものを作る人側のスタートラインに立とうとしているのかなー、なんていう成長感が嬉しくて仕方ありません。
いまではWebpack使いこなせたらいいなあとか、Reactスキル欲しいとか、その次はTypeScript押さえてやろう、みたいにJavaScriptを軸にもっと知らないことを知っていきたい、もっと使えるようになりたいと思うくらいです。あれだけ苦しめられたAngularもいまは嫌いじゃないですし、(というか一番触ってる)ゆくゆくはもっとサーバーサイド側の開発で挑戦したいとも思ってます。
長々と書いてしまいましたが、JavaScriptで動くものが作れるようになって、はじめてプログラミングの楽しさを知りました。(プログラミングの良さと楽しさは別物という意味で言っています)
もし人と比べて凹んでたり、挫折したりしてても、諦めずに(でもちゃんと手と頭を動かす時間を使って)いれば、プログラミングはある時一気に楽しくなると思います。
人生のお供にプログラミング、ってのもいいんじゃないかなあと。
仕事でも携わりながらも、僕は今それくらいの視点でいます。
せっかく触り始めたのだから、自分の中で楽しさがわかるところまで行けたら幸せだと思うんですよね、と素人が言ってみたり。
とまあ、技術のギの字もない記事でしたが、ここまで読んでくださりありがとうございました。次回からは未熟なりに技術系記事を書いていこうと思います。
今後とも、どうぞよろしくお願いいたします。
あの大嫌いだったJavaScriptに感謝と、これからもよろしくという挨拶を込めて。
console.log("Hello world.");