何となく Blog by Jitta
Microsoft .NET 考

目次

Blog 利用状況
  • 投稿数 - 761
  • 記事 - 18
  • コメント - 36165
  • トラックバック - 222
ニュース
  • IE7以前では、表示がおかしい。div の解釈に問題があるようだ。
    IE8の場合は、「互換」表示を OFF にしてください。
  • 検索エンジンで来られた方へ:
    お望みの情報は見つかりましたか? よろしければ、コメント欄にどのような情報を探していたのか、ご記入ください。
It's ME!
  • はなおか じった
  • 世界遺産の近くに住んでます。
  • Microsoft MVP for Visual Developer ASP/ASP.NET 10, 2004 - 9, 2011
広告

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

その他

わんくま同盟

同郷

 

なにやってんだか(蜃気楼)より:

初心者にC/C++は難しすぎるので、Delphiです。これからプログラミングを始めてみようという人にVBはおすすめしません。言語仕様が曖昧すぎてステップアップできなくなります。
簡単にプログラムを組もうと思えば組めますが、私はあまり好きではありません。VBやった後にほかの言語に手を出すことになった場合、VBでのお約束がことごとく崩れていくのが分かるでしょう。
Delphiはほかの言語のベースにもなっている(*Pascal)だけあってそれなりに使えますから。

私は、プログラミング初心者にこそ、C 言語を勧めたい。理由は、単体でできることが少ないから。

言語単体でできることが少ないということは、やりたいことを事細かく砕かなければならない、ということです。また、憶えなければならないことも少しですみます。

コメントで、とっちゃんさんがま、C# とか IDE なしでやれ!とか言われたらシャレにならんですが...wとおっしゃっていますが、C# でできることはたくさんあります。しかし、そのためにフレームワークがふくれあがっています。14年前、Unix で vi を使いながら C のコードを書いていたとき、「選択できれば便利だな」とは思いましたが、だからといって「IDE が無ければシャレにならん」とは思いませんでした。少しの労力で多くのことができるということは、便利ですが、「少しの労力」の使い方をたくさん覚えなければならないのです。

そうですね。。。テトリスはご存じですよね。4つの小さいブロックを組み合わせて7種類の塊があります。その7種類のブロックがどういう形かを覚えておいて、どのように組み合わせるとどんな隙間ができる、ってことを考えるのが、ゲームで高得点を上げるこつです。

じゃぁ、ブロックが5つに増えると?塊は17種類くらいですか???ブロックが6個、7個と増えると、その組み合わせはすごい数で増えていきます。「ブロックn個の時の組み合わせの数を求めよ。ただし、平面的に組み合わせるものとし、回転は含まない。」って、C Magazine のパズルみたい。きっと誰かが釣られるはず(笑)

ブロックの数が多くなると、それを組み合わせたときにどんな形になるのか、考えなければならないパターンが多くなります。これって、しんどくないですか?それよりも、細かくすること、「これをするためには、何が必要だろう?」と考える方が、楽じゃないですか?だって、ゴールは決まっているんだもの。

確かに、C 言語は面倒です。メモリの管理も、かなりの部分をプログラマがしなければなりません。だからこそ、最初にやっておく方が良くないですか?

これを読んでいるほとんどの人は、x や y を使った方程式をご存じのはずです。鶴亀算など、x/y を使うと簡単に解けます。

鶴と亀があわせて10匹います。鶴と亀の足を合わせると28本あります。鶴と亀は、それぞれ何匹いるでしょう?

方程式を使っていいなら、鶴の数を x、亀の数を y とし、
2x + 4y = 28
x + y = 10 より
2(10 - y) + 4y = 28
20 - 2y + 4y = 28
2y = 8
y = 4
x = 6
となります。

じゃぁこれを、x/y を使わないで求めるには?数年前このことを考えたとき、確かに小学校の時にやった問題なのですが、解くことができませんでした。

鶴が10匹の場合、足の数は20本。鶴が9匹で亀が1匹の場合、足の数は22本。つまり、亀が1匹増えるごとに足は2本増える。このことより、28 - 20 = 8, 8 / 2 = 4 で、亀が4匹、鶴が6匹。


様々な言語にフレームワークとして用意されている関数/クラス群は、ここでいうところの「x と y」に相当すると思います。これらがあると、とても便利に問題を解決できます。

しかし、カバーする粒度が大きいために、対応する関数/クラスがない言語を使用することになったとき、どのように実現したいことを表現すればよいのか、わからなくならないでしょうか。実際、そのようなことがあると思います。というのも、掲示板には「**言語な xx で実現できるのですが、○○言語ではどうすればいいのでしょう?」という質問を散見するからです。

