はてなキーワード: コンピュータサイエンスとは
なり方、スクールの是非や費用、未経験エンジニアの年収、将来性とかばっかりググってない?
コード書いてみた?
今からググって、標準のメモ帳とかテキストエディタ使って、コーディング初体験するまで五分もかからないよ?
自分語りになるが俺は1970年に生まれ、中学時代にジャンクショップを巡ってMSXパソコンを組み立て、雑誌の手続き型言語を写経しては書き換え写経しては書き換え、ゲームを作り自作基盤でカートリッジ化しては界隈で知り合ったオタクと交換し合っていた。その後MS-DOS搭載のIBM-PCを手に入れてからも、まずは動かしてみることから始まった。電通大の講義で学んだことより、図書館の論文やオタク仲間とのやり取りで学んだことの方が大きい。
とりあえずコーディングしてみようよ。書き換えてみようよ。電卓でも作ってみようよ。シンプルな電卓ができたら機能を追加してみれば良いし、サンプルコードを色々書き換えてみれば良い。プログラマやエンジニアへの一歩目はスクールに対する評価や是非を見ることじゃない。
別に職歴の有無、大卒かどうか、文系理系かどうか、専攻が情報系だったかなんて関係ない。コンピュータサイエンス至上主義者が現れたらジョン・カーマックの名前を出してやれ。間違ってもスティーブ・ジョブズの名前なんて出すなよ。計算機科学の素養なんて歩き始めた時点ではない方が良かったりする。手を動かしてコーディングやエンジニアリングに取り組んでれば、その内嫌でも複雑性やアルゴリズムなど計算理論に関する書籍を漁ることになるはず。
さあ!コードを書け!
コンピュータサイエンス、アルゴリズムにしろOSにしろ「作って証明」的な側面があるから発展しやすいんだろうな
OSSで代表されるように、技術はある程度オープンなのでそれも発展を後押ししてる
どっかの老害が「IT系は声がデカイ!」とか言ってるの見たけど、むしろ老害こそOSS文化を学んでも良いのではと思う
老害がどっかのマネージャーなのかしらんけど「コンテナ!」「Python!」とか表面的な言葉だけピックアップして腹立ててるんじゃどうしようもねぇよな
老害はITを価値のない仕事だと思い込んでるらしいが、技術発展がマクロ的に見て生産性を上げるってことは統計出てる (コブ・ダグラス型生産関数ってモデルがあることぐらいは老害も知ってるだろうけど、技術発展などに依存する項目が関数にはある)
http://www2.toyo.ac.jp/~mihira/keizaitoukei2014/08_production/08_production_slides.pdf
技術者は意味もなくコンテナを使ってるのではない可能性が高い。
老害の部下は、おそらくAWSとかの兼ね合いでマイクロサービスを運用するのが良いと判断した可能性があるし、嫌いな「声のデカさ」でマイクロサービスってこんな利点があるんですよと世界中で共有してるので利点は把握してる。
https://stackoverflow.com/questions/34903605/microservices-what-are-pros-and-cons
老害は基本的に政治屋だから技術者の会話を見てデタラメに言葉をチョイスしているだけに見えるのかもしれないね。
技術者は老害が思っているよりもちゃんと意味のある言葉の使い方をしてるよ。
あるいは生産性向上そのものも無意味だと認めて、世の中の大部分の仕事が無意味だと悟って老害の会社を畳んでも良いんじゃないかな。
経済学者にあこがれて経済学部目指したのなら、いっそ博士まで行って博士号(Ph. D.)取得するのも一つの道じゃないかと。
その話と、現実的な就職のための話がイマイチ繋がらない感じはするけども。
憧れは憧れで、GAFAみたいな巨大テック企業のエンジニアになりたいって言うのだったら、
コンピュータサイエンス(情報科学)系の学部入り直す方がよさげ。特にGoogleのエンジニア採用はコンピュータサイエンスやってないとほぼ即死するような計算量やらの問題が出て来まくるんで、やっぱり情報科学系出身のエンジニアがめっちゃ多いし。
ちなみに、数学が得意であるが、高校数学が得意レベルである、つまり計算が得意レベルだったら、経済学者とかには向いてないとは思う。大学数学以降をある程度まともにやろうと思うと集合論ベースの現代数学の発想に頭を切り替えないといけないし、経済学で使う「数学」もある程度大学数学の素養がないときつい。
コンピュータサイエンスなんてろくに勉強したこともない30歳弱者男性の僕ですが
理由は、いい加減な仕事をするプログラマーに「もうちょい自分の書いたプログラムに責任と当事者意識を持って考えを巡らせようよ」とオブラートに包んで伝えたいときに「コンピュータサイエンス勉強しようね・・・」と言えるから。
元増田にはコンピュータサイエンスは要らない。地頭でなんとかできるから。元増田が法務部だったとしてもロースクールの重要性を感じないだろう。
いや、正確には私が同僚に「コンピュータサイエンス勉強しようね・・・(担当したプログラムはきちんと設計・実装・説明・修正対応できるようになってください)」と言い続けるために、
https://anond.hatelabo.jp/20221130083458
コンピュータサイエンスの知識がないならば
コンピュータサイエンスの知識があるならば
なのでコンピュータサイエンスの知識があって O(1) なコードを書けたとしてもパラメータのチェックが漏れててやはり AP サーバのメモリを使いすぎる、というやらかしをする自信がある。
コンピュータサイエンスという言葉が示す知識範囲はどれかという話と、それをどの程度の深さまで学習すべきかという話が混ざっているので議論は収束しません
無粋なツッコミをしとくと
この辺はいわゆるコンピュータサイエンスの範疇じゃないよね。特に4つ目。
コンパイラを作るための理論とかはコンピュータサイエンスの範疇と言っていいだろうけど
まぁ、下っ端プログラマには要らないだろうけど、いわゆるシステムエンジニアとかアーキテクトとか言われるレベルの仕事するには、なるべく知っとかないといけないよね。
オレの場合は、大学はかろうじて理系の一角だったけど、学問的にコンピュータサイエンスを学んだことはなくて、某IT会社でなかば業務上の必要に迫られ、なかば趣味的な興味本位もありで、ちょっとずつ勉強した。
で、もう20年くらい前だし、すでに廃止されてる(と思う)ので、守秘義務違反とかの面倒なことにならなそうだと想定してぶっちゃけると、大手携帯会社のショップで各店舗独自のプロモーション打ったりするためのWebシステムの開発に関わったことがある。
顧客の(および自分とこの)エライ人なんかに、システムの設計の根拠(この方式が最善なのか?もっと安く早くやれる方法はないのか?などなど)を常に問いかけられ、説明説得しなきゃならない。そこでコンピュータサイエンスに基づいて理路整然と話をすると、ちゃんと信頼してもらえるし、納得してカネ払ってもらえるw
そこで使ったのが、以下のような各種理論だ:
などなど... 自分史上最高に残業させられたこの仕事やってた年の年収は、900万円台おしくも1000万には届かなかったねぇw
--追記--
コンピュータサイエンスがらみの思い出でもう一個面白い(とオレが思う)ネタがあるので、ついでに書いとこうw
これは、上で書いた携帯会社のシステムよりだいぶ前のことになるが、とあるグループウェアの開発に関わってたとき、メールをFAXに向けて出力するドライバを書いたことがある。昔のことなのでオープンソースもあんまり普及してないし、タダでお手軽に使えるライブラリが見つからなかったので、「車輪の再発明」っぽいけど自分でハフマン符号化によるデータ圧縮のアルゴリズムを勉強して作ったのだ。
Win32のAPIとか呼び出して、ビットマップにテキストを描画させたとこから、ドットをちまちま数えて、白のドットがいくつ続いてたらこのコード、黒がいくつ続いてたらあのコード...って可変長のビットパターンをつなぎ合わせてファイルに書き出す...みたいな。これが理論通りにうまいこと動作して、FAXから文書が出てきた時はとっても楽しかったw
正直気持ちはわかる。
個人の実感としては、コンピュータサイエンスの定義と関わるシステムの要件によるとしかいえないかな。
・OSの仕組み
・DBの仕組み
・分散システムの理論(合意形成とかサービスディスカバリとかレプリケーションとか障害リカバリとか)
・CPUの仕組み
・並行プログラミング
toC向けのスタートアップフェーズのプロダクトとかだと正直なくても回る実感はあるし、実際テキトーに作られてるけどなんとか動いてるシステムはかなり見てきた。
でもある程度成熟してユーザ数もトラフィックもかなりあるみたいな状況だとこの辺の知識なしではお話にならない。
そういったプロダクトだとセキュリティ要件やスケール要件がかなり厳しくなってきて、その観点なしに開発運用できないから。
正直ただ作るだけだったらライブラリとフレームワークの使い方さえ覚えておけばなんとかなるけど、
大規模になればなるほど、効率的に作らないとコストがかかりすぎて大変だし、最悪動かない。
で、効率的に作るためにはこのあたりの知識はどうしても必要になるはず。
データ量的にO(n)とO(n^2)ではそれはそれは段違いになる。
コンピュータサイエンスをやれば、こんなことも分かる
俺は大学が電気専攻だったので電気電子の知識だけ身につけて組込みプログラマーになった人間だけどやっぱりコンピュータサイエンスの勉強しておけばよかったかな、とも思ってるよ
いくつか反論したいポイントはあるが、多分ほとんど他の人が突っ込むだろうから
俺はとりあえずオーダーについての勘違いについて指摘しておく
厳密には間違い。大半のケースではそれで良いが、XX.sortを呼んでもその先でしっかりオーダー(多くの場合はnLog(n))が掛かっているため、100万だか1億だかの膨大な値を扱う場合は無視できない影響が出てくる
そうした場合、データの質によっては、別ライブラリのYY.sortを使ったほうが良いということがありえる。
オーダーはデータの規模に応じて処理時間が増えていくか、という割合なので
リリース直後は3秒と2.8秒の違いしかなくても、登録ユーザーやデータが増えてくると5分と3.0秒という具合にどんどん差がつくものだ
そうなってからサービス停止してパッチを当てるよりは、最初からオーダーを意識したコーディングをしたほうが良い
あとAI開発には必要って自分で言ってるじゃんとか経験則でも必要ならそれを言語化して周知するだけで財産だよねとかあるけど眠いのでこのへんで。
最新のフレームワークを追うのは確かにコンピュータサイエンス(CS)を知るよりずっと大事かもしれないが、CSが無価値ということは決してない
それはお前が小規模の開発しかしてないからだよ。コンピュータサイエンスの素養が効いてくるのは大規模開発。ユーザーが何百万人、何億人といるようなサービスだと少しのアルゴリズムの効率の差で大きなビジネスインパクトがある。逆に言えばお前らみたいなしょぼいプログラマにはコンピュータサイエンスが必要になる機会なんてものはほとんどないということだね。
モロにコンピュータサイエンスの知識が求められる仕事自体そんなにナイ気がする
言語系そのものの開発、という非常に珍しい案件に(下っ端で)関わったことはあるが
「コンピュータサイエンスをカジってないとそもそも理解不能だったろうな」というのはその案件だけだったし