始めに
こんにちは〜まんじです!
今回はプログラミングで「技術力が伸びる具体的な行動5選」ってことで、具体的な行動を列挙したいと思います。
大体ここらへんに落ち着きます。
- 実務のタスクをめちゃくちゃやる
- 個人開発をして稼ごうとする
- ひたすらまじで働きまくる
- 本などを読んだりしてインプットしてから手も動かす
- いわゆる強いエンジニアと話したり一緒に仕事する
実際にコードを書いたり設計したり技術調査したり、、、という行為が含まれるようなアクションをしていれば技術力は伸びます。ぶっちゃけ、実務か個人開発をやりまくる。とりあえずこれが大事。
加えて自分の場合なら、ベンチャーの時はエンジニア社長、フリーランスなってからはスタートアップの役員のエンジニアの人やGoogle出身の人と一緒に仕事をしてたので、そこら辺の人たちの挙動ややり方やコードの書き方や仕事の進め方などをパクってたってのが技術力というかエンジニア仕事力みたいなのを向上するのに役立った気がしています。
いわゆる誰が見ても市場価値の高い強いエンジニアみたいな人たち(当然、普通に稼働して年収1000万円は余裕で超える人たち)の技術力含めたやり方を一緒に仕事することで真似するのが、実は大事、というか明らかに成長スピードがめちゃくちゃ上がります。
なので、「実装して手を動かしまくりながら、明らかに格上のエンジニアをパクると技術力は伸ばしやすい!よね!」ってのが伝えたいことです。
ということで、1個1個書いてみたいと思います。
1個目: 実務のタスクをめちゃくちゃやる
とりあえず実務の仕事をめちゃくちゃしてれば、技術力は嫌でも伸びます。
例えば、ReactのフロントエンドをメインでやっててUIとかAPI繋ぎこみとかのタスクをやりまくっていれば、React周辺の技術力が勝手に伸びますし、API側のDB層メインならドメイン知識含めてSQLやらAPI側のフレームワークと言語が勝手に得意になっていく、、、てきな。
そんで実務でタスク(チケット)をこなしまくっていると、当然現場での評価も上がってチーム内で相対的に上のほうの地位になっていきます。
「こいつにここらへんのプロジェクトはまるっと任せても良さそう」
「こいつめっちゃReact書けるからコードレビュー任せられそう」
こういったようにマネージャーなど上から判断されると、今までのタスクより難易度が少し上がったものを振ってもらえるようになるので、さらに高いエンジニア仕事力のタスクをやることができます。
その結果として、転職して年収100~200万円一気に上げたり、フリーランスになったりっていう市場に出る行為がやりやすくなります。
技術力を伸ばしたい時は、とりあえず目の前の仕事を必死こいてやりまくれば良くて、目安としては、8時間仕事して残りの2時間を調べるのメインとかでさらに実務の不明点とかを調べたり勉強するみたいなルーティーンを1年ぐらいやってれば技術力はかなり上がります。
あと1日10時間ぐらいやってれば、明らかに上司やチーム内からの評価も高くなるってのもあって現場での仕事もしやすくなります。
マネージャー(上司)が期待する結果の+1でも超えられると評価も良くなるし、何よりその結果として技術力は上がります。
そんでその時間的な目安が個人的には1日9~10時間ぐらいカナーと思っています。
技術力を伸ばしたい時期なんかにはたくさん働くのはやっぱりおすすめです。
2個目: 個人開発をして稼ごうとする
個人開発をやるのも技術力を伸ばすための手段の1つになります。
個人開発をゆるくやるのではなくて、1個プロダクト作ってそれで稼いでやるぐらいの本気度が高い個人開発は継続できるので、稼ごうとするってのが何気に大事です。
稼ぐために個人で開発するってなると、少なくとも2~3か月とかはコンスタントに開発することになるからです。
(ゆるく、パーソナルプロジェクトとかだと、気付いたらやめがち)
ちなみに、個人開発の良いところは、技術的な部分を0から全体的にやれるところです。(フルスタックてきな)
例えば、実務でフロントエンド担当ならバックエンドはあんまりやらないけど、個人開発でやるなら技術選定っぽいところから環境構築からCI/CDからインフラからバックエンドからフロントまで全部を自分で調べてやることになります。
その結果として、技術力が全体的に向上するというか、表現するのが難しいんですけど単一の箇所周辺だけじゃなくて、技術の範囲が広がるようなイメージです。
あとは実務で使ってる技術を使うなら、実務でのほうにも役立つし、実務で使ってない技術を使う場合には勉強になるという感じ。
なんにせよコンスタントに個人開発で開発を続けていると、技術力は伸びます。
ただ、、、フリーランスの準委任契約とか一般的なIT企業での転職をベースに年収をあげていきたい場合には、個人開発よりも実務をやりまくるほうがぶっちゃけ伸びるというか、効率は良さそうに個人的に思ってます。
面接では、「今までどういったことをやってきて、その会社でどんなバリューを出せるか」ってのが見られるので、個人開発で月間6万PVになったとかよりも個人開発よりも実務でプロジェクトのマネージャーをやったみたいなほうが評価は高い可能性が高いです。
もう少し具体的に書くと、エンジニアが面接で見られるのはチーム開発での「技術力」の部分なので、そこは個人開発よりも実務でチーム開発で働くほうが評価されるってのがあります。
個人開発: 自己評価なので技術力が担保されていない
実務でのチーム開発: チーム単位での技術力になるので技術力が担保される
とはいえ、自分も個人開発でアダルトアプリとかSEOツールとか作ってたので実務経験が11ヶ月とJava研修2ヶ月ぐらいしかなくても偶然フリーランスになれたってのはあったりするので個人開発もなんていうか、良い。
3個目: ひたすらまじで働きまくる
実務のタスクをめちゃくちゃやるってところと少し重複するんですが、ひたすら働きまくることで、技術力は伸びます。
自分はこういう月収100万みたいなキショイ記事を書いてるんですけど、とにかく「多く働いて稼ぐ」ってのがなんだかんだで技術力を伸ばすのに役立ちます。
多く稼働すると、その分多くコードを書いたり実装したり設計したりコードレビューしたりされたりすることになるので、当然技術力は伸びます。
あとは何よりお金も多く稼げるので、普通におすすめです。
本業: 8時間
副業: 2~3時間(業務委託)
こんな感じで毎日生きていれば、自然と技術力は伸びます。
このぐらいの稼動時間(1日10~12時間)だと別に睡眠時間とかを削る必要もないので、技術力を伸ばしたい時期とかには一時的には良いと思います。
ただずっと続けてるとだるくなってくると思われるので、一定の時期だけやるとかのほうがいいというか、そんなに長いスパンでは続けられないのは否定できません。
とは言っても1年ぐらい長時間働いて稼ぐことを継続してると技術力やら経験含めいろいろ向上するので、待遇とかが良くなる可能性が超高いです。
4個目: 本などを読んだりしてインプットしてから手も動かす
本読んでそれを手を動かして真似したりして実装するっていうアクションでも技術力は伸びます。
例えば、Github Actions CI/CD入門みたいな本を読んで実際に設定ファイルを作ってそれを自分で動かしてみることで技術力を伸ばしていくてきなスタンスです。
他にも例をあげていくとキリがないというか無数にあります。
- GoでAPIサーバーの本を読んだら実際にGoで環境構築してAPIサーバーをたてる
- MySQLの本を読んだら実際にその学んだ内容をSQLで表現してパチパチとうちこむ
- AWSの本を読んだら学んだサービスを1個1個実際に動かしてみる(例えば、lambdaを知ったらlambdaジョブを作るてきな)
- コンピュータサイエンスとアルゴリズムを勉強してから、実際にアルゴリズム問題を解いてみる
こんな感じで、本でインプットしてから、実際に手を動かしてアウトプットしていくことで、技術力が伸びることは間違いないです。
このやり方の良いところは、明らかに自分の足りない部分をインプットしてアウトプットしていけるので、タスクやりまくるとか個人開発するとか仕事しまくるとかと違ったアプローチが可能になります。
自分の技術カバー領域を横に広げることができる、みたいな感じ。
アウトプットベースでプログラミングをしていると、必要に迫られないところの技術力っぽい部分はカバーされにくいので、そこを補うような勉強手法になります。
個人的には基本的にアウトプットから入って必要なインプットをしていくのがおすすめというか、収入を上げるとかいう点で明らかに効率が良いと思っているんですけど、インプットから入ってアウトプットしていくという側面も無駄ではない、、、という具合です。
ただ、パンピー(一般レベルの平均的なエンジニア、年収で1000万未満)ぐらいなら、アウトプットベースでインプットしまくってれば良さげだと感じていて、それ以上の明らかに市場価値が高いエンジニアをやっていくならインプットから入っていく勉強も地味に必要になることが多いと思います。
例えば、アルゴリズムとかって実務でコード書いてるとたまに再起的な処理が入るぐらいで、ぶっちゃけいろんなアルゴリズムのパターンとかは知らなくても全く問題ないですけど、、、結構良い感じの会社の良い感じのポジションにアプライ(応募)する時にはそういった側面含めて見られるってのはあります。
そういった部分はインプットから入っていく必要があるケースも多いです。
5個目: いわゆる強いエンジニアと話したり一緒に仕事する
個人的に「いわゆる強いエンジニアと働く」ってのは自分の技術力を上げる上でマジで大事だと思ってます。
「いや別におれは強いエンジニアになんてなりたくねえ!」とか自分も昔思っていたんですけど、やっぱり強い系エンジニアから学び取れることはアホほど多いです。そういうのは本にもネットにもなくて、言語化できないし仮にできたとしても、感じ取るものだからです。
例えば、ざっくりと言語化するとここらへん。
- タスクの進め方とか
- 命名
- 納期が短い時のコードの書き方やレビューのスタイル
- どういったコードを許容してどういったコードをrejectするのか
- PRを出すことで、その強い人がどこまでPRを把握しているのか
- 周りから強いと認められるレベルを一緒に仕事することで感じ取れる
- 強かろうが全ての領域は全然カバーできていない
- その強い人の技術領域
- その人の技術に使ってる1日の時間
- 不明点のググり方とかAIの使い方
他にも、強い感じのエンジニアの人なら面接とかも担当してるんで、普通に「ああ、、、エンジニアの市場感ってこんな感じなのか」とか「ここらへん抑えれば面接突破できるんだな」とかそういうことも裏側から見える感じです。
あと、、、強いエンジニアと仕事してると強いエンジニアの基準値で自分も仕事を遂行することになるんで、嫌でもレベルが引き上がる、厳密には合わせてやって引き上げるしかないってのが自分1人ではできないことです。
このサイトに自分も散々書いてるんですけど、自分が技術力上がったと感じた瞬間がやっぱそういう明らかに誰が見ても強い人から教わったというか一緒に仕事した時だったように振り返ってみると思います。
ついでに補足すると明らかに強いエンジニアは例外なくみんな厳しいので、なんていうか、、、1人だと甘えが発生するけど、その厳しさを無理やり与えてくれる存在なのが実は大事なのではないか説というのが自分の中であります。
ってことで、強いエンジニアと働くと技術力含めてエンジニアとしての市場価値はあげやすいと感じます。
言い方は悪いんですけど、そこらへんにいるなんとも言えない上司とかだと、自分のレベルは引き上がりにくいです。
まとめ
なんにせよ技術力をあげるうえでセンターピンになるのは、アウトプットを多くすることだと思います。
アウトプットってのはXでPostするとかじゃなくて、コードを書くとか、設計してそれをドキュメントにするとか、そういう本来の意味の脳から情報を出す的な意味のアウトプットという意味合いです。
それに加えて市場価値が高い強めの人からいろんな能力をパクって継承することで、さらに技術力含めいろいろと向上させられるって感じです。
シンプルにまとめるなら、1日10~12時間仕事ベースでコードを書いたりすれば嫌でも技術力は伸びます。
そんで、技術力を伸ばしてどうしたいかとかは人によるので、それをどう使うかを検討するといいと思います。
ただ少なくとも年収1000万円前後ぐらいまでは、明らかに技術力(と、経験年数)ってのが会社へ労働を提供して収入を上げるうえでのセンターピンになるので、そこは忘れたくないところですね!
終わる!ってのと、ここらへんもよかったらぜひ!