子育て奮闘おじさんが競プロで入水しました
はじめに
とりからと申します。ただ、好きな食べ物をHNにした安直さです。
この記事は、ブログを始めたいと思いつつも二の足を踏んでいた私が、やらなきゃ始まらないとAtCoderで入水した勢いで作成したものです。自分語りばかりの記事となりますがどうぞご笑覧ください。
どんなアルゴリズムをどうやって学んだかという観点はあまりなく、競プロをやる動機や個人的な喜びについて語ろうと思います。
過去の私のようなプログラミングやってみたいけど何やろうとか、腰が重いなとか思ってる人に刺されば嬉しいですし、だれかの精進のヒントやモチベーションになれば幸いです。
自分について
タイトルの通り日々子育てに奮闘する30代です。三児の父で慌ただしい日々を送る傍ら、隙を見つけては競プロをしています。
学生時代は数学を専攻していたため、数学系の問題への忌避感はないです。
30歳を超えて競プロに触れるまではプログラミングどころかPCに苦手意識をもっていた非エンジニアです。(修論を手書きするか悩んだレベルです)
AtCoderを始めたきっかけ
非エンジニアではありますが、仕事においてITは切っても切れない関係にあります(そのような方も多いでしょう)
日々の業務ではPCを使いますし、なんらかのシステム開発時にユーザー側として参画することもあります。時には開発において、要件を明確にせよとエンジニアの方に詰められたりすることすらあります。
私にとってPCとは、何か始めると設定の沼にはまり、次に進むとエラーを吐き、最終的に調べて出てきたtipsのおまじないにより解決を図る得体の知れない何かだったわけですが、AIやビッグデータ分析といった潮流もあり、これまで以上にITリテラシーを求められるようになってきて、これはいかんぞとこれまでの苦手意識を押し殺し、PCと仲良くなろうと思ったわけです。
とはいえ、本とにらめっこするのは長続きしそうになく、かといって、すぐに作ってみたいものが思い浮かぶような創造性をもつわけでもなく、初めの一歩に何をすべきなのかというところで途方に暮れていました。
そこで、まずは何か書けるようになってから考えようと手を伸ばしたのがAtCoderだったわけです。
競プロはいいぞという話
私にとって競プロを一歩目に選んだのは正解だったと思います。ここで競プロに感じている良さを語っておきます。
- 学習領域が明確化されている
- 特定の問題をプログラミング言語で解くというプロセスに特化しており、言語の文法やアルゴリズムに絞った学習が可能
- 背景としてのPC知識やソフトウェア導入等の環境構築が要求されず、取り組みはじめやすい
- 着実な上達の実感がある
- 問題を解く→提出→修正、解説確認というサイクルが早く学習がしやすい
- 類題が多く、また、少し背伸びといった難易度の微調整もきくため、程よく上達していくことができる
- 学習の痕跡が解いた数として積み上がっていくので、達成感がある
- レートシステムが客観的に上達度を測れる
これらのおかげですぐに諦めたり、飽きたりすることなくハマっていけたのがよかったです。一度PCとの接点ができれば周辺領域に手を広げることで色々なことを学んでいけました。
例えば、初めはAtcoderのコードテスト上でコードを書いていましたが、自前の環境がほしくなり、その時初めて環境構築を学べました。
この時に、究極ダメでもコードテストあるしというメンタリティを持てたり、環境構築に疲れたときには一回コードテストで競プロやってみたりと、疲弊せずに進めていくことができたのもよかったです。
競プロを起点に、ヒューリスティックに触れてみたり、AtCoderに関するツールを導入・開発してみたり、データ分析コンペをやってみたり、他言語を習得してみたりと、隣接分野を攻めることで段々とPC仲良しマンになれると信じて手を広げつつあります。
いつどうやって精進しているのか
夜落ち着いた時間にPCを開くのはもちろん、少しでも空いている時間があれば、すかさずスマホで競プロを始めます。
通勤電車、子供の寝かしつけ中、散歩中、果てはテーマパークの待ち時間まで、常にやろうと思っていると意外と時間はあるみたいです。
流石にコミュニケーション上まずそうな時はスマホを開くことは控えていますが、頭の中では今解いている問題の考察をしているかもしれません。
スマホでコーディングしたくなった人にはこちらがおすすめです。
一度離れてしまうと再度始めるには大きな労力がかかるので、毎日少しでも継続するようにしています。(実際3人目が産まれた頃に一度離れてしまい、復帰するのが大変でした)
競プロコミュニティもいいぞという話
いかに競プロが楽しく、成長の実感にあふれていたとしても、一人で黙々とやっているだけだったらきっとここまで続けられてはいないと思いますし、面白い最近の技術動向や、次にやってみたい隣接分野なんてのも見つけられなかったと思います。
私はXで競プロや技術系の人をフォローしています。
そこには、自分と同じような問題で悩みながら成長している人や、新しいことにどんどん挑戦していく若い人や、圧倒的スキルをもってる強い人、忙しい中時間を捻出して競プロをやってる社会人などがいて、それらの有形無形の励まし、助言を受けることで、競プロを続けたり、新しい挑戦を始めたりすることができています。
最後に
これからも競プロを続けて、次は青色を目指していきます。PCに忌避感をもっていた反動かどっぷりハマっているのでちょこちょこと色々なことに手を出していこうと思います。
精進でも問題を解くだけではなく、頭の整理のためにアルゴリズムにまつわる記事を書いたりしようと思っているので、またこちらに投稿する予定です。
最後まで駄文にお付き合いいただきありがとうございました。
付録:便利なツール等
具体的なtipsなしもどうかと思うので、付録として私が使っていて便利だと感じた競プロツール等を紹介します。
AtCoder Easy Test
- 上のスマホ環境構築記事でもおすすめされてますが、スマホからのテスト・提出にあたっては不可欠クラスのツールです。詳細はリンクをご確認ください。
AtCoder Problems
- 自分の解いた問題と解いてない問題がわかったり、difficultyという指標で問題が難易度で分類できたり、自身の過去の提出が辿れたりするサイトです。
- 私は基本的にひたすら難易度の低いものから順に解き続けていますが(現時点で2500問弱)、やり方には諸説あります。
けんちょんさんの記事
- リンク先はAtCoderを始めるにあたって最初にみた記事です。
- 他にも各種アルゴリズムの解説記事等があり折に触れてお世話になっています。特にDFSの記事は何度も見たように思います。
E869120さんの記事
- リンク先は始めたての頃に学習の指針となった記事です。
- 中級編、上級編や競プロ典型90問といった発展版もあり、体系立ててアルゴリズムを学べます。
Educational DP Contest(EDPC)
- 有志コンテストです。常設コンテストに置いてほしいくらい有用です。動的計画法に苦手意識があったときに集中的にやりました。
- これより難しいTDPCもありますがそちらは途中までしかやってないです(おいおいリベンジします)
うしさんのライブラリ
- ライブラリ整備の参考にしたり、勝手に使わせてもらったりしています。
- 最も使用しているのはLCAのライブラリかもしれません。
おわり
Discussion