質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

15回答

2018閲覧

プログラミングを学ぶ人々・学ぶことについて

skmtkytr

総合スコア18

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

5クリップ

投稿2017/06/15 06:41

プログラミングを学びたいという人々・またそれをターゲットとしたサービスが増える中
ただ漠然と作りたいWebサービスがあり、そのためだけに手段として一時的に学んでいる、ような場合を除き
手に職をつけるためという目的の人に対しコンピュータアーキテクチャを学ぶほうが先では?
というような気がしていて

コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか

みなさんのご意見を聞いてみたく書きしたためました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答15

0

知ってるに越したことはないですが、どちらでも良いと思います。
例えばトラックの運転手になりたい人が、トラックの構造・仕組みまで知ってる必要があるでしょうか。
エンジンの動力でタイヤが動いているくらいは知ってるでしょうけど、そのエンジンはどうやって動いているの?ってとこまでは知らなくても良いことだと思います。
ただし、頻繁にオイル交換をするのであれば、オイルの場所・交換方法を知っていれば人任せではなく自分でできますね。
タイヤ交換も然り。

要は知っていれば作業が捗りますが、知らなくてもなんとかなります。
ただしどうしても必要なことはあります。
トラックの話であれば運転方法になりますし、コンピューターで言えばプログラミング言語でしょうか。

どちらも興味がある人はとことんまで調べますし、そうでもない人は興味すらわかないでしょうね。

投稿2017/06/15 07:07

編集2017/06/15 07:09
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skmtkytr

2017/06/15 07:21

この場合にコンピュータをトラックに例えるのは違うんじゃないかなぁと コンピュータ上で動くソフトウェアを作ること、それをトラックの運転では例えれないのではないでしょうか? そもそも製造の工程にないのでは?
ttyp03

2017/06/15 07:27

コンピューターをトラックに置き換えた話ではなく、トラックの運転手だったら、という例え話ですので、厳密に考えないでください。 でも近からず遠からずだとは思いますけど。 >製造の工程にないのでは? これの意味がよくわかりませんでした。
退会済みユーザー

退会済みユーザー

2017/06/15 22:09

トラックの運転手よりレーサーなら、マシーンの仕組みを知ってる必要があるか否かの喩えも製造業でなくとも通りそうですね。
ttyp03

2017/06/16 00:57 編集

> hayatomoさん レーサーだと、本当に車の仕組みを知っていないと、その車のポテンシャルを引き出せそうもないので、ちょっと違うかな、と。 コンピューターに置き換えるなら、ドライバとかハードウェアよりのプログラミングではないでしょうか。 通常のアプリケーションプログラマはせいぜいトラックの運転手なのかと。
guest

0

そうですね、トランジスタの仕組みがわからないと不安で夜も眠れませんよね。電磁気学を初めとした物理学の知識はプログラミングに必須ですよね。

でも、ハード面だけわかっても駄目ですよね。ソフト面も知らないと駄目ですよね。いわゆる計算機科学が必要であることはもちろんのこと、全てのプログラミングはチューリングマシンと同等であり、その停止性問題はゲーデルの不完全性定理の別の表現であることも知らないと駄目ですよね。やはり、論理学も大事ですよね。

現在のコンピューターおよびそこで動作するプログラムは現代科学の集大成です。全てを把握するには、数学・物理学はもちろんの事、製法に関しては工学や化学の知識も必要になります。単に電磁気学を究めた程度では、CPUで発生するトンネル効果(理解には量子力学が必要)によるリーク電流は理解できません。なんとかハード面を理解しても、ソフト面である計算機科学も把握しないと、プログラミングそのものを理解することはできません。ましてや、動作原理については論文や特許等で公開されているとしても、実際の製法や仕組みについては企業秘密も存在し、コンピューターの全ての部品についての製造元を買収でもしない限り、全てを知ることは不可能です。

原理まで突き止めれば際限はありません。そのうち、原子と電子、原子核での陽子と中性子、陽子と中性の中のクォーク、なんてとこまで気になってきます。コンピューターを構成する陽子の一つが突然崩壊したらどうしようとか不安で仕方がありません(現在の大統一理論では崩壊することが予言されていますが、未だに観測できていません)。あなたは、そこまで必要と考えますか?もし、必要というのであれば、現代科学では解明できていないところで突き当たって、途方に暮れることでしょう。

