ニートがエンジニアになって1年半がたったから振り返る※随時更新

#PCなんてネットサーフィンにしか使ってなかった
PC触れる人ってかっこよくね？
ハッカーってかっこよくね？
webサービスで一発あてんぞってかるーい動機から始めたエンジニア
そんな感じで始まったエンジニアとしての一年半を振り返ってみる

#どんなレベルだったか
ブラインドタッチができない、phpを出版社と勘違いしてた、html・cssは基礎中の基礎の「き」までしかわからない状態
インデントなんて存在すらしらなかったし、フレームワークってなんぞや、rubyとか宝石でしょとか、macかっこいいじゃんとかそんな素人中の素人、今振り返ってもくそだな笑
文系学部卒で年齢的にも20半ばを回ってたのでかなり厳しいスタートだったと思う


#今のスキルレベルは？
答えになっているかわからないがコードを見ればたいていの流れ、処理は言語問わずわかるようにはなった（つもり？）
ただ概念や本質をしっかりと理解できているわけではないのと
細かな詰めの部分は甘い
例えばjava、C、scala、swiftなど触ったことないですが
大雑把に個人的感覚で言うと条件分岐、繰り返しを理解できれば、読めるんじゃないかなって思ってますし、現状やりたいことは結構読み取れています
　
新しい言語で必ず引っかかること
配列、自分は間違えなくいつも引っかかる
そこが一番最初の山場になってる(自分的に)
そのあとはお作法
けどこれは慣れでしかないと思う
　
一年半実務に携わったと言っても半年近くはテストばっかエクセルに書いてたので
実質、PHP歴盛って九か月、Rails歴ギリ四か月、linuxごにょごにょ歴一か月未満＋テスト書いてたそんなレベル
　

#そんなノンスキルのPC不慣れな自分がどうしてできないこと、わからないことだらけなのに今まで乗り切って(?)これたか

##エラーはhappyへの道しるべで恥ずかしいことではない

某イケメン俳優のドラマでやってた役の口癖で
「すべての現象には、必ず理由がある」
そうすべての挙動、動作、結果、考え、癖、仕草、ありとあらゆるすべてに説明がつく
エラーが起きる理由にしてもなんにしても
言語にとってのお作法に反する記述だったり
ケアレスミスだったり
構文ミス、変数が空だったり
対応外などなど
必ず何かしらの原因がある
そしてそれらは誰かしらがすでに解決、躓いた箇所であるということ
だからもっとも自分のケースに近い答えはネット上に落ちているということ

**エラーが出ることへの抵抗をなくす(エラー耐性)**

書いてみて、エラーが出たらググって試して*∞
try&errってやつですがこれできない人は今すぐ色々とあきらめた方がいいかも(？)他業種でもそれは同じ
エラー＝失敗ではなく
それらは実装を実現するための道しるべ＝あくまでの過程であって
またはエラーを出すことができる方法だと思う

なんでもそうだけど失敗は失敗じゃなくて今回結果的にだめだったという一つの方法でしかない
※次はこれがいい方向に行く方法かもしれないしね

**最初からできる人なんていない**
完璧に最初から実装しようなどと「あなたは神にでもなるつもりか？」と言いたい
すごくできる人は解決までのサイクル※がとても短くもしくは速い人
かつ自分の一部としてその経験をどんどん蓄積し次に生かすことができる人だと思う
あとは仮説、仮定の立て方がうまい

若葉マークのころはそのサイクルが長くなってしまいがちだし
一人で抱えてしまうかもしれないが
ぐぐること
人に聞くこと
数時間もかけても同じエラーがずーっと変わらずならば、解決にたどり着くのはそもそも難しい
じゃんじゃん聞いてじゃんじゃん自分の知恵としてインプット、アウトプットして身に着けていけばどうにかなる

※サイクルとは、エラーが出たらググる→試す→解決のサイクル
→できる人はググる前に仮定、仮説、検証の立て方が人よりも網羅している範囲が広いし気付きが多い
　
#勉強方法
お決まりhello worldやtutorialなんかをひたすらやる
本なら擦り切れるまで
サイトなら自分のアクセスでPV急上昇させるくらい熟読する
知らない単語見つけたら「どちらんさんですか？」とgoogleに聞いてみる

