はてなキーワード: CSとは
CS で習う計算複雑性って実用からは少し離れた抽象的なもので、現実的には一兆年かかるが多項式アルゴリズムが存在するので云々〜みたいな、わりと天文学的な話がされてる。
計算量のオーダー見積もりとかは初歩の初歩の初歩というか、それこそ業務をしばらくやってれば身につく感覚で、それをもってコンピュータ・サイエンスが必要!というのは短絡的ではないかなあ。
まぁ、下っ端プログラマには要らないだろうけど、いわゆるシステムエンジニアとかアーキテクトとか言われるレベルの仕事するには、なるべく知っとかないといけないよね。
オレの場合は、大学はかろうじて理系の一角だったけど、学問的にコンピュータサイエンスを学んだことはなくて、某IT会社でなかば業務上の必要に迫られ、なかば趣味的な興味本位もありで、ちょっとずつ勉強した。
で、もう20年くらい前だし、すでに廃止されてる(と思う)ので、守秘義務違反とかの面倒なことにならなそうだと想定してぶっちゃけると、大手携帯会社のショップで各店舗独自のプロモーション打ったりするためのWebシステムの開発に関わったことがある。
顧客の(および自分とこの)エライ人なんかに、システムの設計の根拠(この方式が最善なのか?もっと安く早くやれる方法はないのか?などなど)を常に問いかけられ、説明説得しなきゃならない。そこでコンピュータサイエンスに基づいて理路整然と話をすると、ちゃんと信頼してもらえるし、納得してカネ払ってもらえるw
そこで使ったのが、以下のような各種理論だ:
などなど... 自分史上最高に残業させられたこの仕事やってた年の年収は、900万円台おしくも1000万には届かなかったねぇw
--追記--
コンピュータサイエンスがらみの思い出でもう一個面白い(とオレが思う)ネタがあるので、ついでに書いとこうw
これは、上で書いた携帯会社のシステムよりだいぶ前のことになるが、とあるグループウェアの開発に関わってたとき、メールをFAXに向けて出力するドライバを書いたことがある。昔のことなのでオープンソースもあんまり普及してないし、タダでお手軽に使えるライブラリが見つからなかったので、「車輪の再発明」っぽいけど自分でハフマン符号化によるデータ圧縮のアルゴリズムを勉強して作ったのだ。
Win32のAPIとか呼び出して、ビットマップにテキストを描画させたとこから、ドットをちまちま数えて、白のドットがいくつ続いてたらこのコード、黒がいくつ続いてたらあのコード...って可変長のビットパターンをつなぎ合わせてファイルに書き出す...みたいな。これが理論通りにうまいこと動作して、FAXから文書が出てきた時はとっても楽しかったw
CSってそんな大仰なものじゃなくて、ちょっと時間を作れば誰にでも理解できる知識体系だよ。
計算量とかアルゴリズムとかの話だけじゃなくて、スレッドとプロセスとか、ヒープとスタックとか、そういう類の話だよ。
(通信路符号化とか圧縮符号化とかの情報理論はCSに含まないよ)
なので増田はすでにCSの素養はある程度身に着けていると思う。
高等数学のような、100人に1人しか理解できないような、難解な理論体系ではないのよ。
ただ、用語の響きが難しいように聞こえるだけ。
難しく聞こえるので「俺には絶対に理解できない」って思ってしまうけど、コンパイルのときにコードを置き換えているだけでしかない。
他にも、オブジェクト指向界隈の「継承より移譲」とかも、中身は拍子抜けするほどの簡単なアイデアである。
CSもそれと同じ。
んー。
書いたコードの計算量のオーダーをつねに意識するってのは,十分にコンピューター・サイエンスの知識の応用だと思うけどな。
CPU時間でO(n log n),メモリ量でO(n)を超えるオーダーの処理を書いてしまったときには「やばい」と本能が訴えかけてきて,パラメーターチェックを厳密にするなり,別のアルゴリズムを探すなりして欲しい。けどCSを全くやっておらず,ランダウの記法を習ってない人間には,何を言ってるかすらわからないでしょ?
CSなんかまったくやってない何なら政経から業界に入ったプログラマー()だけど
20/30/50しかユーザーインターフェースからは入力できなくても内部のテストで「クソ小さい数字」「正常な数字と異常な数字の境目」「正常な数字」「異常な数字」「クソデカい数字」くらいはテストするもんだってのは知ってるし、なんなら正常異常関係なくランダムで作った数字を延々と流し込み続けてすべて正しく評価されるかのテストとかもしたりするぞ
仕事でCS(というか数学とか)使ってる派だけど、年収は1100万円くらいです…日本企業だからね…。
今日も現場が勘と経験で作り上げてにっちもさっちもいかなくなったスパゲッティロジックを数理的に正しい形に整理して性能改善する仕事をやってるお。
元増田じゃないけど、まともに回答できてるブクマコメント少なくて、はぁ〜って感じ
「必要」の意味わかってんのか。作業を回すために絶対に不可欠って意味だぞ
そりゃプログラマーの教養としてあったら解決できる問題も増えるし安全だし最高だけど、人間のリソースは有限だから取捨選択する必要があるわけで
ちゃんと「必要」と主張するなら「必要」なことを証明するべきっしょ
無理だろ、業務の種類によってぜんぜん変わるからな。やっぱりCSは必要とは限らんし、必要と限らないことは「必要」じゃないんだよ
トラブルさえなければ〜。みたいなのはそのとおりだしもっと言うなら、普通に開発してたらライブラリでカバーできない処理とかは全然出てくるし、そう言うタイミングで大抵の人はCSっぽいこと勉強して対応するんじゃないのか?
それって予めCS必要!必要!って声高に叫んでオベンキョするよりも、業務の実践で必要になるたびに習得するんがいいんじゃないのか
CS的なことって全然「不要!」とは思わんし、あったらいいことだけど「必要」って言い始めると嘘じゃん。なくてもある程度のプログラミングはできるし、そのある程度のプログラミングの範囲内で生活が成り立つなら、そこにとどまるのは戦略のうちだよ
CSないとプログラミングできないみたいなこと言ってると、誰も最初の一歩でプログラミングやろうってならんわ
おれもCSやったほうがいいと思うけど、必要って言い始めたら引く。必要ではない。なるべくあったほうが絶対にいい、とは言い切れるけど。「必要」とか言葉を雑に使ってしまうほうがプログラミングのことわかってない奴だろう
この手の話でよく槍玉に上がるのが三角関数だけど、自分の場合はそのレベルになると呼吸どころか心臓の拍動くらい自然に使ってるので最早いつ使ってるとか聞かれても分からないんだよな。例えばベクトルの内積とった時点で使ってることになるわけだが、そんなの無数にやってていつやったか意識できない。CSも使ってる人にとっては似たようなものなんだよね。
メニューからは5/10/20からしか選べないからだよ。なのでテストも20までしかしてない。URLを手で書き換えるなんてのは,普通はテストシナリオに入らないでしょ?
いいたいのは,仕様書を満たしてテストを通るだけのコードはCSを知らないでもかける。でも,脆弱性を作り込まないようにするには,CSの知識がいる,ということ。
日本で一般的なWEBサービス作る程度であれば実務的には必要ない。
CS持っていたほうが選択肢が広がるだろうし、持っていない自分としては社会人が行ける大学に行って勉強しようと検討した。
ある業務用Webシステムは検索結果の表示件数を5/10/20件から選べるようになっててて,URLのパラメーターで「?n=20」とかやって送ってた。メニューからは三つの値しか選べないが手で書き換えれば100とか200とか選べる穴が空いてた。
で,よりによってメモリ使用量がO(n^2)になるコードを書いていやがった。n=500でOutOfMemoryError。リモートから面白いようにサービスを落とせた。
CSを知ってるやつなら,コードを書いた瞬間から「これnの上限チェック入れないとまずいな」とわかるんだよ。というか,普通にこのコードはまずいと考えてアルゴリズムをなおして,O(1)でDBレコード全件持ってきても落ちないコードにできてたはず。
俺は大学が電気専攻だったので電気電子の知識だけ身につけて組込みプログラマーになった人間だけどやっぱりコンピュータサイエンスの勉強しておけばよかったかな、とも思ってるよ
いくつか反論したいポイントはあるが、多分ほとんど他の人が突っ込むだろうから
俺はとりあえずオーダーについての勘違いについて指摘しておく
厳密には間違い。大半のケースではそれで良いが、XX.sortを呼んでもその先でしっかりオーダー(多くの場合はnLog(n))が掛かっているため、100万だか1億だかの膨大な値を扱う場合は無視できない影響が出てくる
そうした場合、データの質によっては、別ライブラリのYY.sortを使ったほうが良いということがありえる。
オーダーはデータの規模に応じて処理時間が増えていくか、という割合なので
リリース直後は3秒と2.8秒の違いしかなくても、登録ユーザーやデータが増えてくると5分と3.0秒という具合にどんどん差がつくものだ
そうなってからサービス停止してパッチを当てるよりは、最初からオーダーを意識したコーディングをしたほうが良い
あとAI開発には必要って自分で言ってるじゃんとか経験則でも必要ならそれを言語化して周知するだけで財産だよねとかあるけど眠いのでこのへんで。
最新のフレームワークを追うのは確かにコンピュータサイエンス(CS)を知るよりずっと大事かもしれないが、CSが無価値ということは決してない
データサイエンティストとデータエンジニアとデータアナリストとマーケティング職の違いがわからない顧客、
そして、なーんのバックグラウンド無くてもOKみたいな求人もある世の中だが、
まぁ一応、CSは持ってるよくらいはあっていい
アメリカですらこれらの関連職に高等教育を受けていない人も就いているが、
フツーに考えて高卒よりはハッタリが効いて自由に動き易くなるし、
リモートワークで就業するのでは無く、国外へ単身で出向いて現地就業するなら、
やっぱ、CSは持ってるよくらいはあっていい