プログラミングについて。


インターネットのサービスを作るときについて完全に素人の僕から質問があります。

是非、実際のプログラマの方などからの怪盗をお待ちしております。

※質問本文はコメント欄にて。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/09/08 20:22:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:LimgHT No.4

回答回数30ベストアンサー獲得回数10

ポイント100pt

プログラマの端くれからの答えです。


1:質問者の“新しい言語”のイメージは理解しかねますが、英語よりは全然マシと思います。


私が理系だからかもしれませんが、数学や物理の1単元を勉強する感じでした。

高校で例えるなら、微分積分を勉強したとか、ベクトルを勉強したとか、電磁気を勉強したとか。

学んだ概念や公式で問題を解く代わりに、学んだ言語で問題の解き方を書く感じです。


2:多くの場合、そう考えて良いと思います。

私は、プログラミングは、マニュアルを書くことと思っています。

コンピュータがそのマニュアルを実行している意味で、その通りだと思います。


ただ、皆さんが今見ているこの画面の各要素を生きたキャラクタと見なし、

それぞれのキャラクタに対してマニュアルを書く考え方もあります。

例えば、左矢印のボタンに対して「クリックされたら1ページ戻るように」など。

コンピュータに命令するイメージからは、ちょっと離れると思います。

詳しくは「オブジェクト指向」について調べてみると良いと思います。


3:言語次第です。

Windowsどころか、ランタイムと呼ばれる特殊なソフトの機能に限定される言語もあります。

逆に、Windowsなど関係無しにコンピュータそのものの機能を限界まで引き出せる言語もあります。


後者は、コンピュータがあって、それに直接指示するプログラムを書くことになります。

この場合、Windowsは全く関係ないので、影響されません。

対して前者は、Windowsなどの他のソフトウェアに頼んで、、

そのソフトウェアにコンピュータを操作させるプログラムを書くことになります。

この場合、Windowsが出来ない操作は頼めません。

これら両方ができ言語もあります。


あとは「できないこと」とは何かです。

プリンタに接続してないコンピュータに印刷しろ!と命令しても出来ないと言えば、確かにですが、

そのレベル=物理行動のレベルと思って良いと思います。

一方、論理レベルでは、普通に言うコンピュータは無敵と思って良いと思います。

時間さえ掛ければ、どんな処理だってできます。そのように設計されています。

というわけで、そう決めているのは「コンピュータの設計者」 です。


4:全く別物です。

テレビ局とテレビメーカーほど違っています。

  • プログラム を書く人 ⇔ 番組 を作る人。
  • コンピュータを作る人 ⇔ テレビを作る人。

全くの素人も大勢いますが、その知識がプログラマのレベルを決める要因の一つでもあります。


5:一に論理的思考、二に記憶力、三は想像力でしょうか。

計算はコンピュータにやらせばいいので、要らんかと。


  • 今のコンピュータは融通が利かないから、それを動かすために理論的思考は必須と思います。
  • 色んなことをさせるには、色んな命令を覚えないといけない。


単語数で言ったら、高校英語と良い勝負のプログラミング言語もあります。

  • 想像力は、コンピュータの振る舞いを頭の中でシミュレーションする必要があるためです。


コンピュータの状態が予想できて初めて、次ぎ何をさせるか書けます。


6:致命的な勘違いは無いと思います。

大体は良い感じではないでしょうか?


注:この答えでは専門用語を厳密に使ってません。

大体の感じが伝われば良いと思ってます。

id:Lucifer777

>プログラミングは、マニュアルを書くことと思っています。

なーるほどー!分かりやすいですね。



>時間さえ掛ければ、どんな処理だってできます。そのように設計されています。

>というわけで、そう決めているのは「コンピュータの設計者」 です。

これがイマイチピンとこないのですが、

コンピュータの設計者は神様なのでしょうか・・・?

どうしてそんな凄いものが作れるのでしょう・・・・?


本当にありがとうございます!

2010/09/06 22:48:44

その他の回答6件)

id:HowAreYou No.1

回答回数91ベストアンサー獲得回数17

ポイント50pt

1 & 2

新しい言語、というのが英語や中国語のようなものなら、個人的には違う、と言う意見です(まったく異なる、というわけでもないですが)。

 むしろ自動車や機械の操作手順を覚える方が近いような気がします。


3

 コンピュータにできることや X と言う動作に関してどの様なイメージでおっしゃっておられるか少し分かりませんが、

Windows の場合、物理的に可能な大抵のことはできると言ってもよいのではないかと思います。

 ただし、コンピュータに指示を出す、つまりプログラミングに関しては様々な方法があり、人間でいえば関節ひとつずつの角度を指定するようなやり方から、

 おおざっぱに犬の絵を描け、とか校歌をうたえというようなものまであります。

 後者の方が簡単なのですが、細かいニュアンスは出せない場合があります。

 この場合、コンピュータにできること、というよりも指示できるものは誰が決めているというか、自分がその指示の仕方を選んだ結果です。

 細かく指示を出せるがややこしい方法か、簡単だけどおおざっぱか。


4

 どう説明したらいいか分からないので保留。

 技術分野が違うので知らなければできません。


5

 例として上げられた中では論理的思考 (他の要素もそれなりに必要)。

 プログラマがどれほどの範囲を受け持つかにも寄りますが、設計に近くなるほど数学的素養も必要でしょう。

 暗算はできれば便利ですが、電卓を使えればさほど問題はありません。

