East Grass

大学3年次より休学してエンジニアインターンを開始。2018年4月より4年生。

大学4年の5月 今月やりたいこと

今月から目標を記録していこうと思う。

といっても5月はもうほぼ終わってるけれど、やらないよりはマシかと思う。

 

数学 マセマの統計

英語 TOEICの本1冊

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造 (1日1章)

Ruby on Rails 5 超入門

Swift Rxの記事読む このシリーズ(オブザーバーパターンから始めるRxSwift入門)

 

数学とアルゴリズムが達成できなそう。

特にアルゴリズムは進捗が遅れてるのだけれど、次のインターン選考とかで使う予定でどうしようかと思ってる。

 

長期目標

個人的に元旦とか半期とかじゃなくて定期的に長期的な目標をアップデートしていった方が良いと思ってる。

ということで今のところの目標↓↓

エンジニアとしてはフロントからバックエンドまでできてSwiftが得意なエンジニアになりたい。あとデザインとCSの基礎も分かってる。

今年はプロダクトを2つくらいリリースして勝負したい。

俺(大学4年生)が1ヶ月サイバーエージェントで働いた話を聞いてくれ!

サイバーエージェントで1ヶ月インターンしてきた。

そのまとめとして書いた記事をサイバーのdeveloper blogに寄稿させていただいた。

developers.cyberagent.co.jp

 

このブログのタイトルと同じだけど、作者同じなので許して。

業務的なことは上に任せるとして、ここでは個人的なことを書いていく。

技術的に

技術的点で見ると、今回fluxというアーキテクチャを使って書き換えていくというのがメインディッシュだった。

今までMVCしかやったことなかったのにいきなりfluxにチャレンジした。

iOSチームの先輩がいなかったら絶対無理だったなと感じた。

普通にデータ取得して加工->表示するという処理に1〜2日かけた記憶がある。

あとRxもここで初めて使った。

Rxに関してはもっと勉強していきたいのでおなじみの公式レポジトリのサンプルでもやろうかな。

インターン自体は周りの人たちが暖かく、仕事もチャレンジングな課題で退屈しなかった。

もっとプロダクトに意見できるようになりたいとかデザインできるようになりたいとかの欲は出たので頑張っていきたい。

個人的な思い入れ

就活の話になるけど、サイバー入れるくらいのエンジニアになりたいなーと考えてたことを思い出して地味に達成してたのが嬉しかった。

ただ、当時想像していたのはもっと実力ついてる自分だったのでそこにはギャップを感じる。

最近はSwiftはこれ以上何を勉強したら良いのかよくわからなくなってきたのでちょっと困ってる。

言語仕様とRxかな。あとはアプリ作ってくのと実務経験。

少なくともRxごりごり書けるSwiftエンジニアは強いと思うから一生懸命やっていく。

 

 

自身初のライブラリを作成した話

先日のブログでも少し書いたが、初めてライブラリというものを作った。

GitHub - HideakiTouhara/Poi

よくある就活のスキルシートって

5.言語に関する本を出版したことがある
4.言語を使うだけでなく、その言語のフレームワーク・ライブラリを作ることもできる
3.言語の特性を理解し、適切な処理を記述できる
2.調べながらであれば、任意の処理を記述することができる
1.授業などで触れたことがある程度
0.未経験

こんな感じだけど、よくライブラリの作成経験というのが指標とされるなと感じたので一度作ってみようとおもったのがきっかけ。

中身としてはTinderのようなカードスワイプUIを作成できるというライブラリである。

名前は"Poi"

スワイプする動作に擬音を付けるとしたら"ポイ!"だなと考えたのが由来。

QiitaとTwitterで同時に宣伝したのだが、Qiitaの威力がすごく、Qiitaのトレンドに乗ったり、記事は現在20いいね超え、ライブラリ自体のスターは8という状態。

非アクティブアカウントでもリアクションもらえるのはQiitaの強みだなと思った。

GitHubのスターを15以上にするのが目標なのでGitHubアカウント持っている方はスターを押してもらえると嬉しい。

github.com

 

※ 追記 (5/16)

おかげさまでスターが15を超えました。

まだまだ上を狙っていくので引き続きスターをお願いします。

1年間の休学期間でエンジニアインターンを経験した僕は最終的にどのくらいの実力をつけたのか?

