PentiumMノート現役で使い倒した

日常や旅行や気になったことや技術的某について記録するブログ。ブログ名は原点回帰しました。

Takashift、競プロを始めた件

10月後半忙しくって、書くこと無いなーってスルーしてましたが、すごくありました。

 

Takashift、競プロはじめたってよ。

 

始めたって言っても去年ちょっとだけAtCoderやってたりしたんで、初めてってわけじゃないです。しかも、競プロをやると言いつつ競うことは目的じゃないという(単芝)

ぶっちゃけ恥ずかしながらプログラミング言語のメソッドとかどのモジュール読み込むんだとかいちいち覚えていないんですよね。まあ、エディターとかで結構補助してくれるし、モジュールは若干困るけどどうせググればすぐ出てくるから、支障も実際の所あまり無いです。

ただ、どこかでこれじゃまずいなぁと思っていたのもまた事実。何か取り敢えず作りたいなぁ簡単に作れないかなって思った時に、いちいちどのモジュールが必要かググらないと簡単なコマンドラインツール一つ作れないのはやっぱり困りものです。まあCなら見なくてもある程度書けますが、サクッと作りたい時にC使いますか…?

というわけで、すぐにご所望のものが作れそうなプログラミング言語をいつでも書けるようにしておきたい!ので、定期的にプログラミングしようと思い立ちました。その題材としてAtCoderのABCを使いはじめたわけです。アルゴリズムもすぐに出てくるようになったらなお嬉しいし。

やってる言語ですがGo、RubyPythonの3つにしています。Goは元々結構でかいアプリを作っていたのである程度知っています。でも、チュートリアルを全部やったわけではないですし、割とうろ覚え。ですが、他の言語をやっているとこれ!って機能があって爽快な気分になれるし、コンパイル言語でスッキリしていて文字列操作とか一通り揃っている言語はまあGoですねって感じで(ゴルーチンも強し)。Rubyは色々と自由が効くので(その自由さが時として仇ですが)知っておけばなんか作りたい時に役に立つかなぁと言う感じ。あと作者の言う通り、書いてて面白みがあります。Pythonは実を言うとあんまり書き方がなじまないし、色んな所で言われてますが書いてて面白くないので自主的には基本書かない(と言いつつコード量からするとそこそこ書いてます。マジで覚える気がない言語ナンバーワン)です。でも取り敢えずすぐに作りたくて且つ他の人がいじることを念頭に置くならPythonでしょうね。Python2をPythonとだけ銘打って解説してるサイトはいい加減滅びろ。

ノルマは最低月イチで始めました。

 

そして…

 

起承転結が早いですが、1ヶ月目にしてダメなところが浮き彫りになりました。まず、月イチだと少なすぎます。最低2週に一回は書かないと記憶が…
忙しかったのでそれどころではなかったんですが、3週間も開くと忘却の彼方ですね。ABCって結構似たようなパターンが多いと思うんですが。トリリンガルでやってることも影響している可能性はありますね。ダメダメじゃないですかやだ~

そしてわかってはいましたが、私ってそもそも競プロには向いてないなぁということも改めて認識。ものにもよるけどタイムアタック的なことはあんまり好かないんですよね。まあ、プログラムを考えるのは楽しいんですけどね。

色んな人が居て人それぞれスタイルがあると思うんですが、少なくとも私はよく考えてからプログラミングします。そして、最初のチュートリアルならともかく、何も考えずに取り敢えず動くだけのコードを書くのは嫌いです。それにすでに正解があるものをみんなでよってたかって早く解いても意味ないじゃないとさえどこか頭の片隅で思ってるかも知れないです(それいっちゃあおしまいよぉ)。
こういう性格だから時間を競うのが合わないのは自明。
競うことを目的としてないのでいいんですけどね。こういう競プロの使い方があっても良いんじゃないかってユースケースになってもいいと思うし。時間だけがプログラミングの評価軸じゃないですよね?(実際業務でそれだけだったら、っていうのは想像したくない…)
もちろん、AtCoderを早く解ける人が凄いのは言うまでもないですし、そのほうが業務では絶対有利です。だからやってるんですよ(笑)

でも、世の中は偏見持ちの小物ばっかなので、競プロが出来ないのは努力じゃどうにもならないとか、プログラミングは才能が全てとか、そんなことを言う人はたくさん居ます。競プロ出来なくて自分にプログラミングの才能が無いんじゃないかっていう思う人が他にもいるかも知れないんで、そういう人のために言いますが、決して競プロが出来ないからと言ってプログラミングの才能が無いことの証明にはなりません。例えば、デバッグが開発時間の殆どを占めることはよくあることなのでデバッグの才能も重要です。でもデバッグの才能は実装の速さで測れません。また、既存のプログラムの理解が開発時間を支配することもありますが、これも同じです。プログラミングに於いて最も大事なのはやっぱりロジックを考える力で、プログラムの動きを考えられることです。そしてこれは一つの評価軸で一様に測れるものではないのです。セオリーが偉いなんて誰が決めたんですか?そんなに早くなくったって誰も考えないような素晴らしいロジックを考えられる人が居たらその人は確実に天才呼ばわりされます。

あんまり悪い例は出したくないですが、プログラミングの速さだけが滅茶苦茶早いために自分は天才だとイキりだして、終いにはチーム開発の現場で勝手に自分の得意な言語で好きなように書き、保守性をぶっ壊してくれる人だって居ます。人より上を目指すなら、速さは大事ですが、全てではないことをよく肝に命じておいてください。

あと、言語のメソッドとか実装について覚えられない理由も実は自分でわかっています。
結構ロジックに重点を置いてるんで、どの言語で書くとかどの関数でどういうふうに書くとかはあんまり重要視してないんです。そして、これは無意識にやってることなんでどうしようもないです。
こう書くとわかりにくいかも知れませんが、要するに無駄な努力はしたくない性格なんでしょう。

でもだからと言ってぱっと簡単に書ける言語を持たないのは自分にとってマイナスです。というわけでこれからも精進します。ついでに競プロにも強くなれるように。

あれっ?

なんかおんなじことやってる娘がいるみたい!しかもライブコーディングじゃん!! 捗る~

www.youtube.com

VTuber空高ちゃんをどうぞよろしくね!