はてなキーワード: 競技プログラミングとは
0点の記事だな
お前chokudaiのツイート読んでないの?
atcoderやってんのに
彼はこういってんだよ
通常のシステム開発において競技プログラミングで役に立つか、という意見ですが、まぁこれは諸説分かれるでしょう。
システム開発と言っても色々あるので判りませんが、プログラムの全体を素早く捉える抽象思考、必要なものを漏れなく列挙する論理思考、この2つは共通して役に立つのではないでしょうか
職業プログラマでシステムの開発保守をやってるんだけど、色んな人が競技プログラミングにハマっているのをみてatcoderを始めてみて一ヶ月が経った。未だにF問題が解けなくて実力の無さを痛感してるけど、これ、たしかにめっちゃ面白い。アルゴリズムを考える力もつくし、これからも続けようと思う。
それと同時に、やはり競プロは業務では使えないって思いが強くなった。「アプリを作るのが好きで、趣味で競プロもやってます」って人であれば面接で速攻でとると思う。問題となるのは「競プロで青色なので、プログラミングは得意です」という言い方をする人。その時点で俺なら落とす。
普段、仕事でプログラムを書いていると可読性とか保守をどうするとか、ほとんどの時間はそういうことを考えてコードを書いている。幸いそのお陰で、自分の関わるシステムは5年以上開発を続けても苦もなく保守できる状態が保たれている。しかし、atcoderに参加してみて、競プロ中は普段と全く関係のない知識を使っていることに気がついた。いや、使っているではない、使わざるを得ないのだ。
例えば、普段の開発では単体テストを必ず書くが、atcoderでは提出時間が早いほうが有利なため、簡単な問題では単体テストが完全に無駄だという思いが脳裏に浮かんだ。システムを作るときには絶対にあってはいけない発想だ。回答を通す、という目的だけがはっきりしているのも問題だ。参加中は可読性を上げるために変数名をつける、読みやすいようにリファクタリングする、などの行為がすべて無駄と感じられてしまった。回答を通すためだけに、 ad-hoc な if 文がどんどん付け足されていく。そして、回答が通った時点ですごく達成感が出てしまい、完成したコードにはまったく興味がなくなってしまった。atcoderに参加しただけで、普段システム開発をしている自分の頭がそのような発想に至ることがあるなんて全く想像していなかったので、恐ろしくもあり、競プロのマインドはシステム開発とは全く違うと痛感させられる経験だった。
こんなマインドでプログラミングを覚えた人間は、絶対にまともな開発はできない。ひどい手癖が染み込んでいる上に、そこに自信を持ってしまっているのが非常に恐ろしい。ずぶの初心者よりももっと悪いと思う。
婚活を開始してある程度の期間が経過したので、情報をまとめておく。
ネット上で一方的に存じ上げているプログラマの方が「オミカレ」に転職した。それによって「婚活パーティ」というものが存在することを知った。
ttps://party-calendar.net/
その方がすごく楽しそうに仕事をしているのを見て、自分も婚活パーティに参加してみるか、と思うようになった。自分が諦めていた結婚というものも、まだ可能性があるかもしれないと考えた。
※こういったものに限らず、同業者の人が「面白い」と言っているものは自分にとっても面白いことが多いのである。その最たる例がゲームと漫画。
数々の下調べを踏まえた結果、婚活パーティに参加してみることにした。
事前の準備として、以下のことを実施した。
いざ意を決してパーティに申し込んだところ、前日の夜中に電話で「パーティはキャンセルになった」と言われた。明言はされなかったが、どうやら女性に比べて男性が多過ぎたのだろう。ここから得た学びは「直前に申し込むと、はみ出る」ということ。
前回の学びを生かして次に申し込んだパーティでは、実際に参加することができた。開催は土曜日の昼。8対8のパーティ。全ての女性と5分間程度会話できるものだった。普段の顧客折衝の仕事と同じ要領で話を聞き、こちらのことも喋ったりして手応えを感じたものの、誰ともマッチングせず。喋り方、容姿、学歴、収入、趣味、どれがダメなのかは不明。
自分の何がダメなのかわからないまま、2回目のパーティに参加することに。土日開催とは違う参加者層を期待して、平日の夜のパーティに参加してみた。6対6だった。ここではマッチングすることができて、とても嬉しかった。しかし、この方とは2回のお食事デートの後、3回目(年末年始)を前日キャンセルされてしまった。その後、次の回の日程調整を進めるものの2ヶ月間ほど全て無理と言われてしまったため、フラれたと判断。
次は土日開催のパーティに参加。8対8。ここで、2回目のパーティでマッチングしてフラれた方と再会して気まずい雰囲気に。
それはさておき、他の人ともマッチングすることは無くて、ここから「趣味が合うこと」が重要であることを推測し始めた。そう考えると、1回のパーティに参加して会うことのできる8人程度の女性の中から趣味の合う人と出会うのは相当に難しいのではないかと考えた。
もっと多くの候補者の中からお相手を見つけるのが良いだろうと考えた結果、結婚相談所を利用することを考え始めた。最初に行き着いたのは、これまでに参加した婚活パーティの一つの主催者でもある、恐らく最大手であろう「IBJ」が運営している「日本結構相談所連盟」だった。
この連盟に加盟している、近所の結婚相談所のWebページの様子を見に行ったのだが、ここで立ちはだかったのが、学歴の壁。
観測できる限りにおいて、IBJ加盟の全ての結婚相談所にて、会員登録するには短大・高専以上の卒業証明書が必須なのだ。おそらくIBJ本体の方針なのだろう。筆者はいくら入学試験の難しい大学に入ったとは言っても中退なので、このIBJの基準では高卒扱いなのだ。幸いにして、筆者は通信制の大学に編入して経営学を学び始め、2年後には卒業見込みであるため、2年後の時点でも結婚の目処が立っていないのならば結婚相談所のお世話になろうと考えた。
女性の立場になって考えれば、卒業証明書の提出を求めるような相談所じゃないと、高いお金を払いながら安心して婚活するのは無理だというのは筋の通った話なので、IBJ系列以外の結婚相談所のことは調べることすらしなかった。また、前年である2018年の年収の実績値が400万円程度しかないというのも、所得証明を求める結婚相談所の利用を延期する理由になった。
趣味の合う人を探す効率のことを考えると、同世代の人口の多いサービスを選ぶことが大事そうである。ネット上の噂を参考にすると、その条件に最も合致しそうなのは「ペアーズ」であると判断して利用し始めた。
ttps://pairs.lv/
使ってみた最初の感想は、「Facebookのタイムラインには一切何も投稿しない」のは本当だった!ということだった。権限も求められなかった。少なくとも筆者の利用時期&利用内容においては。(余計な投稿をされることは一番恐ろしい話だ)
まず、趣味の合いそうな人を探し始めた。とは言っても、キーワード検索等をするにはさらなる課金が必要であるため、次のようなルールで行動した。
という使い方をした。一番最初にマッチングした人にメッセージを送信したところ、数分後にブロックされるという洗礼を浴びた。
次にマッチングした方とは、互いのこれまでの人生の歩み方について3週間ほどメッセージを交わし、直接お会いすることになった。最初にお会いした際に別の通信方法が確立されたため、Pairsにはアクセスしないようになる。その後、3ヶ月間ほどに渡って何度かお会いしていたものの、1ヶ月間ほど連絡が途絶えた。ふと気になって久し振りにPairsを開いてみれば、ブロックされていた。恐らく、最後に会って話題が死生観になった際に、お相手の傷つくようなエピソードが含まれていたせいじゃないかと分析しているが、確かなことは何もわからない。
という訳で進捗はゼロに。
面の皮を厚くして「同時に複数の方とメッセージを交わす」ことを気にしないことにした。言い換えれば、己の清純さよりは、運命の相手に辿り着くまでの時間の短さを優先した。そのため、とても多くの方のプロフィールを閲覧することになった。
Pairsでは、お相手の検索結果の並び順は、30分〜1時間程度ごとに変わる。恐らく、時刻を種とした乱数を使って検索結果を並べ替えているのだろう。というわけで、デフォルトでは1ページ16件の検索結果が表示されるのだが、1ページ目を参照し終わって2ページ目に移動すると、さっき1ページ目で見た人が居る、ということが頻繁に起こる。もちろん、アイコンを全て覚えるなんてことは無理なので、同じ人に何度もアクセスすることになる。
更に、女性のプロフィールで時々見かけるこの言葉「同じ人に何度も足跡をつけられてて気持ち悪い」。これが心に刺さる。では、足跡を何度もつけることの無いように、より多くのプロフィールを閲覧するにはどのようにすれば良いのだろうか? まず、足跡は残さない設定にできる。しかし、それは「気持ち悪い」と思われてしまうことへの対策にしかなっておらず、同じプロフィールを何度も閲覧してしまうことへの対策にはなっていない。
そこで筆者は、閲覧したプロフィールは必ず、いいねを押すかブロックするかのどちらかの行動を取るようにした。この方法ならば、時間計算量 O(N) でのプロフィール閲覧が可能になる。弊害としては、ブロックした方は二度と Pairs 上では見ることができないし相手からも見られない、ということが挙げられる。悲しい話ではあるが、素早く運命の相手に辿り着くには仕方のないことだ。代替案として、ブロック機能ではなく「非表示」機能の利用も考えられるが、事実上はブロックと同じであるため、ブロックを採用した。
概ね、次のような基準で操作をした。まるでパケットフィルタ(ファイアウォール)の設定のようだ。
この結果、おおよそ1ヶ月間という短い期間でもなんと7人もの方とマッチングすることができたし、3人という大勢の方と直接お会いすることができた。これは絶大な成果であることは間違い無い。日常生活では絶対に得られることの無い成果だ。課金の価値はあった。
参考にどうぞ。
こうやって見てみると、メッセージを2往復することができれば直接会うことのできる確率は高いようである。試行回数が少ないあたりには目を瞑ろう。
直接お会いすることのできた方は前述のようにおられたものの、その後が続かない形になってしまったことと、精神的にも身体的にも疲れてしまった(システム利用はどうしても夜中になるので疲弊する)ことと、最初にPairsに支払った6ヶ月間の利用権も期限を迎えそうになったため、活動休止して退会した。でも、退会直前の利用方法ならば可能性は十分にあるかなという手応えだったので、前述の通信制の大学を卒業してから出直すこととする。
定職に就いて収入さえしっかりしていれば通常の恋愛結婚の場面では問題は無いだろうが、これらのお見合い的なシステムにおいては、やはり学歴等のフィルタにかけられることは多いだろうと推測している。やはり、フィルタで振るい落とされない 強いメタデータ というのは婚活する上ではとても重要なのだろうと思う。
専攻分野の勉強の助けになると思ってプログラミングを始めたら、楽しくなっていつのまにかエンジニアになることになっていた。営業志望だったのに
Twitterを開くと化け物みたいなエンジニアがたくさんいた。インターンで結果を残す人、大会で優勝する人、何もせずとも内定を何社も得る人、個人でサービスを作ってお金を稼ぐ人、競技プログラミングで高い点数を叩き出す人
文系出身の自分が果たして彼らに勝てるのか。Twitterを開くたびに羨望と焦燥感と嫉妬がない交ぜになった感情が込み上げてきて、自分の胸を刺す。
なんでこんな道を選んだのか。プログラミングなんてやらなかったら、彼らと同じ戦場に立たなければ、こんな辛い思いはしなかったのに
辛い。キツイ。自分には何もできない。やめればいいのにって毎日思ってる
でも気づいたらパソコンを開いてコードを書いている。辛い辛いと言いながら暇さえあれば何を作ろうか考えている
悔しいけど、やっぱり楽しいんだなって
以下は15年くらい経験のあるWebエンジニアとしての個人的意見
ただし、GitHubプロフィール/WebアプリのURLについては、就職活動のための個人情報が含まれている可能性があること、宣伝すべきでないことから、ここで公開をすることはありません。
仕方がないけど成果物を見てみないとレベル感がわからないからアドバイスしにくいなと。
だとしても応募してよいかと。求人サイト経由より直接応募の方が目にとまりやすいかも。最近のITベンチャーなら大抵は現場のエンジニアが直接面接することが多いし、そういう会社であれば
GitHubで、Issueを立てたりPull Request(数行程度)を送ってmergeされたりした経験が合計で10回
この辺のリンクを貼っておけば見てくれるかもしれないし、内容によってはちゃんと評価してくれるかと
面接官の誰一人にもモダンなJavaScriptといったものを理解してもらえなかったのが辛かった
あとはJSが好きならそれ系の勉強会とかでLTするなりすれば名前売れるし、応募時にもスライドのURLが成果として使えるね。
ここでは社名とか書けないけどもしうちに応募してきたとしたら門前払いはないかな
もし時間が有り余ってるならAtCoderとかで競技プログラミングとかやってみたりするのもいいかもね。そういうのも実務経験以外での実力を証明する手段の一つかと。
自分はITについては齧る程度しか知識が無い。のを断っておく。
あれ?って違和感があった。
あれ?なんでこの人たちこんな大量に働いてるんだ?
ITって、ウェブサービスとかかな?ソシャゲ?それで人海戦術ってこと?
カタカタカタっ!カッターン!って問題を解くような競技プログラミングとか、そういうんじゃなくて。
社内の環境を作るために、サーバーの保守?(最近はAWSとか?)(出先で勤務みたいな?なんだっけ、客先常駐みたいなやつ?)
なんというか、えっと。
ITって、複雑な問題や大量の問題を、能率的に解決するわけで。
なんで、ガタガタガタガタ~って人海戦術みたいに、IT技術者が何十万人も必要ってことになるんだろう。
ということはですね。
その上位互換の上位互換というか。工業やサービス業のさらに上の効率化の粋たる、IT系の人たちじゃないわけですか。
そのITの人たちが、なんでそんな大量に人がいないと成立しないことになってるんだろう。と不思議になったわけです。
しかも、ward PRESSとかですっけ?jqueryデスッケ?テンソルフローですっけ???
ドンドンと技術がコモディティー化し、ドンドン簡単に凄い実装ができるようになってるように見えるわけです。
吉里吉里っていう謎のシステムで昔、簡単なゲームを作ったことがあるんですが。その時も凄いなーって思ったんですが。
今や、Unityとかで2Dとか3D当たり前じゃないですか。その進化ヤバイなって。思うわけです。
昔、ちょっとだけ、HTMLとJAVA SCRIPTと、fire worksでサイトを作ってみたことがあります、HTTTP(コメントの指摘で、FTTTPの間違いだった)とか謎のソフトで試行錯誤しながら。
今じゃ、word pressとかで、xServerあたりに、ポンじゃないですか。凄いなーと。
ラズベリーパイで電子工作してみたんですが、腰抜けました。アッサリwebOPIとかでIOTできて、機械学習もサックリできちゃう。昔、半田ごてでシコシコ回路考えていたころはなんだったのかと。
え?AIで人間の仕事を減らせるって言う話が出てるのに、IT系って人海戦術に走らないと厳しいんですか??
新しい技術がでて、これまでの100倍の仕事量とかができるようになっても、全体としては需要が増えまくって追いつかないってことですか???
なんか、一向に農業から国民が解放されない時代を見ているような、そういう不思議な気分ですね。
悪気はないんですが、嫌な書き方に聞こえちゃうかもしれないけど。
<追記>
コメントたくさんありがとうございます。
釣りではなく、本当にITとまったく関係ないしがない医者です。
医者は医者不足の原因が医者の偏在だと答えが出てて、IT化、IOT化が追い付いてないのは規制が激しいからと理解しています。(麻酔科やICUなんかはゴリゴリに効率化すすんでますが。)
でも、IT社会はIT作って技術もあるんだから、ドンドン効率化に効率化を重ねて、農業みたいに、全人口の数%とかで行けるようにならないものかなーと不思議で書きました。
子供の頃に、「農業は、緑の革命で一気に労働人口を削減できました」みたいなのを勉強した時に、「科学ってすげえ!!!!」と思って感動したので、ITでそうなるかなーと思ってもそうならないので、かなり疑問だったのでこのような増田を書きました。悪気は無かったですが、煽りに聞こえたらごめんちゃい。
大文字小文字とかも、特に普段使っていないので、適当なのは勘弁。本当に門外漢だから。
※追記
続き書きました
NTTの退職エントリが流行っているようなのでそもそも入れなかった人の話でも書きます。
といっても1X年前の話です。
リーマンショック直前の超売り手市場に新卒で4月初頭というゴールデンタイムにNTT系列何社も受けて全滅したアホ。
趣味はプログラミング。ICPFCとか参加したり小さいツールを書いたりしてた。
大学の専攻は数学。日本ではやたら偏差値の高いらしいT大学に現役で入ってそのまま修士卒。
NTT株、NTTD、NTTS、NTTH、NTTCなど。略称がどこを指すかは適当に考えてね。
全部落ちてます。4月はこのせいでお祈りされまくり、結局決まったのはNTT以外で夏ごろで。
電話がとても好きだった。高校ぐらいのときはモデムから高速リダイヤルをかけるアプリとか、
公衆電話の番号を探すツールとかを書いていた。PHS、携帯が普及しだしたころから
そもそも仕様があまり手に入らなかったので興味を持てなくなった。113はよくお世話になった。
就活のときそのへんのことを思い出したのと、プログラミングが好きだったのでNTTなら
なにかできるんじゃないだろうかと思いたくさん受けた。
当時はプログラマというものの地位がものすごく低い時代だったと思う。
そんな時代に「プログラミングやりたいです。ICPFCとかめっちゃ楽しいです。」という割に
基本情報すらとっておらず、コミュ力も非常に低い上に専攻が純粋数学とか落ちて然るべき。
更にNTTがどういう人材を欲しているのかという企業研究もろくにしていなかったため、
自分が御社にどういう貢献ができるのかを説明できず、ただやりたいことだけを喋っていたた。
また純粋数学は研究内容の説明がしにくいというのはわかりきった話だったので、それは対策するべきだった。
3分で研究内容を話すというプレゼン。SPIがよかったらしく1次面接は免除という連絡をいただき、
喜んで2次面接に望んだところ純粋数学の研究発表で、「この研究の社会的意義はなにか?」という質問をされ無事死亡。
社名にソフトウェアなんてついてるぐらいだからプログラミングがガッツリできるんだろうと思い、
某CPUの命令セットの素晴らしさとその効率的なエミュレータ実装について熱く話す。
面接官の「そんなことにしか興味ないんですか?」という返事は今でも覚えている。
グループディスカッションで落ちる。コミュ力とか見られてたきがするが審査員は見てただけなので詳細は不明。
面接前に社員と雑談する謎の時間があり、「T大の人、ぜひ来てほしいんですけどNTTDとかNTT株に
取られちゃって蹴られてしまうんですよね…」という話を聞く。その時点でDには落ちていたので苦笑いして面接へ。
当時盛り上がっていたNGN関係の話で面接官と盛り上がるも俺が考える最強の通信スタックの実装法を
NTT系列はだめだったので結局某SIerに就職。年収は300万弱から5年ぐらい在籍しても500万弱ぐらいだった。
最初は流石に年収低すぎということで某Rエージェントで転職活動をするもリーマンショック真っ最中で
在籍も1年とかだったため「君なにしにきたの?」オーラがすごかった。その時点での転職は失敗。
SIerによくある通り仕事でコードというものはほとんど書かず、Excel、Wordがメインであった。
ただ仕事自体は暇だったので、合間にひたすらProject Eulerをやっていた。
今はお仕事が変わり、AI関係のソフトウェアエンジニアみたいなお仕事をしている。
相変わらず面接ではコード書きたいですとかAtCoderとかの競技プログラミングの話しかしていないのだけど、
10年前に比べると反応がとてもよくなったと感じる。年収も都内に何の不自由もなく暮らせるぐらいまでは
もらえるようになった。プログラマの地位は相当向上しているのではないだろうか。
個人的にはAtCoderやTopCoderで黄~青ぐらいのプログラマの社会的地位が10年で年収400万から1000万ぐらいまで上がった感じがある。
今は1000万!と言いたいところですが、うまい棒5万本分ほど足りません。一本行けるように今後も精進します。
ただ今都内はソフトウェアエンジニアバブルといってもよく、かなり年収水準が上がっている気がします。
ですので多少は夢を持ってもよいのかなと。
キリの人も入社時は優秀だったんだと思います。あともし採用されるポテンシャルがあったとしても
ちゃんと業界研究しないのはだめかと。いろいろな意味で私はだめでしたね。
1990年代はまだ固定電話の古い交換器や緑・ピンク電話などが残ってた時代で、電話の面白い挙動が
NIFTY-SERVEのフォーラム等で盛り上がっていた時代でした。そのため当時は同じような人が結構いました。
うけてません。NTTの社風に合わないと全滅する可能性もあった(そして実際そうなった)ということで、
最近のNTTDのOSS関係へのコミットは凄まじいですね。あの部隊は尊敬しています。
あのへんのコミッタ方たちはどういうルートで採用されたんでしょうね?
大学時代はXSSとバイナリ解析に興味があったはずなのですが、就活ではその道は選びませんでした。
忘れていたというのもあるのですが、その数年前に日本のセキュリティ系の団体とちょっともめてしまった
というのがあるのかもしれません。日本のセキュリティ業界はちょっと前までアングラっぽい雰囲気が
漂っていました(世界的にそうだっただけな感じもします)が、そんな方たちも某FF○Iとか某NAとか
ホワイトハッカー側で大きく活躍されてるようで、もしセキュリティ業界に身をおいていたら
そういう変化も楽しめたのかなぁとは思います。
あ、徳丸さんのブログはいつも楽しく拝見させていただいています。
あの某NAのLuminさんでしょうか。当時はとても落ち込みましたが、今では楽しくやれているので
趣味プログラマーだけど絶対pythonかそれに類するもの(Rubyとかもいいかもしれない,あんまよく知らんけどdfndfn)
プログラミングをやり始めた当初はCから教えられた。競技プログラミングとかもC,C++しか昔使えなかった。
今は色んな言語に便利なフレームワークがあるし、増田も職業でやってるんでなければpythonオススメ。てか当時もっとpython勢いあったらpythonから入ってただろうな。
やってくうちにフロントエンドとか、もっと計算機理論アルゴリズムとか自分のしたい方向性とか興味が出てくるからそれに従って楽しめばいいと思う。
GUIだってpythonだったらpyGobjectとかで簡単に実現できる。流行りのdeeplearningも割と敷居は低い。webframeworkはdjangoがある。
リバースエンジニアリングとかの本もあるし。
自分はCから入ったけど、結局CTF系の領域(脆弱性を探すゲーム)か配布されているソースコードのコンパイル関連(gentooのemergeとか)とかしか使わない。