エンジニア1年間で学んだ3つの心得


プログラミングを始めて**1年ちょっと**が経ちましたので、自身の振り返りとともに、これからプログラミングを始める方、始めたばかりの方の参考になればと思い、自身の1年間の学びを書きます。(主にマインドセット＆心がけメイン)

## あなた誰？
私は現在,社員10名以下のスタートアップ企業でエンジニア＆PMをしています。
打ち上げの度に、私が食べたことなさそうなうまい飯を食わそうとしてくる温かい会社です笑
エンジニアとしては,最近はフロントエンド開発メインでReact,TypeScriptを触っています。PMとしては、プロジェクトのタスク管理や、チームビルディングなどなどしています。

# 今日伝えたいこと
1. **主体的であることは神**
2. **やらざるを得ない状況はもはや仏**
3. **成長速度 = 努力量 × 努力の質**

本題に入る前に、プログラミングを始める前に自分と、そのきっかけだけ簡単に話します。
### プログラミングを始める前の状態
* 文系大学出身で、情報系のことはさっぱり
* 大学時代に週1のプログラミング入門を受講して2回目の授業からサボり"hello world"すらできずに終る
* 以前情報学部の友人が「シー言語むずい」と言っていたのを、「She?」と思っていた

![mukiryoku_man.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/465439/5600a10d-b150-c232-8ae2-d71fbebae88b.png)
画像：[いらすとや](https://www.irasutoya.com/)


### プログラミングを始めたきっかけ
そんなプログラミングとは縁遠かった自分がプログラミングを始めたきっかけは、[テックプレナー道場](http://techpreneur.jp/)との出会いでした。
![テックプレナー道場](https://ict-enews.net/wp-content/uploads/2019/07/0701-tp.png)
テックプレナー道場は、未経験から１ヶ月でエンジニアを養成するという鬼👹プログラムです笑。選抜式で、1週間ごとにどんどん人数が絞られていきます。**2週間で機械学習の基礎とDjango**というありえない量をインプット、残りの2週間でオリジナルアプリを作って発表します。この時は、周りの学生が本当に優秀で、全く内容についていけないことがめちゃくちゃ悔しく、寝る間も惜しんで必死に勉強しました。
**正直この１ヶ月でめちゃくちゃ成長した**と思います。今思えば、この時はインプット量が多すぎて、内容を理解していない部分だらけではありますが、「短期間で集中してインプット、アウトプットをする」というプログラミング学習において非常に大切なことを体験することができました。

### その後
テックプレナー道場が終わった後、縁あって今の会社に入社します。プログラミングを始めて間もなかったので、自分は完全にポテンシャル採用だったと思います笑

---

では、本題に入ります

##1.  主体的であることは神
皆さんは今自分が所属するチーム、組織、会社で主体的ですか？
私はこの1年間で、「**自分がいる場所で主体的であることがいかに大切であるか**」を学びました。

入社したての頃の私は、先輩に言われた実装タスクをただやっていました。
そうして実装をしていると、、、

* 度重なるエラーの嵐で気が滅入る。:umbrella2:
* 自分が1週間かけても解決できないエラーを先輩エンジニアが5分で解決して絶望の末発狂。:mask:
* Gitでコンフリクトを起こして倒れたくなる。:scream:
* なんとかエラーを解決してレビューを依頼すると自分の書いたコードはほぼ無くなり、儚い気持ちになる。:dizzy_face:

という、エンジニアなら誰もが通るであろう最初の壁にぶち当たっていました。
そして、悪い考えが頭をよぎりました。
「これ全部先輩がやったほうが早いんじゃね？笑」:smiling_imp:
。。。


でも、安心してください。
新米エンジニアが開発でなかなか貢献できないのは当たり前です。しっかりと技術力を身に着けて、少しずつバリューを発揮していけるようになればいいのです。

では、今はどんなバリューを発揮できるか？それが「**主体性**」です。その組織において主体的であることは、定量化が難しく、評価しにくい一方で、非常に大きな価値を発揮します。

頼まれたら真っ先にやる、自分から提案してMTGを開く、「こうした方がいいと思うのですが、、、」と臆せず意見を言う。

こうした**少し勇気のいる行動**１つ１つが周囲からの評価を少しずつ変え、いつの間にかただタスクを振られるのではなく、相談されるようになるはずです。

また、積極的だと**やること全部が楽しく**なってきます。人間は自分のコントロール可能な領域が広いとより楽しく、やりがいを感じます。立場や肩書が変わらなくとも、自分の組織に対する姿勢が変わることで、自分にとってコントロールできると思う幅が広がり、目の前の仕事が今までより充実して感じます。

心がけばかりで具体的に何からすればいいかわからないという方は次のことをやってみてください。

「**今いる組織の課題と改善策をリーダーに提案してみる**」

些細なことで大丈夫です。

少し勇気のいることですが、リーダーにとっては、組織をより良くするために工夫してくれるメンバーが居ることはニヤケが止まらないくらいめちゃくちゃ嬉しいです。

もしそれが受け入れられなかった、相手にされなかった場合は
自分にご褒美のプリンを買いましょう。🍮

チームのことを想ったあなたは、チームにとって、「**いてほしい人**」です。

##2. やらざるを得ない状況はもはや仏
（@qNeumannさんに誤用をご指摘いただきました、ありがとうございます）

これは全てに言えることですが、やらざるを得ない状況に身を置くことは苦しくもあり、自身を大きく成長させてくれます。

自分で自分を管理して、ひたすらに自分を鼓舞し続け、追い込む。こんな御業ができる人はそうそういません。僕だったら決意した10分後にYoutubeで[きまぐれクック](https://www.youtube.com/channel/UCaak9sggUeIBPOd8iK_BXcQ)を見ています。

プログラミングであれば、なるべく早くエンジニア職に就く。これに尽きます。

**実務経験に勝るものはありません。**開発せざるを得ない状況で先の見えないエラーと格闘することで、いつの間にかコイキングからギャラドスへ進化します。

そうはいっても、そもそもエンジニア職につけないんじゃ、という方は、勉強せざるを得ない状況を作りましょう。

例えば、もくもく会などの勉強に行く、開く。

作るものの期限を決めて、誰かに宣言する。

友人のWebページ制作をかって出る。

など

私自身も思い返せば、テックプレナー道場や、始めに仕事で任されたプロジェクトなど、やらざるを得ない状況にあったときに大きく力を伸ばすことができました。

技術に伸び悩んでいるという方は、今の自分を**どうやったら「やらざるを得ない状況に持ち込めるか」**工夫してみるといいでしょう。

##3. 成長速度 = 努力量 × 努力の質
これまで見てきた友人の中で、技術習得速度がむちゃくちゃに早い友人T君がいました。プログラミングを始めて日が浅い段階で、毎週のように新しい技術を習得してくるレベルで、彼の成長速度には目を見張るものがありました。T君の学習の姿勢はとても勉強になりました。

そんな彼を見ていて感じたのは、努力量だけが成長に直結するわけではないということです。

彼は**質の高い努力を人の数倍**こなしていました。

プログラミング初心者がやりがちなこととして、[Progate](https://prog-8.com/)のレベルをひたすらに上げていくことがあります。（Progate自体は非常に良いサービスで、それ自体を否定するものではありません。むしろ初心者にはぴったりのサイトです。）その結果、たくさん勉強しても、各言語の四則演算をたくさんこなして、**四則演算マスターの称号**👑を手にします。

しかしながら、プログラミング学習サイトの達成状況と実際の能力は残念ながら比例しません。

プログラミングスキルは、読んだコードと書いたコードの量が大事です。

早く技術を習得したければ、基礎のインプットは1日だけにして、それ以降はコードを書きながら覚えていきしょう。

Tくんは**毎週1つアプリ**を作っていました。

そう言ってもどうしたらいいかわからない人は、**月に1つアプリを開発する**、を目標にまずはやってみましょう。


---

以上3つが私がこの1年間に学んだことです。
最後に、参考程度に自分が1年間で学んだスキルも書きます。

### 1年間で習得したスキル、経験（実務で使っていないものも一部含む）

* マークアップ 
   * HTML
   * CSS(SCSS, bootstrap)
   * markdown
* プログラミング言語
   * Python
   * Ruby
   * JavaScript, TypeScript
   * C#(Unity)
   * Go
* フレームワーク
   * Django
   * Flask
   * Ruby on Rails
   * Express
   * React.js
   * jQuery
   * echo
* チーム開発
   * カンバン運用
   * スクラム開発(Scrum Master)
   * Git, GitHub, GitLab
* インフラ
   * AWSの主要サービス
   * Heroku
   * GCPの主要サービス
   * Docker
* DB
   * PostgreSQL
   * MySQL
* その他
   * スクレイピング 
   * Linux基本コマンド、操作
   * GraphQL
   * 自然言語処理
      * 感情分析
      * 形態素解析
      * tf-idfによる重要語抽出

## 最後に
偉そうに様々語ってしまいましたが、こうしてたくさんの学びを得られたのは、今日まで自分の周囲で手助け、応援、機会の提供をしてくださった方々のおかげです。自分ひとりでは、こうした学びはきっと得られなかったと思います。私自身、まだまだ新米エンジニアですが、更に技術を身に着け、価値あるプロダクトを開発していくことができるよう頑張っていきます。

これからプログラミングを始める・始めたばかりの方は、「**何が分からないか分からない**」状況が続くと思います。しかし、それは裏を返せば、新しい知識を獲得しようとしている真っ只中ということです。**今の自分を、明日越えていく**ことを目指して一歩ずつ頑張っていきましょう！