例えば）
functionって単語がよく出てくるけどこれって英語の意味としてはどんな意味？ってレベルでもいいから調べるとソースの理解度が上がったりする

**エンジニアはみながみな自分が一番、Googleと親友だ思っている(つもり)**

できる人の真似をする(写経、ツール、ソースコードの追い方、考え、記述の仕方などなど)
覚えたことをやったことを人に話したりブログに書いたり、qiitaに書いたり
githubにあげたりtwitterでつぶやいたり
アウトプットをしまくる
誰かに説明、教えると想定して自分が自分の教師になって説明する
←独り言※人が周りにいないことを確認の上した方がいい
**勉強は勉強のためにするのでなく実践としてとりかかること**
**通勤の往復時でもいいから何かしらインプットすることを心がける**
**必ずメンターとなる人と巡り合うこと**
独学には限界があります※ただし天才は除く
　
**壊れてもいい環境を用意する！！**　
→ vagrant、dockerなど仮想環境全般　


#情報収集
evernote、feedly、twitterなどを使ってまとめやオリジナルのnewsまとめ的なものを作ってしまう
qiitaはタグレベルでrssできるからばしばしやる
はてな、ハック系、経済、マネジメント、マスゴミ、2ch、etc
→feedly
気になったものはひたすら調べ要約、実戦し自分の文章でため込んでいく
→evernote
→そして実践*∞

**常に最上級のアンテナを張り続ける**

-追記-
githubをフル活用。
自分の興味ある言語の日本人アカウントだけでもいいからどんどんフォローし公開されているコードを見て、書いて、追って、動かして、パくる(※盗用をするってことではないよ。git cloneだよ)
　

最初はわからなくてもいずれ道はどんな形であれ必然的に突然開ける
スキルレベルが高い人と仲よくなってなってなりまくって
勉強会やネットで知らない用語とご対面して
同年代、他年代の人と意見交換や考えを聞いたり
常に聞いて聞いて聞きまくる
※相手は選ぼうね

