大学で初めて習うプログラミング言語

今日の釣り堀

以下の文章は、工学部情報系学科一回生の、最初のプログラミング授業について述べたものである。

大学の情報工学の学生なら,普通にC言語でいいと思うぞ.

  1. 現在普及している
  2. 環境構築が容易(私の大学では大学が用意したコンピュータを使うのでこの項目は関係ない)
  3. 動的型付言語
  4. 十分高レベルに抽象化されている

1はだいたい賛成.しかし教育用や研究用に限定した場合は必ずしも必用な条件とも言えない.特に研究用だと今後普及するかもしれない言語をターゲットにするのは良くあることだろう.

2は必要では無い.一般的な環境設定くらい,学生のうちに経験しておいた方がいいくらいだ.分からないことがあっても,友達や先生に聞くことができるからな.

3は完全に反対.見えない部分で動く機能が増えて,中の動作が理解しにくくなるだけ.*1

私自身は静的型付言語の方が動的型付言語よりも優れていると考えているが、プログラミング初心者に教えるという目的には向いていないと思う。

根拠は示して無いのか.やれやれ.



4番目は「十分高レベル」と表現が曖昧.工学部としては褒められたもんじゃないな.

3とも絡むが,抽象度というか,「おまじない」が増えると中を理解するのが困難になる.情報系の学生なら,単なる「プログラミング初心者」ではなく研究者や技術者の卵なので,初級プログラマとは教育方針も異なって当然だろう.*2

  • プログラミング初心者が扱うには間違いなく低レベルすぎる。
  • メモリだのアドレスだのといった知識はプログラミング初心者に必要なものではないし、コンピュータの動作原理に関して造詣の深いプログラミング初心者はなかなかいない

情報系の学生なら,メモリだのアドレスだのパイプライン・ストールだのVLIWだの動的分岐予測だのは知っておくべき基礎知識の一つ.C言語でも抽象度が高すぎるくらいかもしれんが,さすがにアセンブラをやれとはいわんよ.

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

コンピュータの構成と設計 第5版 上・下電子合本版

コンピュータの構成と設計 第5版 上・下電子合本版

さらにはこういう世界も.
CUDA by Example 汎用GPUプログラミング入門 CUDA C プロフェッショナル プログラミング impress top gearシリーズ 

Googleさんなんか,深層学習用プロセッサとかも出してたな.
http://www.itmedia.co.jp/news/articles/1704/06/news056.html
https://japan.cnet.com/article/35099335/


http://b.hatena.ne.jp/entry/qiita.com/wholekeik/items/4b8ee0825f0b12778a3a

  • id:tsignal 大学でプログラミングを教えてもらおうと考える者は情報系に行くべきではない。
  • id:akabekobeko このカリキュラムは改善の余地あるけど Joel on Software の The Perils of JavaSchools は「なぜ C 言語なのか?」についての一つの解なのでぜひ読んでほしい。

Javaスクールの危険」

このアーティクルで言いたいのは、Javaは大体において優れたプログラマと凡庸なプログラマを見分けるのに使えるほど難しい言語ではないということだ。Javaは仕事で使うのには良い言語かもしれないが、それは今日の話題ではない。Javaが十分に難しくないというのはバグではなく、機能であるわけだが、それには1つ問題がある。

私のささやかな経験から言わせてもらうと、伝統的に大学のコンピュータサイエンスのカリキュラムで教えられているもので、多くの人がうまく理解できないものが2つあった: ポインタと再帰だ。

大学では連結リストやハッシュテーブルなどについて学ぶデータ構造の授業が最初にあり、そこではポインタを徹底的に使う。この授業はふるい分けに使われていた。あまりに難しくて、コンピュータサイエンスの学位の知的な挑戦に耐えられない者は脱落していたのだが、それは良いことなのだ。もしポインタが難しいと思っているなら、不動点理論に関する証明で難儀するのを覚悟しておくことだ。

しかしポインタと再帰の明らかな重要性以上に重要なのは、これらの学習から得られる精神的な柔軟さと、これらを教えている授業からふるい落とされないために必要な精神的態度が、大きなシステムを構築する上で欠かせないということだ。ポインタと再帰には、ある種の推論力、抽象的思考力、そして何よりも問題を同時に複数の抽象レベルで見るという能力が要求される。そしてポインタと再帰を理解できる能力は、優れたプログラマになるための能力と直接的に相関している。

オールJavaコンピュータサイエンス教程では、こういった概念を扱うための頭の回転の良さを持ち合わせていない学生をふるい落とせない。程度を下げた新しい授業はどうにか切り抜けられるが、Java会計アプリケーション以上に洗練されたプログラムを作れるほどには頭の出来の良くない卒業生たちを、Java 100%スクールが量産しており、その様を私は雇用主として目の当たりにしている。

