プログラミングを学びたいという人々・またそれをターゲットとしたサービスが増える中
ただ漠然と作りたいWebサービスがあり、そのためだけに手段として一時的に学んでいる、ような場合を除き
手に職をつけるためという目的の人に対しコンピュータアーキテクチャを学ぶほうが先では?
というような気がしていて
コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか
みなさんのご意見を聞いてみたく書きしたためました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答15件
0
知ってるに越したことはないですが、どちらでも良いと思います。
例えばトラックの運転手になりたい人が、トラックの構造・仕組みまで知ってる必要があるでしょうか。
エンジンの動力でタイヤが動いているくらいは知ってるでしょうけど、そのエンジンはどうやって動いているの?ってとこまでは知らなくても良いことだと思います。
ただし、頻繁にオイル交換をするのであれば、オイルの場所・交換方法を知っていれば人任せではなく自分でできますね。
タイヤ交換も然り。
要は知っていれば作業が捗りますが、知らなくてもなんとかなります。
ただしどうしても必要なことはあります。
トラックの話であれば運転方法になりますし、コンピューターで言えばプログラミング言語でしょうか。
どちらも興味がある人はとことんまで調べますし、そうでもない人は興味すらわかないでしょうね。
投稿2017/06/15 07:07
編集2017/06/15 07:09総合スコア16998
0
そうですね、トランジスタの仕組みがわからないと不安で夜も眠れませんよね。電磁気学を初めとした物理学の知識はプログラミングに必須ですよね。
でも、ハード面だけわかっても駄目ですよね。ソフト面も知らないと駄目ですよね。いわゆる計算機科学が必要であることはもちろんのこと、全てのプログラミングはチューリングマシンと同等であり、その停止性問題はゲーデルの不完全性定理の別の表現であることも知らないと駄目ですよね。やはり、論理学も大事ですよね。
現在のコンピューターおよびそこで動作するプログラムは現代科学の集大成です。全てを把握するには、数学・物理学はもちろんの事、製法に関しては工学や化学の知識も必要になります。単に電磁気学を究めた程度では、CPUで発生するトンネル効果(理解には量子力学が必要)によるリーク電流は理解できません。なんとかハード面を理解しても、ソフト面である計算機科学も把握しないと、プログラミングそのものを理解することはできません。ましてや、動作原理については論文や特許等で公開されているとしても、実際の製法や仕組みについては企業秘密も存在し、コンピューターの全ての部品についての製造元を買収でもしない限り、全てを知ることは不可能です。
原理まで突き止めれば際限はありません。そのうち、原子と電子、原子核での陽子と中性子、陽子と中性の中のクォーク、なんてとこまで気になってきます。コンピューターを構成する陽子の一つが突然崩壊したらどうしようとか不安で仕方がありません(現在の大統一理論では崩壊することが予言されていますが、未だに観測できていません)。あなたは、そこまで必要と考えますか?もし、必要というのであれば、現代科学では解明できていないところで突き当たって、途方に暮れることでしょう。
いや、必要ないと答えたとき、では、どこまで必要という線引きはどこになるのでしょうか?何をもって決めたら良いのでしょうか?CPUぐらいは何をする物か知って欲しいとか言うのですか?なら、CPUが何でできているのかをなぜ知る必要が無いのでしょうか?
重要なのは責任分岐点をどこに設けるかだと思います。そして、それは何を作るか、何を使うかによって変わります。Cはメモリ操作をつよく意識する作りのため、メモリというものをよく知っておかないといけません。しかし、LISPではそのような意識をする必要はありません。メモリ操作を直接命令しているわけではないからです。また、Cであってもメモリの素材を気にする必要はありません。期待される原理の通りに動けば問題ないわけです。つまりは、どこまで知っておいた方がいいかは状況によって異なります。そして、どこかで責任分岐点を設け、この先はブラックボックスとしないと切りがありません。それをどこに設けるかだけかと思います。
私自身はチューリングマシンの限界、プログラミングには決して解けない問題が存在すると言うことぐらいは知っておいて欲しいですが、別に知らなくても困ることは無いと思っています。
投稿2017/06/15 22:35
総合スコア21735
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
アマチュアの立場でコメントすべき問題ではないかも知れませんが・・・
例えばプログラムを書いていて「1,000,000要素の配列を定義する」ということがどういうことなのか気にせずに定義する」といったことをするコーダーがいたとき
それって1要素1byteだとして、1MBのメモリーを取るということですよね・・・対象としている計算機はどのくらいの主記憶の上でアプリケーションが動いていてそこに1MBの配列をポンと取ることの意味を意識できなくていいのかしら・・・
と感じるのではないでしょうか。極端に詳しくなる必要はないと思うのですがそれでも最小限このくらいはわきまえておくべきというラインはあると思えます。問題はそのラインがどこらへんにあるのかということなのかも知れません・・・
また過去の質問でどなたかが「仕事をするには環境構築ができてなんぼ」と言っておられたのも印象深かったです。そうしたことをするには、どういう仕組みになっているかある程度の理解がないと力を付けること自体が厳しいのではないかと思いました。
とりあえずおもちゃのプログラムを作るなら自由にやればよいと思いますが、人に使ってもらうものを作るなら計算機についてのそれなりの理解に基づいて作ることを期待する(期待される)と思えます。なんだか当たり前のことを言っているようで質問者さんへの回答になるのか怪しいですね・・・
投稿2017/06/15 07:31
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/15 07:39
2017/06/15 08:34
0
例えば、以下の設問ではどうでしょうか?
- プログラム言語がどのような仕様に基づき実装されているか知らないと不安を感じないか?
- 使用しているフレームワークがどのように実装されているか知らないと不安を感じないか?
- コンパイラがどのようなコードを吐くのかを知らないと不安を感じないか?
- 使用しているライブラリがどのようなロジックで動作しているか知らないと不安を感じないか?
- OSがどのように実装されているか知らないと不安を感じないか?
- ネットワークプロトコルを知らないと不安を感じないか?
- ドライバがどのようにハードウェアをたたいているか知らないと不安を感じないか?
全てを知っているに越したことはないと思いますが、全てを知る事は不可能であると思っております。
8ビットの時代であればいざしらず、いまや「組み込み」の世界ですら上から下までを理解するには不可能です。
であれば、どの部分に重点を置くか、または広く浅くやるか、は個人にゆだねられてよいのではないでしょうか。
理由も「ただの興味」でも「必要に応じて」でもなんでもよいと思っています。ただ、アカデミックでないプログラマは個人的にあまり好きではありません。
投稿2017/06/15 15:21
総合スコア15898
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか
不安に感じるなら勉強すればいいし、別に気ならないなら勉強しなくてもよいです。
各人の時間は有限なので、各々が思ったように勉強に励めばよいでしょう。私は他人の時間の使い方に文句を言う気はありません。
ちなみに私は気にならない部類の人間です。
プログラミングの肝は抽象化なので、気にしなくてよい部分を増やして、やりたいことに集中できる環境である方が優れているし、生産性が高いと考えています。
手に職、と言っても千差万別さまざまな仕事があるので、コンピュータアーキテクチャの理解が必須であるとは言えません。
仕事であれば、上司なり同僚なりが、職務の遂行に必要な知識が何かについてアドバイスするなり、指導するなりするはずなので、殊更に「コンピュータアーキテクチャの理解が先である」と一般化しても共感を得るのは難しいです。
もっと状況を整理して議論をしないと発散するだけで意味ある結論を得ることは難しいでしょう。
投稿2017/06/15 14:43
総合スコア936
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
人生長いので、その時その場所で、要求される分野も変わっていくと思います。
たとえば異動や転職をしたときに、新しい職場で常識と思われているスキルについていけないことは、かなりのハンデとなります。そういった例をたくさん見てきました。質問者様のおっしゃっられているアーキテクチャは先に身に着けておかなくてはならないものでは無いですが、いずれかのタイミングでは必ず理解しておくものだと思います。それもできれば早めに。
アーキテクチャ等の基本的な考え方が身についていれば、新しいことを始めるときに常に応用が利くというのは、何の仕事をしようと当然のことだと思います。
投稿2017/06/15 09:06
総合スコア26
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
コンピュータアーキテクチャの知識が必要な環境にいる人は知っているべきだとは思いますが、必要としない環境にいるひとにとっては単なる雑学ですので、その学習時間をプログラミング自体の学習に当てたほうが有意義だと思います。
コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか
不安は特には感じません。
そういうものだと割り切れるだけの社会的な信頼は既にあると判断しています。
世の中知らない事ばかりですが、ある程度の社会的な信頼があるものに対しては、それは99%くらいは問題ないものだろうと割り切って生きています。集合知ってやつをそれなりに信用しないとこんな複雑な社会では生きていけません。
確かにコンピュータアーキテクチャでも他のことでも多くを知っていた方が良いのは確かですが、時間や能力的に無理なので優先順位を付けるわけです。そして、コンピュータアーキテクチャは私の中では利用価値の低い知識だと判断しています。
投稿2017/06/15 12:25
総合スコア1895
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
プログラムの資格を見てみました。
上級試験/準上級試験模擬問題 | PHP技術者認定機構
出題範囲(2級) - 検定試験について - Java™プログラミング能力認定試験│資格検定のサーティファイ│あなたのスキルアップを応援します|
ここの中にはコンピュータアーキテクチャのことについては触れられてないように見えます。
資格があれば、手に職をもってるといっても良いのではないでしょうか。
手に職というのが、ものすごくすごい人というのでもいいですが、その基準はどこにあるのでしょうか?
自分は探せませんでしたが、コンピュータアーキテクチャの資格を持っていれば手に職を持つといえるのでしょうか。
また、仕事を探してる方はアピールのためにも実際に動くものを見せたほうがいいと思います。
個人でアプリを作りお金を取ってる人を知ってますが、その人が全てを理解してるとは思えません。
なのでどちらが先かといわれれば、内部のことはあまりわからなくても、実際に動くゲームとかを作れる技術のほうが先だと思います。
投稿2017/06/15 10:29
総合スコア2050
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
作りたいものを作るで良いと思います。コンピュータがどのようにして動いているのかなどは興味があれば勉強すれば良いと思います。
今はそういったことを学ばなくてもある程度のものは作れてしまいます。
弊社にコンピュータアーキテクチャなどに詳しいSE、PGはいないと思います。
投稿2017/06/15 09:09
総合スコア346
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
例えば
C++
1cout << "a" << endl;
と書けばコンソールに「a」と表示されます。でも、実際にどういう仕組で画面に「a」と表示されるのかを知る必要はありません。「こう書けばこう表示される」という行為と結果だけを押さえておけば十分だからです。途中の処理内容まで知らなくても事足ります。
なお、WindowsなどのOSが動作しているPCではなく、何か独自のハードウェアで全て一から画面出力を組み込まなくてはいけないとなると、そのハードウェアのアーキテクチャなど諸々を知っておく必要があります。
ただ、技術的な興味や好奇心からどういう仕組みになっているかを知りたい場合は、調べて納得すればいいのではないでしょうか?
投稿2017/06/15 08:01
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/15 07:21
2017/06/15 07:27
退会済みユーザー
2017/06/15 22:09
2017/06/16 00:57 編集