今さらAtCoderやろうと思う
昔Software EngineerのポジションでGoogleを受けた。
結果はまあ余裕で落ちた。
当時勉強した内容、これから勉強することを書いておく。
前提
自分は10年くらい前に大学の情報学部を卒業していて、最低限のデータ構造とアルゴリズムは学んだ。
List, Stack, Queue,木構造なんかは普通に理解している。
ソートの計算量とかは全部暗記してある状態。
動的計画法は簡単なのはなんとか解けるが複雑になると無理。
BFS, DFSも同じで、いわゆる単純な探索はできるが、複雑なものになると無理。
その他アルゴリズムは全く知らなかった。
グラフ?学部じゃPageRankの実装くらいでした。
ソフトウェア設計は人並み+αできる程度。
アーキテクトデザインも何度か経験したことある。
DB、WebServerのチューニングも触りくらいならできる。
パフォーマンス向上の調査もできる。負荷分散のアーキテクトも経験ずみ。
NWはほとんど知らない。
PCの挙動細かく説明しろって言われたら無理ぽ。
やったこと
・leetcode 200問
当時twitterでGoogleのエンジニアがleetcode200問とけば受かるよ、といっていたので、とりあえずやってみることにした。
内容はそこそこにむずかしかった。Easyわかるけど、Middleは結構わからないものがあった。
海外だとかなり有名みたい。
多分middle全部わかればいいんじゃないかなっていう気がした。
しかし500問くらい以降の問題が意味不明だったり、お前がそう思うならそうなんだろ、お前ん中ではな。みたいな問題が出てきて結構なえた。
・世界で闘うプログラミング力を鍛える本
確か先輩に勧められたので買って1周した。
解説が微妙に適当で理解できない問題があったりしたが、全体的に丁寧で安心して学習に取り組めた。
誤植多すぎというレビューがあるが、あまり気にならなかった。
ソースコードも写経よりも考えながらやることの方が多いしね。
これからやろうと思うこと
面接を受けてみて思ったのが、簡単なコードをいかに間違いなく書くことが大切かを知らされた。
エッジケースとか例外対策以前に、IDEなしで普通にぬるぽ出さないコード書くのって大変だなって思った。
と言うことで、若干数学よりではあるけどAtcoderをやってみようと言うことにした。
さらっとやった感じCはだいたい解けるけど、Dはなかなか難しいなと言う感触だった。
世間では大学生はおろか、高校生でもっとずっと難しい問題をといているようだが、ここは変に焦らず、簡単な問題を間違いなく書く訓練を続けようと思う。
今日、最小公倍数を求める有効なアルゴリズムがあるのを知って驚きました。
また何かあったら書きます。