コミュ力がーって人は特別な理由がない限りそんな1銭にもならない道端のごみのようなプライドは捨てた方がいい
自分より年下でもたとえ小学生でも高齢者でも自分よりばしばしスキルがある人なんて腐るほどいるんだし年齢なんて関係ないこの業界でそのプライドは1ミクロもの価値を持たない
　
**RSSしとくといいかもURL一覧**
－技術系
[はてな>グループ>プログラミング](http://hatenablog.com/g/11696248318754550880)
Qiitaのタグ単位

-企業のエンジニアブログ
[クックパッド開発者ブログ](http://techlife.cookpad.com/)
[Cybozu Inside Out | サイボウズエンジニアのブログ](http://blog.cybozu.io/)
[Yahoo! JAPAN Tech Blog](http://techblog.yahoo.co.jp/)


－news系
[ギズモード](http://www.gizmodo.jp/)
[ライフハッカー日本版](http://www.lifehacker.jp/)
[buildinsider](http://www.buildinsider.net/)
[TechCrunch Japan](http://jp.techcrunch.com/)
[週刊アスキー - 週アスのITニュースサイト](http://weekly.ascii.jp/)
[Ferret ](https://ferret-plus.com/)
[THE BRIDGE（ザ・ブリッジ）](http://thebridge.jp/)

-勉強会
[Connpass 新着イベント](http://connpass.com/explore/)
[Doorkeeper Events](https://www.doorkeeper.jp/)

－世俗系　
ハム速
　

#伸びるエンジニアの特徴
**できないことを認められる人**
**努力し続けれる人**
**素直で謙虚である人**
**問題解決能力、論理的思考を養っていける人**
は伸びる....と思っている

その他で成長を手助けしてくれる事柄
英語 → もはや必須といってもいいかもしれない
コミュニケーション能力
何よりプログラミングが好き
何かを作るのが好き
一つのことに熱中しやすい性格
学習能力、気づきの多さ
　

**もっとも重要なこと**
**精神衛生のために常に良好な環境、状況を整えとくことを強く勧めます**　

　
**問題解決能力や論理的思考の養い方**
方法は長くなるものは割愛
キーワードと説明だけ書きます
※随時upします
問題解決能力の先に論理的思考があると思うので
両方とも足りないなーって人はまず問題解決能力を養う

1.3回の「なんで？どうして？なぜ？etc」をすること
理由：たいていのことはこれで本質までたどり着くから
この問いかけは非常に面白い
プログラミング以外にも使ってみるといい。


2.マインドマップ、ゲーム理論
論理的思考に近いけど、マトリクス図やツリーを作成した上で現状を可視化できる
そのうえで最良な手段は何かということを考えることができるようになる
テストや処理フローを考える上でも非常に役に立つのでおすすめ
　

3.戦略系ゲーム
頭のいい人、頭の回転が速い人は、戦略ゲームが得意だったりする
経営者タイプ → ポーカー、麻雀
軍師タイプ、二番手タイプ → チェス(先方が絶対的有利なゲーム)、将棋、囲碁
簡単なものなら大富豪なんかもお勧めだと思う
テレビゲームやネトゲーの戦略系もお勧め、たぶん(自分は上記以外のゲーム以外まったくやらない人なんでたぶんと書いてます)
今ある手ごまから推測しありとあらゆる可能性を考えながらゲームしたら
きっとものすごく疲れるけど楽しいと思えるからおすすめ
※ゲームを無邪気に楽しみたい人にはお勧めしませんが楽しみながら養いたい人にゲームはすごくおすすめです

単純なのだと財布の中の小銭の量を一定以下に保ち、お会計をするゲーム(アプリ)がありますが頭の体操にはなるのでは？
試しにハノイの塔でもやってみてください

　
　
#今後の指標、目標、やるべきこと
フルスタックエンジニアは目指さない(というか目指せない素養がないから)
jsの流行には乗っかってスキルは身に着けたいとは思っている
→node、reactなど
go、scala、pythonこの辺りはできるようになる
これは命題と考えている

関数型、オブジェクト指向、手続型、何々派などという宗教的な流れには乗らないでいたいのが本音
それは時代の流れやその人の好みだし何が好きで嫌いで
その言語が何を得意とし不得意でってのもあるから、その時その職場、その仕様と時々に合わせて一定の高いパフォーマンスが発揮できることができるエンジニアであることが当面の目標

※ただし関数型が最近はしっくりってかすっきりな気持ちになれるけど(理解度低いけど)

エンジニアとして本質的な部分の理解は、とても大切で今一番不足している最大要素だから古典、聖典と呼ばれるコンピュータサイエンスの本は読もうと思う
　
ブログを始めようと思う
~~※wordpressでオリジナルテーマを作成途中で放置中
内容は、技術面(Qiitaにも書きます)、趣味などなどを予定~~
**[はてなブログでブログを始めました]
(http://hironekosun.hatenablog.com/)**

~~**ブログは、元気に毎日更新しております。githubも毎日1day1push活動してます。**~~
**最近サボりすぎてますが近々Docker、rails+reactなどなどを更新予定**

#最後に
あまりまとまりないけど
今からエンジニアになりたい人、あきらめかけてた人、あきらめた人、頑張っている人の助力になればいいなと思って書いてみた
誰しもスタートは同じだったはず
結果向き不向きがあってもある一定のレベルまではなれると自分は思っている
自分にとってエンジニアとしてのスキルはあくまで通過点であって最終ゴール地点ではない
その先にあるものを見据えての一つの手段として高めたいものである

**さぁみなさん適度に頑張ろう。よきエンジニアライフを**


###おすすめ新人さん向けQiita記事
[クズが教える新人プログラマ処世術](http://qiita.com/syossan27/items/da6430133b0a817985b4)
[【初心者向け】これからRailsエンジニアとして成長したい人がすべきこと](http://qiita.com/hc0208/items/b646db440438cc2df17e)
※Railsに限らずに全言語にいえることが書いてあります
　
[20代エンジニアがアラフォーエンジニアに贈ってもらった６つのことば](http://qiita.com/T-Motonori/items/fc946692920b144199d1)
※こちらの「そして、寄り道をする初心者は洞窟に隠された宝箱をゴールに持ち帰る事がある。」の表現がとてもいいです。

#追記
情報収集の箇所でお勧めのサイト等は随時upしていきます
**※もし今メンターなどいなく独学で勉強してて詰んでたりどうしたらいいのか何をしたらいいのかわからない人は気軽にtwitterからDMしていただければお力添えできる範囲でよろしかったら気軽に連絡ください^^
連絡先はこちら→[hironeko](https://twitter.com/djneko_)※twitterになります**