id:Lucifer777

なんだかすごくワクワクする回答をありがとうございます。

なんだか宇宙人と話しているような気分です。


やはり3に関してが理解が難しいです。。

大雑把に犬の絵を描け、とコンピュータに指示を出しても、

コンピュータが犬を描くには、まず犬が何なのか知らなければならないはずですが、

これは、既にある犬というもののデータをコンピュータに与えた上で、というお話でしょうか?

つまり、犬の絵以外も、現在のプログラミングというのは、

過去に積み立てられてきたもの(ソフトや情報など)をうまく使って指示を出している、ということなのでしょうか。


でなければ、ちょっと怖いです。

2010/09/06 22:30:33
id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント50pt

ごめんなさい。ブログなどから適当に怪盗してくることはできず(笑)私なりの言葉で書きました

 

【1】“新しい言語”をマスターするのと同じようなもの?

フランス語やドイツ語を覚えるといったような意味であれば、それは違います

厳密には違いますが「コンピュータの動きを理解して制御できるようになる」と思っておくと良いでしょう

 

【2】自分の意志を、プログラミング言語という言葉を使ってコンピュータに命令するようなもの?

そのとおりです。コンピュータに指示を与えやすいように用意されたものがプログラミング言語です

医学、化学など分野ごとに専門用語があるように、プログラミング言語にも、用途にあわせていくつもの言語が存在します

インターネット関連でよく使われる言語はphpやjavascriptなどがあります

(余談になりますがHTMLは厳密には言語ではなく表示方法を指定するためのタグの集まりです)

 

【3】「コンピュータに出来ること」というのは、誰が決めているのでしょうか?

「利用者、あるいは、システム設計者」です

音楽を存分に楽しみたいのであれば音楽に特化したハードウェアを取り付けますし、

ビデオ会議を行いたいのであればカメラやマイクを取り付けます

さらには、取り付けたハードウェアを動かすためのソフトを導入します

 

【4】プログラマは、コンピュータを作る人とは全くの別物ですか?

「コンピュータを造る人」がハードウェアを造る人という意味であれば、別ものです

「コンピュータを造る人」がシステムを造り上げるという意味であれば、プログラマは造り上げる人たちに含まれます

 

【5】何が得意であれば有利ですか?

Web系のプログラムであれば理系の知識はほとんど必要ありません

意外かもしれませんが、人並みの日本語ならびに英文読解力があれば良いです

贅沢を言えば、相手の少ない(拙い)説明から状況判断できるだけの経験値と、

経験値に裏打ちされた折衝能力ですが、こればかりは教えられて出来るものでもないですね

 

【6】勘違い

目的によって要求されるものは違ったものになります

・WindowsなどのOSを造る

・WordやExcelのようなアプリケーションを造る

・アプリケーションを自動操縦する

・Webアプリケーションを造る

最近のWebアプリであれば、すでに多くの人たちが作った資産を流用し、組み合わせて、

少し調整するだけでシステムが出来てしまいます

例えるならば「ガンプラをただ組み立てるだけのような場合もあれば、

ガンプラを組み立てる前にパーツ加工して、組み立ててからも磨きをかけるような場合もある」という事になります

言葉を借りれば、「コメント欄を良い感じに作って、登録したらページに表示されるようにしてくれっていうのをちょこっと記述すれば、あとは記述に従ってやってくれるんです」

id:Lucifer777

ご丁寧なご回答ありがとうございます。


>フランス語やドイツ語を覚えるといったような意味であれば、それは違います

>自分の意志を、プログラミング言語という言葉を使ってコンピュータに命令するようなもの?

外国語などとは違うというのは・・・、コンピュータの動きを制御するための言葉しか無いから、

普通の外国語などとは違う、という意味なのでしょうか?


これ以外はとてもよくわかりました。

特に6に関しては、とても参考になります。

僕の中で、プログラミングとは、webページを作ったり、人工知能ロボットみたいなものを作ったり、

というようなものに限定されたイメージでした。

確かにいろんな機械がありますから、いろんな使い方があるんですよね。



あと、

>最近のWebアプリであれば、すでに多くの人たちが作った資産を流用し、組み合わせて、

>少し調整するだけでシステムが出来てしまいます

この一文で、私が思い悩んでいたことの80%くらいが解決されたように思います。

ただ、それだと1から作る場合はどうやるのだろう・・・という疑問が新たに浮かびましたが。

そういうことは凄い天才が出てこないとありえない話なんですかね??


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

2010/09/06 22:35:54
id:hanako393 No.3

回答回数1142ベストアンサー獲得回数87

ポイント50pt

1.違います。

  言語というので支障がありますが、

  どちらかというと、ルールを書くだけなんです。

  1.変数と代入文

  2.IF文などの条件分岐

  のこの2つのルールしかありません。

2.大体そのとおりですが

  どちらかというと、プログラム言語のルールと癖にしたがって

  それに合わせた形で、やりたいことを書いていく形になります。

  ここで、言語は一般的な手続き言語をさしています

3.

>Xという動きをして欲しいなーと思っても、既存のソフトウェアでXという動きをするものが無い場合、

>Windowsが行うことの出来る行動を組み合わせてXに近い動きをするソフトを作ることは出来ても、

