![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
表題の通り、プログラミング言語やライブラリはどの様にして作るのでしょうか?
巷には様々なプログラミング言語やライブラリが溢れていますが、
それらを作っている人はどうやって作っているのですか?
何故、printf("Hello World")と打ち込むと画面に「Hello World」って表示されるんだろうと気になり
質問させて頂きました。
システムって階層構造になっているので、いわゆるコンピューターの低級とか下層と呼ばれる部分を
勉強しないといけないのでしょうか?
でもコンピューターの物理的な部分(ハードウェア)の作りを理解するには、コンピューター科学やら工学やら学問的な知識が必要ですよね?
No.9ベストアンサー
- 回答日時:
No.7です。
> そうするとプログラマーに必要な知識は、どこまでになるのでしょうか?
> ひたすら目的を実現するためのライブラリーを探して覚えるだけで十分なのでしょうか?
まず、質問者様はプログラマーはシステム開発(あるいはソフトウェア開発)の中で具体的にどのような作業をする人達だという前提で話をされていますか?
そもそもシステム開発(あるいはソフトウェア開発)は大きくはどのような段取りで進む物と理解されていますか?
まずはそこがハッキリしませんと質問者が思われている「プログラマーに必要な知識は、どこまで?」に対する回答のしようがありません。
で。
Wikipediaの解説によると・・・
・システムの設計
・プログラミング
・全体設計
・詳細設計
・コーディング
・デバッグ
・ソフトウェアテスト
・パッケージング
・プログラムの導入
・配置(デプロイ、deploy)
・設定(コンフィグ、configuration)
・プログラムの利用
・プログラムの分析
・プログラムに関する文書の作成
・仕様書の執筆やメンテナンス
・リファレンスマニュアルの執筆やメンテナンス
・オペレーターズマニュアルの執筆やメンテナンス
・ユーザーズマニュアルの執筆やメンテナンス
・チュートリアルの執筆や監修やメンテナンス
・クックブックの執筆や監修やメンテナンス
・・・となっています。
具体的出典は以下です。
https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD …
しかし、当方が30年ちょっと務めた会社ならびにお付き合いのあった協力会社やお客様の間では上記の作業のうちの「プログラミング」の部分、その中でも「詳細設計」から「デバッグ」までの間、広くても「ソフトウェアテスト」までを担当する作業者、つまりはシステム開発の中で最も人数を要する部分で登場する作業者をプログラマーととらえていました。
その前提でお答えするならプログラマーに必要な知識や技術などはザッと以下です。
(1) 開発対象の詳細設計が出来る知識・技術
ある1本の実行プログラムあるいはある1本の実行プログラムの一部分のモジュールの入出力仕様などをまとめた上位設計書を参照し、それを実現するための処理手順をソフトウェア設計技法などに基づいて実施し、その内容を詳細設計書として指定された様式で記述することができること。
[補足] システムの設計、ソフトウェアの設計、1本1本のプログラムの設計で最も重要なのはそこでどのような異常がありえて、その際にシステム、ソフトウェア、プログラムのそれぞれがどのように振舞うかの設計です。
そこに不備があるとプログラムが異常終了したり下手をするとOSごと落ちる・・・ということもあり得ます。
(2) 対象開発言語に関する知識・技術
文法を知っていること、言語環境が提供する各種機能(質問者様が言われるライブラリ・・・システムライブラリなどもここに含まれます)を理解していること。
ただし、全てを暗記している必要はなく、どこをどう調べれば使いたい機能の具体的内容や書式を確認できるかを知っていればよい。
また、昨今はプログラム作成に使用する統合開発環境などがそういったことを支援する機能をたくさん実装しているので、それを利用するための使い方を知っていればよい。
(3) 開発対象のプログラム作成で使用する各種ソフトウェアの機能・使用方法などに関する知識
例えば開発対象のプログラムがGUIを持つ物であればそのプログラムが動作するOSがアプリケーション・プログラムに提供しているインタフェース(GIUライブラリ)の機能を知る必要があるし、開発するプログラムが外付けされている各種センサー機器などからのデータを入力して処理するようなものであれば、そのセンサー機器のメーカーが提供するライブラリの機能を理解する必要がある。
ただし、ここも(2)と同様暗記している必要はないし、開発で使用する統合開発環境などには各種の支援機能が用意されていることもある。
(4) コンパイル・リンクの方法とエラーの解消方法
コンパイルやリンクでは必ずエラーが発生する。それらのエラー番号やエラーメッセージからエラー原因とその箇所を調べて修正・対処することができること。
(5) モジュール試験・プログラム試験の設計・実施の方法
1本のプログラム中のあるモジュールあるいは1本のプログラムが正常ケース・異常ケース全てにおいて設計とおりに動くことを確認するための試験環境、試験項目の設計が行え、その内容をモジュール試験設計書あるいはプログラム試験設計書として指定された様式で記述することができること。
モジュール試験の場合はそれじたいでは実行ファイル(Windowsで言うexeファイル)にはならないので、開発対象や開発環境によってはスタブ・モジュールやダミー・モジュールを作成しなければならない場合もある。
また、試験項目の作成では試験項目ごとに「どういうデータを入力するとどういうデータが出力されるか」の設計も行い、試験実施にあたっては入力データを作成しなければならない。
加えて各試験項目を繰り返し実行できるようそれらのデータをファイルとして保管しておくことも必要。
参考まで。
No.7
- 回答日時:
> 表題の通り、プログラミング言語やライブラリはどの様にして作るのでしょうか?
コンパイラーやライブラリ・・・という理解でよういでしょうか?
でしたらこれらもプログラミング言語で書きます。
例えばC言語の各種ライブラリーはC言語で書かれています。普通の実行プログラムとライブラリの違いはコンパイル・リンクの仕方だけです。
大きなシステムを作る際は、そのシステム内のたくさんのプログラムで同じような物を作る無駄をなくすため、システム全体を見回して「こういう機能を持ったライブラリがあると作業効率があがるし、管理も楽だね」とそのシステム用のライブラリを作ったりもします。
> 何故、printf("Hello World")と打ち込むと画面に「Hello World」って表示されるんだろうと気になり
システム開発をしている人でもそこの仕掛けを上から下まで通して全部理解している人は普通いません。(^^;
ソフトウェアとしてはこういう言語の場合はこういう書き方をするとこう動く物が出来上がる・・・と理解しているだけです。
> でもコンピューターの物理的な部分(ハードウェア)の作りを理解するには、コンピューター科学やら工学やら学問的な知識が必要ですよね?
いいえ。
コンピューターの最も基礎的な仕組みを理解するのはAND、OR、XORの回路を理解して2進数の2桁の電卓の仕組みを理解できればよいのだと思います。
0+0=0、0+1=1、1+0=1、1+1=10 の回路がわかれば・・・です。
で、それと・・・
printf("Hello World")と打ち込むと画面に「Hello World」って表示される
・・・のは直接関係しません。
C言語などで「printf("Hello World")」と書いたものが、コンパイル・リンクした結果、実行プログラムの中でどういう機械語となり、それを動かした際にどういう仕組みで画面上に「Hello World」と描画されるかまで本当のところを正しく理解するのには非常に広範囲な技術的知識が必要です。
コンピューターの本体を設計・開発している人、コンピューターのOSを設計・開発している人、各種アプリケーション・ソフトウェアの設計・開発をしている人でそういった全ての仕掛けを理解している人はまずいないでしょう。
当方は30年ほどシステム開発の仕事をしていて、当初はOSやデータベースエンジンなどの開発をしていましたが、それでもソフトウェアとハードウェアのツナギ部分の仕組みくらいまでしか承知していません。
複雑な物を勉強したり理解しようとする際、目的とする部分以外はブラックボックスとして目的とする部分の勉強や理解に集中することが大切と当方は思います。
気にはなりますけど。(^^;
参考まで。
有難うございます。
そうするとプログラマーに必要な知識は、どこまでになるのでしょうか?
ひたすら目的を実現するためのライブラリーを探して覚えるだけで十分なのでしょうか?
No.5
- 回答日時:
>>プログラミング言語やライブラリはどの様にして作るのでしょうか?
プログラミングの知識があれば、ライブラリはもう少し勉強すれば作成できますよ。
でも、プログラミング言語を作るのは、結構大変です。
構文解析の知識が必要となります。
簡単なものであれば、「lex & yaccプログラミング/アスキー出版」を読めば作れるようになります。
本書を読むには、C言語をしっかり理解しておくことが必須ですけどね。
>>システムって階層構造になっているので、いわゆるコンピューターの低級とか下層と呼ばれる部分を勉強しないといけないのでしょうか?
知らなくてもできる方もいるかもしれないけど、個人的には、勉強して知っているのが当然だと思います。
No.1
- 回答日時:
「コンピューターの低級とか下層と呼ばれる部分を勉強しないといけないのでしょうか?」
そんなものは必要ありません。かえって、初期には余分な知識は障害になります。
「コンピューターの物理的な部分(ハードウェア)の作りを理解するには、コンピューター科学やら工学やら学問的な知識が必要ですよね?」
物理的な部分を理解する必要はありませんし、コンピューター科学やら工学やら学問的な知識は必要ありません。
例えばですが、エクセルで円周率の関数がありますが、円周率の計算方法を知らなくても使えます。機械が背後で何をやってるかは考えないでよいのが機械のいいところです。自分でルート2を計算する関数を作るなら、ルート2の計算方法を調べる必要がありますが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- 法学 コンピューター プログラミングの言語で記述されたプログラミングのコード一式は、作った人に 著作権があ 4 2023/08/04 17:31
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- 日本語 「立ち上げる」 8 2023/08/20 14:48
- その他(プログラミング・Web制作) WEBアプリ開発に必要な言語 5 2023/06/28 16:57
- 大学受験 自己推薦書の添削や意見・アドバイスお願いします 2 2022/08/27 19:34
- その他(学校・勉強) 自分の市場価値を高めるには 3 2022/07/12 09:11
- アプリ botの作り方 1 2023/03/23 17:29
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- AI・ロボット 古代の生命体が、コンピューターを作り、AIを作ったとし、AIは自らの性能を向上させることの価値に気付 8 2022/12/12 20:09
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
python3について。
-
vba クリップボードクリアにつ...
-
Pythonのコードエラーについて...
-
ホームページのプログラムの見...
-
IT業界より楽に稼げる業界って...
-
JRのjsonファイルって使って大...
-
HTMLソースが表示のページのも...
-
正規表現 URL抽出「 [\\/\\b]{0...
-
google formsを使ったタスク依...
-
このプログラミング言語のfor分...
-
プログラミング未経験者(殆ど未...
-
初心者が簡単なPowerShellスク...
-
ホワイトハッカー
-
pythonでのカーソル移動がずれる
-
恒久的リダイレクトについて
-
プログラマーと学歴の関係性に...
-
Pythonで仮想通貨の自動売買が...
-
16x16のスプライトフォント
-
Google ColaboでGUI作成
-
REGZAに接続できない(パソコン)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
API、OCX、DLLって何でしょう?
-
VBプログラムをEXCEL VBAに移植...
-
C言語のHP-UXからLinuxへのポ...
-
OSとCPUの関係について
-
コンソールアプリでファイル選...
-
SNMPトラップ情報をC#.netで作...
-
WEBページに読み書きするプログ...
-
変数の大きさを超える代入
-
Perl5とActivePerl
-
UNIX環境でのCプログラム上でC...
-
.Net とは何ですか?
-
3ウェイハンドシェイクの流れ...
-
i,j,k
-
DLLってなに?
-
VBS:コンピュータ名を取得し、...
-
Ryzen 3700(無印)はWin11に対応...
-
CGIとは?
-
プログラミング 素数か素数では...
-
プログラマやシステムエンジニ...
-
このプログラミング誰か教えて...
おすすめ情報