On Hacking

情報系大学院への入学を目指すWebエンジニアの日記

AtCoderで緑レートに昇格しました

昨日、AtCoderで緑レートに昇格しました。俗にいう「変色エントリ」を書きます。

f:id:Ketone:20200302214130p:plain

そもそもAtCoderとは、オンラインの競技プログラミングコンテストで、参加者の実績に応じてレートの色が変化します。AtCoder社長 chokudai氏のブログ記事に、レートの色と実力の目安が書かれています。「緑レート」のレベル感に関する記述を、以下に引用します。

緑色になれれば、「競技プログラミングに熱心に取り組んでいる人」と考えて問題ないでしょう。要求レベルも決して低くなく、出場回数が足りないとマイナス補正がかかるため、運だけで到達することはまず出来ないラインです。他社アルゴリズム力判定サービスだと、上位1%の最高ランクが付く実力です。(あくまで「アルゴリズム力部分だけであることに注意してください)

印象としては、

  • 学生ならかなり優秀。
  • エンジニアとしてもある程度の安心感がある。論理的に複雑な処理の実装に対応できない、なんてことはなさそう、くらいには思える

くらいの印象です。

Ref) http://chokudai.hatenablog.com/entry/2019/02/11/155904

 

一言でいえば「そこそこ出来る」という程度で、自慢できるほどではありません。ただ、経験豊富なエンジニアであっても、競プロ的なスキルに関しては緑レート以下の方々もしばしば見かけます。また、私のように未経験からエンジニアに転向した人のうち、緑色レベルのアルゴリズム力がある人は少ないと思うので、それなりに自信を持っています。

なお、茶色から緑色に昇格するまでに、以下のことをやりました。

  • 使用言語をRubyからC++に変更しました。C++で書かれた解説記事・書籍が多いのが、C++に乗り換えた最大の理由です。実行速度的には、Rubyでも水色〜青色レートを十分に目指せると聞きます。
  • プログラミングコンテスト攻略のためのアルゴリズムとデータ構造』(通称 : 螺旋本) を1/3ほど進めました (AOJを使ってハンズオンで進めていますが、実行速度がシビアすぎて、やる気が削がれますね...)。
  • ABCの過去問を、A問題・B問題は全問、C問題は3/4ほど埋めました。「自力で解く」ことにこだわるよりも、「自力では解けないレベルの問題を、解説や解答例を見ながら解く」方が、実力の伸びに繋がる、と個人的には感じています。

 

f:id:Ketone:20200302220549p:plain

 

次の目標は、年内に水色レートまで昇格することです。ここからレートを伸ばすのが厳しくなってきます。引き続き、精進していきます (身近にAtCoder仲間を増やしたいですね...)。

 

※なお、私がAtCoderを始めたのは、御多分に洩れず、Lilian氏の影響ですhttps://note.com/neko_chan0214/n/n3a64bc1e1412

 

「来年4月から情報系大学院に入ること」を目標に決めました

タイトル通り「来年4月から情報系の大学院に入ること」を目標に決めました。個人的なメモがてら、考えた事や、今後必要となる事柄を簡単にリストアップします。

入学先としては、北陸先端科学技術大学院大学 (JAIST) を第一候補として考えています。JAISTについては、以下のブログ記事で知りました。東京キャンパスならば、働きながらでも受講可能であり、かつ国立の大学院大学で、各所での卒業生の評価も高い点が、JAISTに着目している主な理由です。

 入学にあたっては、「配属先の研究室を決定し、研究テーマを考案すること (入学選考は、研究テーマに関する小論文・プレゼン・質疑応答とのこと)」ならびに「基礎的な学力を身に着けること」の、主に2点が重要となります。

配属先の研究室に関しては、ここ一ヶ月ほど調査していて、「ここの研究室のテーマが面白そう」というラボを、ピックアップ済です (今後関心が変わる可能性も十分にありますが) 。入学選考までに、該当分野の論文を読み、更にゆくゆくは研究室の担当教官にコンタクトを取り、研究テーマを策定できればと考えています。