http://local.joelonsoftware.com/wiki/Java%E3%82%B9%E3%82%AF%E3%83%BC%E3%83%AB%E3%81%AE%E5%8D%B1%E9%99%BA
  • id:takumikabu 単に「プログラミング初心者」ならpythonでも構わないけど、「コンピューターサイエンス初学者」ならCでしょう
  • id:als_uz 情報系なら結局アセンブリとか組み込みとかやる羽目になるのでCやらせとかないといけないし、だいたい必修になってるよね。Web系人材育成しますならruby, php, pythonでもやればいいのだけれど
  • id:logic 大学ならCでいい。当時はさっぱり理解できなくても後からあの時C学んでて良かったと思うようになる。Cの後ならどの言語でも独学で覚えるのは簡単。
  • id:unsoluble_sugar 業務で10個以上言語触ってるけど「Cやってて良かった…」ってシチュエーションめっちゃあるのでCで良いと思う
  • id:aiueo1145140 研究はCが必須な分野が多いからダメだよ。馬鹿は退学してJavaScriptPHPでも書いてなさい。
  • id:b_wa Cでいい。PythonRuby、特にJavaScriptなんて独学でやるもの。
  • id:chikoshoot “大学”ってのがミソなんだろうが、大学生ならCを学習するための力は十分あるはずだ。Pythonでプログラムとは?みたいな話するならそれはむしろ小中向きでは。
  • id:n314 情報系の大学ならCかアセンブリから始めるのでいいでしょ。スクリプト言語って講義で学ぶものじゃなくて各自で勝手にやるものだろう。
  • id:rti7743 Cでいい。殆どの言語はCからの知識を使えるし、機械語的な動作も学べるんだし。
  • id:pseudomeme 高校以下とか文系学部なんかならそうかも知れんけど工学部情報系学科ならCでいいのでは
  • id:georgew C++ならともかくも、初心者にとってC言語はそんなに難しいだろうか?? Cライクなシンタックスは多くの他言語に影響及ぼしてるから最初に学習する価値はあると思う。
  • id:Tamemaru 「おまじない」が少ないという点だけを見てもC言語は初学者にとって優れた言語だと思う。意欲的な学生ほどおまじないを理解しようとしてドツボにはまり脱落していく。Rubyでもいいけど。
  • id:foobarchocobo なぜ高度に抽象化されている言語を初心者に教えたいのだろう。歯車がみえた方が理解しやすいと思うんだけどな
  • id:mac_wac 初心者は型を意識させるために敢えて静的型付けを選んだほうがいいのではないかと思ってる。というわけで個人的にはC++推し。
  • id:techboon "初心者がまず覚えるべきなのは、プログラミング言語とは、変数・関数とは、といった内容" そうですね。なので変数の型も意識せず何でも変数に突っ込める言語より型に厳密でメモリを意識させるCは良いと思います。
  • id:nekomimist 何を学ぶためにやるかだな / 組み込み歴22年目のおっさんの意見としては、Cで書いたことがない人を増やすのは将来的に危険だと思う。だれも低レイヤやれなくなるぞ?
  • id:bluemoonjp 他学科なら何でも良いと思うけれど、情報系はあえて抽象化されてないCを使ってるんでしょ(歴史的な理由もあるだろうけど)。メモリ構造は一般的な初心者には必要なくても、情報系の初歩として必要な学習内容。
  • id:watanuki_p プログラミング教室と情報工学のプログラミング授業はそもそも方向性わ目的が違うのでは。
  • id:ad2217 プログラミング初心者がIDEに慣れているはずもなく、IDEの操作を教えるだけで数回を費やし、しかも覚えない。
  • id:REV まあ、「初心者のためのお料理教室」で、1日目:鋼の包丁の研ぎ方と、使用後の手入れ 2日目:檜の俎板の手入れと鉋掛け 3日目:鶏のバラし方 っていうのも大変だとは思う。

「料理をしたことのない若い主婦(or主夫)のためのお料理教室」じゃなくて「プロの料理人を目指す人のための調理師学校」だからね.基本的な包丁の使いかたや研ぎ方なんて,既に習得済みの人の方が多いくらいかもしれん.

お料理教室と大学じゃあ,目的が違うんだ.

  • id:gingger4 どこの大学だ?
  • id:ritena 今の情報系ってこんな絵本レベルのことを教えてるの・・?突然実習で知らない奴アホかって感じだったけど、本気で職業訓練所に成り下がったのか。。
  • id:skifuyu 最後まで読んだらCがというよりこの全く整理も更新もされていない講義がクソなのではという感想

単に学力崩壊してる底辺大学ってだけかもね.

  • id:zund4 ブコメには強者が多い。彼らは自分の成功体験で語れる。一方この筆者は言葉もなく離れて行く敗者を慮っている。

敗者もたくさん見てきたよ.C言語も理解できない人は素養がないから,一刻も早く別の学科に移った方がいい.味音痴が料理人目指すようなもんだ.


  • id:syusuimaru オッサンからするとCASLとかに比べたらC学べるだけましな気がする。
  • id:fan-tail 大学で最初にやった言語はCASL2でした…orz/課題だけ出して解決は好きな言語でやれ、とか言ってしまいそうだ…
  • id:kuborn "FORTRAN、、今は使われない" せやろか
  • id:ksugimori 物理系ではFortranは現役ですよ
  • id:sojisan fortranバリバリ使ってるゾ
  • id:wrss “* FORTRAN ・・・ 数学科学計算に特化 でも今は使われない”←ウチの会社ではまだ現役なのですが(T . T)。ただ、30年前のコードとか見てると殺意がわくのは確か。

Modern Fortran Explained

Modern Fortran Explained

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77 (English Edition)

Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77 (English Edition)

PCクラスタで並列プログラミング―High Performance Fortranで楽々並列化

PCクラスタで並列プログラミング―High Performance Fortranで楽々並列化

High performance computing 分野では,まだまだ現役っぽい.

一度デファクトスタンダードになると,過去の資産の継承のためにも必要になるからな.

*1:車の運転免許がほしけりゃAT限定でけっこうだが,車の開発者になるなら変速機の仕組みを100%理解する必用がある.機構が単純な方が理解は容易.

*2:その前に,情報系の学生ならば,純粋な意味でのプログラミング初心者は珍しいだろう.自分の進路を検討する時に,プログラミングとはどんなものかを確かめない高校生がどれだけいるだろう.