>いきなりコンピュータにXの動きをしろ!という命令を出すことは出来ないのか、という意味です。

>また、この際に「コンピュータに出来ること」というのは、誰が決めているのでしょうか?

たいていは、いきなりXと言う動きをするということができることはないんです。

Xという動きをしろという機能がない場合は、Xという動きをしろという機能をWindowsなどが提供しているものを

くみあわせて作ります。そしてそれを呼ぶことで、Xという動きをするということを実現するのです。

コンピュータにできることを決めてるのは、OSやドライバーの提供者です。


4.

コンピュータはハードウェアとソフトウェアからできてます。

プログラミングする人は、主にソフトウェアを作る人たちです。

君がコンピュータを作る人たちと言うのは、ハードウェアやOSを作る人たちのことをさしてます。


5.

プログラムの分野によりますよ。

たとえば、家電とか携帯とかのコアの部分をつくるのなら、数学的知識がないと厳しいでしょうね。

しかしながら、プログラマーにはなにも必要ないです。だから、人材派遣会社は、適当に若者をかき集めて

ほとんど素人同然の人たちを、派遣してますよ。

適性があればよいですが、とくになんの才能も必要ないんです。

6.

実際にプログラミングしてみることをお勧めします。

教育用に、ドリトルという言語があります。

http://dolittle.eplang.jp/

教育現場で使ってるところもあるので、使ってみては?

でもこれだけで、プログラミングはこうだと決め付けるのは危険ですし

ドリトルは教育用に作られてますので少し普通の言語とも違います。


ドリトルで学ぶプログラミング-グラフィックス、音楽、ネットワーク、ロボット制御
兼宗 進 久野 靖
4904013026

id:Lucifer777

うーん、なるほど。

みなさん、大体同じようなことを仰いますね。

まぁ同じことについて述べられているので当然なのですが、みなさんのような理解をするためには、

やはり実際に自分も体験してみるしかなさそうですね。

とても参考になりました。

ありがとうございます!

2010/09/06 22:47:28
id:LimgHT No.4

回答回数30ベストアンサー獲得回数10ここでベストアンサー

ポイント100pt

プログラマの端くれからの答えです。


1:質問者の“新しい言語”のイメージは理解しかねますが、英語よりは全然マシと思います。


私が理系だからかもしれませんが、数学や物理の1単元を勉強する感じでした。

高校で例えるなら、微分積分を勉強したとか、ベクトルを勉強したとか、電磁気を勉強したとか。

学んだ概念や公式で問題を解く代わりに、学んだ言語で問題の解き方を書く感じです。


2:多くの場合、そう考えて良いと思います。

私は、プログラミングは、マニュアルを書くことと思っています。

コンピュータがそのマニュアルを実行している意味で、その通りだと思います。


ただ、皆さんが今見ているこの画面の各要素を生きたキャラクタと見なし、

それぞれのキャラクタに対してマニュアルを書く考え方もあります。

例えば、左矢印のボタンに対して「クリックされたら1ページ戻るように」など。

コンピュータに命令するイメージからは、ちょっと離れると思います。

詳しくは「オブジェクト指向」について調べてみると良いと思います。


3:言語次第です。

Windowsどころか、ランタイムと呼ばれる特殊なソフトの機能に限定される言語もあります。

逆に、Windowsなど関係無しにコンピュータそのものの機能を限界まで引き出せる言語もあります。


後者は、コンピュータがあって、それに直接指示するプログラムを書くことになります。

この場合、Windowsは全く関係ないので、影響されません。

対して前者は、Windowsなどの他のソフトウェアに頼んで、、

そのソフトウェアにコンピュータを操作させるプログラムを書くことになります。

この場合、Windowsが出来ない操作は頼めません。

これら両方ができ言語もあります。


あとは「できないこと」とは何かです。

プリンタに接続してないコンピュータに印刷しろ!と命令しても出来ないと言えば、確かにですが、

そのレベル=物理行動のレベルと思って良いと思います。

一方、論理レベルでは、普通に言うコンピュータは無敵と思って良いと思います。

時間さえ掛ければ、どんな処理だってできます。そのように設計されています。

というわけで、そう決めているのは「コンピュータの設計者」 です。


4:全く別物です。

テレビ局とテレビメーカーほど違っています。

  • プログラム を書く人 ⇔ 番組 を作る人。
  • コンピュータを作る人 ⇔ テレビを作る人。

全くの素人も大勢いますが、その知識がプログラマのレベルを決める要因の一つでもあります。


5:一に論理的思考、二に記憶力、三は想像力でしょうか。

計算はコンピュータにやらせばいいので、要らんかと。


  • 今のコンピュータは融通が利かないから、それを動かすために理論的思考は必須と思います。
  • 色んなことをさせるには、色んな命令を覚えないといけない。


単語数で言ったら、高校英語と良い勝負のプログラミング言語もあります。

  • 想像力は、コンピュータの振る舞いを頭の中でシミュレーションする必要があるためです。


コンピュータの状態が予想できて初めて、次ぎ何をさせるか書けます。


6:致命的な勘違いは無いと思います。

大体は良い感じではないでしょうか?


注:この答えでは専門用語を厳密に使ってません。

大体の感じが伝われば良いと思ってます。

id:Lucifer777