まえがき

軽く自己紹介を。

僕は現在大学3年生(理系)です。

少し変わっている点としては、大学3年の2017年の4月から2018年の3月まで休学していました(4月から4年生)

3年生の頃からエンジニアになろうと思い、3年生の途中でインターンを開始しました。そこから色々あって結局3年の終わりに休学し、1年間はエンジニアとしての修行期間として設定しようと思い、頑張ってきた。

1年前と比べると、意外と自分の中で大きく変化したと感じたので今回はこの1年間を振り返ってみようと思う。

1年前のスペック

成長を比較したいので、休学前のスペック。

・プログラミングはforとかifとかは知ってる

・ただ、2年生までは自分でアプリケーションを作ったことがないし、作り方もさっぱり分からん

・3年生の頃にUnityの本みて同じものを作ったことはある

・マーケやエンジニアインターン応募するが、全部落ちる(そもそも応募そんなにしてないけど)

1社目インターン開始

ここは休学する前から働いていて次の会社と被ってる期間含めて10ヶ月ほど在籍した。

会社はプログラミングスクールを運営していて、僕も教えたりしていた。

それ以外だと、営業、チームリーダー、新規事業立ち上げと何でもやった。

現在就活中だが、面接で技術的ではないエピソード系質問(ex.あなたの直面した最大の困難はなんですか?)を聞かれると、ここでのエピソードを話すことが多い。

大学生が多く、今でも仲が良い友達がたくさん出来た。

技術的なことだと、Unity開発をした。教える側のレベルアップは常に求められる職場だったので、勉強する環境としては申し分なかった。

FPS作ったり、VRアプリを作ったりした。

勉強会も頻繁にあって、単一責任原則やUniRxなど、わからないなりにどうにか理解しようともがいた覚えがある。

Gitもここで学んだ。

ただ、ここでそこまで技術力が上がったかというとそうでもなかったかなと思う。

その後1日中コードを書くことになるが、そういった環境の方がスキルは伸びる。

しかし、エンジニアとしての基礎を身につけるのはここでしかできなかったので、とても有り難い環境だった。

iOSの勉強

技術的にもっとチャレンジングな仕事がしたいと思ったのと、元々iPhoneアプリが作りたかったのでSwiftを勉強した。

独学で本をいくつか読み、オリジナルアプリを作った。

それを持ってSwiftエンジニアを募集しているインターンにいくつか応募した。

結構有名どころのIT企業も受けたけど、結果は4社受けて3社合格。

落ちた1社はコーディング試験だったので、当時アルゴリズムの勉強全くしてない僕には無理だった。

夏頃まではインターン落ちてばかりだったので、面接まで行った会社は全部受かったのは結構僕にとっては驚きだった。

このときに初心者がエンジニアとして採用されるために必要な勉強ルートが僕の中で出来上がったのでまた機会があれば執筆しようと思う。

2社目, 3社目

いよいよエンジニアとしてのインターンを開始。合計で半年以上続けることになった。

1日8時間コードを書く仕事は初で、GitHubの草が毎日生えることに嬉しさを感じてた。

仕事では大きな機能追加を任されたりして、ぜんぜん違うところでその機能使ってるよといった話をされると結構感動した。

エンジニアとして何が楽しいかというと、専門性を持っているが故に頼りにされたり、リスペクトがあったり、自分にしか出来ない仕事があるという環境で仕事ができるという点である。

その点、それらに応えられるだけの実力は必要だと感じた。

仕事終わりに毎日英語や数学、個人開発とかをやるのがルーティンだった。

仕事だけでなく、個人でSNS作ったり、OSS活動なんかもしたりした。

技術書も結構読んで、Webアプリの読み物や、Swift, アルゴリズムの本なんかも読み始めた。

逆求人

一応3年生の扱いなので2月頃から逆求人イベントで就活をはじめた。

逆求人とは、自分がある特定の企業に応募するのではなく、複数企業が一同に集まり、そこで自分のアピールをするというイベントのこと。

ここでもかなり感触は良く、面談した企業からはほとんどお誘い頂く状況だった(内定ではなく面接に誘われたということ)

あとは自分が行きたいと思えるような企業に受かるかどうかだと思うので、より実力を高めていきたいと思う。

※ 20卒の逆求人は5月に既に始まるらしい(早い)

エンジニアの就活に逆求人は必須だと思うので行きたいところ探したい人は登録した方が良い。

https://supporterz.jp/spevents/detail/1on1_20180520/?fid=2182436

(このURLから参加してくれると僕にも参加した人にもキャッシュバックがもらえる)

インターン優勝

今月は、GREEインターンに参加した。2日間でエンジニア、デザイナー、プランナーの各1人でチームを組み、2日間でゲームをひとつ作るというプログラムだ。

最後は審査員が審査し、優勝を決める。

ハッカソンと違い、事前に面接を通過しなければならないのだが、一緒に面接を受けた子がlineのインターン行ってるみたいな子で自分は落ちたなと思った記憶がある。

詳しくは書けないのだが、GREEの社員の方からより良いものを作るために必要なことを徹底的にフィードバックされながら開発した2日間だった。

最終的に優勝という結果がついてきたのは嬉しかったし、次の日まで興奮が冷めなかった。

もう一つ嬉しかったのは、終わったあとにチームのメンバーやメンターの方から一人一人の良かったところや悪かったところを言ってもらう時間があるのだが、全員から技術力の高さを褒めてもらえた。

Unityは半年ぶりだし、自分より上が居るのはわかっているので、嬉しさだけ噛み締めつつ、前に進みたい。

 最終的なスペック

1年間をざっくり振り返ってみたが、成長度合いとしては以下の感じかと思う。

・Unity, (特に)Swiftはある程度何でも作れる

・よっぽど採用難易度の高い企業ではなければ採用される

・自分の技術力を語れるくらいのポートフォリオはできた

・バックエンド, CSの基礎なんかはまだまだ

こんな感じでやってきたことに関しては結構実力はついた。

ただ、"よっぽど採用難易度の高い企業"に受かるぐらいの技術者でありたいし、"バックエンド, CSの基礎"は理解している技術者でありたい。

結論としては、休学は今のところは成功したと思う。

わかったことは、専門性を高めるためにはある程度の時間、期間が必要だし、その間はそこに浸れるような環境を強制的に作ってあげるのが有効だということ。

惰性で勉強すること

1年間勉強を続けてきて思ったのが、意識高く「勉強するぞ」と思っても自分は続かないということ。

「とりあえず1時間だけやるか」や「何か暇だから開発するか」のテンションのほうが続くし、パフォーマンスも悪くない。

とりあえず仕事終わったらカフェ行くとか休みの日はカフェ行くとか電車では本読む(通勤片道1時間だった)ってのはかなり良かったので他の人にもおすすめしたいし、自分も続けていく。

それに周りで天才と呼ばれている人を見るに、開発が癖みたいになってると感じた。

暇があればパソコン開く。聞いた話だと、一時期電車でも開いてたらしい。

天才というのは皆同じく与えられた時間の中でもその行為が癖になるほど膨大にこなす人のことだと思う。

今後

目下就活を頑張る。

自信はないけど、やってきたこと、今後やりたいことを素直に話していく。

あと学生の期間は1年間あるのでその期間にレベルアップしていく。

やりたいことは

・バックエンドの開発経験

・CSの勉強

・売れるサービスリリース

・受託

・何かの団体結成

・勉強会登壇

・夏のインターン参加できたらする

こんな感じ。とにかく手を動かす1年にしたい。

最後に

最近PoiというTinderみたいにスワイプできるライブラリを作りました。

15以上スターがあるとawesome swiftに推薦できるのでGitHubのアカウント持っている人はスター押してくれると嬉しいです。

github.com

rubyのバージョンが切り替わらない原因

rubyのバージョンは

rbenv global 2.2.3

 で切り替わるはずが、

rbenv versions

コマンドで確認すると、切り替わっているように見えても

ruby -v

のコマンドでは反映されない問題がありました。

これはrbenvでいれたrubyを使いたいのにmacにもとから入ってるrubyを使っちゃってるのが原因でした。

which ruby

で/usr/bin/rubyとでているのはまずくて、Users/ユーザ名にするのがポイントです。

どうやってやるかというと、

vi ~/.zshrc

vim開いてiを押すとインサートモードに入るので

eval "$(rbenv init -)"

の文字列をコピペしてあげます。

escキーのあと:wqを打ち込めばvimのモードは解除されます。

source ~/.zshrc

で設定の保存をします。

最後に

ruby -v

コマンドで切り替わっているかの確認をして終了です。

 

参考資料

http://easyramble.com/rbenv-ruby-version-trouble.html

http://qiita.com/akatsuki174/items/c0384b9903b4b5cbbdaf

意志力を磨き、習慣化させる実践的方法論 [スタンフォードの自分を変える教室 ケリー・マクゴニガル]

スタンフォードの自分を変える教室 (だいわ文庫)を読みました。この著者の本はどれも根拠となる研究結果が示されていて、それが意志力の実験というコーナーで紹介されています。意志力の実験には「あれ?」と思うものもあります(著者自身もそう言っています)なので、そういったものは省いて紹介します。

 

うまくいったときでも、そうでないときも自己観察が重要というのが、この本で随所に述べられていると感じましたね。

 

方法だけ知りたいという方もいると思うので、このブログではエッセンスだけ抽出してメモします(あくまで自分用のメモだけど)

 

<以下メモ>

・意志力とは、やる力、やらない力、望む力の3つを駆使して磨かれる

 #望む力とは、肝心なときに重要なモチベーションを思い出す力

・誘惑に負けそうなもう一人の自分に名前をつける

 #自己認識重要

・選択した瞬間を振り返る。成功したとき、失敗したとき、事前に用意できたことは何か

・意志力を高める、ストレスを発散する方法。瞑想、エクササイズ、睡眠、食事、友人や家族、信仰やスピリチュアルな集まり!?、マッサージ、クリエイティブな趣味

・呼吸を遅らせる。心拍変動上昇。毎日やれば意志力向上

・寝転んで、呼吸をゆっくり、顔、手、をぎゅっとして緩める。

・意志力の弱そうな時間帯を探る

・小さなことから一つずつ習慣化すると、その過程で意志力は鍛えられる

・難しい方を選ぶを繰り返す(利き手と逆で飯を食ったり、歯磨きしたり、ドア開けたり)

・やらない力、やる力、自己監視でそれぞれテーマを決めて鍛えてみる

・もうだめだと思ってから人はまだいける(慢性的な疲労と区別)

・望む力。①達成した未来自分はどうなっているか②他の誰の人の利益になるか③徐々に楽になっていく

・自分を褒めると、悪いことをしたくなってしまう。

・しようと考えただけで、した気になってしまう。

・努力を道徳上の良い、悪いで判断するのではなく、自分の目標達成に必要かどうかで決める

 #わくわく感を大事に

・自分はどういう言い訳をしているか

・進歩した気になると、自分を甘やかしたくなる

・「目標に対してどれくらい進歩したと思う?」ではなく、「目標に対してどれくらい真剣に努力していますか?」

・なぜ誘惑に負けなかったのか

・いつか得られるはずの報酬を思い描く(預金をした人に、宝くじに当選する可能性を与える、納税をきちんとした人に、抽選で全額キャッシュバック、金魚鉢効果で思いがけない報酬の効果、だれでもceoに)

・自分が気に入ってるものと、習慣化を結びつける

 #お気に入りのカフェ、人

・誘惑に負けたとき。少量でも心から味わうようにする。期待値と実際の乖離があるか。

・一番ラクなのは決心をすること、目標を立てること。具体的な努力が必要。

・失敗したときに自分に厳しくしない

・実際の行動をイメージする

・将来失敗したときのことをイメージしてみる

・10分待って将来の報酬にしてしまう

・将来の報酬は割引されてしまう

・意志力の強い人のことを考える

・欲求は受け入れる。行動だけ自制する

・欲求は波。それを乗り過ごすことを考える

 

 

 

生産性―――マッキンゼーが組織と人材に求め続けるもの 伊賀 泰代

生産性―――マッキンゼーが組織と人材に求め続けるもの を読みました。

コンサルでは当たり前なブランク資料や、ロールプレイング、会議のやり方などの手法は、他の場面でも応用が効きそうです。

生産性の本には決まって、時間を記録しろと書いてあるので、早速やってみます。

 

以下、気になったところのメモです。

 

・組織の人間全員がフォローワーシップではなく、リーダーシップを持つべき。