いや、必要ないと答えたとき、では、どこまで必要という線引きはどこになるのでしょうか?何をもって決めたら良いのでしょうか?CPUぐらいは何をする物か知って欲しいとか言うのですか?なら、CPUが何でできているのかをなぜ知る必要が無いのでしょうか?

重要なのは責任分岐点をどこに設けるかだと思います。そして、それは何を作るか、何を使うかによって変わります。Cはメモリ操作をつよく意識する作りのため、メモリというものをよく知っておかないといけません。しかし、LISPではそのような意識をする必要はありません。メモリ操作を直接命令しているわけではないからです。また、Cであってもメモリの素材を気にする必要はありません。期待される原理の通りに動けば問題ないわけです。つまりは、どこまで知っておいた方がいいかは状況によって異なります。そして、どこかで責任分岐点を設け、この先はブラックボックスとしないと切りがありません。それをどこに設けるかだけかと思います。

私自身はチューリングマシンの限界、プログラミングには決して解けない問題が存在すると言うことぐらいは知っておいて欲しいですが、別に知らなくても困ることは無いと思っています。

投稿2017/06/15 22:35

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BitCoin

2017/08/09 17:46

すごい的を得た回答だと思いました
guest

0

アマチュアの立場でコメントすべき問題ではないかも知れませんが・・・

例えばプログラムを書いていて「1,000,000要素の配列を定義する」ということがどういうことなのか気にせずに定義する」といったことをするコーダーがいたとき

それって1要素1byteだとして、1MBのメモリーを取るということですよね・・・対象としている計算機はどのくらいの主記憶の上でアプリケーションが動いていてそこに1MBの配列をポンと取ることの意味を意識できなくていいのかしら・・・

と感じるのではないでしょうか。極端に詳しくなる必要はないと思うのですがそれでも最小限このくらいはわきまえておくべきというラインはあると思えます。問題はそのラインがどこらへんにあるのかということなのかも知れません・・・

また過去の質問でどなたかが「仕事をするには環境構築ができてなんぼ」と言っておられたのも印象深かったです。そうしたことをするには、どういう仕組みになっているかある程度の理解がないと力を付けること自体が厳しいのではないかと思いました。

とりあえずおもちゃのプログラムを作るなら自由にやればよいと思いますが、人に使ってもらうものを作るなら計算機についてのそれなりの理解に基づいて作ることを期待する(期待される)と思えます。なんだか当たり前のことを言っているようで質問者さんへの回答になるのか怪しいですね・・・

投稿2017/06/15 07:31

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skmtkytr

2017/06/15 07:39

メモリ確保の感じ方、すごくわかります。 すべてのプログラミング言語はメモリ操作のシンタックスシュガーだというようなツイートを見かけたときに似たようなことを感じました。 最後はやはり程度の問題だとは思うんですがそのボーダーがどの程度の意識差なのかなとよく思うのです。 お仕事でプログラミングをするならば製品を保証出来るのは当たり前として、動作させる環境を理解していなかったばかりに問題があった、良くない設計で作られていたなんてことがあったり。 なんて。
KSwordOfHaste

2017/06/15 08:34

計算機のアーキテクチャーの詳細は知らなくてよいとコメントされている方が多いのは、自分がコメントしたようなことは「計算機の仕組みに対する理解」ではなく単に「プログラミングする上での常識」に類するものであって、質問者さんがおっしゃる計算機アーキテクチャーが「深いレベルの話」と想定されているのだと思います。もし計算機アーキテクチャーが「ノイマン型計算機がどのような仕組みで動いているか」「電子回路がどういう仕組みで動いているか」「プロセッサーにはどんな命令があるか」といった話ならそこまで詳しく知らなくてもかまわないレベルと思いますよね・・・ アマチュアなら興味があれば役にたつかどうかに関係なく学んでいいですが、プロの方々はまず必須の知識・学ぶ価値がある知識を優先すると思います。計算機アーキテクチャーに詳しくなることよりリファレンスを確認するとか規約を守るとかどうやって間違いの少ない論理を考えるかといったことが興味の中心になる・・・という意味で「計算機アーキテクチャーをまっさきに学ぶことが必要」でないとおっしゃっているような気がしました。
guest

