新卒エンジニアに送る、新卒の頃に僕が知りたかったこと : 自立と依存編

春なので、自分がペーペーのエンジニアから少しづつ成長していった過程で、もっと早く知りたかったことを共有する。今回のテーマは、エンジニアとして自立するには? 

前回の記事:

忙しい人のために結論

エンジニアとして自立するには、依存先を増やそう


そもそも自立とは何か?

「自分以外のものの助けなしで、または支配を受けずに、自分の力で物事をやっていくこと。」
つまり、エンジニアとして自立するには、自分一人の力でコードを書き、何にも依存せずにシステムを作り上げる能力を手にするということです。


。。。。?


本当にそうでしょうか。現在は、一つのプログラムを書くにしても、多くのライブラリやフレームワークに依存しています。そもそも、言語に依存したり、コンピュータという仕組みにも依存しているので、エンジニアとして自立するというならば、0から機械語を作り出し、言語も全て自作するということなのでしょうか?(いやいや、そもそも機械を作るためのシリコンウェーハとかも必要で、であれば、それを生み出す半導体工場、そしてシリコン自体の調達、さらに。。。略)

もし仮にそうだとしても、出来上がったシステムはおそらく自分自身に「依存」してしまい、自分がいなくなったら誰もメンテナンスできなくなってしまうでしょう。

じゃあ、自立とはなんなのか?悶々と考えていたところ、面白い考え方を発見しました。熊谷晋一郎さんという生まれた時から脳性麻痺で手足が不自由だった方の言葉です。

それまで私が依存できる先は親だけでした。だから、親を失えば生きていけないのでは、という不安がぬぐえなかった。でも、一人暮らしをしたことで、友達や社会など、依存できる先を増やしていけば、自分は生きていける、自立できるんだということがわかったのです。
「自立」とは、依存しなくなることだと思われがちです。でも、そうではありません。「依存先を増やしていくこと」こそが、自立なのです。

自立とは「依存先を増やすこと」(全国大学生活協同組合連合か)

つまり、一人でなんでもできるようになるのではなく、依存先を増やすことこそが真に自立することだ。と初めて気づきました。

例えば、C言語しか書けなければ、C言語の仕事がなくなれば仕事も無くなります。逆に、C言語も JavaScript も、PHP も Ruby も Go も書ければ、C言語の仕事がなくなったとしても、他の言語に依存できていれば、別の仕事にありつけるかもしれません。(プログラミング自体の仕事がなくなれば、プログラミング以外の仕事に依存しておく必要がありますが(笑))

仕事に限っていうと、ロート製薬の「兼業解禁」の戦略もなかなか面白いですね。世の中的にもそういった考え方が普及していると感じています。

何か一つのことがダメになったとしても、別の選択肢があれば自立し続けることができます
目的は「兼業解禁」ではなかった?働き方改革の舞台裏(ロート製薬)

つまり、エンジニアとして自立しようと思うと、依存することが必要なのです。

では、何にどうやって依存するべきか?

多くの言語を覚えることも、依存を増やす手段として有効ですが、それはそれで覚えるのに時間がかかるし大変です。エンジニアの3大美徳の曲解ですが「怠惰」を究めんとすると、もっと簡単に依存を増やしたいものです。

エンジニアとして僕が必要だと思うスキルに、「他人に頼るスキル」というのがあります。依存するという言い方は、ネガティブに聞こえがちなので「頼るスキル(依存するスキル)」と言えば、そのスキルを磨くために必要なことをポジティブに考えることもできます。

特に、よく言われることとしては「15分考えてわからなかったら、質問しろ」というのがありますが、そもそも聞ける相手がいなければ質問できません。なので、聞ける相手をたくさん見つけてみましょう。

情報入手先と質問できる相手を増やす

1. google 検索
2. 会社の先輩
3. twitter などの SNS 
4. QAサイト
5. ライブラリとエコシステム
6. 本

1. google 検索

よく質問する前に 「ggrks」 なんて言われますが、これは基本なので google で検索してみるのは積極的にやっていきましょう。ただし、検索方法や、単語が貧弱だと結果が出てきません。また、技術的な情報は日本語よりも英語が一次情報である場合が多いので、日本語だけでなく英語で検索できると、知識を得れる量は何倍にも膨れあがります。なので英語で検索する方法もマスターすると良いでしょう。中学で習う単語で十分です。

良く英語で検索するワード

- 「 xxxx doesn't work」= xxx が動かない
- 「how to fix xxxx ?」 = xxx はどのように直せばいい?

上記だけでも全然違います。あとは英語に自信がなくても、google  翻訳に頼りましょう。 Google 翻訳のエクステンションを入れてると便利です。