また、私は情報系の学部出身では無く、一応理系 (農学系) ではあれど、理工系の素養には乏しいため、数学や基礎的なコンピュータサイエンスの学び直しが必須となるでしょう。学び直しが必要となるであろう分野を、以下にリストアップします。

数学
機械工学・計算機科学

上記の分野を、一ヶ月に一つ程度のペースで習得していければと考えています。

 

以上、私の一年程度のスパンでの目標に関して綴りました。個人的なメモのような内容でしたが、「大学院に入りたい」とは思いつつ、日々の仕事や雑事に忙殺されている間に先延ばしになってしまうのは避けたいので、こうしてブログ記事として衆目に晒すこととしました。まずは、線形代数の勉強から、やっていきます。

 

f:id:Ketone:20200223150004j:plain

 

【エンジニアに転職して2ヵ月】私がDevOpsを主軸に据えることを決意した理由

異業種からエンジニアに転職して、およそ2ヶ月半になる。勉強したいこと、はたまた勉強しなければならないことが、たくさんある。そんな中で、この三連休は、時間が豊富にあったが故に、「では何の勉強に時間を使えば良いのか」ということに悩んだ。そして、最終的には「当分はDevOps系の知識・スキルの勉強に注力していこう」という考えに至った。この記事では、私自身の思考の整理も兼ねて、私が何故このような結論に辿り着いたのかを述べる。

理由① 社内での専門性を確立するため

私は現在、いわゆる"Web系自社開発企業"に勤めている。私の会社では、フロントエンドエンジニア / サーバーサイドエンジニア / インフラエンジニアという区分が存在しない。すべてのエンジニアが、すべての領域を担当するような風潮がある。そのため、私も入社して2ヵ月半程度ながら、Railsでのサーバーサイド開発から、Angularでのフロントエンド開発まで、すでに幅広く担当している。

このスタイルには、幅広いスキル・経験が得られるというメリットの反面、「器用貧乏に陥る」というリスクも存在する。特に私のように0からエンジニアに転向した人間にとっては、尚更である。そのため、早い段階で「◯◯さんは△△に強いから、その方面のタスクを任せよう」と言って頂けるような、自分の専門性を確立することが、エンジニアとして効率的に成長する上で、不可欠だと考えている。

そのため、入社2ヵ月半という比較的早期の段階で、「自分はDevOpsを専門にしていきたい」という事を周囲に示していくことが、自他にとって最適なのではないかと考えた。

理由② DevOpsエンジニアが会社で強く求められているため

エンジニア系YouTuberのKENTAさんが、以下のQiitaの記事中で、DevOpsを「サービスを安定稼働させたまま、ユーザからのフィードバックを取り入れた新機能や改善を、迅速にサービスに反映するためのあらゆる取り組みや文化のこと」と定義されている。

この記事を読み「これはまさに、私の会社に必要とされている取り組み・文化である」と気付かされた。エンジニアになって2ヵ月程度の私が言うのもおこがましいが、私が開発に携わっている自社のプロダクトにも、DevOps的な観点での改善点は多い。逆に言えば、DevOpsの知識・スキルさえ手にすれば、いくらでも改善の余地がある。

後述するように、私は「サービスを作ること」よりも「問題を解決すること」の方が性に合っている。だから、問題解決のキーとなるDevOpsのスキルセットを習得することに、大きな魅力を感じたのである。

理由③ DevOps系の業務が自分の興味・特性に合っているため

実際にエンジニアとして2ヵ月半働いてみて実感したのは、私はクリエイター (創ることにモチベーションを感じる人) というよりも、むしろプロブレムソルバー (問題を解決することにモチベーションを感じる人) だということだ。

エンジニアには、アプリやサービスを開発することが大好きな方が多いだろう。だが、私自身は、何かモノやサービスを創ることには、それほどモチベーションを感じない。プライベートで何かプロダクトを開発したい、という気持ちにはならない。むしろ、例えばAtCoderのように、ある問題に対して、自分の知識と思考によって解決策を導出することに、より面白みを感じる。

だから、「何か新しいアイデアやサービスを生み出すこと」よりも、「既存の問題や無駄を解決すること」を仕事にしたいと思い至った。この私自身の特性と、DevOpsエンジニアの業務内容はマッチしていると考えている。