0

例えば、以下の設問ではどうでしょうか?

  • プログラム言語がどのような仕様に基づき実装されているか知らないと不安を感じないか?
  • 使用しているフレームワークがどのように実装されているか知らないと不安を感じないか?
  • コンパイラがどのようなコードを吐くのかを知らないと不安を感じないか?
  • 使用しているライブラリがどのようなロジックで動作しているか知らないと不安を感じないか?
  • OSがどのように実装されているか知らないと不安を感じないか?
  • ネットワークプロトコルを知らないと不安を感じないか?
  • ドライバがどのようにハードウェアをたたいているか知らないと不安を感じないか?

全てを知っているに越したことはないと思いますが、全てを知る事は不可能であると思っております。
8ビットの時代であればいざしらず、いまや「組み込み」の世界ですら上から下までを理解するには不可能です。
であれば、どの部分に重点を置くか、または広く浅くやるか、は個人にゆだねられてよいのではないでしょうか。

理由も「ただの興味」でも「必要に応じて」でもなんでもよいと思っています。ただ、アカデミックでないプログラマは個人的にあまり好きではありません。

投稿2017/06/15 15:21

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか

不安に感じるなら勉強すればいいし、別に気ならないなら勉強しなくてもよいです。
各人の時間は有限なので、各々が思ったように勉強に励めばよいでしょう。私は他人の時間の使い方に文句を言う気はありません。

ちなみに私は気にならない部類の人間です。
プログラミングの肝は抽象化なので、気にしなくてよい部分を増やして、やりたいことに集中できる環境である方が優れているし、生産性が高いと考えています。

手に職、と言っても千差万別さまざまな仕事があるので、コンピュータアーキテクチャの理解が必須であるとは言えません。

仕事であれば、上司なり同僚なりが、職務の遂行に必要な知識が何かについてアドバイスするなり、指導するなりするはずなので、殊更に「コンピュータアーキテクチャの理解が先である」と一般化しても共感を得るのは難しいです。

もっと状況を整理して議論をしないと発散するだけで意味ある結論を得ることは難しいでしょう。

投稿2017/06/15 14:43

koko_u

総合スコア936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

人生長いので、その時その場所で、要求される分野も変わっていくと思います。
たとえば異動や転職をしたときに、新しい職場で常識と思われているスキルについていけないことは、かなりのハンデとなります。そういった例をたくさん見てきました。質問者様のおっしゃっられているアーキテクチャは先に身に着けておかなくてはならないものでは無いですが、いずれかのタイミングでは必ず理解しておくものだと思います。それもできれば早めに。
アーキテクチャ等の基本的な考え方が身についていれば、新しいことを始めるときに常に応用が利くというのは、何の仕事をしようと当然のことだと思います。

投稿2017/06/15 09:06

tamo_solo

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラミングは技術・知識が領域分け(HTMLやPHP、コンピュータアーキテクチャ等)されていて、領域の境界線は曖昧な場合が多いです。
この領域毎に学ぶのであればどこから学んでもいいと思います。

但し、あなたの言う通り学んだことが他の技術・知識領域とどう繋がっているかを学ぶことはとても重要です。

手に職を持ちたい人が必ず学ぶ必要があるかはわかりませんが、仕事でいい成果を出したい人は学ぶべきだと思います。

投稿2017/06/15 07:38

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コンピューターアーキテクチャを知らなくても、ある程度まではプログラムができるようになると思います。
そのさらに上を目指したい、稼ぎたいと思えばもっと根幹部分に手を出す選択肢が見えてくるのだと思います。
もちろん、他の方法で上を目指したり、稼いだりはできますが・・・。

ハンバーグの作り方をしらないけど、冷凍食品のハンバーグをチンすれば食べられると理解しているのと同じのような気がします。

投稿2017/06/15 06:46

s.t.

総合スコア2021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コンピュータアーキテクチャの知識が必要な環境にいる人は知っているべきだとは思いますが、必要としない環境にいるひとにとっては単なる雑学ですので、その学習時間をプログラミング自体の学習に当てたほうが有意義だと思います。

