※画像はドバイのパームジュメイラ付近
始めに
こんにちは、まんじです!
今回はプログラミングで意味があった気がするというか、ぼくが海外からフリーランスできるぐらいになるまでにコスパが良かったように思えるプログラミングの勉強法をご紹介したいと思います。
結論的には以下のやり方に落ち着いているのと、これらの方法が良かったと思っています。
- 自分で何を作る(ウェブアプリ、自動化ツールなど)
- プログラミングの実務(労働)を必死にやる(不明点や知らない技術を自己学習)
- プログラミングの実務で学んだ技術をベースに自分で何かを作る
要約すると、目的ありきで勉強したものはやっぱり身になったとすごく感じます。
一方で
「いろんな言語が触れたほうがいい」
とか、
「いろんな言語やフレームワークが使えたほうがいいんじゃね?」
といったモチベーションでやったプログラミングの学習はわりと無駄だったと思います。
深掘りして解説します。
方法1. 自分で何を作る(ウェブアプリ、自動化ツールなど)
※以前作っていたSEOツール(デスクトップアプリとウェブアプリ)
ぼくはウェブアプリを何個か作ってリリースしているんですが、やっぱり自分で何かを作って形にするのはプログラミングの学習で効率が良いと思っています。
インフラからフロントエンドからサーバーサイドまで自分で一連の流れを経験できて、特定の目的を達成するために調べてコードを書くので学習度としてはやはり深いです。
例えば、nginxを勉強しようと思って本を読んでも
「ふ〜んウェブサーバーになるんだ〜リバースプロキシってのがあるんだね〜」
といった浅い習熟度しか得られません。
一方で実際にnginxを作ってubuntuやcentIOSにnginxインストールしてウェブアプリにリバースプロキシをしてみると、portなどの概念やDNSへのドメインの設定やSSL化などを深い習熟度で習得できます。
もちろん、実務(既にユーザーがついていて運用されている)で使われているようなシステムを実装や修正ができたりするレベルには到達しないことが多いですが、やはり基礎にはなります。
本を読んでなんとなく勉強した気になるよりも、実際に目的の何か成果物を作るための手段として、学習という必要な手段を行なっていくほうが学びは深いと思っています。
また、何かを作るという目的の手段として勉強して、実際に成果物ができればそれは未経験からエンジニアになる際のポートフォリオにもなりますし、それなりに高いレベルならエンジニアからエンジニアへの転職やフリーランスになる際にも役立ちます。
方法2. プログラミングの実務(労働)を必死にやる
※wework in 港区
労働だと部下っぽい人や同僚っぽい人や先輩っぽい人のエンジニアと一緒にコードを追加したり書き直したりするので、コードとか技術的な部分以外でもすごく勉強になると思ってます。
自分が書いたコードをコードレビュー通すために必死こいて調べて見直してっていう作業や、他人の書いたコードを見たり、既存のコードをよく分からんくても必死こいて読んだり、アーキテクチャを理解しようしたりっていう一連の作業は個人的には自分で何かを作るのとまた少し違う軸で勉強になるなと労働を始めてから思いました。
労働を始める前は「労働で勉強なんてしなくたって自分でできるだろ」と思っていたんですが、労働現場には素直に尊敬できるナイスなエンジニアがなんだかんだでいっぱいいるので、その人と一緒に仕事していろんなことを学べるのは(ついでにお金もGETできるのは)プログラミングで労働する良さの1つだと思います。
労働して学んでスキルアップしていけるのもプログラミングの良さの1つ。
方法3. 労働で学んだ技術をベースに自分で何かを作る
※画像はTimehubのReactのフロントエンドコード
1と2の「何かを自分で作る」+ 「労働」の組み合わせ技で、個人的にはこれをやってから駆け出しエンジニアから雑魚ジュニアエンジニアになれたなってすごく思います。
最初の労働経験だったベンチャー企業が、TypeScript, React, SWR, Express, MongoDB, Docker, Github Actions(CI/CD)らへんの技術を使っていて、「フエエ〜意味分からないょ〜お兄ちゃ〜〜ん><!(ロリボ)」と思いつつも、実務労働しつつ個人で何か作るのにまるっと同じ技術を使って作り始めたところ、気付いたら技術力が駆け出しから雑魚ジュニアになってました。
ついでに、自分が労働以外で作ってる時間が労働の技術力にも良い感じに影響を与えて、労働してる時間も自分の作ってるものの技術の知見が深まるので、一石二鳥感があります。
(特定の技術ばっか使っていると広がらない的な意見もありそうですが、個人的に思うのはそんなに横に広げる必要もないんでね?っていうふうに思います。てか、縦に深めてればある程度、横に勝手に広がっていくと思うんだが?てきなことも思いつつ、そもそも技術力とは的な部分にぼくは興味がなかったです…でしゃばってってすみませんでした…みたいな。)
まとめ
なんか適当に個人で作りつつ、できれば個人で作ったものでマネタイズやブランディングらへんもして、実務側ではコードを含めた業界知識らへんも深めていくとプログラミングの勉強が捗った気がします。
という雑魚ジュニアエンジニアからの教えでした。
なんにせよ必死に読みながら手を動かしてゆくしかないという。。。クゥゥゥゥ!