[プログラミング言語の概念の理解]

様々なコンピュータ言語の入門的な書籍を買っては、理解できずに放置する有様です。
まず、読み始め最初の頃の配列の概念が、何に使うのかわかりません。
エリック・レイモンドが「Python」からはじめよう、といった論文を書いていました。
そうはいっても、スクリプトな言語でコンピュータの仕掛けが分からないままでは、
果たして自分は納得いくのか疑問です。
根本的なことを理解できずにいるので結局、アスキーのマシン語の本まで買ってしまいました。
その他、これはPerlの達人に「条件分岐が苦手なんだね」とも言われました。
それから一つを学ぶと他に応用きく(習得しやすい)と言う事がコンピュータ言語ではあるようですが、
根本的なことを理解できずにいるので、一体どこから始めればいいのやら・・・。
それで何年も習得できずにいます。
できれば、Windowsを利用しているのでC#ができるようになりたいです。
また、フリーソフト運動に参加したいとも考えておりますので、C/C++もできれば万々歳です。
言語の理解と言うよりも、概念の理解はどのようにしたらよいでしょうか・・・

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2010/02/20 08:22:46
  • 終了:2010/02/27 08:25:02

ベストアンサー

id:degucho No.2

degucho回答回数260ベストアンサー獲得回数692010/02/20 10:12:08

ポイント14pt

「理解できずに放置」しないことではないでしょうか。

分からなかったら分かるまで先を読まない、はてなで聞いてみるなど

専門書は高いのでもとをとってやるつもりで


個人的な感想ですが、覚えておくべき概念(言語というかコンピュータですが)は


・現在のコンピュータは代数学でできている

・処理としてはメモリの読み書きと四則演算のみ

(画面になにかしら出たりするのは特定のメモリに書き込むと

それを読み取って表示する機能がハード/OSにあるため)

・流れとしては順次処理、条件分岐、繰り返しの3種類しかない

(関数、オブジェクト、メッセージ、割り込み/並列処理などは二次的なもの)

・言語の機能とライブラリ/OS/ハードの機能を分けて考える

(Cなんか言語としてはものすごい小さいです)

・最終的にはマシン語になって動いている

・n進数と論理演算


くらいだと思っています


配列は、変数の取り回しを便利にするものであって

最悪なくてもなんとかなります。要らなかったら使わなければいいのです。

入門書に活用例が出ているとはおもいますが

必要になったときに便利さに気がつきます。


C#が出来るようになりたいならC#でいいと思います。

