プログラミングの本質とは、「問題解決」だと思います。プログラミングと問題解決の理論はよく似ています。
http://www.itmedia.co.jp/enterprise/articles/0802/06/news011.htm...
(1)
プログラミングは
コンピュータを動作させるために指示を出す行為。
言語は
そのための手段。
プログラミングの本質は
コンピュータを意図したとおりに働かせる事。
(2)
どのような目的でコンピュータに作業させるのかによって
適切な言語を選択する能力もまた必要であったりはするけれど
幅広く色々な言語を習得するのは困難であったりもするので
まずは色々なタイプ(関数型とか、手続き型とか・・・。)の特徴を知り
その学部の分野で主に使われているものについて学習することになります。
かの質問は、自分の学部の講義にてSchemeが選択されている理由を
知らない(あるいは聞いてない)のではないかと思います。
Schemeを学ぶ事に疑問が生じ、他の言語にすべきではないかと考えて
何を選択すれば良いかを訊きたいのではないかと思いますが
学部がどのような分野であるかが判らないと適切な回答は来ないでしょう。
ダミー
プログラミングの本質とは、「問題解決」だと思います。プログラミングと問題解決の理論はよく似ています。
http://www.itmedia.co.jp/enterprise/articles/0802/06/news011.htm...
自分で納得のできる範囲できれいなプログラムを書き、そしてそれが想定通りに効率よく動くものを作ること。
・誰の目から見ても美しいコードであること (設計&プログラミング)
・正確に動くこと
・効率よく動くこと
・バグを最小限に抑えること
つまり、プログラミングとは【美学の追究」です。
dummy URL : http://www.google.co.jp/
学校で勉強するならば、
ノイマン型コンピュータの逐次処理型の考え方が理解できればいいと思う。
分岐して、ループして、カウントして、ジャンプして・・・
という考え方が理解できて、順を追って実行していることが理解できて、動かないときに何が悪いか解析できる力をつけることが必要でしょう。
プログラム言語の文法は実際の言語を実行するときに無視はできないんだけど、最低限動くことができれば、言語ごとの勉強は必要な各人が学べばいいのでは。
次に実際の研究で使えるものが組めれば、それはそれはいいのだけど。
下記の2種類の質問が混合していて質問の意図が不明確になっている
# もしかしたら「あえて」混乱させるような質問の仕方をしたのかもしれないけど
・プログラミングの本質は何だと思いますか?
・プログラミングとはどういうものかと思いますか?
私の一意見としては
・プログラミングの本質は何だと思いますか?
→データ構造 & アルゴリズム、そしてデバッグ
・プログラミングとはどういうものかと思いますか?
→プログラムを作り、検証する行為
でも多分、これは質問者が想定している回答じゃないだろう
一番近いと思われるのは
ポール・グレアム「プログラミング言語が解決するもの」
http://d.hatena.ne.jp/lionfan/20070206
だと思う
やりたいことの漠然としたイメージを、あいまいな解釈が不可能な単位にまで分割した細かい手順の集合に変換すること。
これがプログラムの本質だと思います。
dammy url:http://q.hatena.ne.jp/
本質としては日本語をプログラミング語に翻訳すること思ってます。
翻訳をミスせず意図通りにコンピュータに伝え、動作させることです。
翻訳するときにどの言語を選択するかは自由ですが、
言語ごとに方言があるところを覚えないといけないだけです。
ただコンピュータに伝えるので、
コンピュータのことを知っておくと、より正確に伝えるようになるだけです。
Schemeを選択するのはコンピュータのことを詳しく知りたいだけで、
プログラミングの本質ではない気がします。
あと、ソースの設計はまた別の話。
使いやすさや見易さ、メンテナンス性、変更対応度とかの話は本質ではない。
http://q.hatena.ne.jp/answer ダミーです。
課題を解決するため、あるいはシステムを実現するための、手段の細分化とテスト・結合です。
細分化は、機能ごとにレベルを決める必要があります。
普段の生活や仕事、コンピュータプログラミングにおいても何ら変わりはありません。
本質的には「計算機にやりたいことをさせる」というのが一番だと思います。プログラミングはできるけど、欲しい機能が実装できなければ意味がないわけですし。
ということが前提にあって、その後に、
「高速に処理できる方法」
「見やすいコードにする方法」
「メンテナンスしやすい方法」
等があると考えています。
上記に挙げたような事項は、状況によって優先度は変わりますが、いずれも大切な概念なのはもちろんだと思います。
http://www.bk1.jp/product/00444362
偉大なる先達が答えを出しています。「アルゴリズム+データ構造=プログラム」と。
プログラミングの本質とは,処理の対象を表現するデータ構造を定義し,処理するためのアルゴリズムを記述することである,ということです。よってプログラミングを学ぶ際には,豊富なデータ表現型を持ち,自然なアルゴリズム記述ができるプログラミング言語が適していると思います。
そして,最初に学ぶ言語では,この二つがある程度「峻別」されていることが重要だと思います。データと処理内容が本質的に同じものとして扱われるプログラミング言語(たとえば関数自体をオブジェクトとして扱うことができる言語)は,きわめて豊かな表現能力を持っていることは事実です。しかし,その混合は初学者にとって理解の妨げにしかなりません。
それらを学習するのは二つ目以降の言語でのほうが良いと思います。
私は、対象のモデリングだと思っています。
モデリングとは、対象を、何らかの方法によって何らかの観点に沿って、適切に写し取る事です。造形やCGでも言いますね。
対象は具体物とは限らず、CGなどでは想像上の風景やキャラクターだったりします。
プログラミングでは、たいていの場合、対象は何かの課題です。
課題は、「最小公倍数を求める」のように小さく具体的な物から、
「会社の経営財務状態の可視化」のように大きく抽象的な物まで、色々あります。
対象(課題)をよくよく観察(要求分析)して、その構造や要素の細部まで、
余すところなく、一貫した観点(考え方)で、プログラミング言語によって写し取るのです。
プログラミングでモデリングというと、UMLなどのオブジェクト指向の話かと想う人もいるかも知れません。
たしかに、オブジェクト指向は、人間の世界認識によくフィットするモデリングの流儀で、プログラミングをするのが人間である以上、有効なものだと思います。ですから、メジャーなプログラミング言語が、その思想にあったモデリングの流儀(オブジェクトシステム)を言語に組み込んで提供するのも自然な事だと思います。
しかし、プログラミングがモデリングだというのは、オブジェクト指向限定の話ではありません。オブジェクト指向でなくても、関数であれ述語論理であれ制約であれ命令であれ、手法や見方は違えど、どんな道具立てや流儀でも、課題を適切に写し取ると言う事は変わりません。
これは、抽象的な設計レベルの事だけを言っているのではありません。モジュールやクラスはもとより、何かの関数・メソッド、果てはローカル変数まで、それぞれ、課題の何かの要素を適切に写し取ったものであり、一貫してその写し取ったものでなくてはいけません。ですから、「取引前の残高」を表す変数が場所によって「取引後の残高」になっていたら、あるいは、「xドルを引き落とす」関数がよそで「xセント引き落とす」関数として現れていたら、あるいは、あれこれやっていてそれが対象の何であるのかあやふやな関数があったら、それは適切に一貫して対象を写し取っていないと言う事であり、(仮に今は問題となる現象が起きてなくても)バグなのです。
対象を十分に観察(もちろん、内省的な物を多分に含みます)し、構造を細部からきちんと構成するように一貫して適切に写し取れば、バグも少なく、メンテナンスもしやすい、適正な効率で動くよいプログラムが出来上がります。
なお、探査的プログラミングも、最初に対象全体を観察する事が難しく、細部や見えているところから薦めるという、順番の違いがあるだけで、根本は変わりません。
「プログラミングとはコンピュータにどう動いて欲しいのかを書き下したもの」という説明がよくされますが、これは、道具立てに関わらずに命令的発想に拘り、「動き方を書く」「結果的に動けばいい」という認識を引き摺りかねない、非常に不幸な事だと思います。
先にした回答があまりに質問者さんの意向を無視していたので、とってつけの補足です。
本質は適切な描写であり、言語はその道具です。道具は非常に大事ですが、道具によって色んな見方・手法・流儀があり、特定の物に視野を狭めて偏らないよう、五徳ナイフ的枝切鋏的なOzなんてどうでしょう。…私は習得していませんが(^ω^;)
http://ja.wikipedia.org/wiki/Oz_%28%E3%83%97%E3%83%AD%E3%82%B0%E...
【プログラミングとはどういうものかという本質】は,プログラミングとはどういうものかという問題設定の本質ないしプログラミングの本質にとられます.
前者に対する僕の考えは,特にありません.
おそらくhttp://q.hatena.ne.jp/1221708568での質問者の意図であろう後者に対する僕の考えは,プログラミングは,ブール代数演算(有限回の整数計算)の型のうち,利用者に有用にみえるものを書くこと.人の思考をブール代数演算化することないしブール代数演算で表現可能な人の思考を記述すること.
私なりに徹底的に余剰物を削ぎ落とした結論は
その1
プログラムの本質:人間に代わってくれる「何か」
プログラミングの本質:その「何か」を作ること
その2
プログラムの本質:「入れて」「判断して」「出す」
プログラミングの本質:所定の仕様に沿って「プログラムの本質」を実装すること
かと
http://q.hatena.ne.jp/ (URLはダミーです)
パズル。
人間の考えていること、抽象的なこと、問題や課題。
それらをハードウェア・ソフトウェアという非常に制約の多い、限られた資源の中で実現するにはどうしたらよいか考える、一種のパズルゲーム。
プログラミングの本質は、生命を作り出すことと捉えてます。
遺伝子のDNA構造そのものだけでなく、
エクセルのマクロも、ニコニコで見るアニメも、今日本語で書いてるこの回答だって命を持ち得る。
八百万の神のような価値観ですね。
生命としてのプログラミングは万能ではなく、
かならずどこかにバグがあり、ハードの寿命があり、意味をもつときはプログラムに触れる生命体(プログラム)次第になります。
バグのないプログラムが不可能という前提なら、
いい加減かつ、大量の処理を行って、その後ミスを自立補正していくプログラミングが命のダイナミックさがあって好きです。
あらためてプログラミングの本質とは、
そのような自分の中にあるバグを「許して」「成長していく」姿なのかもしれません。
ダミー
物事のとらえ方、考え方のひとつ。
言語によって微妙に異なり、深く学ぶことによって、確実に視野が広がる。
プログラムを書くという行為は、考えを目に見えるようにするために必要な単純労働にすぎず、
書くことが目的となっては無意味。
だみー
コメント(5件)
それで投稿を制限することはありません。
どんな意見でも自由に遠慮なく投稿願います。
また私を迷わせるようなことをいう。「マトモな切り口」って何だろうか。
'standard_oneさん自身が意図を理解できる質問をしてほしい'ということでは?
個別の希望を一般化すべきではありませんし、
私は質問意図の解釈も質問のうちに含まれていると理解しました。
たくさんの回答ありがとうございました。