whoami

学んだことや考えたことのアウトプットをします。AtCoder@japanesekeigo Twitter@keigopiano

自分とプログラミングの関わりを整理するだけ。学生〜社会人(AtCoder水色)

初めて真面目にブログを書く気がします。
私は、某通信企業の新卒1年目の社員です。2018年3月に大学院を卒業し4月から働き始めています。大学院ではグラフ理論に関する研究をしていました。

つい先日AtCoderでやっとこさ水色になりここまで何をしてきたかまとめてみることにしました。ついでに学生時代のこともまとめてみました。

ここから学生時代をまとめます。長いです。

↓ここから学生時代の私とプログラミングの話

始めてプログラミングをしたのは高校生の頃の授業でした。確かBASIC使った授業でした。何を作ったのかはもう忘れましたが周りより少し出来がよかったのと(周りよりできたからか)楽しかったのを覚えています。

なんとなくプログラミングかっこいいな。と思いつつも特に何をするでもなく高校を卒業、無事に浪人し、大学生となりました。私の大学は2年生に上がる時に詳細な学科を選び、1年生の時は広く学びます。東大ぱてぃーん。
1年生の後期にプログラミング入門の授業があり、C言語をやりました。不真面目な私は授業に遅刻しまくり、課題もわからずなんとなく面白くなく感じ、ギリギリの成績でパスして、プログラミングはいいやと思い情報系学科ではなく量子力学などのミクロな物性を学ぶ学科に進みました。

しかし、量子力学統計力学もあまり面白くなく2年生、3年生と部活に没頭する日々を過ごしました。部活は楽しかったし、今に繋がる学びも一生の友人もできたのでそれはそれでよいです。
楽しくなかった2年生、3年生の授業の中にも印象に残っているのが3つあります。
・NAND回路を組み合わせてOR回路やXOR回路などの論理回路を作る実験
・いくつかのプログラミングの課題(内容は忘れました)をやり、発表する。(友達が途中で諦める中で私だけが時間を忘れてできるまで取り組んだのが非常に印象に残っています。)
非線形微分方程式の数値解析解を数値シミュレーションで求める授業。(最終的にはそのような目標なのですが、プログラミングができない人もくるので初歩の初歩から教えてくれる授業でした。)マンデルブロ集合を描画したりして結構感動しました。
ja.wikipedia.org

とまぁ、なんだかんだプログラミング好きだなぁと思うことがあり、学部再編の影響でプログラミングができる研究室への道があり、成績が芳しくなく人気がある研究室の道は厳しそうでもあり、さっき書いた授業をしてくれた(人気のない研究室の)教授につくことにしました。


私の研究内容は非線形力学とは離れますが、グラフ理論に関わる研究でした。内容はいいとしてC言語でせっせこシミュレーションをして歴代でも稀に見る短さの学士論文を書き卒業、修士課程へと進みました。学部時代の研究でC言語に嫌気がさした私はPython3系に手をだしました。合計130万程度のデータを扱うこともあり、MySQLにも手を出し始め、あまり形にならないまま就職活動の時期を迎えました。なんとなく研究職楽しそうと思い研究職関連を受けるも全敗、就職活動に嫌気がさし始めたところで今の会社から内定をもらい、まぁでかい会社だし福利厚生もしっかりしてるし、いっかなーと深く考えず就職活動を終了。この頃から将来のことを少しずつ真剣に考え始めたりしました。

クラシック音楽が好きということもあり、海外で働けばいつでも世界の1流オーケストラの演奏きけるじゃんと思い、海外志向が芽生え夏休みには1ヶ月のなんちゃって語学留学@アイルランド。たのしかったぁ・・・

帰ってきたら、研究を進めPython3もMySQLもちょっとずつわかるようになってきて研究も楽しくなってくる。しかし、修士論文にシフトする時期でプログラミングとはちょっと疎遠に。

そのまま修士論文を書ききり、なんとか卒業。

就職となる。

↑ここまで。ここから社会人編

そして新入社員として働き始める。
そうすると、コレジャナイ感・・・
まぁ、就職活動を適当に終わらしたつけですよねぇ・・・
会社の人や制度、雰囲気、その他毎日みるニュースで漠然と焦燥感を感じ、勉強する必要性を感じる。そんなこんなで競技プログラミングをプログラミングの勉強的な視点から始めて見ることにしました。すると、対人なんだけど一人で取り組む、ある種のゲーム性、プログラミングという技術そのものが見事に自分の性格に一致し、楽しい楽しい。
競プロ沼へとはまっていくのです・・・

ここで6月にスタートして1月までの8ヶ月間のレートの推移を貼り付けます。
f:id:japanesekeigo:20190115230814p:plain
のんびり上がっていきますね。やはり会社員は平日八時間の拘束はあるので仕方ない。精進グラフ(AtCoder Scoresより)を見ても
f:id:japanesekeigo:20190115231503p:plain
問題を解くタイミングが、土日などの休み、またはお盆休みや正月休みに固まっているのがわかります。長期休暇の間にいっぱい問題といて次のコンテストでレートがあがるというのがパターン化していますね。この前水色に上がれたのは正月休みで問題いっぱいといた影響ですね。

どうやってレート上げてきたかを振り返るとやっぱりめんどくさいことはあまり続かなくて楽しんでやってきたことが続いて成果を残してると思います。
ここでいう私にとってめんどくさいことは、例えば自分の実力以上の問題を何日も使ってACする。とかですかね。どうしてもACが出ない時もありますし・・・
逆に楽しいのはACかな?WAかな?TLEかな?みたいな位置の問題を解いてACを出すことですね。ぱっと見わからんけど、ちょっと考えたらわかるレベルの問題を解く。それを繰り返してる気がします。でも同じレベルやとそのうち飽きてきます。
そうしたら、まずもっと難しい問題にチャレンジしたくなりました。
もう一つには、分かってるから、もっと早く書きたい、もっとめんどくさくない方法がいいって思いはじめました。そうすると他人の回答を見たりするようになったり、綺麗に書く方法を探ってみたりして、結果的にライブラリの知識やできることが増えていきました。

そうやって300点の問題なら面白くないときの方が多いかも・・・?まできて水色になったのが今の自分な感じです。

今後は400点問題を中心に解いていこうかなと・・・
あ、あとPython3で水色まできましたがDPとかをした時に間に合わないときがあるのでC++は少しずつ勉強始めてます。
競プロはプログラミングの学習的な意味ももちろんありますが、娯楽的な要素が完全に勝っています。娯楽は楽しくないと続かない。青色になった時またブログ書きたい。

青色って500点問題が面白くなくなるくらいですかね・・・?