
プログラミング言語を一つ学んだら別の言語も簡単に習得できるという考えは正しいのか? 165
ストーリー by nagazou
日本語覚えても英語は話せない 部門より
日本語覚えても英語は話せない 部門より
ミシガン大学教授のMark Guzdial氏は、同業のコンピューターサイエンス(CS)の教育者二人から、最初のコースでプログラミング言語を気にする必要はない。学生が概念をしっかり学んでいれば、次に学ぶ言語では最初に学習した言語の知識を応用できるとする意見を聞いたという。しかし、Mark Guzdial氏本人は、過去の経験などから二つ目の言語習得はそう簡単ではないとして、先の二人とは異なる考えを持っている(Mark Guzdial氏のブログ、GIGAZINE)。
LISPやMICRO-PLANNERのように、基本的な概念が全く異なる第二言語の学習は、第一言語の学習と同等かそれ以上に難しい可能性が高い。学生がデータサイエンティストになりたいのであれば、C言語を学ぶよりもRやPythonを学ぶ方が合理的だ。こうしたことから、Mark Guzdial氏は、「なぜ最初に学ぶプログラミング言語は重要ではない」という考え方が定着しているのか考えるようになったそうだ。 同氏の考えとしては、1960年代後半にCSカリキュラムが定義されたとき、プログラミングの数学的基盤に重点が置かれていた。このため、現在教育者になってるような人は、現代の学生と比較すると数学的に強い基盤を持っている。このため、言語の違いは表記法の違いに過ぎないと考えているのではないかとしている。
LISPやMICRO-PLANNERのように、基本的な概念が全く異なる第二言語の学習は、第一言語の学習と同等かそれ以上に難しい可能性が高い。学生がデータサイエンティストになりたいのであれば、C言語を学ぶよりもRやPythonを学ぶ方が合理的だ。こうしたことから、Mark Guzdial氏は、「なぜ最初に学ぶプログラミング言語は重要ではない」という考え方が定着しているのか考えるようになったそうだ。 同氏の考えとしては、1960年代後半にCSカリキュラムが定義されたとき、プログラミングの数学的基盤に重点が置かれていた。このため、現在教育者になってるような人は、現代の学生と比較すると数学的に強い基盤を持っている。このため、言語の違いは表記法の違いに過ぎないと考えているのではないかとしている。
個人的な経験では (スコア:3, 参考になる)
・smallTalk を学んだら、C++でOOPSできるようになった。
・今では、C++に過剰適応してしまい、C# も Java も書けない。
近しい言語は、思想を理解するには有効かなと思います。
C の形定義とポインタが、Modu;a-2 ですっきり理解できたとか。
でも、ひとつの言語に過剰適応するすると、他の言語にうつるのが、とってもハードル高いです。
¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
Re:個人的な経験では (スコア:1)
Cの構造体とポインタのたすき掛け(?)
って何?
Re:個人的な経験では (スコア:2)
これも個人的でした。
¶「だますのなら、最後までだまさなきゃね」/ 罵声に包まれて、君はほほえむ。
Re:個人的な経験では (スコア:1)
一般には自己参照って呼ぶんじゃないかな。
Re:個人的な経験では (スコア:1)
でも、ひとつの言語に過剰適応するすると、他の言語にうつるのが、とってもハードル高いです。
「過剰適応」とはそう言うことを言うんだろうから、トートロジーで無意味かな。
どの言語が「過剰適応」になりやすいか、あるいは、どの言語が「過剰適応」にならず、他の言語に移りやすいか、みたいな議論は意味がありそう。
別の言語も簡単に習得できる (スコア:2, すばらしい洞察)
純粋関数型言語に出会うまではそう思っていました
C と LISP で... (スコア:2)
C言語とLISPの知識で、
大抵の言語は、なんとかなっています。
LISP を学べて良かったなと思います。
Re: 別の言語も簡単に習得できる (スコア:1)
もう忘れかけてるけし、どれかにもよるけど Huskel とかは簡単だったと思う。
その前に純粋じゃない関数型言語をやってるせいかもしれないけど。
むしろ Common lisp みたいな紛れが多いやつは難しかった記憶。
Re: 別の言語も簡単に習得できる (スコア:2)
> Huskel とかは簡単だったと思う
すでに綴りからして簡単ではない。
#正しくは Haskell
ずぶの素人よりましなのは確か (スコア:1)
この設問、「簡単」の定義があやふやなので論争の元になって居るが、現実としては表題の通りだと思う。
これが、二つの言語を習得た者と一つしか習得していない者の比較だと習得している言語のタイプによって状況が変わってくる可能性があるが、一切未経験と他言語経験者であればほぼ間違いなく他言語経験者の方が習得は容易であると言えるだろう。
ただ、それが「簡単に習得できた」と言えるかはまた別問題というか、人によって感覚が異なるというだけの話だろう。
しもべは投稿を求める →スッポン放送局がくいつく →バンブラの新作が発売される
Re:ずぶの素人よりましなのは確か (スコア:2, 参考になる)
> 一切未経験と他言語経験者であればほぼ間違いなく他言語経験者の方が習得は容易であると言えるだろう。
それもない。
毎年、数十人にprolog教えてるのだが、C/Java系の言語経験者と、プログラム経験一切ない人間に、prolog 教えると後者のほうが覚えるのも理解するのも圧倒的に速い。例外もあるが、そういうのはは毎年1人いるかいないかぐらい。
C/Javaの経験者はコンピュータプログラムはこういうものという先入観にとらわれて、理解がとても遅い。
Re:ずぶの素人よりましなのは確か (スコア:1)
Re:ずぶの素人よりましなのは確か (スコア:1)
まあ、CとかJavaとかPythonとか手続き型で育った人からしたら、
Prolog よりも Lisp のほうがまだしもついていけるかもしれん。
#それでもかなり苦労したけど。
Re: (スコア:0)
「学生が」ってのが肝だね。自称プログラミングできる学生はずぶの素人だから変わらないw
#まともにプログラミングできるのって学校に一人とかそういうオーダー
Re: (スコア:0)
そこまで希少じゃないと思う。
理系学部だったてのはあるかもしれんけど。
当方1995年工学部卒業のおっさんだが、その当時でも10人以上はいた。
今ならもっと多いはず。
Re:ずぶの素人よりましなのは確か (スコア:1)
他に専門を持っていて自主的にプログラム書いている人間のほうが、圧倒的にプログラミング能力が高いのは当然。
エンジニア採用の時は情報処理系の学科だとマイナス。
その理屈だと、結論は、情報処理系学科がプラスになることは無い、くらいでないとおかしいね。
期待よりレベルが低かった、というのはあるんだろうけど、なんか偏見がひど過ぎない?
個人的な感想だけど、レベルの低い大学の情報系学科のレベルが低いのは仕方ない。
そんなところばかり見て情報系学科を云々するのは、違う気がするね。
なんにせよ、好きで自主的に勉強できるものは、自主的に勉強したヤツの方がそうでない奴よりレベルが上、というのは当たり前の話だよね。
教えてもらうだけ、ってヤツより、自主的に学ぶヤツの方がレベルが上、というのも当たり前。
Re:ずぶの素人よりましなのは確か (スコア:1)
物理が趣味
そんな人は少ない一方、プログラミングが趣味、と言う人が多い、と言うだけでは無いか?
Re:ずぶの素人よりましなのは確か (スコア:1)
趣味程度の学びで十分、と思うならそうなんじゃない?
SESに出す兵隊が居ればいいんだ、というこであれば、その程度で良いんだろうし。
ただ、趣味で計算機科学を体系的に学ぶのは、それなりに難しいと思うよ。
物理学も同じなんじゃない?
Re:ずぶの素人よりましなのは確か (スコア:1)
初心者がPythonで書く関数型っぽいコード? ってどんなのでしょう?
関数型言語を教えるわけでも無いのに、副作用の無い関数を定義して、それを合成することでコードを書く? それもPythonで? 相当優秀な学生さんたちですね。
Re:ずぶの素人よりましなのは確か (スコア:1)
大筋合意。以下揚げ足取りなんだけど。
このへんは自然言語でいえば「単語がある」「名詞がある」とかの基本概念だろう。
日本語の場合、単語って概念は、書き言葉を習った時点ですらはっきりはしてない気がするね。
単語ごとに分かち書きするわけでは無いし。
文の概念を習って、それを文節に分けて、さらにその中を単語に分けることができる、と言うわけだけど、結構難しい。
名詞だけを取り出すのは、比較的簡単だけど、動詞を含む文節から動詞・助動詞・助詞に分けるのは、そう簡単じゃない。
単語の概念は薄いのではなかろうか。
プログラミヌとは何かという問題 (スコア:1)
一口にプログラミングといって色々あって、
1) 一般関数/サブルーチン、条件分岐、ループ、アルゴリズム、配列などの基礎概念は多くの言語で共通している
2) 再入、再帰、オブジェクト指向、マルチスレッド、自己書き換え、ラムダ式、などなどは言語によって扱いが異なることもある
3) 文法シュガー的なものや、書式の前提条件や約束ごとはおおいに異っている(一見似ているの違ったりして面倒
4) 同じ言語でも実装やバージョン違いによって文法や実行効率に違いがある場合もある
5) ライブラリまわりになると千差万別、むしろ他の言語の知識すら必要になる場合がある
どこまで必要か、どこを重視するかの問題。
1)を言語学習の重点だと思う人と、1)は数学であって言語学習ではないと思う人では意見は異なるだろう。
Re:プログラミヌとは何かという問題 (スコア:2)
1/2番目に苦労したら「2個目の言語は簡単」
全く苦労しないと「2個目の言語も同じぐらいしんどい」になるのかも?
# 2個目は簡単派
Re: (スコア:0)
文法シュガー的
細かいところでごめんだけど、そんな中途半端はやめて「糖衣構文」か「Syntax Sugar」のどっちかにしよう?
内容的には概ねagreeです。
Re:プログラミヌとは何かという問題 (スコア:1)
それもそうなんだが、「プログラミヌ」もなかなか。
Re: (スコア:0)
Re:プログラミヌとは何かという問題 (スコア:1)
個人の経験でしかないけど、BASIC、Pascal、C等の後Prologだったけど、障壁になったような気もする。
ただ、前の言語を学んでなかったらPrologが簡単だったか、と言うとそれも疑問かな。
しかしまあ、ほとんどの人はPrologなんか触らないだろうから、「気にすんな」は正しいとも言える。
プログラミング言語の定義って何? (スコア:1)
> 基本的な概念が異なるプログラミング言語には応用できない
まさにこれだけど、種類にもよるかな。
最初に学ぶプログラミング言語は、逐次実行型にしておかないと、いろいろ大変。
BASIC や COBOL みたいな言語が最初だと、次の言語も逐次実行型なら理解しやすいが、
考え方が異なる Prolog や SQL (と、ストアドプロシージャ) だと表現を変えただけではうまく組めない。
また、HTML がプログラミング言語だとする向きもあるが、HTML を理解したところで C が理解できるとは思えない。
というか、HTML がプログラミング言語だと XML もプログラミング言語になってしまうが、それで良いのだろうか。
--
Prolog って、今もどこかで使われているのかな。
2つ目の言語による (スコア:1)
1つ目が Python、2つ目が Whitespace とか、無理ゲーもいいとこ。
プログラム言語に限らない話 (スコア:1)
自然言語(?)でも同じ結論になってるよね。
赤ん坊のうちから英語教えても、日本語がなってないとダメみたいな。
英語はできてもドイツ語は云々みたいな。
種別を超えるときつい (スコア:0)
> 基本的な概念が全く異なる第二言語の学習は、第一言語の学習と同等かそれ以上に難しい可能性が高い。
学生の頃、C言語しか知らない状態で初めてJavaを触って、二か月くらいはオブジェクト指向的な書き方ができずに手続き型っぽく書いてたのを思い出した。
Re:種別を超えるときつい (スコア:1)
CでOOPできないうちはまだまだ素人よ
Re:種別を超えるときつい (スコア:1)
Re: (スコア:0)
SQLとかも身近な別言語と言えるね。
自分が始めた頃はOracleのシータ結合(Where句で結合する, A = B(+) とか…)の時代なので学習が無茶苦茶辛かった。
こんなん全部読み出して普通の言語でループして抽出すりゃいいやん、って思ったなぁ。
#今はLINQのせいで逆混乱中…w
Re:種別を超えるときつい (スコア:2)
あとは現物触って憶えていった
CとC++ (スコア:0)
何十年も前に最初に勉強したから、他の言語は殆ど簡単だった。
最初にちゃんと勉強した言語が違う言語だったら、
そんなに簡単ではなかったと思う。
#最初に学ぶ言語は重要だと思う。
Re:CとC++ (スコア:1)
最初に低レベルな言語から入れば、同系統の高レベル言語は簡単、と言う事ではなかろうか。
CやC++を学んだあとにアセンブリ言語だったら簡単だと言えるだろうか。
Re:CとC++ (スコア:1)
ならば例えば、Pascalを学んだあとのCも、とっつきやすいってことになるだろうね。
非オブジェクト言語の後のオブジェクト言語とかも同じじゃないかなあ。
Re: (スコア:0)
学生が概念をしっかり学んでいれば
の前提が大事。たいていの人は最初に学んだ言語で必要とする概念しか学ぼうとしないからね。
Re:CとC++ (スコア:1)
Re:CとC++ (スコア:1)
// 新しくは書けない
言語もいろいろ (スコア:0)
bashのスクリプトとHTMLが書ける場合、2種類の言語ができると言っていい?
Re: (スコア:0)
言っていいけど、スクリプト言語とマークアップ言語で
プログラミング言語とはチョットチガウネ
Re:言語もいろいろ (スコア:1)
Bashは、プログラミング言語とはちょっと違う、と言ってる?
意味不明だな。Bashは、普通に変数も制御構造も関数呼び出しもあって、チューリング完全でもあるし、プログラミング言語ではない、とする根拠は見当たらないよ。
Re: (スコア:0)
スクリプト言語はプログラミング言語ではない?
Re:言語もいろいろ (スコア:2)
エクセルでラムダ関数使えたらプログラミングできると言って良いですか?
Re:言語もいろいろ (スコア:1)
CSSを入れるのはズルいとは思う。
マークアップ言語 (スコア:0)
自分はプログラミングが好きで、BASICから始まっていろいろな言語をやってきて、最近はXAMLを使っていますがどうしても好きになれません。あれも一応プログラミング言語と思うのですが、どうも肌に合わなくて全然習得できません。HTMLも苦手なのでマークアップ言語が苦手なのかもしれませんが。
Re:分類が必要 (スコア:1)
Re:日本語覚えても英語は話せない? (スコア:1)
キミは日本語の次に、「ここに返信」というボタンの使い方を覚えるべきだな。
Re:粒度と高位の概念を渡れるかどうか (スコア:1)
BASICからアセンブリに入った人は
BASICだと遅い部分を機械語の16進数文字列化したものを
POKEでメモリに書き込んでCALLする
みたいな使い方してた人が多いと思う
[Q][W][E][R][T][Y]