コンピュータがどのようにして動いているのかわからないままコンピュータで動くものを作っていて不安を感じないのでしょうか

不安は特には感じません。
そういうものだと割り切れるだけの社会的な信頼は既にあると判断しています。

世の中知らない事ばかりですが、ある程度の社会的な信頼があるものに対しては、それは99%くらいは問題ないものだろうと割り切って生きています。集合知ってやつをそれなりに信用しないとこんな複雑な社会では生きていけません。

確かにコンピュータアーキテクチャでも他のことでも多くを知っていた方が良いのは確かですが、時間や能力的に無理なので優先順位を付けるわけです。そして、コンピュータアーキテクチャは私の中では利用価値の低い知識だと判断しています。

投稿2017/06/15 12:25

oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

私の場合、ほぼ無知の状態で就職し現在に至りますが、なんとかなってます。

無関心すぎるのも確かに問題はあると思いますが、
必要になった時に学べばいいのでは?と思ってます。
不必要なものを無理に詰め込んでも、使わなければ意味がないので…

昔は必須だったかもしれませんけどね。
最近の言語仕様も、確かそのあたりをある程度カバーしてくれているようですので。

投稿2017/06/15 22:36

suzu_cat

総合スコア81

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラムの資格を見てみました。
上級試験/準上級試験模擬問題 | PHP技術者認定機構

出題範囲(2級) - 検定試験について - Java™プログラミング能力認定試験│資格検定のサーティファイ│あなたのスキルアップを応援します|
ここの中にはコンピュータアーキテクチャのことについては触れられてないように見えます。

資格があれば、手に職をもってるといっても良いのではないでしょうか。
手に職というのが、ものすごくすごい人というのでもいいですが、その基準はどこにあるのでしょうか?
自分は探せませんでしたが、コンピュータアーキテクチャの資格を持っていれば手に職を持つといえるのでしょうか。
また、仕事を探してる方はアピールのためにも実際に動くものを見せたほうがいいと思います。
個人でアプリを作りお金を取ってる人を知ってますが、その人が全てを理解してるとは思えません。
なのでどちらが先かといわれれば、内部のことはあまりわからなくても、実際に動くゲームとかを作れる技術のほうが先だと思います。

投稿2017/06/15 10:29

toutou

総合スコア2050

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

作りたいものを作るで良いと思います。コンピュータがどのようにして動いているのかなどは興味があれば勉強すれば良いと思います。

今はそういったことを学ばなくてもある程度のものは作れてしまいます。

弊社にコンピュータアーキテクチャなどに詳しいSE、PGはいないと思います。

投稿2017/06/15 09:09

happyhappy

総合スコア346

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば

C++

1cout << "a" << endl;

と書けばコンソールに「a」と表示されます。でも、実際にどういう仕組で画面に「a」と表示されるのかを知る必要はありません。「こう書けばこう表示される」という行為と結果だけを押さえておけば十分だからです。途中の処理内容まで知らなくても事足ります。

なお、WindowsなどのOSが動作しているPCではなく、何か独自のハードウェアで全て一から画面出力を組み込まなくてはいけないとなると、そのハードウェアのアーキテクチャなど諸々を知っておく必要があります。

ただ、技術的な興味や好奇心からどういう仕組みになっているかを知りたい場合は、調べて納得すればいいのではないでしょうか?

投稿2017/06/15 08:01

PineMatsu

総合スコア3579

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラミングする上でCPUに使われている半導体中の電子の振る舞いを知らなくて不安じゃないのか?
大抵の人は不安じゃないでしょう。
目的に必要ないからです。

ではコンピュータアーキテクチャの知識はどの目的でプログラム組んでいる人に必要でしょうか。
組み込み分野の中でも低層じゃないでしょうか。

投稿2017/06/15 07:27

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ご意見としては「知っておくべき」ですが、開発現場では「知っていなくてもできる」のが現実です。

最近はサーバーもクラウド化していて、ますます「知っていなくても出来てしまう」ので、割りきってしまっても良いのではないでしょうか。

投稿2017/06/15 06:51

koizumi

総合スコア230

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問