もし、問題の粒度を小さくする力が養われているなら、「xx では、こうやってああやっているだろうから、同じことをすればよい」と、考えつけるのではないでしょうか(いや、楽したい、ってのはあると思うけど、それはまた別の問題)。


さて、もう一つ。本当に Delphi だと簡単なのでしょうか?あるいは、何が簡単なのでしょう?

私は、Delphi だけでなく、VB であっても、プログラムを作ることが簡単になるとは思いません。しかし、Windows アプリケーションを作ることは、簡単になるでしょう。さて、いったい何が変わるのでしょうか。

プログラムを作るのは、ある問題があって、その問題を解決するためです。Delphi や VB は、問題の解決を容易にしてくれるのではなく、問題への道を歩きやすくしてくれるのではないでしょうか。つまり、Windows Form というツラを作り、エンド ユーザがデータを入力しやすくするという部分において、簡単にしてくれるでしょう。しかし、エンド ユーザがどのような問題を抱えており、それを解決するためには何が必要で、必要なものをどのように加工するか、という、プログラムの核心ともいうべきところでは、何ら変わることはないでしょう。

「簡単」をセールスポイントとする開発ツールですが、「簡単」を見るポイントによっては、あるいはより難しくしているのではないでしょうか。見栄えを気にするエンド ユーザって、多いでしょ?

確かに C 言語は、配列やポインタなど、習得の障害となるポイントがいくつかあります。しかしそれらも、他の言語を習得する上で、助けにこそなれ、妨げにはなりません。

今使え、これからも使えるであろう言語から「プログラミング初心者に勧める言語は?」と聞かれると、私は C 言語を勧めます。

