人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: xebecfrigate
●カテゴリ:コンピュータ
✍キーワード:C# C/C++ Perl Python Windows
○ 状態 :終了
└ 回答数 : 13/13件

▽最新の回答へ

1 ● ラフティング
●14ポイント

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

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

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

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

◎質問者からの返答

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

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

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

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

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

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

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


2 ● degucho
●14ポイント ベストアンサー

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

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

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


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


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

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

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

それを読み取って表示する機能がハード/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/

◎質問者からの返答

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


3 ● tetsu-pyon
●14ポイント

初心者的なことしかいえませんが、僕は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

◎質問者からの返答

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

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

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

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

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

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

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

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

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

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


4 ● km1967
●14ポイント

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

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

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

◎質問者からの返答

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


5 ● 天井冴太
●14ポイント

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

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

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

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

貴方は、

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

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

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

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

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

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

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

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

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

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

※URLはダミーです

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

◎質問者からの返答

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


1-5件表示/13件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