こんにちは、VASILYでエンジニアインターンをしている劉です。 僕は昨年の四月、大学一年生になりました。その後、自分でプログラミングを学ぼうとしましたが行き詰まり、六月に思い切ってVASILYのインターンシップに応募しました。それから半年以上働いてみて、あの時思い切って応募してよかったと思うことが多くありました。今日はそのいくつかを紹介したいと思います。
エンジニアインターンシップのいいところ
1. コードが綺麗になる
一人でプログラミングの勉強をしていると、とりあえずプログラムが動けばいい、という考えに陥りがちです。その結果、そのコードをどのように書くか、という部分まで気が回らないことも多々あります。
しかしプログラムというのは面白いもので、同じ動作をするものでもコードの書き方は一通りになりません。人の数だけコードがあると言っていいでしょう。そしてコードの書き方をちょっと変えるだけで、ちょっと見たときに意味がわかりやすくなったり、後から変更を加えやすくなったりします。こういう書き方を積み重ねていくと、プログラムを作るスピードはどんどん上がっていき、作る作業もどんどん楽しくなっていきます。
エンジニアインターンでは、コードを書くたびにメンターとなった社員の方がレビューをしてくれます。ちゃんと動くかだけでなく、この書き方で本当によいのかまでしっかり見て指導を行ってくれます。インターンを続けていくことで、自分でもわかるほどはっきりとコードが綺麗になっていくのを感じるはずです。
VASILYに来る前の僕は、 典型的な「動けばいいや」の考え方の人でした。口で説明するよりも、その時期に僕が書いたコードの一部を見ていただいた方がよくわかると思います。
class WifiSpot < ApplicationRecord reverse_geocoded_by :latitude, :longitude def self.return_jsons(validator) if validator.range.present? @range = validator.range.to_f/1000 else @range = 0.5 end if validator.refining.present? @refining = validator.refining.to_i else @refining = 5 end if validator.address.present? @origin = validator.address else @origin = [validator.latitude,validator.longitude] end @language = validator.language @wifi_spots = self.near(@origin,@range).limit(@refining) jarray = [] for i in 0..@wifi_spots.length-1 do jarray.push(@wifi_spots[i].response_format(@origin,@language)) end return jarray end def response_format(origin,language) @distance = (self.distance_from(origin)*1000).to_i if language.eql?("english") @address = self.english_address @name = self.english_name else @address = self.japanese_address @name = self.japanese_name end wifi_spot = { "name": @name, "distance": @distance, "address": @address } return wifi_spot end end
謎の空行がたくさん入っていたり、コードを書き始める位置がグラグラしていたりしてしまっています。あまりプログラミングをよく知らない人でも、なんとなくこのコードが「汚い」ことはおわかりいただけると思います。ちなみに、このコードが入ったファイルはこんな調子で595行も続いていました。今考えると恐ろしいです。 そんな僕が最近個人的に書いたコードがこちらです。
class OrderedItem < ApplicationRecord belongs_to :item belongs_to :order validates :number, numericality: {greater_than: 0} def self.make_models_from_hashes(hashes) return [] if hashes.blank? hashes.map do |hash| new_hash = {} item = Item.find(hash['item_id']) new_hash[:item] = item new_hash[:shop] = item.shop new_hash[:number] = hash['number'] new_hash end end def self.calculate_sum(model_hashes) model_hashes.sum {|hash| hash[:item].price * hash[:number]} end def session_hash {'number' => number, 'item_id' => item_id} end def valid_cart? temp_order = Order.new self.order = temp_order valid? end def cancel update(canceled: true) if order.ordered_items.all?{|item| item.canceled} order.update(deliveryman_done: true, user_done: true) end end def cancellable?(user) return false unless order.deliveryman == user return false if canceled return false if order.he_done?(user) true end end
行なっている処理の違いもありますが、前のコードよりもなんとなくスッキリした印象が感じられるかと思います。自分で言うのも何ですが、改善した点をいくつかあげておきます。
- ブロックを作るときにしっかりインデントをするようになった
- インデントの幅が統一された
- メソッドごとに空行を入れたことでコードがみやすくなった
- 手続き的にだらだら続く処理を別メソッドに切り出した
- 意味もなく他のコードに書いてある記法を続けなくなった(ここではインスタンス変数を作る"@")
- Rubyの組み込み関数を使って処理を行うようになった
これらは、多くの人にとっては当たり前のことかもしれません。しかし、その当たり前のことを当たり前にできるようになったのは、インターンのおかげに他なりません。少しでも自分のコードが「綺麗なコード」に近づけたことを、とても嬉しく思います。
2. 何を勉強すればいいかがわかる
現在の世の中には情報が溢れています。それはプログラミングの世界でも同様で、初心者向けか上級者向けかに関わらず、世界中の人が新しい技術を学ぶための情報を日々発信し続けています。
そんな世界で勉強を進めようとすると、自分の現在のレベルに適した情報を見つけられないことが多々あります。新しいことを学ぼうとPCを開いたのに、自分には全く理解できない情報かわかりきった情報しか見つからずそっとPCを閉じる、そんな経験をしたことがある人も多いはずです。
エンジニアインターンをしていればそんなことはありません。一緒に働く社員の皆さんは確かなスキルを持った一流のエンジニアですし、一緒に働く中でインターン生のスキルも正確に把握してくれます。今足りないスキルから、それを得るための良い本やWebページまで、自分で学んでいくための十分なアドバイスがもらえるはずです。
冒頭にお話しした通り、インターンに来る以前の僕は完全にプログラミングの学習に行き詰まっていました。当時利用していたWebサービスで一通りプログラミングの入門コースを終わらせて、いざ自分で新しいことを学ぼうとすると、見つかる情報は初心者の僕には訳のわからないものばかりでした。何かを学びたいのに、適切な難易度のものが見つからなくてできない、それを歯がゆく思う日々が続きました。
そこでインターンシップに応募、合格すると、即座に綺麗なコードを書くための指針となる本を紹介されました。その後も、プログラムの設計についての本や絶対に知っておきたい基礎技術を解説した本やWebページなど、様々なものを紹介していただきました。それらを読み吸収した結果、最近はインターンに来る前とは比べ物にならないほど自分に知識がついたのを実感できます。それを実感するたびに、インターンに来てよかったと僕は思うのです。
3. 個人では触れることのない技術に触れられる
より良いプログラムを作るために、今でも世界中で様々な新技術が生み出されています。中には仕事でプログラムを作るのにはほとんど必須と言っていいものも多々あります。しかしそのほとんどは、個人で勉強していると触れることのないものです。
例えば有償のサービスには手が出しづらいでしょうし、複数人で開発をしないと恩恵を受けにくい技術もあります。使うための初期設定を面倒に感じ使うのをやめてしまうこともあるでしょう。しかし、そういった理由で世の中で広く使われている技術に一切触れないのは非常にもったいないことです。
エンジニアインターンで働く場所は、実際に世の中でサービスを動かしている企業です。当然様々な技術が現場で使われていて、インターン生もそれに触れることができます。もちろんそれらにお金を払うのは企業なので、金銭的な心配はいりません。複数人開発のための技術の恩恵も最大限に享受することができますし、面倒な初期設定を自分でする必要もありません。様々な技術に触れるのに理想的な環境だと言えるでしょう。
僕は初めてインターンにやって来たとき、いまや全エンジニアに必須とも言えるバージョン管理システムであるGitすら満足に扱うことができませんでした。しかしインターン生として働く中で、Gitはもちろん、その他にもAWSやGCPの各サービスや種々のCIツールなど様々な技術に触れて来ました。おそらくあのまま個人で勉強していたら、これらの技術には触れることがなかったでしょう。貴重な経験ができていることに感謝しています。
4. 目標を高く保てる
一人でプログラムを書いていると、現在自分にどの程度の能力があるかを感じることはほとんどありません。特に、周囲の友人に同じようなことをしている人がいないとき、その傾向は顕著になります。こうした状況にあると、ちょっと動くプログラムを作れただけで、そんな自分に満足してしまいます。しかし、現状に満足してしまえば、その人はほとんど成長しなくなります。
エンジニアインターンでは、日々世の中に送り出すサービスを作り続けるプロの社員の方々と働くことになります。綺麗なコードを非常に素早く書ける上、様々な分野に深い知識を持つ彼らに、毎日驚かされることになると思います。
また、インターンを募集している会社には何人ものインターン生がやって来ます。自分から進んでインターンに応募する彼らはやはり意欲、能力共に高いことが多く、同世代であっても見習うべきところが多くあります。現状に満足しきっていた人でも、こうした目標とすべき人々に囲まれた環境では、気を引き締め直すことができるでしょう。
僕の周囲には、プログラムを書くような友人はほとんどいませんでした。そのせいか、「プログラミングできるんだ。すごいね」と言われることも多々あり、自分は本当にすごいんじゃないかと思ってしまうこともありました。
そんな中インターンにやって来て、僕は社員の方々と自分のレベルの差に愕然としました。緩みかけていた気持ちを引き締め直して、頑張って勉強していこうという気持ちになりました。
また、半年以上の間に多くのインターン生たちと知り合いました。彼らは例外なく皆優秀で、話すたびに自分の至らなさを痛感させられます。現在一緒に働いている人の中にも、自分よりもはるかにできる高校生がいたりして、刺激を受ける日々が続いています。
自分はまだまだ半人前ですが、少しでもレベルアップできるようにこれからも頑張りたい、そう思えるのはこの環境に身を置いたからだと思います。
5. お金がもらえる
友達とご飯に行ったり、服を買ったり、旅行に行ったりと、学生生活には何かとお金がいります。なんとかして自力でお金を工面しなければなりません。
しかし、お金を得るために働くと、それだけ技術的な勉強ができる時間も減ってしまいます。勉強はしたいけどお金も欲しい、どちらも叶える道はないものかと考えている人もいるでしょう。
エンジニアインターンではそれが叶います。インターンでは給料がもらえるので、インターン生として様々なことを学んでいると、いつのまにか口座に十分なお金が溜まっているのです。こんなに嬉しいことはありません。
僕は大学に入学した頃、ほとんど働いていませんでした。そうすると、新歓期のドタバタで入学祝いに貰ったお小遣いもすぐに消えて行き、昼食に五百円払うのすら躊躇する状態が続きました。仕方なくPCに触れる時間を減らして始めたアルバイトは単純作業の繰り返しで、そのつまらなさが苦痛で全く続きませんでした。
インターンでできる仕事は楽しく、前のアルバイトで感じたような苦痛は一切ありません。その調子で続けているとお金はどんどん溜まっていき、今ではサッと昼食で五百円以上を出せるようになりました。これは充実した生活を送るには非常に重要なことだと思います。
最後に
ここまで、僕が思うエンジニアインターンのいいところを解説して来ました。繰り返しになりますが、僕はあの時インターンに応募してよかったと今でも思っています。エンジニアインターンに興味はあるけど躊躇して踏みとどまっている人も、ぜひ思い切って門を叩いてみてください。きっとかけがえのない経験が得られると思います。 VASILYでは、現在もエンジニアインターンを募集中です。少しでも気になった人は、是非下のリンクから気軽に応募してください。お待ちしてます!