2. 会社の先輩

昔の先輩に言われた言葉が今でも残っています。
「会社の全てはリソースだと思え、存分に使って自分に投資しろ」
使わないともったないという発想ではなく、使い倒してもっと大きなリターンを得ろ。という意味だと記憶しています。もし会社に所属しているのであれば、それを利用するチャンスがあると思った方が良いです。良い企業に属することのメリットは、良質な知識に簡単に触れるチャンスがある。ということともとれるでしょう。

しかし、質問しても「ggrks」と言われると、質問するためのカロリーが上がってしまうので、できるだけ低カロリーな感じで質問しましょう。テクニックとしては自分が気軽に質問できたり、困ったことを呟けるような場所を社内に確保しておくと良いです。slack のチャットに自分専用の分報とか作るとカロリー控えめに質問できるのでオススメです。

 これめっちゃ効果ありました。Slackで簡単に「日報」ならぬ「分報」をチームで実現する3ステップ〜Problemが10分で解決するチャットを作ろう 


3. twitter などの SNS


最近こんな投稿を見かけたのですが、すごいですね。

新しい地図の方でなくても、質問などを投げかけると優しい人が助けてくれることは良くあることです。

twitter は質問するだけでなく、技術的な情報を集めるのにも有用です。自分の興味ある単語、例えば「JavaScript」とかで検索して、ユーザーを片っ端からフォローしていくと、勝手に情報が集まってきたりします。

しかし、SNS はノイズも多く含まれているので、ほどほどにしないと流されるだけなので、新卒には案外オススメしない方法かもしれません。しかし、いろんな人と繋がっておくのは、あとあと仕事につながって便利なので、もしやってない人がいればおすすめです。(ちなみに、自分も最近始めましたが・・・質問に答えてもらうには、フォロワーが必要なので、それなりに自分も情報発信をマメにする必要があると感じてます。)

4. QA サイト

会社にも twitter などの SNS 上にも頼れる仲間がいない方は、QA サイトを活用すると良いでしょう。昔は yahoo 知恵袋などが主流でしたが、情報が古かったりするので  terratail など、日本語でできるエンジニア向けの質問サイトを使うと良いかと思います。

もちろん、日本語以外も使えると便利なので stack overflow とか Quora とかも使って見ると google  検索同様、もっと多くの知識と知見を得ることができます。

自分の例でいうと、JavaScript のライブラリである React.js が好きなのですが、React.jsってどうやって生まれたのかなぁと思って、色々ググってみたのですが、良い情報が見つかりませんでした。なので、思い切って Quora で質問してみれば、答えを優しい人が教えてくれました。

ちなみに、Quora や stack overflow は質問内容を他人が編集することもできるので、英語が下手でも優しい人がネイティブの質問内容に修正してくれます。(ちなみに、僕の最初の質問も 「How was React.js born?」 ではなく「Why React was born?」って質問してました(汗))


5. ライブラリやエコシステム

先日のとあるイベントで「プログラマーとしての哲学」のセッションで聞いたやりとりが面白かかったです。

Q: 「バグを生み出さないための工夫はなんですか?」
A: 「自分でコードを書かない。」

つまり、すでにテストされている仕組みやライブラリに頼ることが、バグを生み出さないことに繋がるという考え方でした。

ライブラリやエコシステムに乗っかることで、いろんな恩恵を受けたりできます。ちょっと宣伝っぽくて恐縮ですが、こんな内容のテーマでも最近お話ししたので、タイトルに興味があればスライドを読んでみてください。


6. 本

ネットで探したり、質問したりすることは簡単ですが、だいたい身にならない事が多いので、ちゃんと解説してくれる本はおすすめです。ネットなどの情報は断片的なものが多いですが、本はターゲットを絞ってくれているので、体系的な知識を得るにはとても有効な手段だと思っています。

また、本の中身を完全に覚える必要はないとも思います。困った時に、「あの本の、この辺に確かそんなことが書いてあったな。」ぐらいを覚えておけば、オーケーだと思ってます。(大体それで解決することが多い。)学校の試験のように、覚えてないとダメという概念が仕事では少なくなりますしね。。。

ちなみに、本を読むためのスーパーテクニックとしては 「Kindle などのアプリを、スマホのホーム画面の一番触るところにおく。」とコンビニの待ち時間とか通勤時間でも、無意識に読むようになるので本当にオススメです。

  そのトピックだけで十分面白いので記事にしました。


多くに依存することの罠

依存先を多くするといいこともありますが、逆に悪いこともあります。