>プログラミングは、マニュアルを書くことと思っています。

なーるほどー!分かりやすいですね。



>時間さえ掛ければ、どんな処理だってできます。そのように設計されています。

>というわけで、そう決めているのは「コンピュータの設計者」 です。

これがイマイチピンとこないのですが、

コンピュータの設計者は神様なのでしょうか・・・?

どうしてそんな凄いものが作れるのでしょう・・・・?


本当にありがとうございます!

2010/09/06 22:48:44
id:naka1kazu No.5

回答回数236ベストアンサー獲得回数12

ポイント50pt

1.プログラミング言語を覚える事は新しい言語を覚えるというよりも新しいパズルを覚えるという感じです。組み合わせで色んなブロックを作っていくという感じに近いかな。

2.その通りだと思います。

3.最近のプログラムは部品を組み合わせて作ります。例えばこの回答欄もこういう部品のあるプログラム言語があれば、それを画面上に置くというだけで済みます。ただ、例えば「商品を紹介(はまぞう)」というボタンは通常の部品にはなく、そこだけは別途作る事になります。以前のプログラムは一から全部作るようなイメージでしたが最近のオブジェクト指向のプログラミング言語であれば、今ある部品の変更したい部分だけ作成して他は流用という事が簡単にできます。逆にもっと高機能にしたいとかもできます。例えばボタンの絵をもっとデザイン良く、ボタンを押すとここでゲームを開始するとかいうこともできますが、その場合は(部品が無ければ)全部自分で指示をプログラミングする事になります。例えばこの回答欄だけでも全部自分で指示をプログラミングするとなると1年かかっても難しいかもしれません。

4.通常コンピュータを作る人と言うと

 (1)コンピュータ(特にCPUというチップ)を設計する人、基板設計する人等も入れても良い

 (2)コンピュータを組み立てる人()

 (3)コンピュータのOSを作る人

 (4)コンピュータのアプリケーションを作る人

等がいます。(1)はインテル等のCPUメーカ、(2)はdellやhpなどのパソコンメーカ、(3)はMicroSoftなどのOSメーカ、(4)はOfficeやゲーム等の作成ソフトメーカです。最近は(3)がコンピュータでできる事を決める事が多いイメージがありますが、どこまで本来できるかは(1)も(2)も関わってきます。プログラマは(3)か(4)ですが、質問者のイメージは(4)だと思います。(3)と(1)と(2)と(4)は一人でできる人もまれにいますが、通常別物です。

5.プログラマがどこまでやるのかに関わってきます。質問者がイメージしているような何かをしたいというアイデアがあってそれをプログラミングするには、対象となるコンピュータの知識及びそれを実現するためにアイデアを具体的に落とし込むという論理思考が必要となります。通常はこういう作業はシステムエンジニア(SE)とよばれる人が行い、その指示書にした

id:Lucifer777

あ、この回答の続きがコメント欄だったのですね。

非常によく分かるご説明ありがとうございます。


3については、世の中大体そんなもんだと思いますし、プログラミングに限ったことではないと思うので、

これに関しては僕でもイメージしやすいです。

しかし、全く新しいものを作る、となった場合は自分でプログラミングする、とのことですが、

何も無い状態からどうやって指示するのでしょう・・・?

例えばコメント欄を1から作ろうとしたとき、1年以上はかかるとのことですが、1年以上も何をしているのでしょう・・・?

1年以上かけてコンコンとパソコンに自分のイメージを伝え続ければ、パソコンはだんだん理解してくれるのでしょうか・・・?

それとも、思った形のページが出来るまでいろんなプログラミングを試し続けるという感じでしょうか・・・?

この辺りがどうしても理解出来ません・・・。

2010/09/07 14:56:06
id:garyo No.6

回答回数1782ベストアンサー獲得回数96

ポイント50pt

1.言語というのが「自然言語(英語、フランス語、・・・)」をさすのであれば、全然違います。

Brainfuckという超難解言語では「><+-.,[]」という8つの命令しか使用せずにプログラムが組めます。

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

2.プログラムは書いた通りにしか動きません。

プログラムは大きく分けて「処理」「判断」「入出力」の3つからなります。それぞれを詳しく書いていく必要があります。

3.コンピューター言語は大きくわけて、「基本機能」「拡張機能(API,ライブラリ)」になります。

基本機能は言語が決まれば1つに定まります。また、標準関数というものもOSなどに因らず一定になります。標準関数以外に拡張された機能があります。APIやライブラリなどと呼ばれるものです。ハードウェアを操作したり特定の機能を実現したりしてくれます。これはメーカーが出したり、他の人が公開したりしています。自分で作って公開することもできます。

俗に「車輪を再発明するな」といいますが、何か欲しい機能がある場合はメーカーのライブラリに無いか調べて、公開されている物が無いか調べてそれでも無ければ自分で作ります。もしこの世に存在していないものを作ったのなら公開するのもいいでしょう。

4.プログラマとパソコンメーカーは全く異なります。昔マイクロソフトが8BITマイコン用にBASIC言語を作ってSIN,COSなどの実数数学関数の計算を行ったとき、メーカーの人はたかだか足し算、引き算の命令しか持ってないマイコンを使ってこんなことが出きるとはと驚いたという逸話があります。

5.論理思考です。

プログラマの仕事の大半は「デバッグ」という「プログラムを書いたけど思った通りに動かないのはなぜだろう」というのをやっています。

人はA→B→Cというのを考えるのは得意ですが、

CになるのはBが原因でBになるのはAが原因というのを考えるのは非常に難しいです。

大体、結果が分かって説明すると誰でも納得しますが、結果から原因を調べるのは一般的に困難です。

例えばプログラムが異常終了するという結果があって、その原因があるループの回数が1回多く、そのため範囲外の変数を破壊していたからという場合、原因の特定は非常に難しいです(得に再現性がなく起こる場合)

適している学科は数学でしょう。

6.プログラミングは魔法でも何でもなく、書いた通りにしか動きません。自分でできないことは何もやってくれません。

例えば、「はてなの質問に適当に最適な答えを回答しろ」という命令をプログラムするのは不可能です。

「はてなの質問文から一番長い単語を抽出し、その言葉を元にgoogleで検索をかけ、検索結果のURLを抽出し、回答欄に書き込み、「この内容で確認する」ボタンを押せ」というのであればプログラミング可能で、ここまで詳しく具体的に命令をかかないとプログラミングはできません。

id:Lucifer777

4番がとてもよくわかりました。

メーカーが作ったものでも、その使い方次第でメーカーも予期しないほどの能力を発揮させることが出来るわけですね。


その他もなんとなく理解するヒントになったように思います。


ただ・・・、6番に関してですが、

「はてなの質問文から一番長い単語を抽出」や「googleで検索をかける」など、それぞれの動きは、

元々あるプログラムを転用するのでしょうか?

このようなものなら既に似たような動きのプログラムが存在していると思うのですが、

もしこれらが存在しておらず、1から作るときにはどうやって作るのでしょう・・・?


例えば「質問の文章を単語に分ける」というだけでも、私にはどうやってそんな指示を出すのか想像も付きません。

そういう指示を表すプログラム言語を使うのだろうなぁとは思いますが、

そういう指示を表すプログラム言語は誰が考えたのかも分かりませんし、

どうやったらそういう指示を出すプログラム言語を見つけることが出来るのかも分かりません・・・。



この部分に関してだけ、どうしても理解出来ないような気がしてます。

今後ご回答下さる方がいらっしゃいましたら、この点に集中してお答え頂けると大変嬉しいです。

2010/09/07 16:30:34

質問者が未読の回答一覧

 回答者回答受取ベストアンサー回答時間
1 smallzhu 107 10 0 2010-09-08 16:52:26
  • id:Lucifer777
    1.まず、プログラミングをする際に「プログラミング言語」というのを使うと思いますが、
    これを覚えるということは、イメージとしては“新しい言語”をマスターするのと同じようなものと考えて良いのですか?

    2.プログラミング言語をマスターして、プログラミングをするということは、これもイメージとしてですが、
    コンピュータにこういう動きをして欲しいという自分の意志を、プログラミング言語という言葉を使ってコンピュータに命令するようなもの、と考えて良いのでしょうか?

    3.少し話が変わりますが、コンピュータをプログラミングするということは、コンピュータに指示を与えることだと思いますが、
    この指示は、例えばWindowsのパソコンであれば、Windowsのパソコンに可能なことの範囲内でしか出すことは出来ないのでしょうか?
    つまり、Xという動きをして欲しいなーと思っても、既存のソフトウェアでXという動きをするものが無い場合、
    Windowsが行うことの出来る行動を組み合わせてXに近い動きをするソフトを作ることは出来ても、
    いきなりコンピュータにXの動きをしろ!という命令を出すことは出来ないのか、という意味です。
    また、この際に「コンピュータに出来ること」というのは、誰が決めているのでしょうか?

    4.「3」の最終行の質問の補足になりますが、
    僕のような素人は、コンピュータをプログラミングする人と、コンピュータを作る人を混同して考えてしまいがちです。
    プログラマは、コンピュータを作る人とは全くの別物ですか?
    既存のコンピュータをプログラミングすることは出来ても、新しいコンピュータを作ることに関しては全くの素人ですか?

    5.プログラマになるには、精神論以外で何が得意であれば有利ですか?
    計算力ですか?想像力ですか?論理的思考ですか?記憶力ですか?・・・なんでしょうか?
    また、高校までの科目で言うと、どの科目が得意な人がプログラマに向いていますか?
    僕のイメージでは、数学が得意な人だろうな、と思います。何十桁の暗算がちゃちゃっと出来るような人なのかなぁと。

    6.以上の質問を踏まえて、僕が「プログラミング」というものに関して抱いている勘違いがありそうな点があれば、指摘して下さい。


    以上、長々と申し訳ありませんが、どうぞご教授下さい。
  • id:taknt
    質問者にフランス語で話しても なんのことやら・・・
    となるでしょう。

    日本語で じゃんけんしよう、じゃんけん ぽん

    と言えば、グー、チョキ、パーのどれかを 出すでしょう。

    つまり、言語は この会話みたいなもの。
    ハード(コンピューター)は 質問者となります。

    質問者が理解できる言葉で ああして こうしてといえば、
    質問者は 自分の頭の中で ああするには これやってあれやって なんて考えるでしょう。

    コンピューターは そんなものなのです。

  • id:Lucifer777
    コメントありがとうございます。


    >質問者は 自分の頭の中で ああするには これやってあれやって なんて考えるでしょう。
    >コンピューターは そんなものなのです。

    そうなんですか!?
    ということは、例えばこのコメント欄を作るのも、
    こういう枠組みの広さと色とフォントと位置と全部細かく指定して、
    さらに登録するボタンを押したらどうなる、とかも別に細かく指定しなくても、
    「コメント欄を良い感じに作って、登録したらページに表示されるようにしてくれ」っていうのをプログラミング言語で命令すれば、
    あとは勝手にコンピュータがやってくれるんですか・・・?

    なんだかイメージと違って驚きです。
  • id:taknt
    プログラム言語を理解して 実行する部分があります。
    また、

    「コメント欄を良い感じに作って、登録したらページに表示されるようにしてくれ」
    という命令を コンピューターが できる内容に変換するソフト(コンパイラ)というのもあります。

    おおもとは コンピューターのハードです。
    ハードによる論理回路による処理です。
    そこまで理解して プログラムしている人は少ないと思いますけどね。
  • id:LimgHT
    >>時間さえ掛ければ、どんな処理だってできます。そのように設計されています。
    >>というわけで、そう決めているのは「コンピュータの設計者」 です。
    >これがイマイチピンとこないのですが、
    >コンピュータの設計者は神様なのでしょうか・・・?
    >どうしてそんな凄いものが作れるのでしょう・・・・?

    うんー誤解されそうなので人型ロボットを例に補足します。
    物理レベルというのは、「飛べ」と言われても飛べません。
    論理レベルというのは、物理的に可能なポーズを取らせることです。
    関節一個一個の角度を指定すれば、一応は「全てのポーズは取れます」。
    それを時間掛けて操作すれば、出来うることは全て「言語でさせられます」。
    ついでに、取り得るポーズを決めてるのは、ロボットの設計者です。

    気を付けて欲しいのは、「ロボットが自分で考えて行動する」とかとは別次元の話しです。
    そんな「行動(ポーズ)」を設計できた設計者は神様と称えられるでしょうね。
  • id:naka1kazu
    途中で切れてしまったので、
     SEがプログラムの仕様を考え、普通のプログラマはそれをコーディングするだけなので、あまり論理思考は要りません。

    6についていえば、プログラムを実際にするというイメージがまだ湧いていないようです。基本から知りたい場合はCから始めるのも良いかもしれませんが、やりたい事がある程度windows上とか決まっているのであればVisualBasic等から始めても良いと思います。

    プロとしてやるのであれば別ですが、趣味をとしてやるのであれば、Web上に初心者の為のページもたくさんありますのでまずは習うより慣れろで初めて見た方がイメージが着くと思います。OfficeをもっているのであればExcelのVBAから始めてみても良いでしょう。
  • id:windofjuly
    うぃんど 2010/09/07 00:05:11
    【7】コンピュータの動きを制御するための言葉しか無いから、普通の外国語などとは違う、という意味なのでしょうか?
     
    手前味噌ですが、ここ数日の私の回答をご覧いただくと、なんとなくでも解ってもらえるのではないかと思います
    いずれもphpです
     
    (1)特定のパターンを抜き出すことを指示している例
    http://q.hatena.ne.jp/1283604894
    プログラマとして私が行ったことは「文字列のパターンを特定しただけ」です。
    実際に抜き出すのはpreg_matchというphpのビルトイン関数(標準で備えている関数)がやってくれてます
     
    (2)RSSを読み取って、必要な情報だけを抜き出し、表として出力することを指示している例
    http://q.hatena.ne.jp/1283713039
    私が行ったことは「RSSを読み取って、itemの内容を順次出力する」という流れを書いているだけです
     
    (3)データベースから必要な情報を抜き出し、件数が多い場合は、複数のページに分割するように指示している例
    http://q.hatena.ne.jp/1283130886
    google検索などを行うと「前へ 1 2 3 4 5 次へ」といったように複数のページに分割してくれてますが、それと似たようなことをPEARという既存のライブラリ(プログラムの集まり)を使うことによって、たった20行程度のプログラムで実現しています
    ライブラリを使わずにフルスクラッチで造ったこともありましたが、自分で造ってテストしてという手間がなくなれば、開発は比較にならないほど楽になります
     
    ここから先、何をどのように覚えていくことが良いのかにつきましては、どのようなサービスを造り上げたいのかのビジョンを明確にしていくことが必要になりますので、今回の質問に対しては、この程度までだと思います
  • id:seble
    へんなハッカーになんないでね。

    RomBasicいじって飽きあきしたな。
    サークルで座標と半径指定して色指定して、ハイ、赤い丸ができました・・・
    これのどこが面白いねんw
  • id:Lucifer777
    >>LimgHT様

    コメントありがとうございます。
    ロボットが物理的に取れるポーズがあるというのは分かるのですが、
    そもそもロボットがそのプログラミング言語とやらを理解する、というのが凄過ぎると思います。
    右足を上げろという指示を出されて、その指示通りに実行したということは、
    その指示を理解したということで、プログラミング言語を理解しているということですよね?
    それともロボットに指示を与えたいときは、
    ロボットのシステム自体に右足を挙げるという動作を「プログラミング言語ごと」機能として追加する、という、
    これが自体がプログラミング、というのでしょうか?

    きっと僕はプログラミングというもの自体を理解していないような気がします。


    >>naka1kazu様
    僕は仕事としてプログラミングをしたいなんてことは考えていません。
    というか、今の状態では出来る気すらしません。
    趣味でも良いので、この素晴らしい技術を体感してみたいなーという気持ちです。
    また舞台はwindowsというか、パソコン上だけで構いません。
    ロボットなんて全然分からないので。
    ちょっといろんなサイトを見てみたいと思います。
    ありがとうございます。


    >>seble様
    ハッカーになりたいという欲求はありません。
    RomBasicというのが何のことを仰っているのかすら分かりませんが、
    その赤い丸を作るだけでも、例えばそれでお金がもらえるのであれば楽しいような気がします。
  • id:garyo
    >例えば「質問の文章を単語に分ける」というだけでも、私にはどうやってそんな指示を出すのか想像も付きません。
    これは専門的には「形態素解析」といい「文節切り分け」ともいいます。
    http://ja.wikipedia.org/wiki/%E5%BD%A2%E6%85%8B%E7%B4%A0%E8%A7%A3%E6%9E%90
    英語であればスペースで単語が区切られているので簡単ですが、日本語だとちょっと難しいです。
    単語毎に切り分けるためのライブラリを色々な言語用に公開されている方がいて、そのライブラリを使って日本語を分割します。
    私も以前遊んだことがありますが、yahooの日本語形態素解析サービスを使うと日本語の文を渡すと、単語毎に分けて返してくれます。
    http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html



    つ・ま・り、言語に元々ない機能については
    1.買う(もしどこかの会社が作っていれば)
    2.フリーのソフトを使う
    3.自分で作る(「形態素解析」について十分な知識があれば、自分で作るのも当然可能です)
    のが基本です。



    >>
    フリーで入手可能なもの [編集]

    フリーなライセンスで、自由に入手出来る。

    * KAKASI(kanji kana simple inverter)、kakasi.namazu.org
    * MeCab(和布蕪)、mecab.sourceforge.net
    * ChaSen(茶筌)、chasen.naist.jp
    * Juman、nlp.kuee.kyoto-u.ac.jp
    * Sen(MeCabのJavaへの移植)、ultimania.org、sen.dev.java.net
    * 日本語形態素解析Webサービス(Yahoo!デベロッパーネットワーク)、developer.yahoo.co.jp

    市販されているもの [編集]

    * Rosette形態素解析システム、Basis Technology

    Google、Amazon、MSN、楽天などで利用されており、世界で最も利用者の多い形態素解析エンジンであると言える。

    * 形態素解析エンジン言語郎、Zoo Corporation
    * 日本語形態素解析MARIMO ムーター株式会社

    大規模な辞書を持たず、1000語程度の学習モデルのみで未知語、新語、流行語、略語、話し言葉に対応する。
    <<
  • id:garyo
    >「はてなの質問文から一番長い単語を抽出」や「googleで検索をかける」など、それぞれの動きは、
    >元々あるプログラムを転用するのでしょうか?
    >このようなものなら既に似たような動きのプログラムが存在していると思うのですが、
    >もしこれらが存在しておらず、1から作るときにはどうやって作るのでしょう・・・?
    たぶん詳しく説明するほど、混乱されると思います。
    アイザック・ニュートンの言葉に「もし私が、より遠くを眺めることができたとしたら、それは巨人の肩に乗ったからです。」というのがありますが、同じことがプログラミングでも言えます。
    色々な方が有用なライブラリを公開されているため、本来作らなくてはいけないプログラムが簡単なコマンド一つで実行できるわけです。



    「googleで検索をかける」
    こういう「ウェブサイトのデータを必要な部分だけ抽出して利用すること」を「スクレイピング」といいます。
    私の好きなRubyという言語では以下のように色々な人がライブラリを作って公開しています。


    http://route477.net/rubyscraping/


    もし、自分で作る場合は


    1.まず最下層として「TCP/IP」(トランスミッション プロトコル/インターネットプロトコル)インターネットによる通信の基本機能 に関するプログラミングの知識が必要です。これは1台のパソコンと1台のサーバーがデータのやりとりを出きるようになる規約です。


    2.「Http」「TCP/IP」による接続ができるようになったら、今度はHTTP(ハイパー テキスト トランスファー プロトコル)を使用してgoogleに質問文を送信するプログラムが必要です。


    3.「XML」googleの場合は通常の応答ですが、戻ってきた応答を解析する必要
    があります。htmlはxmlに含まれるので、xml用のパーサー(解析用の関数)を使うことで自分が取り出した情報を取り出すことができます。



    これらの複雑なことが、どなたかの公開されたライブラリを使用すれば、一言(多分数行)書くだけで使用可能になるわけですから、「巨人の背にのって~」というのもあながち嘘ではないと思います。
  • id:LimgHT
    >ロボットが物理的に取れるポーズがあるというのは分かるのですが、
    >そもそもロボットがそのプログラミング言語とやらを理解する、というのが凄過ぎると思います。
    >右足を上げろという指示を出されて、その指示通りに実行したということは、
    >その指示を理解したということで、プログラミング言語を理解しているということですよね?
    >それともロボットに指示を与えたいときは、
    >ロボットのシステム自体に右足を挙げるという動作を「プログラミング言語ごと」機能として追加する、という、
    >これが自体がプログラミング、というのでしょうか?

    これはプログラミングよいうより、プログラムが動く仕組みの問題かと思います。
    ちょっと答え方を色々悩みましたが、ロボットの例で粘りながら、少し具体的な話しを混ぜてみます。

    コンピュータは0と1しか扱えないのがご存じと思います。それが機械語です。
    コンピュータは機械語だけを理解できるように設計されます。
    プログラミング言語で書かれるコードは最終的に機械語で書かれるバイナリに変換されます。
    で、コンピュータは結局そのバイナリを理解して行動する訳です。

    ロボットの例に戻りますと、「右足を上げろという指示」は結局は関節の角度に変換されます。
    ロボットが理解しているのは飽くまでも関節の角度です。身も蓋もない話しですw

    次ぎに、「右足を上げろという指示」から実際に右足を上げる過程はざっと次の3つがあります。

    1:インタプリタ方式
    プログラミング言語で書かれたコードを動作に変換するインタプリタを使います。
    インタプリタ自身もプログラムなので、正体はバイナリです。
    言語を解析するマニュアルと、対応した動作をするマニュアルの両方を持っています。
    コンピュータがインタプリタのバイナリを理解して、
    解析のマニュアルに従い「右足を上げろ」を読み取り、動作のマニュアルに従い動作する感じです。
    この方式が「プログラミング言語を理解している」に最も近いではないかと思います。

    2:セルフコンパイラ方式
    プログラミング言語で書かれたコードを機械語で書かれるバイナリに変換するコンパイラを使います。
    コンパイラもまたプログラムなので、やはりバイナリです。
    こちらはプログラミング言語を機械語に翻訳するマニュアルです。
    「右足を上げろ」のような指示を受けると、コンピュータが理解できる機械語に翻訳します。
    翻訳も理解の内と思うのであれば、あながち間違いでもないですが、場合によっては少々危険です。

    3:クロスコンパイラ方式
    同じくコンパイラを使いますが、別のコンピュータ/ロボットにやらせます。
    ロボットA君がプログラミング言語Xで書かれた内容を機械語に翻訳してから、ロボットB君に渡します。
    B君は言語Xを理解どころか、知る必要すらありません。

    方式1はBASIC、Perl、Ruby、PHPなどです。方式2はC、C++、Dなどです。これらを融合したのもあります。
    そして、方式3は方式2の特殊形態ですが、例えば次のシチュエーションです。
    ネットからソフトをダウンロードして使うと思いますが、直接実行できるものがあります(exeファイル)。
    これが、どっかの誰かさんが、とある言語Yで書いたプログラムをコンパイルしてできたバイナリです。
    バイナリですから、貴方のコンピュータは言語Yを知らなくとも、それを理解し、実行できます。

    続けて、「プログラミング言語ごと機能として追加」はインタプリタ方式の考え方でしょうか。
    インタプリタもコンパイラもプログラムの一種類ですから、それらを作ること【も】プログラミングです。
    が、それはプログラミング言語を提供する側の仕事であって、使う側の仕事ではありません^^
    使う側は、「右足を上げて、少し前で下げて、……」のように使うだけで良いです。

    さらに、「右足を上げて、少し前で下げて、……」は「歩く」のつもりですが、
    このような誰もが使いそうな機能は、既に誰かさんがプログラミングして公開している場合が多いです。
    それを使うのが他の皆さんが答えに書いている、他人のコード流用、調整することです。

    例えば、信号を渡るマニュアル、大根を選ぶマニュアル、買うマニュアルなどを掻き集めば、
    大根を買ってくるマニュアルを簡単に書けるかと思います。
    ロボットに「家を出て、信号を渡って、八百屋へGo! 大根を選んで、買う、戻る」と命令する感じです。
    一々「右足を上げて」まして「右足膝を45°曲げて」からプログラムを書く必要はありません。

    結構長くなってしまいましたが、
    雰囲気だけでも掴んで貰えたら嬉しいなw
  • id:Lucifer777
    >>garyo様

    garyoさんの仰ることはとてもよく理解出来ました。
    ただ、
    今は多くの人がいろんなプログラムを公開してくれているからそれらを組み合わせるだけでいろんなことが出来る、までは分かるのですが、
    例えば、一番最初にプログラムを考えた人はどうやったのだろう、っていうのが分からないのです。
    ただ、この部分に関しては次にコメントして下さったLimgHTさんの説明でなんとなくわかりました。

    >「もし私が、より遠くを眺めることができたとしたら、それは巨人の肩に乗ったからです。」
    これは分かりやすいですね。現状としてこういう状態なのだから、そのように理解すればとりあえず良い、という状態とも言えるのでしょうか。

    ご丁寧な説明本当にありがとうございます。



    >>LimgHT様
    いやぁ、とってもよくわかりました。
    ロボットの部分の説明がとてもためになりました。
    僕が分からなかったのはズバリこの点だったと思います。
    プログラミング言語は結局ロボット用の言語に変換される、ということでしたら、
    なるほどな、という感じです。

    僕が不勉強過ぎて理解出来ない箇所も多少ありましたが、
    雰囲気はつかめたと思います!

    こんな何も分かってない素人に丁寧に説明して頂き本当に感謝します。
    ありがとうございます。

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

トラックバック

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

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

回答リクエストを送信したユーザーはいません