投稿日時 : 2007年9月11日 6:17
コメント
  • # re: 初心者に勧める言語
    επιστημη
    Posted @ 2007/09/11 8:37
    鶴亀に反応。

    鶴を一匹減らしその分亀を増やすと足は2本増える -- (1)
    もし全部鶴なら足20本、28本には8本足りない -- (2)
    足りない8本の足を(1)の操作で増やせばいい。すなわち:
    亀の数 = (28-20)/2 = 4
    鶴の数 = 10 - 4 = 6
  • # re: 初心者に勧める言語
    のん@琉希唖
    Posted @ 2007/09/11 9:46
    私覚えやすい事を考えると、VBを進めてました。でも確かに
    >VBやった後にほかの言語に手を出すことになった場合、VBでのお約束がことごとく崩れていくのが分かるでしょう

    って書いてあるように、私も他の言語手出す時にワケわかんなくなる時がありますC#やC++を見ててよくわかんなかったりwそう考えると初心者にはCかなって思う私でした。
  • # re: 初心者に勧める言語
    Zee
    Posted @ 2007/09/11 10:33
    確かにお約束ごとは通じない。

    始めてしまった人は今からでもCの方がいいのだろうか・・・
  • # re: 初心者に勧める言語
    がる
    Posted @ 2007/09/11 10:49
    どもです。
    おいらもC言語に一票。…もっとも。今、初心者教育用に「CPUセット作ってニーモニック作って」ますが(笑

    個人的に。C言語で「メモリについて学ぶ」のと同じくらい、マシン語で「コンピュータってのはメモリとCPUだけでできてるんじゃい」ってのを理解させたほうが、後々、なにかと楽なので(笑
  • # re: 初心者に勧める言語
    とっちゃん
    Posted @ 2007/09/11 11:09
    >CPUセット作ってニーモニック作って
    最もシンプルな組み合わせですからねぇw

    難しい素養はほとんどないだろうし。

    覚えるべき項目も...一部のCISC(かなりメジャーなCPUだけどw)を別にすれば数的には対して多くない。

    コンピュータの動く仕組みを概念レベルであっても知ってるのと
    そうではないのとではその後のスキルアップは全然違いますよw
  • # re: 初心者に勧める言語
    シャノン
    Posted @ 2007/09/11 12:12
    言語なんて何でもいいです。
    CでもC++でもVB(6/.NET)でもDelphiでもC#でもJavaでもRubyでも。まぁその辺なら。

    VBに手を出しちゃったら生涯VBやらなきゃいけないなんてことはないですし、逆にVBしかできなくなっちゃう人は何をやらせてもそうじゃないですか。「初心者が一生を捧げる言語は何がいいですか?」じゃないんでそ?

    オブジェクト指向なんて最初は知らなくていいです。mallocも要りません。Webアプリの知識も要りません。
    変数を知ってください。組み込みデータ型を知ってください。四則演算を知ってください。ifを知ってください。forを知ってください。関数の作り方を知ってください。コンソールI/Oを知ってください。
    どんな言語を選んでも、これだけ多くのことを学べます。これだけ多くのことを学ばなければなりません。そして、この時点では、これ以上のことを教えてはなりません。
    これでとりあえず、鶴亀算はできます。小規模なゲームも作れます。
    オブジェクト指向とかメモリ管理とかフレームワークとかはその後でいいです。

    ここまでの学習についてこれて、これから先も進んでいく意思があるなら、そこで初めていろんな言語の選択肢を提示しましょう。
    言語の特徴に踏み込むのはそれからです。
    これでかなりふるいにかけられるんじゃないかと思います。
  • # re: 初心者に勧める言語
    シャノン
    Posted @ 2007/09/11 12:20
    あ、VB6じゃコンソールアプリは作れなかったっけか? じゃVB6ダメww
  • # re: 初心者に勧める言語
    Jitta@on the way
    Posted @ 2007/09/11 13:56
    ヒント
    [Ctrl]+[A]
  • # re: 初心者に勧める言語
    Hirotow
    Posted @ 2007/09/11 15:39
    PICC+1602液晶なんてのも粋でいいかも。
    #最近これで遊びたくて仕方ない。
  • # re: 初心者に勧める言語
    がる
    Posted @ 2007/09/11 18:39
    ちょいと戯言。
    forループなんてないんですifなんてないんです変数なんてないんですw
    あるのはレジスタへの減算と0フラグと「条件付ジャンプ」だけなんですw

    あとはLD命令(MOV?)での、直接アドレス法と間接アドレス法がわかれば、ポインタなんぞむしろ「なんてお便利な機能なんざましょ」になること請け合い。

    …個人的に好きな、BCペアレジスタとかDEペアレジスタとか、ましてやインデックスレジスタIXとかIYは、組み込み系の方に「これだからZ80aな人間は…」と却下されました(笑

    まぁ。どんなものであれ、やはり基礎は大切だなぁと痛感します。
  • # re: 初心者に勧める言語
    Jitta
    Posted @ 2007/09/11 22:00
    コメントありがとうございます。

    επιστημηさん:
    そっちに反応されてしまった。残念。。。

    お約束ごと:
    う~ん、そんなものがありますか。
    C いじった後に VB.NET をいじっていますが、「お約束ごと」がわかりません。いったいなんでしょう?
    むしろ、C のお約束ごとが Managed C++ で通じなくて叫んだことはある...

    ニーモニック:
    いや、それにしようかと思ったんですけどね。「結果を確認する方法」が、ねぇ。。。なぜか TK-80 が浮かんできて、「確認できひんやん?!」と。それで少し高級言語にシフトしました。

    シャノンさん:
    ん。。。まぁ、そうなんです。「やりたいことを事細かく砕」くことができれば、どんな言語だって使えるはずなんです。で、それを学べるのは、どれがいいかな、、、と。本当のところ、「マシン語」としたかったのですけどね。だって、覚えることが少ないでしょ?マシン語で、したいことを表現するのは難しいけど。
  • # re: 初心者に勧める言語
    ぷさいくろう
    Posted @ 2007/09/17 14:26
    鶴と亀は
    0と10
    1と9
    2と8
    ・・・
    10と0
    のいずれかである。
    あとは、足の数を書いてけば解ける。
  • # re: 初心者に勧める言語
    けろ
    Posted @ 2007/09/18 11:08
    アセンブラでデビューで、Cは後から覚えました。
    シャノンさんと同じで、言語は何でも良くて、
    変数と値のトレースの仕方、デバッグの仕方がわかれば
    何でも良いとは思うんですよね。

    ただ、VBは便利になりすぎちゃっている分、
    本質が見えづらくなっているというだけの話なので、
    初心者に初めに覚えさせる言語という意味だけで言えば、
    何でも良いような気はします。
  • # re: ジェームス・ゴスリン氏がSun tech daysで語っていたこと
    凪瀬 Blog
    Posted @ 2007/11/14 22:12
    re: ジェームス・ゴスリン氏がSun tech daysで語っていたこと
  • # 初心者って、何?(他所様のコメント欄で続けるのはどうかと思ったので)
    何となく Blog by Jitta
    Posted @ 2008/02/12 22:23
    初心者って、何?(他所様のコメント欄で続けるのはどうかと思ったので)
  • # re: 初心者に勧める言語
    Jitta
    Posted @ 2008/02/12 22:36
    >>>
    「ブロックn個の時の組み合わせの数を求めよ。ただし、平面的に組み合わせるものとし、回転は含まない。」って、C Magazine のパズルみたい。
    <<<
    の後に

    > きっと誰かが釣られるはず(笑)

    と書いてあるのだけれど、誰も釣られてくれなかった。寂しい...
タイトル
名前
Url
コメント