・生産性が高い採用とは?

  ・内定者が全員入社してくれること(応募を増やすことではない)

  #メルカリは会社自ら情報を発信して、自分たちのところに来てほしい社員をスクリーニングしている。ライフネット生命も。

  #応募者自身もSNSやブログで企業に対してスクリーニングすべき→アウトプット重要

  ・いかに自社がほしい学生だけを惹きつけるか(逆もまた然り)→例:パンフレット等の若手社員紹介ページでリーダーシップ経験を強調

   ・ユニクロ ブラック企業のレッテル→改善を約束した上で、給与レベルを公開。高い成果を出した人を評価するということを伝えた。(安易な考えで「人に優しい職場に変わります」とかは変なセルフイメージになる)

  ・東大生なら誰でも受かるという評判。滑り止め目的の東大生が増えてしまう。

・生産性 = 得られた成果 / 投入した資源

・生産性を上げるために投入した資源を増やしてしまうのは×

・生産性の低い仕事がいつまでも残ってしまう。

・インプットを減らすだけでなく、アウトプットを増やすのが重要

・①より価値の高い商品を作り、②価格を上げ、③それに見合っていると納得できるように伝える。

・インプットを減らす、アウトプットを増やす、それぞれを改善と革新に分けて4分類

・機能を絞って付加価値と価格を上げる。使いやすさや、デザイン。

・価格は、原材料の積み上げコストではなく、顧客が評価する価値。

・技術的な革新は好奇心により、非技術的な革新は、不都合や不便さ、それらを一気に解決したいという切実な思いにより生まれる。

・既存商品より生産性が4倍以上の商品を開発しろ → そこで初めて考え始める。

・会議の時間を短くする。無駄な会議であることに変わりはない。

・トップパフォーマーの成長①ストレッチゴール②比較対象③海外共同プロジェクトの参加経験

・評価ではなく、成長支援のためのフィードバック 同僚同士でやっても良いが、濃いものにする(単なるアンケートでは意味なし)

・どの分野に注力して、どの能力を開発するべきか。この期間内にできることを期待していると伝える。

 

キッチンタイマーを使い、各作業の記録

・他社の仕事に対してアレコレアドバイスする文化 → リーダーシップを持てるし、チーム全体の生産性も上がる。

・自分にしかできない仕事をミーティングで説明したり、他社からの質問に答えることでマニュアル化

  #得意分野をみんなに共有(質問も受けながら)できる場

・3割と3%という2つの生産性向上を目指す。

・どれも不正解の選択肢に対しての意思決定

  ・決断する。完全な選択肢はない。

  ・選んだものに対する問題に備えておく。

・研修は座学よりもロールプレイング

  ・仕事をやめたいと言ってる部下との面談、5分しかない上司に業務報告

  ・リスクフリーの環境で困難な状況の練習

  ・同僚の仕事ぶりが見れる

  ・質問ができる

  ・役員も、課長も、それぞれにあったものをやる

  ・フィードバックは同じ参加者から

・資料はアウトプットイメージを持ってから作る

・ブランク資料 目次、中見出しを先に作る

・「この資料の数字がこうだったら意思決定ができますよね?」と、先に確認できる

・インタビューやアンケートにも応用可(質問内容を先に考えるのではなく、そのインタビューからできる記事を考える)

・会議の議題ではなく、会議の達成目標をアジェンダとする。(意思決定、情報共有、リストを作る、アイデア出し、納得すること、役割分担によるネクストステップを決める)

  ・アイデア出し 先に議論のたたき台を作ってきて、不足するアイデアを追加していく。

  ・資料は黙読。資料を短くするのは生産性向上とは限らない。

・決まらなかった会議では、理由を記録しておく。改善につながる。

・足りないのは情報ではなく、ロジック。

  ・ロジック 円が1ドル120円より高くなったら為替予約する

  ・情報 今日の円は1ドル119円

  ・会議でロジックさえ決まれば、情報を集めて、再び会議をする必要はない。

  ・例:消費者調査の結果が仮に〇〇だとしたらどのような意思決定をしますか?

・「じゃあ、今から〇〇君は先方のクライアントさんになりきってね」 → 資料を検討してみる

・いつものメンバーではない人を会議に呼ぶ

・非日常で議論してみる(オフィスをおしゃれにしてみるのもこの効果)

・過去の会議を振り返り、何をしておけば、良かったのか

・負担の移転では意味がない