例えば、ライブラリに依存した結果、ライブラリが思わぬバグを生んでしまった時に、自分ではすぐに直せなかったりすることがあります。特にライブラリのバージョンアップなどで、仕様が変更され、それに依存していたがゆえに価値提供のスピードが落ちてしまうことがあります。依存して自分でコントロールできなくなるくらいなら、自分で書けた方がよっぽど、早く原因の特定や問題解決ができるはずです。

なので、全部が全部依存してしまっていてはいけません。自分がそもそも依存される存在にならなければ、バリューは上がりません。

昔、 CTO に評価面談でこんなことを言われました。「イヌでもサルでもなく、君にしかない価値はなんなの?」

言葉の意味としては、単なる実装者や代替可能な人材ではなく、君にしかない価値はなんなのか?と問われました。この時の自分は、先輩に頼ってばかりで、自分でできることなんてほとんどないにも関わらず「やっている気分」になっていただけでした。自分の価値を発揮するためにも、依存ばかりせずに、ある局面に置いては自分が必要とされる存在になる必要があります。

特に、ビジネスにおいてはソリューションを提供するスピードが求められるので、早い実装のために技術を磨く必要があります。(スピードが大事でクオリティが不要という意味ではなく、「価値提供を早く」するためにも、負債を遺さないようにクオリティを担保することも、もちろん必要です。)そのために、本を読んだり、自分でコードを書いたりと、何かに依存するだけでなくアウトプットを早く、正確に出すための技術を磨く必要はあると思います。

そのため、何に依存して、何を自分でやるのかを決めるところから、はじめると自分の生存戦略などは見えてくるのではないでしょうか。最初は見つからないものなので、それこそ誰かに「僕の価値(できること)ってなんだろ?」って聞いてみると、新たな発見があるかもしれません。

会社での自分のバリューを上げるために自分しかメンテできないコードを書くという戦略もありますが、本筋とズレそうなのでやめておきます。

おまけ:給料の依存先を増やす

給料の依存先を増やすことも重要です。一つの会社からの給料に依存すると、それがなくなった時に、どうしますか?

これは一種の SPOF(single point of failureの略、その単一箇所が働かないと、システム全体が障害となるような箇所を指す。) ですね。エンジニアなら聞きたくない言葉かもしれないですが、すでに自分がそのような状況に陥ってると考えると面白くないですか?

そうならないための手段としては、情報発信したり、いろんな人と交流して会社以外のところから仕事をもらっておくことをオススメします。ちなみに、自分の勤めている会社は副業OK なので、自分が可能な範囲で副業してます。副業の始め方についてはまた別の機会にまとめて書く予定です。(教えて欲しい人がいれば、DM ください or ツイートしてください。需要がなければ書かないので(笑))ちなみに僕の場合は Google Apps Script とエクセルの技能が他の人と比べて高かったので、それをスキル販売サイトに登録したところ、副業で月5万はあまり時間をかけずに稼げるようになりました。(これも、自分の価値を探した結果ですね。)

エンジニアとして副業することのメリットは、給料の SPOF を防ぐ以外にも、「他人のコードが読める」「副業先にすごい人がいたりする」ですかね。そういったコネクションを使って依存先を多くしていけば、将来安泰。ではありませんが、自分のキャリアアップにつながると思います。

まとめ

エンジニアとして自立するには?というテーマで色々書いてきました。

- エンジニアとして自立するには、依存先を増やそう。
- 情報入手先や質問できる相手を増やそう。
- 依存しすぎても自分の価値は上がらない、依存される立場になろう。

自立するためには依存することが必要という、なんだか矛盾しているような世界観ですが、意外と意識的にやってみると、多くの発見があるのでおすすめです。依存する立場から依存される立場になれば、あなたはきっと一人前なのではないでしょうか?

これはあくまで、僕個人のエンジニアとしての生存戦略です。向き不向きはあるし、いろんな意見があって当然です。ぜひ皆さんの「#新卒の頃に知りたかったこと」 を発信してもらえると、世の中もっとうまくいくんじゃないかなぁと思います。現場からは以上です。

追記 2018/04/02

なぜこの話を新卒向けにしたかというところが完全に抜けてました、すみません。

新卒最強の武器「新卒です」というプレフィックス的な免罪符の有効期限は1年間ぐらいなので、その間に多くの人にいろんなことを聞いたりして依存先を増やすチャンスだと思っていただけると!(たとえ新卒でなくてもですが。)

「新卒」もイヌでもサルでもない一つの価値(スキル)だと思って、有効に使ってください!

#新卒の頃に知りたかったこと

技術記事は以下 https://qiita.com/numanomanu サポートよりもはてブやスキが欲しい!