(C#は良く出来た言語です)

またスクリプト言語は仕掛けがわからないといいますが、

たとえばCPUの中がどんな仕組みでどんな動作をしているのか?

クロック4GHzってどういう意味?

トランジスタの中を電子がどのように動き回っているのか?

まで考えてプログラムを組んでる人はあまりいないと思います。

各言語はそれぞれ目的があって出てきたものですので

その言語が得意とする(言語開発者が意図したもの)ことが

出来ればいいと思います。


言語マニアは別ですが最終的に出来上がるソフトが重要ですので。

最初はこう書くとこうなる、やこれをこうしたいときはこうする、

のような逆引きの覚え方でもいいと思います。

数をこなすうちに見えてくるものがあるはずです。


作りたいものがあれば、実現方法を探るうちに自然と理解できると思います。

逆に言うと、作りたいものがなくてただ技術だけを身につけるのは

向いていない人には難しいです。


一つ覚えれば他の言語については覚えたものとの対比で覚えられるので

圧倒的に早く使えるようになります。

まずはどれか一つを覚えてください。

(長文すみません)

http://ja.wikipedia.org/wiki/%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B...

http://www.bgb.cc/bronson/helloworld/

id:xebecfrigate

詳細なご回答ありがとうございます。

長文で書いて頂くと、多くを学べます。

時間をかけて書いて頂き感謝いたします。

「覚えておくべき概念」は圧巻でした。

たったの10行・6項目でまとめるというのは驚きです。

数学に関して、昔入った大学の変な教養(課程)の方針(理系は文系の勉強しろ)があり、

また高校2年の微積の極大極小あたりでつまずいたので、教科書を読みなおそうかと。

質問で書いた、C#を学びたい、C/C++も将来できるようにしたいとの考えですが、

やはり言語に依らず、数をこなすことが重要であるという事ですね。

たとえれば柔道あたりで、技を覚えても乱取しないと意味がないと言ったところでしょうか。

VS2008のC#の解説書で「プログラムを作ろう!」という本があるので、

そこから勉強をやり直し、C#でMSのオンラインのマニュアル読みながら

作りたい・作れそう、そんなソフトを探して、レベルアップにつなげたいと思います。

しかしながら「概念~」のところの条件分岐と・繰り返しが苦手なんですよね(汗)

if-else、for、whileとか、ついでに論理的な条件分けとか、そのあたりですね。

ですがC#を薦めて頂いたことで、ぶれなく学習できそうです。

ありがとうございました。

配列など、便利に使いこなせられるように上達したく思います。

2010/02/21 07:39:04

その他の回答(12件)

id:rafting No.1

ラフティング回答回数2652ベストアンサー獲得回数1762010/02/20 08:40:05

ポイント14pt

「習うより慣れる」「理屈よりも実践が先」ではないでしょうか?

プログラマは自分が作ったものが動いたということが、単純な喜びとして、さらなるバリエーションを追い求めていく中で習得していくというプロセスを踏んでいる場合が多いと思います。

「概念」や「理屈」はある程度、使えるようになってからの方が意味を持つように思います。

http://q.hatena.ne.jp/answer

id:xebecfrigate

全くもって仰る通りです。

ただ、むかしPerlでデータ抽出を勉強しましたが、

中途半端な文法理解、それにPerldで何ができるか分かりませんでした。

(あらゆることができるとは、あとから分かったことです。)

また、恐らく「作りたいソフト」ができれば、まさに仰るように上達できると思いいます。

ただ何を作ればいいのか分からないのです。

お返事ありがとうございました。

2010/02/21 02:58:46
id:degucho No.2

degucho回答回数260ベストアンサー獲得回数692010/02/20 10:12:08ここでベストアンサー

ポイント14pt

「理解できずに放置」しないことではないでしょうか。

分からなかったら分かるまで先を読まない、はてなで聞いてみるなど

専門書は高いのでもとをとってやるつもりで


個人的な感想ですが、覚えておくべき概念(言語というかコンピュータですが)は


・現在のコンピュータは代数学でできている

・処理としてはメモリの読み書きと四則演算のみ

(画面になにかしら出たりするのは特定のメモリに書き込むと

それを読み取って表示する機能がハード/OSにあるため)

・流れとしては順次処理、条件分岐、繰り返しの3種類しかない

(関数、オブジェクト、メッセージ、割り込み/並列処理などは二次的なもの)

・言語の機能とライブラリ/OS/ハードの機能を分けて考える

(Cなんか言語としてはものすごい小さいです)

・最終的にはマシン語になって動いている

・n進数と論理演算


くらいだと思っています


配列は、変数の取り回しを便利にするものであって

最悪なくてもなんとかなります。要らなかったら使わなければいいのです。

入門書に活用例が出ているとはおもいますが

必要になったときに便利さに気がつきます。


C#が出来るようになりたいならC#でいいと思います。

(C#は良く出来た言語です)

またスクリプト言語は仕掛けがわからないといいますが、

たとえばCPUの中がどんな仕組みでどんな動作をしているのか?

クロック4GHzってどういう意味?

トランジスタの中を電子がどのように動き回っているのか?

まで考えてプログラムを組んでる人はあまりいないと思います。

各言語はそれぞれ目的があって出てきたものですので

その言語が得意とする(言語開発者が意図したもの)ことが

出来ればいいと思います。


言語マニアは別ですが最終的に出来上がるソフトが重要ですので。

最初はこう書くとこうなる、やこれをこうしたいときはこうする、

のような逆引きの覚え方でもいいと思います。

数をこなすうちに見えてくるものがあるはずです。


作りたいものがあれば、実現方法を探るうちに自然と理解できると思います。

逆に言うと、作りたいものがなくてただ技術だけを身につけるのは

向いていない人には難しいです。


一つ覚えれば他の言語については覚えたものとの対比で覚えられるので

圧倒的に早く使えるようになります。

まずはどれか一つを覚えてください。

(長文すみません)

http://ja.wikipedia.org/wiki/%E3%83%8E%E3%82%A4%E3%83%9E%E3%83%B...

http://www.bgb.cc/bronson/helloworld/

id:xebecfrigate

詳細なご回答ありがとうございます。

長文で書いて頂くと、多くを学べます。

時間をかけて書いて頂き感謝いたします。

「覚えておくべき概念」は圧巻でした。

たったの10行・6項目でまとめるというのは驚きです。

数学に関して、昔入った大学の変な教養(課程)の方針(理系は文系の勉強しろ)があり、

また高校2年の微積の極大極小あたりでつまずいたので、教科書を読みなおそうかと。

質問で書いた、C#を学びたい、C/C++も将来できるようにしたいとの考えですが、

やはり言語に依らず、数をこなすことが重要であるという事ですね。

たとえれば柔道あたりで、技を覚えても乱取しないと意味がないと言ったところでしょうか。

VS2008のC#の解説書で「プログラムを作ろう!」という本があるので、

そこから勉強をやり直し、C#でMSのオンラインのマニュアル読みながら

作りたい・作れそう、そんなソフトを探して、レベルアップにつなげたいと思います。

しかしながら「概念~」のところの条件分岐と・繰り返しが苦手なんですよね(汗)

if-else、for、whileとか、ついでに論理的な条件分けとか、そのあたりですね。

ですがC#を薦めて頂いたことで、ぶれなく学習できそうです。

ありがとうございました。

配列など、便利に使いこなせられるように上達したく思います。

2010/02/21 07:39:04
id:tetsu-pyon No.3

tetsu-pyon回答回数48ベストアンサー獲得回数112010/02/20 12:43:45

ポイント14pt

初心者的なことしかいえませんが、僕はN88時代のBasicからプログラムを学びました。

C言語のようにコンピューターに近い言語から学ぶのはハードルが高くちんぷんかんぷんだったので、まずは人間の言葉に近いBasicからはじめたのがきっかけです。

といっても年をとって頭が固くなったのでいまだにC言語には行き着いていませんが・・・

Basicは縦並びの文章で、ループや条件分岐、サブルーチンを組み合わせることでひとつのプログラムとして成り立ちますが、VBやVBAなどはオブジェクト思考になっておりその考えに慣れるまでは一苦労しましたがプログラムのルール基本的に同じなので比較的学びやすかったです。

Basicで言えば変数は箱で、配列変数は引き出しの沢山ある箱というように理解していました。

変数はXやYなど、もしくは任意の文字列であらわしますが、配列の場合にはA(X,Y)のように同じAに関して沢山の箱が用意出来ます。

よく自分のクラスの試験の成績をまとめるときなどの例題で示していること多いですよね。

X=1:国語、X=2:数学・・・のように決めておけば、全員の40人の成績をまとめるのもA(5,40)とひとつの変数で表すことが出来ます。

国語の平均点を出す場合には

For i=1 to 40

kokugo_total = kokugo_total+A(1,i)

Next i

kokugo_heikin = kokugo_total / 40

のように数行での記述が可能ですし、教科毎の平均も配列変数にしてしまいループを組み合わせれば全教科の平均も簡単にあらわせます。

難しい言語は僕もわかりませんが、基本的な考え方は同じだと思います。

的外れな返答だったらすみません。。。

↓ フリーで使用可能なWindows上で使えるBasic言語です。

コンパイルも出来て面白いと思います。

http://download.goo.ne.jp/software/contents/soft/winnt/prog/se20...

http://www.vector.co.jp/soft/win95/prog/se117283.html

id:xebecfrigate

御回答ありがとうございます。

御親切にリンクを張っていただきありがとうございます。

N88BASICですが、大学の学生実験で触ったことがあります。

もちろん、質問文に上げた「配列」などは使いませんでしたが。

ここで上にあるC#で、「C#の絵本」と言う本のさわりを読みましたが、

図で説明があっても、それは何に使うのか?

どのような時に使うのか、そういった事が分からないのです。

そして「配列」などの、(恐らくそれは)データの処理の方法・枠組みと思いますが、

理解できない「概念」がデータの処理ならば、そういったものは

C#で覚えてしまおうか、そのように考える次第です。

2010/02/21 08:32:22
id:km1967 No.4

km1967回答回数541ベストアンサー獲得回数402010/02/20 13:00:27

ポイント14pt

質問の趣旨がよく分かりませんが

「配列」とは同じようなデータの集まりを意味します

http://e-words.jp/w/E9858DE58897.html

id:xebecfrigate

御回答ありがとうございます。

2010/02/21 14:05:52
id:AmaiSaeta No.5

天井冴太回答回数74ベストアンサー獲得回数82010/02/20 13:29:39

ポイント14pt

そうはいっても、スクリプトな言語でコンピュータの仕掛けが分からないままでは、

果たして自分は納得いくのか疑問です。

根本的なことを理解できずにいるので結局、アスキーのマシン語の本まで買ってしまいました。

と言う質問文から、質問者は『高度/複雑な知識を尊び、それらを簡単に使えるようにしたものを過小評価する』という性格なのではないかと想像します。

貴方は、

  • ドレミしか知らない人間が、いきなりピアノで高難易度の曲を弾こうとしている
  • 食材を細かくするのに、ジューサー等の機械を使えば簡単に済む筈の部分を敢えて手作業でやろうとしている

の、2つの誤りをこなそうとしているように見えます。

(私はPythonは使った事無いので、その言語自体についてはとやかく言えませんが、)最初はスクリプト言語でも良いのです。質問文後半で挙げられているC、C++、C#と言った言語と根本から異なる訳ではありませんので。プログラミング言語の大体の概念を理解してから、それらを勉強しだしても何ら問題有りません。

少なくとも、現状で機械語に手を出すのはおすすめ出来ません。

機械語で操作するような『根本的な事』は、正に、上に挙げたピアノの高難易度の曲と同じです。少しずつ、納得出来る技術/知識までレベルアップしていきましょう。

確かに『配列は何に使えるのか?』には私もちょっと悩んだ記憶があります(懐かしい!)。

プログラミングにて登場する概念を理解するコツは、現実の何かに対応付けてみる事だと思います。配列という概念を使って、一体何が表現出来るか?考えてみましょう。

手元に入門書の類があるならば、そこに掲載されているサンプルコードを、その概念を使わずに書けるかを考えてみるのもいい方法でしょう。貴方の持つ入門書の配列の項にはどのようなコードが載っていますか?それを配列を使わずに書こうとしたら、どうなるか考えてみましょう。

しかし、そのようにしても、その内どうしても理解出来ないものが出て来ます。私の場合を例に挙げると、ポインタと継承がそうでした。

それらはどうすればいいのか?一度寝かせておきましょう。教科書の解説の文句を頭に入れて(入れるだけです。理解しなくて良いです)、学習を先に進めましょう。ある日唐突に理解出来るようになります

文字にするとオカルトチックですが、事実です。学習を進めるうちに、その時理解出来なかったナニモノかを使わなければ実現出来ない処理を知る事になります。そこで、「ああ、あれはこういう時に使うのか!」とひらめく事が出来るのです。

※URLはダミーです

http://q.hatena.ne.jp/1266621765

id:xebecfrigate

御回答ありがとうございます。

勢いのある文章で、学習意欲をかきたてられます。

一度書いた文章が、文字コードがでたらめになり、思い出しながら要点を返信いたしますと、

・Windowsのキーバンドを変更するソフトがWin7で使えない。

・なのでカーネルに近いところで動作すると思うので、CやC++の名前を出した。

・スクリプト言語を軽視したつもりはないが、上記を実行すると思うと、質問文のような書き方になった。

・しかし全くもって仰る通りに、高望みをし過ぎていた。

・エリック・レイモンド氏が"How to become a Hacker"の中で、Pythonを始めての方に進めている。

・tetsu-pyon さんのおっしゃるN-88 BASICは今なら、Pythonなどではないだろうか?

・ならばC#始める前ににクッション挟んでPythonで仰るようにいじったほうが良いのではないか?

・それでもC#から始めてもいいのではないかな・・

・続けていれば理解は後から付いてくるようですね。

などと言った事を破損した元の文章で書いておりました。

詳しく具体的に御回答いただきありがとうございました。

理解はあとから付いてくるという、頭の仕掛けと言うのでしょうか、

そういった事があるならば、長期間の修行にも挫折をせずに続けられそうです。

ありがとうございました。

2010/02/21 09:07:16
id:abaca No.6

abaca回答回数11ベストアンサー獲得回数02010/02/20 13:55:52

ポイント14pt

大変まじめで、何事も理解してからでないと先に進めない性格のようですね。

しかし、プログラムの習得にはある程度割り切って先に進むことが必要です。

今のPCを理解するのは不可能です。CPUの中身は到底普通の人には理解できませんし、Windowsもとてつもなく複雑です。車の運転を覚えるのにエンジンの仕組みから勉強するのは無意味ではありませんが、必要とも思えません。プログラムも同じです。

さて配列ですが、エクセルの表は2次元の配列だと考えるとわかりやすいと思います。

縦方向や横方向への計算がとても簡単にできます。もちろん縦横両方あわせた計算も出来ます。エクセルで表にするような事柄は配列向きです。

学校の成績表などは良い例だと思います。一列目に名前、二列目に英語の点、以下適当に。

これを横に計算すれば各人の合計点数が直ぐに得られます。縦に合計して人数で割れば各教科の平均点が得られます。

これを配列を使わないで実現するのは現実的ではありません。例えば40人の5教科の点数を格納する変数を作るだけでも大変な作業です。例えば阿部君の英語の点はabeeigoなどとやるわけですから。合計するプログラムは変数名の入力だけでも大変な分量になるでしょう。

変更も大変ですし、応用ができません。隣のクラスの成績はどうしましょう。学校全体は?

多次元の配列なら変数名は1つですみます。

習得言語ですが、Cをお勧めします。C++もC#もCの延長ですから。

Cの良いところはwindowsと関係なく動作するのでCのことだけ勉強すれば覚えられます。

http://www.kumei.ne.jp/c_lang/index_c.html

windowsの上で何かするプログラムになるとwindowsについてのある程度の知識が必要になるので、難しくなります。まずCがマスターできたらC#を勉強するのが良いでしょう。C++は難しいです。

Perlは勉強用というより実用向けなのでお勧めできません。windowsやwebの仕組みについてかなりの知識がいると思います。

http://ja.wikipedia.org/wiki/Perl

id:xebecfrigate

御回答ありがとうございます。

配列に関して詳しい説明をいただきありがとうございます。

よくわかりました。

やはりC言語から始めたほうがいいのでしょうか。

柴田望洋先生のと結城浩先生のC言語の一番簡単な本を持っていますが、

これをじっくり読む、というのがいいのでしょうね。

Perlはかつて参考書を見て愕然としたのが一つあり、

for(;;)

と書いてあるのが、当初理解できませんでした。

ループせよ、だと後から気がつきました。

省略が激しくて、読めなかった記憶があります。

Python や Rubyなどの学習から始める選択肢がありますし、

上のほうでそれから始めようかと書きましたが、

上から順に読み書きしておりますので、

読んでいる方からは、考えがコロコロ変わっていると受け取られるかもしれませんが、

やはりC言語からかな、と、思うようになりました。

またサイトの紹介ありがとうございます。

「猫でもわかる」ですね。

C#もあり、よく読んでみます。

ありがとうございました。

2010/02/21 13:22:28
id:rawwell No.7

ピロシキ(id:rawwell)回答回数91ベストアンサー獲得回数102010/02/20 17:26:42

ポイント14pt

まず、こちらのような本で、配列を含むデータ構造について

おおまかに理解するのはいかがでしょうか。

明解C言語によるアルゴリズムとデータ構造

明解C言語によるアルゴリズムとデータ構造

  • 作者: 柴田 望洋 辻 亮介
  • 出版社/メーカー: ソフトバンククリエイティブ
  • メディア: 大型本

 

そして、ある程度Cについて理解を深めてから、

C#とCの違いに注意しながらC#を

学習していくと理解が深まるかと思います。

(URLはダミー: http://q.hatena.ne.jp)

 

 

id:xebecfrigate

御回答ありがとうございます。

上のほうで配列はデータの扱いと書きましたが、

この本のタイトル通り、データの構造でしたか。

しかし柴田先生の本は確かに「明解」ですが、

明解C言語の一番簡単な本を持っていますが、

進められなかった経験があります。無味乾燥で。

まず持っているC言語の参考書を読破してから、

データ構造・アルゴリズムを理解しようと思います。

(んん・・・、それだからこそのこの本なのでしょうか・・・?)

早めに本屋で確認してみたいと思います。

ありがとうございました。

2010/02/21 13:27:05
id:vh5150 No.8

vh5150回答回数231ベストアンサー獲得回数52010/02/21 04:48:04

ポイント14pt

私も学生の頃,同じように悩んだことがあります.

いわゆる入門書の積読状態で,文法以外のことがよくわからなかったです.

現在は仕事で様々なプログラミング言語を使ってシステムを作れるようになりました.

プロセスは以下のような感じです.

  1. 卒業研究で,ソースコードに書かれているパラメータを弄って研究を進めた(この時点では文法がやっと理解できるレベル)
  2. 簡単な処理を大量に行うことを頑張ってプログラミングでやってみる(ライブラリリファレンスを見て,意味がわかるレベル)
  3. 就職し,プログラミング研修をやる(Java)
  4. Felicaを使ったデモシステムの開発(C++)
  5. 社内ツール開発(Java)
  6. 文教システム開発(Java+ActionScript)

実際にガリガリコードが書けるようになったのは4〜5の間くらいです.

この辺りでどういった変化があったかというと,

  • プログラミングしないと仕事ができないずに叱られるので,渡されたリファレンスを何度も読んだ
  • 平行して,自宅では仕事とは別の言語を学習した

特に別の言語を学習したのは良かったみたいで,JavaでわからないところがあってもPythonで理解できたからJavaでわからないこともわかった事が多々ありました.


私の経験をまとめると,以下のことをやってみてはどうでしょうか.

  • 複数の言語を同時に学習してみる(PythonとJavaがオススメです)
  • 簡単な処理(ファイルのリネームなど)をするプログラムを作ってみる
  • サンプルコードを眺めてみる(Pythonならhttp://code.activestate.com/recipes/など)
  • ライブラリリファレンスを眺めてみる

Pythonのチュートリアルは一通りやると,なんだかプログラミングが出来るような気がするのでオススメです.

id:xebecfrigate

またまた、外部エディタで書こうとして、文字コードが壊れてしまい、書き直しです。

御回答ありがとうございます。

実際に学習された過程を読んで、問題は言語の選択のことではなく、

小さいコードを書いてプログラムを作ってみることだと思うようになりました。

これは5番目にご回答をいただいた、AmaiSaeta さんの言う事とも合致し、

やはり初めは小さいのをこつこつやっていくことの重要性を認識しました。

ですので方向は決まりました。

この場を借りて、御回答いただいた皆様に感謝を申し上げる次第です。

エリック・レイモンド氏の"How to become a hacker"の通りのPython -> JAVA -> C/C++ -> ...

と連なるやり方にそっくりです。

簡単な返信になってしまいましたが、文字コードの失敗によって、4分の1くらいになりました(涙)

2010/02/21 14:01:04
id:garyo No.9

garyo回答回数1782ベストアンサー獲得回数962010/02/21 08:17:30

ポイント14pt

職業プログラマですが、私も新しい言語を覚えるときは最初は分からないことが山ほど出てきます。

それでも気にせずにサンプルソースを打ち込んで実行して行くうちに

「なるほど、そういう意味だったのか!」とわかってきます。


1.最初は参考書を読んでサンプルソフトを入力して、「この言語では何ができる」ということを知ります。

2.サンプルソースを少し自分で考えて変えてみます。自分で考えるのが重要です。

3.そのうち「○○のやり方は××に書いてあったから、△△を変えればできるはず」という風に使いこなせるようになります。


プログラム言語の原型はノイマンの考えた「チューリングマシン」

http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%A...

チューリングの仮想機械は、

1. 無限に長いテープ

2. その中に格納された情報を読み書きするヘッド

3. 機械の内部状態を記憶するメモリ

で構成され、内部状態とヘッドから読み出した情報の組み合わせに応じて、次の動作を実行する。

* ヘッド位置のテープの情報を読みとる

* ヘッド位置のテープに情報を書き込む

* 機械の内部状態を変える

* ヘッドを右か左に一つ移動する

上の動作を、機械は内部状態が停止状態になるまで反復して実行し続ける。

ノイマン型のコンピューターの基本は上記の動作になります。

例えば

http://ja.wikipedia.org/wiki/Brainfuck

Brainfuckという言語では

実行可能な命令は次の8つのみである。

1. > ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。

2. < ポインタをデクリメントする。C言語の「ptr--;」に相当。

3. + ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。

4. - ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。

5. . ポインタが指す値を出力する。C言語の「putchar(*ptr);」に相当。

6. , 1バイトを入力してポインタが指す値に代入する。C言語の「*ptr=getchar();」に相当。

7. [ ポインタが指す値が0なら、対応する ] の直後までジャンプする。C言語の「while(*ptr){」に相当。

8. ] ポインタが指す値が0でないなら、対応する [ にジャンプする。C言語の「}」に相当。

たった8個の命令だけで言語を構成していますが、原理上はノイマン型言語にできることは全てできます。

チューリング完全な(チューリングマシンで実行可能なあらゆるプログラムが記述できる)言語であり、理論上はC言語などの普通のプログラミング言語と同等の表現力を持つ。

だからといって単純なわけではなくBrainfuck(ブレインファック)は難解プログラミング言語のひとつです。通常の言語は人間が使い易いように色々命令を拡張しています。


(配列というのも上記の「無限に長いテープ」をイメージしたものなのですけどね)

数学の形式体系はすべてこの仮想機械の動作に還元できるといわれている。この機械で決定できない命題も存在する。例えば与えられたチューリング機械が停止するかどうかをチューリング機械で決定することはできない(停止性問題)。これはゲーデルの不完全性定理の別表現とみなすことができる。

例えばプログラムにバグがあるかどうか判定するプログラムができないのは上記を使って証明されます。


もう一つのプログラムの原型は「ラムダ計算」です。

http://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%A0%E3%83%80%E7%AE%9...

ラムダ計算はチューリングマシンと等価な数理モデルなのでチューリングマシンで出来ることは全てラムダ計算で可能です。

id:xebecfrigate

御回答に感謝いたします。

大変興味深いお話をありがとうございます。

学習が進んでから、また読み返させていただきます。

2010/02/21 14:05:00
id:b-wind No.10

b-wind回答回数3344ベストアンサー獲得回数4402010/02/21 17:13:18

ポイント14pt

いままでのやりとりを見る限り、やる前に頭で考えすぎな気がする。

「まず書け」そして「人のコードを読め」これに尽きる。


言語は正直何でも良いが Windows に標準搭載されて動作が簡単に確認できるという意味で

VBScript を勧めておく。

最速攻略 VBScriptサンプル大全集

最速攻略 VBScriptサンプル大全集

  • 作者: 結城 圭介
  • 出版社/メーカー: 技術評論社
  • メディア: 大型本


一応デスクトップアプリ志望のようでもあるから目指すは VisualBasic じゃないのかな?

C# は言語としての出来はよいが、ユーザー数の違いにより参考文献が少ない傾向にある。

まぁ、どちらを選んでも損はないと思うけど。

id:xebecfrigate

御回答ありがとうございます。

さて、御回答の件ですが、私もそのように考えております。

背中を押して頂きありがとうございます。崖から落ちずに、飛べるよう頑張ります。

時間も時間で、頂いた情報程にはお礼の言葉を申し上げられませんが、

気軽に作れるというのは、今までの失敗を思い返せば、かなり心の負担が減ることになるだろうと思います。

実際ここ何年かはWindowsしか使っておりませんし、フリーウェアの設定のON/OFFを

設定ファイルにて行ったりもしますが、その設定ファイルがVBScriptで書かれていることもあり、

身近かなと感じます。

大変参考になる御回答をいただきありがとうございました。

2010/02/22 00:53:32
id:Endows No.11

えんどう回答回数169ベストアンサー獲得回数72010/02/23 18:24:22

ポイント14pt

私はインターネット上で動作するJavaScriptを覚えました。

どのプログラミング言語に限らず、やはり最初はプログラミングのサンプル本に書いてある通りの構文を書いてそれから数値や真偽値を自分で変えてみるという方法はどうでしょうか?

私も最初のうちは本の通りに書いて覚えました。どういうところが命令していて、どういうところがデータ値なのかが把握できて、実際に自分で作れたとき、初めて覚えたという実感がわくと思います。

JavaScriptは「=」「"」「;」などを使って命令したりするものですが、これを理解するのに本を買ってから1ヶ月以上はかかりました。でも使っていくうちにだんだんどういう命令なのかが文字を見るだけでわかったので、私のような例文通りに書いて、それから自分で数値や真偽値を変えてみるという覚え方をおすすめします。

id:xebecfrigate

御回答ありがとうございます。

10番の b-wind さんのVBScriptを時間的な制約があり、少しだけ調べてみると、

WSHという仕掛けを使うらしい。

そこではVBScriptだけではなくJScriptなるJavaScriptも利用可能…らしい、と書いてありました。

それからJavaScriptはサーバを立てないといけないのでしょうかね?Apacheとか。

私のか細い記憶によれば、ブラウザで動くのですよね。

コーディングも何かの開発環境ではなく、ブラウザで動作確認をできるならば、

簡単に「メイク&トライ」ができそうです。

VBScriptと一緒に勉強しようと考えます。

・・・HTML、CSS、JavaScript、PHPなどが分かるとサイトを作るときに役立ちそうです。

ありがとうございました。

2010/02/24 05:27:33
id:hiroponta No.12

ぽこたん回答回数517ベストアンサー獲得回数262010/02/23 20:10:46

ポイント13pt

私も同じようにプログラミングをやっては放置を繰り返しているので、

お気持ち良く分かります。

CとかJAVAとか、Perlなどは比較的高度なプログラミング言語とされているので、

PHPなどを触れてみる事をお勧めします。

また、プログラミングは、集中的に取り組まないと忘れてしまいます。

PHPを集中的に取り組んでみてはいかがでしょうか。

特に書籍を買う必要もなく、適当にネットで探す事が良いです。

紙に要点を整理しながらというのも良いでしょう。

http://w1.nirai.ne.jp/freeze/

id:xebecfrigate

御回答ありがとうございます。

11で書きましたが、仮に自分でサイトを持つにあたって、

PHPを書くことができるのは強い味方になりそうです。

しかし、確か8年くらい前にプログラミングもできないのに、

Debianをデスクトップで使っていた(汗)とき、2ch専用ブラウザで

PHPで作ったものを一時、試験使用したのですがApacheが必要ですよね・・?

Debian GNU/Linuxだと、"apt-get install apache"でお気楽に環境整備ができたのですが、

さてさて、Windowsだとどうでしょうか。

なにかサイトを持ちたいと考えておりますので、PHPは避けて通れない道だと思いますが、


上記のVBScriptとJavaScript、これらがCや他と同様に(独り歩きしている)「配列」や

あとは2番の degucho さん記述の、私が苦手としている「順次処理」、「条件分岐」、「繰り返し」。

それからVBScriptやJavaScriptには「構造体」はあるのでしょうか、

そういった「文法」の「意味するところ」。

何に使うのか?それはどういう仕掛けなのか?これを「概念」と私は書きました。

それからやはりdeguchoさんの書かれた

> 理解できずに放置」しないことではないでしょうか。

> 分からなかったら分かるまで先を読まない、

これが全くの図星ですので、現在のところWSHのVBScript(とJavaScript)で

なんとか上の条件分岐などの理解に努めたいと考えております。

ですが、WEBサーバー構築の際にはPHPの勉強をいたしたく思います。

御回答ありがとうございました。

2010/02/24 05:52:07
id:yasu_sinjuku No.13

やす@新宿回答回数71ベストアンサー獲得回数102010/02/24 04:20:49

ポイント13pt

CP/Mの時代からプログラムをしてきました。

現在はホームページの制作会社を経営しています。

プログラミング自体は、最近では、phpでちょっとしたスクリプトを書く程度です。

以前は、3次元のCADの開発をしたり、かなり大規模なアプリケーションの開発にも携わっていました。


>できれば、Windowsを利用しているのでC#ができるようになりたいです。

>また、フリーソフト運動に参加したいとも考えておりますので、C/C++もできれば万々歳です。

>言語の理解と言うよりも、概念の理解はどのようにしたらよいでしょうか・・・


コンピュータ言語は、そもそもマシン語で記述するのでは、開発効率が悪いので、もっと人間が話す言語に近い言葉で、記述出来ないかと言うことで、開発されました。

黎明期には、FORTRANやCOBOLが開発され、現在でも使われています。

また、マイクロソフトがこれらのコンパイル言語とは違う、インタープリター型の言語、BASICをMS-DOSに実装させ、パソコン言語の主流となりました。

現在でも、VBScriptやVBとして、その流れは、残っています。

その後、これらの言語を使って開発を進めると様々な問題が出てきました。

これらの問題を解決するために構造化プログラミングが提唱されC言語が登場してきました。

さらにこのC言語でも問題が出てきて、オブジェクト指向言語が提唱されC++が登場してきました。

現在でも、CやC++は多くの現場で使われている言語です。


言語として習得しておくと、概念の理解が深まるのは、C言語に間違いありません。

C言語を使ったオープンソースの開発コミュニティーに参加して、自分なりに理解を深めて行くと良いでしょう。

マイクロソフトの技術もこれらのオープンソースをもとにしています。

C言語の習得に成功すれば、C++は意外と早く習得できると思います。


C#に関しては、Windows系の言語と言うことで、勉強するには、C言語の勉強とは、方向性が違います。

C#も良い言語ですので、C#を習得すると概念の理解が深まるのも事実です。

また、Cのオープンソースほど多くは、ありませんが、C#のオープンソースもあります。


ただし、プログラム自体が最低でも数万ステップと大規模になっているため、全部を読むわけには、行きません。

自分で目的を持って、ソースを読み込んで行く、デバッグをしてみる事が大切です。

この目的の設定が難しいので、まずは、色々と検索される事をお勧めします。


きっと、配列の概念なんて、おまけで習得出来てます。

id:xebecfrigate

御回答ありがとうございます。

早朝からの御回答、お礼申し上げます。

これまでのコンピュータ言語の成り立ちをご説明いただきありがとうございます。

C言語に関して、なぜ理解が進まなかったのだろうか、と考えた際、

やはり、2番目の回答の degucho さんの仰る、分からなくなってそのままにする、

これが原因かと考えております。

また、柴田望洋先生の参考書(C言語の一番簡単な奴です)を使って居りましたが、

これまた回答11番の Endows さんの言われている、

> やはり最初はプログラミングのサンプル本に書いてある通りの構文を書いて

> それから数値や真偽値を自分で変えてみるという方法はどうでしょうか?

これがなかったと思います。読む、写す、それだけだったと。

まずは文法学習をし、フリーソフトなどのソースコードを読めるようにしようと思います。

Cなどの前に VBScriptをできるようにしたいと思っているのですが、

全くの射程外であり、Cの基本書はいくつかある。

何だか何の言語から始めるのか発言に一貫性がありませんね。

皆様のせっかくの御回答ですが、ふらふらしている。

この場合は出回っている日本語での情報量の多さを基準にしようと考えます。

例えばVBScriptよりPythonがググると検索回数が多い。

Pythonより、VBAやVBのほうが多い。

それらはWindowsではMS-Officeと連携できる。

これらを基にすると、VBScript経由で何か書けるようにし、

Cをアルゴリズム付きで学び、あとは・・・OOPな言語でしょうか。

起きている間にそんな夢見ました。

詳しく御回答いただきありがとうございました。

2010/02/24 06:18:57
  • id:vh5150
    VBScriptはプログラミングを学ぶ上ではあまりお勧めできません。
    実用的なプログラミングをやりたいという目的であればお勧めできますが。

    最終目的はC#でプログラミングをするということですので、Pythonを強く推奨したいです。
    Pythonを学ぶと、C#の理解もしやすくなると思います。
    何より、PythonとC#は連携しやすく出来ているので、学習したことやプログラムが無駄になりません。
    http://codezine.jp/article/detail/2187
  • id:kkod_trick_rain
    ぜいいんのと同じです
  • id:b-wind
    >VBScriptはプログラミングを学ぶ上ではあまりお勧めできません。
    >実用的なプログラミングをやりたいという目的であればお勧めできますが。

    まぁこれはその通りではあるんだが、質問者の場合
    「学ぶ」以前に手を動かしたほうがいいと思ってね。

    言語の優劣を語りだしたら宗教論争になりそう…。
  • id:uml
    >Pythonを強く推奨したいです。
    今日見かけた記事だが、Pythonなんてユーザーがほとんどいない言語を進めるのはどうかと思う。


    >役立った言語・ツールは「VB」や「C」、今後習得したいのは Web 系技術―IT 系転職者アンケート
    http://japan.internet.com/wmnews/20100225/5.html
  • id:standard_one
    マシン語の本が理解できたなら配列もポインタも”実際どうなっているのか”がわかるはず
    ようは言語の枠に縛られない基本的な知識が身に付いているはず
    もしかして本は買ったけどページをめくっただけだったのでは?
  • id:deep_one
    私はCの共用体がなんのためにあるのかさっぱり分からなかった記憶がある(笑)

    配列とかは「なんのためのものか」という点が明快なはずなので、手にした書籍が不適切なのではないかとも思う。たぶん、質問者のようなタイプの人は簡単な「実例」が多く含まれるものをまず読むべきではないかと。


    あと、google app engineなどでも使われるPythonは充分メジャーです。
    利用の中心はlinux系である気がしますが。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません