インターネットのサービスを作るときについて完全に素人の僕から質問があります。
是非、実際のプログラマの方などからの怪盗をお待ちしております。
※質問本文はコメント欄にて。
プログラマの端くれからの答えです。
1:質問者の“新しい言語”のイメージは理解しかねますが、英語よりは全然マシと思います。
私が理系だからかもしれませんが、数学や物理の1単元を勉強する感じでした。
高校で例えるなら、微分積分を勉強したとか、ベクトルを勉強したとか、電磁気を勉強したとか。
学んだ概念や公式で問題を解く代わりに、学んだ言語で問題の解き方を書く感じです。
2:多くの場合、そう考えて良いと思います。
私は、プログラミングは、マニュアルを書くことと思っています。
コンピュータがそのマニュアルを実行している意味で、その通りだと思います。
ただ、皆さんが今見ているこの画面の各要素を生きたキャラクタと見なし、
それぞれのキャラクタに対してマニュアルを書く考え方もあります。
例えば、左矢印のボタンに対して「クリックされたら1ページ戻るように」など。
コンピュータに命令するイメージからは、ちょっと離れると思います。
詳しくは「オブジェクト指向」について調べてみると良いと思います。
3:言語次第です。
Windowsどころか、ランタイムと呼ばれる特殊なソフトの機能に限定される言語もあります。
逆に、Windowsなど関係無しにコンピュータそのものの機能を限界まで引き出せる言語もあります。
後者は、コンピュータがあって、それに直接指示するプログラムを書くことになります。
この場合、Windowsは全く関係ないので、影響されません。
対して前者は、Windowsなどの他のソフトウェアに頼んで、、
そのソフトウェアにコンピュータを操作させるプログラムを書くことになります。
この場合、Windowsが出来ない操作は頼めません。
これら両方ができ言語もあります。
あとは「できないこと」とは何かです。
プリンタに接続してないコンピュータに印刷しろ!と命令しても出来ないと言えば、確かにですが、
そのレベル=物理行動のレベルと思って良いと思います。
一方、論理レベルでは、普通に言うコンピュータは無敵と思って良いと思います。
時間さえ掛ければ、どんな処理だってできます。そのように設計されています。
というわけで、そう決めているのは「コンピュータの設計者」 です。
4:全く別物です。
テレビ局とテレビメーカーほど違っています。
全くの素人も大勢いますが、その知識がプログラマのレベルを決める要因の一つでもあります。
5:一に論理的思考、二に記憶力、三は想像力でしょうか。
計算はコンピュータにやらせばいいので、要らんかと。
単語数で言ったら、高校英語と良い勝負のプログラミング言語もあります。
コンピュータの状態が予想できて初めて、次ぎ何をさせるか書けます。
6:致命的な勘違いは無いと思います。
大体は良い感じではないでしょうか?
注:この答えでは専門用語を厳密に使ってません。
大体の感じが伝われば良いと思ってます。
1 & 2
新しい言語、というのが英語や中国語のようなものなら、個人的には違う、と言う意見です(まったく異なる、というわけでもないですが)。
むしろ自動車や機械の操作手順を覚える方が近いような気がします。
3
コンピュータにできることや X と言う動作に関してどの様なイメージでおっしゃっておられるか少し分かりませんが、
Windows の場合、物理的に可能な大抵のことはできると言ってもよいのではないかと思います。
ただし、コンピュータに指示を出す、つまりプログラミングに関しては様々な方法があり、人間でいえば関節ひとつずつの角度を指定するようなやり方から、
おおざっぱに犬の絵を描け、とか校歌をうたえというようなものまであります。
後者の方が簡単なのですが、細かいニュアンスは出せない場合があります。
この場合、コンピュータにできること、というよりも指示できるものは誰が決めているというか、自分がその指示の仕方を選んだ結果です。
細かく指示を出せるがややこしい方法か、簡単だけどおおざっぱか。
4
どう説明したらいいか分からないので保留。
技術分野が違うので知らなければできません。
5
例として上げられた中では論理的思考 (他の要素もそれなりに必要)。
プログラマがどれほどの範囲を受け持つかにも寄りますが、設計に近くなるほど数学的素養も必要でしょう。
暗算はできれば便利ですが、電卓を使えればさほど問題はありません。
なんだかすごくワクワクする回答をありがとうございます。
なんだか宇宙人と話しているような気分です。
やはり3に関してが理解が難しいです。。
大雑把に犬の絵を描け、とコンピュータに指示を出しても、
コンピュータが犬を描くには、まず犬が何なのか知らなければならないはずですが、
これは、既にある犬というもののデータをコンピュータに与えた上で、というお話でしょうか?
つまり、犬の絵以外も、現在のプログラミングというのは、
過去に積み立てられてきたもの(ソフトや情報など)をうまく使って指示を出している、ということなのでしょうか。
でなければ、ちょっと怖いです。
ごめんなさい。ブログなどから適当に怪盗してくることはできず(笑)私なりの言葉で書きました
【1】“新しい言語”をマスターするのと同じようなもの?
フランス語やドイツ語を覚えるといったような意味であれば、それは違います
厳密には違いますが「コンピュータの動きを理解して制御できるようになる」と思っておくと良いでしょう
【2】自分の意志を、プログラミング言語という言葉を使ってコンピュータに命令するようなもの?
そのとおりです。コンピュータに指示を与えやすいように用意されたものがプログラミング言語です
医学、化学など分野ごとに専門用語があるように、プログラミング言語にも、用途にあわせていくつもの言語が存在します
インターネット関連でよく使われる言語はphpやjavascriptなどがあります
(余談になりますがHTMLは厳密には言語ではなく表示方法を指定するためのタグの集まりです)
【3】「コンピュータに出来ること」というのは、誰が決めているのでしょうか?
「利用者、あるいは、システム設計者」です
音楽を存分に楽しみたいのであれば音楽に特化したハードウェアを取り付けますし、
ビデオ会議を行いたいのであればカメラやマイクを取り付けます
さらには、取り付けたハードウェアを動かすためのソフトを導入します
【4】プログラマは、コンピュータを作る人とは全くの別物ですか?
「コンピュータを造る人」がハードウェアを造る人という意味であれば、別ものです
「コンピュータを造る人」がシステムを造り上げるという意味であれば、プログラマは造り上げる人たちに含まれます
【5】何が得意であれば有利ですか?
Web系のプログラムであれば理系の知識はほとんど必要ありません
意外かもしれませんが、人並みの日本語ならびに英文読解力があれば良いです
贅沢を言えば、相手の少ない(拙い)説明から状況判断できるだけの経験値と、
経験値に裏打ちされた折衝能力ですが、こればかりは教えられて出来るものでもないですね
【6】勘違い
目的によって要求されるものは違ったものになります
・WindowsなどのOSを造る
・WordやExcelのようなアプリケーションを造る
・アプリケーションを自動操縦する
・Webアプリケーションを造る
最近のWebアプリであれば、すでに多くの人たちが作った資産を流用し、組み合わせて、
少し調整するだけでシステムが出来てしまいます
例えるならば「ガンプラをただ組み立てるだけのような場合もあれば、
ガンプラを組み立てる前にパーツ加工して、組み立ててからも磨きをかけるような場合もある」という事になります
言葉を借りれば、「コメント欄を良い感じに作って、登録したらページに表示されるようにしてくれっていうのをちょこっと記述すれば、あとは記述に従ってやってくれるんです」
ご丁寧なご回答ありがとうございます。
>フランス語やドイツ語を覚えるといったような意味であれば、それは違います
>自分の意志を、プログラミング言語という言葉を使ってコンピュータに命令するようなもの?
外国語などとは違うというのは・・・、コンピュータの動きを制御するための言葉しか無いから、
普通の外国語などとは違う、という意味なのでしょうか?
これ以外はとてもよくわかりました。
特に6に関しては、とても参考になります。
僕の中で、プログラミングとは、webページを作ったり、人工知能ロボットみたいなものを作ったり、
というようなものに限定されたイメージでした。
確かにいろんな機械がありますから、いろんな使い方があるんですよね。
あと、
>最近のWebアプリであれば、すでに多くの人たちが作った資産を流用し、組み合わせて、
>少し調整するだけでシステムが出来てしまいます
この一文で、私が思い悩んでいたことの80%くらいが解決されたように思います。
ただ、それだと1から作る場合はどうやるのだろう・・・という疑問が新たに浮かびましたが。
そういうことは凄い天才が出てこないとありえない話なんですかね??
ありがとうございました!
1.違います。
言語というので支障がありますが、
どちらかというと、ルールを書くだけなんです。
1.変数と代入文
2.IF文などの条件分岐
のこの2つのルールしかありません。
2.大体そのとおりですが
どちらかというと、プログラム言語のルールと癖にしたがって
それに合わせた形で、やりたいことを書いていく形になります。
ここで、言語は一般的な手続き言語をさしています
3.
>Xという動きをして欲しいなーと思っても、既存のソフトウェアでXという動きをするものが無い場合、
>Windowsが行うことの出来る行動を組み合わせてXに近い動きをするソフトを作ることは出来ても、
>いきなりコンピュータにXの動きをしろ!という命令を出すことは出来ないのか、という意味です。
>また、この際に「コンピュータに出来ること」というのは、誰が決めているのでしょうか?
たいていは、いきなりXと言う動きをするということができることはないんです。
Xという動きをしろという機能がない場合は、Xという動きをしろという機能をWindowsなどが提供しているものを
くみあわせて作ります。そしてそれを呼ぶことで、Xという動きをするということを実現するのです。
コンピュータにできることを決めてるのは、OSやドライバーの提供者です。
4.
コンピュータはハードウェアとソフトウェアからできてます。
プログラミングする人は、主にソフトウェアを作る人たちです。
君がコンピュータを作る人たちと言うのは、ハードウェアやOSを作る人たちのことをさしてます。
5.
プログラムの分野によりますよ。
たとえば、家電とか携帯とかのコアの部分をつくるのなら、数学的知識がないと厳しいでしょうね。
しかしながら、プログラマーにはなにも必要ないです。だから、人材派遣会社は、適当に若者をかき集めて
ほとんど素人同然の人たちを、派遣してますよ。
適性があればよいですが、とくになんの才能も必要ないんです。
6.
実際にプログラミングしてみることをお勧めします。
教育用に、ドリトルという言語があります。
教育現場で使ってるところもあるので、使ってみては?
でもこれだけで、プログラミングはこうだと決め付けるのは危険ですし
ドリトルは教育用に作られてますので少し普通の言語とも違います。
うーん、なるほど。
みなさん、大体同じようなことを仰いますね。
まぁ同じことについて述べられているので当然なのですが、みなさんのような理解をするためには、
やはり実際に自分も体験してみるしかなさそうですね。
とても参考になりました。
ありがとうございます!
プログラマの端くれからの答えです。
1:質問者の“新しい言語”のイメージは理解しかねますが、英語よりは全然マシと思います。
私が理系だからかもしれませんが、数学や物理の1単元を勉強する感じでした。
高校で例えるなら、微分積分を勉強したとか、ベクトルを勉強したとか、電磁気を勉強したとか。
学んだ概念や公式で問題を解く代わりに、学んだ言語で問題の解き方を書く感じです。
2:多くの場合、そう考えて良いと思います。
私は、プログラミングは、マニュアルを書くことと思っています。
コンピュータがそのマニュアルを実行している意味で、その通りだと思います。
ただ、皆さんが今見ているこの画面の各要素を生きたキャラクタと見なし、
それぞれのキャラクタに対してマニュアルを書く考え方もあります。
例えば、左矢印のボタンに対して「クリックされたら1ページ戻るように」など。
コンピュータに命令するイメージからは、ちょっと離れると思います。
詳しくは「オブジェクト指向」について調べてみると良いと思います。
3:言語次第です。
Windowsどころか、ランタイムと呼ばれる特殊なソフトの機能に限定される言語もあります。
逆に、Windowsなど関係無しにコンピュータそのものの機能を限界まで引き出せる言語もあります。
後者は、コンピュータがあって、それに直接指示するプログラムを書くことになります。
この場合、Windowsは全く関係ないので、影響されません。
対して前者は、Windowsなどの他のソフトウェアに頼んで、、
そのソフトウェアにコンピュータを操作させるプログラムを書くことになります。
この場合、Windowsが出来ない操作は頼めません。
これら両方ができ言語もあります。
あとは「できないこと」とは何かです。
プリンタに接続してないコンピュータに印刷しろ!と命令しても出来ないと言えば、確かにですが、
そのレベル=物理行動のレベルと思って良いと思います。
一方、論理レベルでは、普通に言うコンピュータは無敵と思って良いと思います。
時間さえ掛ければ、どんな処理だってできます。そのように設計されています。
というわけで、そう決めているのは「コンピュータの設計者」 です。
4:全く別物です。
テレビ局とテレビメーカーほど違っています。
全くの素人も大勢いますが、その知識がプログラマのレベルを決める要因の一つでもあります。
5:一に論理的思考、二に記憶力、三は想像力でしょうか。
計算はコンピュータにやらせばいいので、要らんかと。
単語数で言ったら、高校英語と良い勝負のプログラミング言語もあります。
コンピュータの状態が予想できて初めて、次ぎ何をさせるか書けます。
6:致命的な勘違いは無いと思います。
大体は良い感じではないでしょうか?
注:この答えでは専門用語を厳密に使ってません。
大体の感じが伝われば良いと思ってます。
>プログラミングは、マニュアルを書くことと思っています。
なーるほどー!分かりやすいですね。
>時間さえ掛ければ、どんな処理だってできます。そのように設計されています。
>というわけで、そう決めているのは「コンピュータの設計者」 です。
これがイマイチピンとこないのですが、
コンピュータの設計者は神様なのでしょうか・・・?
どうしてそんな凄いものが作れるのでしょう・・・・?
本当にありがとうございます!
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)とよばれる人が行い、その指示書にした
あ、この回答の続きがコメント欄だったのですね。
非常によく分かるご説明ありがとうございます。
3については、世の中大体そんなもんだと思いますし、プログラミングに限ったことではないと思うので、
これに関しては僕でもイメージしやすいです。
しかし、全く新しいものを作る、となった場合は自分でプログラミングする、とのことですが、
何も無い状態からどうやって指示するのでしょう・・・?
例えばコメント欄を1から作ろうとしたとき、1年以上はかかるとのことですが、1年以上も何をしているのでしょう・・・?
1年以上かけてコンコンとパソコンに自分のイメージを伝え続ければ、パソコンはだんだん理解してくれるのでしょうか・・・?
それとも、思った形のページが出来るまでいろんなプログラミングを試し続けるという感じでしょうか・・・?
この辺りがどうしても理解出来ません・・・。
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を抽出し、回答欄に書き込み、「この内容で確認する」ボタンを押せ」というのであればプログラミング可能で、ここまで詳しく具体的に命令をかかないとプログラミングはできません。
4番がとてもよくわかりました。
メーカーが作ったものでも、その使い方次第でメーカーも予期しないほどの能力を発揮させることが出来るわけですね。
その他もなんとなく理解するヒントになったように思います。
ただ・・・、6番に関してですが、
「はてなの質問文から一番長い単語を抽出」や「googleで検索をかける」など、それぞれの動きは、
元々あるプログラムを転用するのでしょうか?
このようなものなら既に似たような動きのプログラムが存在していると思うのですが、
もしこれらが存在しておらず、1から作るときにはどうやって作るのでしょう・・・?
例えば「質問の文章を単語に分ける」というだけでも、私にはどうやってそんな指示を出すのか想像も付きません。
そういう指示を表すプログラム言語を使うのだろうなぁとは思いますが、
そういう指示を表すプログラム言語は誰が考えたのかも分かりませんし、
どうやったらそういう指示を出すプログラム言語を見つけることが出来るのかも分かりません・・・。
この部分に関してだけ、どうしても理解出来ないような気がしてます。
今後ご回答下さる方がいらっしゃいましたら、この点に集中してお答え頂けると大変嬉しいです。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | smallzhu | 107回 | 10回 | 0回 | 2010-09-08 16:52:26 |
>プログラミングは、マニュアルを書くことと思っています。
なーるほどー!分かりやすいですね。
>時間さえ掛ければ、どんな処理だってできます。そのように設計されています。
>というわけで、そう決めているのは「コンピュータの設計者」 です。
これがイマイチピンとこないのですが、
コンピュータの設計者は神様なのでしょうか・・・?
どうしてそんな凄いものが作れるのでしょう・・・・?
本当にありがとうございます!