
コンピューターサイエンスのカリキュラムに不足しているものは? 198
ストーリー by headless
補完 部門より
補完 部門より
本家/.「Ask Slashdot: "Real" Computer Scientists vs. Modern Curriculum?」より
職場で昨日、あるプログラマーが最近のコンピューターサイエンス学部卒業生の品質について話しているのを聞いた。彼の意見では、主にJavaを学習している学生はCを使用するときに必要なメモリー管理が身についていないので、特にひどいという。IT業界での経験を10年積んだ後でコンピューターサイエンスの学位を取得しようとしている身としては、スラッシュドットの皆さんにお尋ねしたい。これはコンピューターサイエンスの新卒者に共通する問題なのだろうか。そうだとすれば、Java中心の学習を補完するには何をすればよいのだろうか。
そもそも計算機の基礎中の基礎は機械語 (スコア:5, 興味深い)
計算機がどのように動いているのか、データと命令とか、値としての 20h と スペース文字の区別がつかないとか、そういう事をまずは一旦理解してから高級言語へと移行するべきだと思うんだ。別に長大なプログラムをアセンブラで組めるようになれ、という意味じゃなく。
最初から高級言語だと、その高級言語が何に依存しているのか判らないんで、「床を踏み抜く」的な間違いをしでかしてしまう。
fjの教祖様
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:4, すばらしい洞察)
どんな未来に最適化するかで、機械語の教育の必要性は変わっていきそうですね。
直接使用する業種があれば言うに及ばずですが、ほとんどの場合は「必要ない」のが現状。
機械語は、必要な人はハード制御、コンパイラ、仮想化分野、ハイパフォーマンス分野あたりで、
それ以外は、一部のコーダーがデバッグの為に知っておいたほうが良い程度。
つまり、大量雇用される末端のコーダーには不要で、そのためにわざわざ時間を割くのか……という話で、
コンパイラだけ見ても、Microsoft、Intelなどほぼ米国に主要な技術が集中している以上は、
日本は作る側というより、それに乗っかる側というのがトレンドなのも、必要性を感じさせない一因でしょう。
個人的には、歴史では「137億年の物語」みたいのが流行っていますが、
チューリングマシンから機械語へのつながり、TRONプロジェクトや、
CPU周りの黒歴史、OSSがビジネスに取り入れられた経緯とか、
まとめて講義できないものかなと。
歴史とか、なぜそれ(例えば機械語)が必要になったのか?
といった理念が大事に思い始めているのは年寄りになった証拠なのだろうか。
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:4, 参考になる)
8086が世に出たころ、医学生だった爺はバイトでPC作ってました。当時は
当時の私は、「出来そこないのハードウェアを蘇らせるのがプログラマの仕事」と信じていました。
しかし、386が普及してから、ハードウェアを扱うことはほとんどなくなりました。 (システムプログラマは別として)アプリケーションプログラマはハードウェアの呪縛から解放された訳です。 しかし、今でもコンピュータはハードウェア基盤の上に成り立っているんですよね。
本題に戻ります。私 javaは大嫌いです(と言いつつ、使ってますが・・・)。
javaが目指したもの(ハードウェア非依存)は間違っていないけど、その対価は小さくない。
頭の固い爺は「PCは道具」だと信じて疑いません。 時間がたつと画面が変わるUIは、とても不愉快(UXなんて糞くらえ。余計なことするな)。 今どきのプログラマは労力をつぎこむ先が間違っているようにも感じています。
386以降(ARM含む)のプログラミングは、「ハードエウェアは壁(OS)の向こう」です。 問題はC信仰か java信仰かじゃなく、ハードウェア依存か処理系依存か?じゃないですか?。 ハードウェア依存の時代は、泥くさかったけど、今より夢があった。
以上、爺のたわごと。時計の針は元に戻せない。今でもOSハック(sys call改造)すれば穴開けれるけど・・・。
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:3)
1回で覚えるようなものではないので、繰り替えして欲しいと思います。
最初に、1つの講義でハード・機械語から高級言語まで実習を交えて教えて、
そのあとでパラレルで良いのでそれぞれを実習を交えて教えて行って欲しいと思います。
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:3)
自分が問題だと思っている点としては、
C以外になかなか素直にハードまで降りていける高級言語が無いところです。
まず、インタプリタ言語は総てNG。
なぜなら、できたプログラムをCPUが実際にどう実行するか、つまり
CPUに投げられる命令列を見ることができないから。
次に、コンパイルされる言語でも、Javaなどバイトコードベースのものは同様の理由でNG.
第三に、haskellなどネイディブコードコンパイラ付き言語でも、出来上がったコードが読みにくければNG.
これに関しては自信がありませんが、遅延評価のためのコードや型判定ロジックなど(コンパイル時に消える)によって
Cやアセンブリコードの背景とは相容れない意味不明な命令列が出来上がると予想しています。
噂では、コンパイラの時点でフォンノイマン型とはべつの計算機モデルを使っているとか?聞きました。
よってCommon Lisp を推します。
CL-USER> (defun factorial (n) (if (zerop n) 1 (* n (factorial (1- n)))))
FACTORIAL
CL-USER> (disassemble #'factorial)
; disassembly for FACTORIAL
; Size: 101 bytes. Origin: #x1007E081D9
; 1D9: 488B55F8 MOV RDX, [RBP-8] ; no-arg-parsing entry point
; 1DD: 31FF XOR EDI, EDI
; 1DF: B929040020 MOV ECX, 536871977 ; GENERIC-=
; 1E4: FFD1 CALL RCX
; 1E6: 744A JEQ L1
; 1E8: 488B55F8 MOV RDX, [RBP-8]
; 1EC: BF02000000 MOV EDI, 2
; 1F1: 41BB05020020 MOV R11D, 536871429 ; GENERIC--
; 1F7: 41FFD3 CALL R11
; 1FA: 488D5C24F0 LEA RBX, [RSP-16]
; 1FF: 4883EC18 SUB RSP, 24
; 203: 488B0576FFFFFF MOV RAX, [RIP-138] ; #
; 20A: B902000000 MOV ECX, 2
; 20F: 48892B MOV [RBX], RBP
; 212: 488BEB MOV RBP, RBX
; 215: FF5009 CALL QWORD PTR [RAX+9]
; 218: 480F42E3 CMOVB RSP, RBX
; 21C: 488BFA MOV RDI, RDX
; 21F: 488B55F8 MOV RDX, [RBP-8]
; 223: 41BB6B020020 MOV R11D, 536871531 ; GENERIC-*
; 229: 41FFD3 CALL R11
; 22C: L0: 488BE5 MOV RSP, RBP
; 22F: F8 CLC
; 230: 5D POP RBP
; 231: C3 RET
; 232: L1: BA02000000 MOV EDX, 2
; 237: EBF3 JMP L0
; 239: CC0A BREAK 10 ; error trap
; 23B: 02 BYTE #X02
; 23C: 19 BYTE #X19 ; INVALID-ARG-COUNT-ERROR
; 23D: 9A BYTE #X9A ; RCX
NIL
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:2, おもしろおかしい)
おっさん登場
N88-BASIC、peekにpokeでマシン語沼にドボンしてMS-DOSでc、これが定番の順番
大事もくそもこの順番しかなかたwww
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
学生時代は同じく。
そして趣味でTurbo Pascal → Delphi
仕事でFortran
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:2)
クォークとか、そういう極端な話をし始めるのはよくないね。
本来は、就職のための勉強なら専門学校でやればいいはずだが
良くも悪くも4大進学を望む人が多すぎて、就職予備校化してしまっているのが問題の一端ですね。
もう、専門学校にも4年制を設けて、準大卒扱いにして、流行りの言語の指導だけ、
処理系の使い方だけが知りたいひとはそっちに行くようにしたほうがいいんじゃないかな。
個人的には、
コンピュータサイエンスなら、語句解析や意味解析などを自作して言語を作るような講義や
論理ゲートやHDLを使って簡易CPUを作るとかの内容がメインであるべきではと思うね。
そっから先の半導体の実装とかの話は電子工学とか物理化学とかだから、
概論で触るだけで、それ以上は"学部"でやるような内容では無いかと。
[Q][W][E][R][T][Y]
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
現代のPC環境は、OSも開発環境も徹底的にそういったローレベルの情報を隠蔽してるので、
理屈として暗記することは出来ても、実感がわかないんじゃないでしょうか。
国立非帝大の割と上位の大学出身ですが、元ACのような説明をしてくれる授業がありました。
が、同級生には怪訝な顔をしてるのが多かったですね。
Re:そもそも計算機の基礎中の基礎は機械語 (スコア:1)
> かけ算のやり方から教えているような大学か?
せっかく、Z80なんだから、かけ算のやり方を教えなくてどうする!
インストラクションが少ないのは良いことだ。
コンピューターサイエンスの何たるか (スコア:5, 興味深い)
コンピューターサイエンス教育では、 C も Java も教えないよ。 C なり Java なりを道具にして、アルゴリズムの設計と実装という、 500 年後にも意味のある (と期待される) 概念を教えるんだよ。
もちろん、コンピューターサイエンスの中でも専門とする内容によっては Linux カーネルを改造することが必要になったり Haskell コンパイラーを書くことが必要になったりするから、そういう人は必要な技術を学ぶけれど、「コンピューターサイエンス学科の卒業生なんだから C 言語でプログラムが書けるはず」みたいな先入観はやめた方がいいと思う。
Re:コンピューターサイエンスの何たるか (スコア:2)
そのような技術者の需要は日本では極めて少ない。CなりJavaなりが自由に書けるようになってからにしてほしい。
日本の情報産業は日本語や日本の商習慣の壁に守られているから存在している、農業より世界に輸出できていない産業ということを自覚するべき。
Re:コンピューターサイエンスの何たるか (スコア:2)
いや、だから「コンピューターサイエンス学科の卒業生ならソフトウェア技術者として必要な知識や技術を持っている」という先入観をやめた方がいいと思うんだ。大学は専門学校じゃない。
Re:コンピューターサイエンスの何たるか (スコア:2)
需要がないものを生み出してどうします。まして、学生はそれを知っているですか?
「いまから勉強することは、日本の情報産業とは関係がないサイエンスです」ときちんと説明していますか。
説明しているならば学生の自己責任ともいえますが、そうでなければ学生に対する詐欺ですよ。
Re:コンピューターサイエンスの何たるか (スコア:3)
vaxさんの記述には様々な点で問題があります。
第一に、fcp氏の記述では「コンピューターサイエンス学科の卒業生」に対してvax氏は「そのような技術者」と言っていますが、fcp氏は「卒業生=技術者」とは言っていません。従って、「そのような技術者」という記述には仮定の誤りがあります。
第二に、たしかにそのような卒業生「の需要は日本では極めて少ない」かもしれませんが、
需要があるかどうかと本当に必要なのかどうかは別の話です。
企業がそういう「技術」面の必要性しか認識していないだけかもしれません。
そもそも、大学で行うことは「まだ広くその需要すら知られていない最先端の研究内容」を行う可能性があります。
例えば一昔前、一般に知られる以前の画像認識やニューラルネットはそういう扱いだったでしょう。
第三に、『「いまから勉強することは、日本の情報産業とは関係がないサイエンスです」ときちんと説明』すべきという主張について、それを説明するのならば『今から勉強することは、真に大規模かつ困難な問題を解くために必要不可欠な手段であって、この内容を学ぶことはあなたに他の学部では得られない真の専門性を与える』ということも同時に説明すべきです。fcp氏の言うとおり、この種の知識は500年経っても使える知識であり、と同時に日本だけにとどまらず世界のどの地域でも有効な知識です。そして、そういった「他の方法では得られない技術的な強み」こそが大学で得るべきものです。
メモリ管理は、もしそれが本当の問題なのなら、在野のあまたのCプログラマから引っ張ってくればよい。凄腕Cプログラマなら、多大な工数をかけて、既存のGCより効率的にメモリを管理するコードを書けるかもしれません。しかし、Cが将来長きにわたって常に有効なプログラミング言語かどうかはわかりません。メモリ管理自体についても、近年のCコンパイラvs手書きアセンブラのように、何らかのブレークスルーによってGCが人間の手作業malloc/freeに対してほとんど常に上回る事になるかもしれません。どちらの場合も、その知識への需要が長続きしないことを意味します。
一方、いくら優秀なCプログラマでも、「アルゴリズム的に開放できない必要なメモリ」は解放できません。そして、どうやればその「真に必要なメモリ=空間計算量」を減らせるかという問題は、計算機科学のバックグラウンドがなくては解決できません。
確かに、日本の企業が常に「計算機科学的に最先端の」研究を行っているとは言えません。
webサービスを作る程度の技術力しか必要がない企業では、計算機科学の知見は必要ないでしょう
(それらが使っているコンパイラには計算機科学がふんだんに使われていますが)。
しかし、そのことと、「では日本の計算機科学科で今教えられていることは不必要か」という話は別です。
重要な点は、計算機科学の知見は「汎用」ですから、「未知の問題」に対しても適用できるということです。
日本の情報産業の未来は、もしかしたら大量生産のようにしょうもないwebサイトを作ることにしかないのかもしれませんが、もし情報産業が新たなサービスや技術を目指すべきだと考えるなら、現在大学で教えられていることには十分に意義があるでしょう。
長文失礼。アセンブリ言語で書いてみる経験は必要だと思います :b
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:コンピューターサイエンスの何たるか (スコア:3, すばらしい洞察)
卒業生をみれば、大半が情報系の技術者か情報システムの管理技術社をやっているのではないでしょうか。
会社も基礎研究をしている余裕はなくなって来ていますし。(大半でもイコールでないから論理としておかしいと言いたいのでしょうけれど。)
ビッグデータで機械学習は博士課程の学生でも需要が出てきています。DeepNetでニューラルネットワークは復権中です。
画像処理系は昔から博士の学生に需要はあります。
ただ、大学院しかないところの画像処理の先生が、情報工学科の先生に「画像処理は情報工学ではない」と言われたと言って怒っていました。
情報工学科の先生はなんか了見がが狭いように思います。
500年先のことを教えることも良いですが、現在のことを教えるべきと思います。
博士課程で深く勉強することはかまいませんが、学部の情報工学科を出たならば、malloc()やfree()ぐらい知っていて欲しいです。
また、エイトクイーン、クイックソート、ヒープソートぐらいは自分でプログラミングできるようにして欲しいと思います。
(単なるちゃちゃですが、500年先も必要ということは、500年経っても人工知能はできないということですね。情報系の人間としては安心しました。)
画像処理とか、メモリーの利用が最初から計算できて。まとめて使ってすぐにフリーするような場合は、最初にmalloc()で大きく確保してから、
自分で割り当てとフリーしたほうが速い場合もあります。その場合は、アラインメントについては知っているだけで良いので知ってて欲しいです。
最先端の技術を大学院で教えることは問題ないと思いますが、学部とは分けて考えて欲しいと思います。
Re:コンピューターサイエンスの何たるか (スコア:3)
> 500年先のことを教えることも良いですが、現在のことを教えるべきと思います。
いえ、そこの論理がおかしくて。
500年先も使えるんですから、今も使えるでしょう。
で、それを活かせるような職を選ばなかったのは、その学生が戦略的な失敗を犯しているだけです。
ちゃちゃについてですが、500年後には人工知能はできているかもしれません。
量子コンピュータができればNP-complete以上の問題が簡単に解けるようになっているかもしれませんし、
PSPACE-hardも解けるかもしれません。
しかしそのかわり、そのころには既に人工知能以上に困難な問題が生まれているかもしれません。
malloc/freeという固有名詞自体についてはどうかと思いますが、そういうメモリ管理が行われているということについては知るべきだと思います。
> 最初にmalloc()で大きく確保してから、自分で割り当てとフリーしたほうが速い
それはGC付きの言語でも同じです。ヒープの確保は高コスト、ということがmalloc/freeを習う上で理解されていればよいわけですから、同じく配列生成時に気を使えば良いということが理解されればよいと思います。
> 情報工学科の先生に「画像処理は情報工学ではない」
情報工学と計算機科学というのもまた微妙な問題ですね、同じではない気がします。はっきりとどう違うかわかりませんが。
画像認識には困難さがありますが、画像処理というのはどうなんでしょうね?
絵の画素を加工するぐらいのことであったら、計算量的困難さは無いはずです。
この点はどこまで賢い加工を行うかにもよると思います。
画像圧縮アルゴリズムとかになれば計算機科学でしょう。
新人。プログラマレベルをポケモンで言うと、コラッタぐらい
Re:コンピューターサイエンスの何たるか (スコア:2, すばらしい洞察)
>> 需要がないものを生み出してどうします。
それはネットでよく見かける
「企業が本当に必要としているような能力を持った人材を日本の大学は輩出してくれない」
vs
「米国では博士号を持っているような人材がどんどん有効活用されているのに,そういう人材を使いこなせず,採用すらしない日本企業の能力の問題」
の押し問答ですよ.
#少なくともCS分野では米国と日本にこれだけ技術力でもビジネスでも差が付いているわけで,上記のどちらの言い分の方が筋が通ってるかは明らかだとは思いますし,本当にそういう目先の即戦力が重要ならば,国を挙げて専門学校にもっと注力するべきだと思いますけどね.
Re:コンピューターサイエンスの何たるか (スコア:1)
私は大学でコンピュータサイエンスが副専攻でしたが、
大学で学ぶのは当然サイエンスだと思っていました。
情報産業に就職して役にたつような訓練がしたければ、職業訓練校にでもいけばいいんじゃないですかね。
大学は学問の場であって、少なくとも「就職して役にたつようなことを学ぶため」のところではありません。
企業が大学で学んだ学問や教養を期待して学生を採用するのは勝手ですが、
学生や大学が「企業で役に立つかどうか」を考えるのは本末転倒です。
>需要がないものを生み出してどうします。まして、学生はそれを知っているですか?
需要がないかどうか決めるのは、たかだか一産業じゃないですよ。
私の同期は金融機関とメーカーの研究所が多かったです。
Re:コンピューターサイエンスの何たるか (スコア:2)
情報工学科もDept. of Computer Scienceと訳す場合も多いですし、その学科がコンピュータサイエンス系かどうか分かりにくいと思います。
工学が付くような名前ならば、学生は日本の情報産業と関係ない(少なくとも教員がそう思っている)ことを教わるとは知らない場合が多いと思います。
緊急に誤解をなくすまたはカリキュラムを変更することが必要と思います。
また、多数の学生が日本の情報産業の就職のためにその学科に入ってきていると教員が自覚しているならば、
そのコンピュータサイエンス系の学科は詐欺師の集まりということになります。
「パンフレットに情報産業で活躍できる」ということを謳っているようならば、それにそってカリキュラムを考えるべきです。
Re:コンピューターサイエンスの何たるか (スコア:1)
情報工学はInformation Engineeringですから、Computer Scienceはむしろ誤訳ではありませんか。
#うちの大学は両方あるのできちんと区別しています
Re:コンピューターサイエンスの何たるか (スコア:1)
>「パンフレットに情報産業で活躍できる」ということを謳っているようならば、それにそってカリキュラムを考えるべきです。
私大学の案内は見ましたが、そんなうたい文句見たことないですが。
http://www.sci.kyoto-u.ac.jp/modules/tinycontent1/index.php?id=2 [kyoto-u.ac.jp]
とか。
Re:コンピューターサイエンスの何たるか (スコア:2)
そのような人材を必要としているのは、論文以外の価値を生み出さないところだけじゃないか?
情報の基礎的な産業があるならば、ほとんど輸出がないことは合点がいかない。日本語システムか?
まあ、日本語IMEは中国製だそうですけれど。
http://it.srad.jp/story/08/02/17/2155224/MS-IME%E3%81%AE%E5%A4%89%E6%8... [srad.jp]
具体的に生み出したものを上げてくれると助かる。年間数百人規模の人材を必要とするものかどうか。
Re:コンピューターサイエンスの何たるか (スコア:3)
>日本語IMEは中国製だそうですけれど。
http://ascii.jp/elem/000/000/195/195021/ [ascii.jp]
Q2 日本語IMEの開発は中国で行なわれているって本当?
A2 日本語IMEの開発は、日本で行なわれている。同社インプット メソッド テクノロジー シニアマネージャの佐藤良治氏によると、IME 2007以前のプロトタイプ開発の際には、日本だけでなく米国レドモントと中国北京にあるMicrosoft Researchとの共同作業が行なわれたという。それが誤解して伝わっているようだ。
日本でのIME開発は専任チームを置いて、ほかのアプリケーション開発と同じように独自に行なっているという。IME開発は日本のほかに、韓国、中国、台湾にチームがあって、各言語に依存しない要素(OSとのインターフェースなど)の開発は、これら4チームによる共同作業で行なわれている。専任チームの規模は日本が最も大きいとのことだ。
Re:コンピューターサイエンスの何たるか (スコア:2)
どれも情報工学科がほんどない1960年代から、電気電子工学科や機械工学科の出身者がプログラムを組んでいたと思いますが。
Re:コンピューターサイエンスの何たるか (スコア:2, 参考になる)
「500年はちょっと言い過ぎ」というのは同意だけど
>> というか並列化の時代になった時点で、すでに使えなくなっているアルゴリズムは出てきているのでは?
というツッコミは,あなたの読解力あるいは理解力の低さを示してますね.「アルゴリズムの概念を学ぶ」ことは「特定のアルゴリズムを使えるようになる」ことではありません.
例えばソートの方法で様々なアルゴリズムの存在を知っていれば,具体的なソートの問題に直面した時にその知識を使って解決できます.しかし,並列化の時代になると従来の知識そのままでは使い物にならなくなる.これが貴方の指摘ですね.
一方で,fcp氏の書いているように「アルゴリズムとは何か」という概念を(ちゃんと)学べば,いろいろなソートアルゴリズムが本質的にどう違って,その違いが(その時点の計算機の処理上で)性能にどう影響しているのか,そういう理屈を正しく理解しているはずです.ですから,並列化の時代になっても,その理屈からちゃんと並列化に合ったソートアルゴリズムを導き出す(あるいは見つけてくる)ことが可能です.
上記ではソートというベタなネタを例に説明しましたが,もちろん実際の大学ではそういう何か特定の問題について学ぶのではなく,もっと広く一般化した意味で「アルゴリズム」を学んでいるわけです.ですから,「人工知能型コンピュータ」とかみたいな大変革が来ない無い限り,学んだ知識は使えます.ちゃんと学んでいれば,ですけどね.
独学する方法 (スコア:3, すばらしい洞察)
これさえ身に付ければ大抵の言語は習得できる。
順番は関係ない。
Javaから入ってパフォーマンス不足に悩まされたらCを覚える流れでも全然いいと思う。
デスマのしのぎ方とか (スコア:2, おもしろおかしい)
栄養ドリンクはどれが効くとか、ゲーム業界はやばいからやめとけとか、給料がいいのは金融系だとか・・・・・・
Re:デスマのしのぎ方とか (スコア:1)
就職したからだと思う。
そういう意味では、日本では古くから教育が行き届いています。
Re:デスマのしのぎ方とか (スコア:2)
>今日本で電機メーカーが惨状をさらしているのは、バブルの頃に優秀な学生がみんな金融系に
>就職したからだと思う。
外注管理ばかりやらされて、ソフトウェアの開発力が身につかなかったことだと思います。
日本ではプログラマーといえばシステムエンジニアの下級職として区別しますが、
これは、日本ならではのプログラミング軽視の文化の現れとも見なせます。
SC卒業生と言えども、エンジニア自らプログラミングも行わないことには、
魅力的なソフトは作れないのです。
また、まともな仕様書も作れないのです。
普通の大学なら足りるハズ (スコア:2)
Java中心の学習とかイミフメ杉。
『Cを使用するときに必要なメモリー管理』っていうのもよく分からないけど、学校で教えるような事ではないね。
Re:普通の大学なら足りるハズ (スコア:2)
ここ覚えておいてねー、わかりましたで済む事項だから。
自転車の乗り方と同じかと (スコア:1)
Re:普通の大学なら足りるハズ (スコア:2)
その場合、実用プログラミングみたいなコマを増やす事になるけど、できるのかなーと。
本家タレコミ主が本当に欲しかったもの (スコア:2)
「CS 専攻修了した若造が C でメモリ操作する方法も知らなかった。」という個人的経験の一例を取り上げて「CS 専攻では何を習得させるべきか」というお話に飛躍させていることが、本家タレコミ主の悲劇なわけですよ。
本当に彼が欲しかったものは、彼のプライドを逆撫でしない程度の学歴の持ち主で C のポインタを理解できて、なおかつ彼に刃向かわず従順に仕事をする奴隷です。
Hiroki (REO) Kashiwazaki
社会で求められているのは (スコア:2)
Scienceではなく、Engineering
情報学分野の大学教育参照基準 (スコア:1)
http://www.scj.go.jp/ja/member/iinkai/daigakuhosyo/daigakuhosyo.html [scj.go.jp]
残念ながらまだできていなかった。
Javaを勉強したらCが使えないってそれは当たり前 (スコア:1)
なんでCに特有のテクニックを、
コンピュータサイエンスで教えないといけないのか。
自社の業務に必要な知識は自社で教えればいいだろう。
メモリ管理とか十把一絡げに言うが、
じゃあ関数呼び出し時に変数をスタックに積むロジックとかは、
Cをやっている人に書けるのだろうか?
これも重要なメモリ管理の一つだと思うが。
と考えると、「メモリ管理」というのはCに特有なテクニックにすぎない。
単にC以外を知らない人がCの常識は世界の常識だと思って、
新人を常識知らず扱いしているだけだろう。
単にその職場の職員の質の問題であって、
職場での教育に力を入れればいいだけの話。
コンピュータサイエンス教育が何かをやる必要はない。
Re:Javaを勉強したらCが使えないってそれは当たり前 (スコア:1)
オブジェクト指向言語のオブジェクトは単なるメモリ領域ではないから、本来GCでは管理できないよ、
例えばメモリ以外の解放が必要なリソースを保持している場合、メモリ消費量を基準に動作するGCでは不要に成った後も回収されるまでリソースを占有する。
これはライブラリ側では隠蔽できないので、プログラマーが明示的に解放する必要が有る。
スコープ終了時に実行する関数を指定するpythonのwithとかgoのdeferの様な構文もあるにはあるけどね。
Re:Javaを勉強したらCが使えないってそれは当たり前 (スコア:1)
それはJavaを勉強すればできますね。
元の話とは関係ないんじゃないでしょうか。
組込み系はコンピュータサイエンスの一過程じゃないのか (スコア:1)
Re:組込み系はコンピュータサイエンスの一過程じゃないのか (スコア:3)
ん。RAMが数KBytesとか数十KBytesクラスのワンチップ向けだと標準ライブラリも動的メモリ管理もないですよ。代表的なところで言えば自動車向けECUとか。コーディングルールで使用禁止になってたりしますし。
ほえほえ
Re:組込み系はコンピュータサイエンスの一過程じゃないのか (スコア:2)
あなたは可能性を論じています。私を含めたあなた以外は現実を論じています。なので、論点が合っていません。可能性の話であれば仰せの通りです。ですが、
そんなことありません。標準ライブラリも動的メモリ管理も別に複雑さとか関係ないでしょう。実際は使わずに複雑なことをしています。たとえば、複雑な状態遷移を作成するのに、標準ライブラリは使いどころがないですし、動的メモリ管理も不要です。複雑故、現場はデバッグが大変なんです…。
ほえほえ
Re:文系スキル (スコア:1)
最近思うことは、なぜ理系なのに「言語」を使う仕事を選んだんだろうということ。
それはさておき、
CPUが行う処理はたいがい人間に当てはめてできると思っているので演劇の練習も。
排他制御 ← 一冊のノートに書いてある数字を読んで1足して書き込む、を多人数でやる。
ライトキャッシュ ← このゴミ捨ててこい(走って捨てにいく)このゴミ捨ててこい(走って捨てに行く)このごみ捨ててこい・・・ピコーン!
Re:文系スキル (スコア:1)
ということにできるから。
Re:そもそも論orz (スコア:1)
そもそも何をもってして計算機科学を修めたとするんだろう。
「俺が修めたものこそが計算機科学、お前らがやってきたのはただのプログラミング、専門学校の領域だ!」ってな人がぼちぼちいて怖い。
どんなニッチな学問分野であれれ「俺が修めた」なんて口にするような輩はその分野の入口にも到達していないから無視していい。
Re:まずはなぜ品質が低いと判断したのかという (スコア:1)
>「Javaはメモリリークしません」とか言われるともう・・・・(デッドロックしませんって言われたこともあったな)
Java VMの中ではメモリリークして OutOfMemoryError がでて困ったりはするけど、
外側からみるとVMが確保したメモリの範囲でやりくり(ちゃんとJVMが実装されてれば)してくれるから、
システムを巻き込まないところはありがたい。
Re:やりたいことは何だ (スコア:1)
>成果を出すためのプログラミングをやりたいなら
これは「コンピュータサイエンスって言葉で表現できる範囲」には入んないでしょ。
どこもサイエンスじゃないし。
Re:素人集団の悲劇 (スコア:2)
なんだか、「MNP対応モデムで X-MODEM使ったバイナリ転送すると遅くて遅くて…」という話を思い出しました。