【OCN】1GBプレゼントCP中!

表題の通り、プログラミング言語やライブラリはどの様にして作るのでしょうか?
巷には様々なプログラミング言語やライブラリが溢れていますが、
それらを作っている人はどうやって作っているのですか?

何故、printf("Hello World")と打ち込むと画面に「Hello World」って表示されるんだろうと気になり
質問させて頂きました。

システムって階層構造になっているので、いわゆるコンピューターの低級とか下層と呼ばれる部分を
勉強しないといけないのでしょうか?
でもコンピューターの物理的な部分(ハードウェア)の作りを理解するには、コンピューター科学やら工学やら学問的な知識が必要ですよね?

gooドクター

A 回答 (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ファイル)にはならないので、開発対象や開発環境によってはスタブ・モジュールやダミー・モジュールを作成しなければならない場合もある。
 また、試験項目の作成では試験項目ごとに「どういうデータを入力するとどういうデータが出力されるか」の設計も行い、試験実施にあたっては入力データを作成しなければならない。
 加えて各試験項目を繰り返し実行できるようそれらのデータをファイルとして保管しておくことも必要。

参考まで。
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございました。
ベストアンサーとさせて頂きます。

お礼日時:2021/10/19 17:39

>プログラミング言語やライブラリはどの様にして作るのでしょうか?



Cとかpascalとか他の言語で書く。
私の大学時代では pascal で p-code インタプリタ用の
PL/0 という 言語用コンパイラを製造/提出させられました。

私は「アルゴリズム+データ構造=PASCALプログラム」
という本を起点に学んだけど、もう売っていないと思う。
それっぽい本を探してください。
    • good
    • 0
この回答へのお礼

有難うございました。
参考にさせて頂きます。

お礼日時:2021/10/19 17:38

> 表題の通り、プログラミング言語やライブラリはどの様にして作るのでしょうか?



コンパイラーやライブラリ・・・という理解でよういでしょうか?
でしたらこれらもプログラミング言語で書きます。
例えば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やデータベースエンジンなどの開発をしていましたが、それでもソフトウェアとハードウェアのツナギ部分の仕組みくらいまでしか承知していません。

複雑な物を勉強したり理解しようとする際、目的とする部分以外はブラックボックスとして目的とする部分の勉強や理解に集中することが大切と当方は思います。
気にはなりますけど。(^^;

参考まで。
    • good
    • 0
この回答へのお礼

有難うございます。
そうするとプログラマーに必要な知識は、どこまでになるのでしょうか?
ひたすら目的を実現するためのライブラリーを探して覚えるだけで十分なのでしょうか?

お礼日時:2021/10/06 16:42

プログラミング言語やライブラリもプログラミング言語でプログラムします。

プログラミング言語はコンピュータよりも人間に近い側に位置するのでコンピュータよりも人間の知識が必要かも知れません。コンピュータ側にはOSやミドルウエアがあるので当然、OSやミドルウエアの知識が必要になります。
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2021/10/19 17:37

>>プログラミング言語やライブラリはどの様にして作るのでしょうか?



プログラミングの知識があれば、ライブラリはもう少し勉強すれば作成できますよ。

でも、プログラミング言語を作るのは、結構大変です。
構文解析の知識が必要となります。
簡単なものであれば、「lex & yaccプログラミング/アスキー出版」を読めば作れるようになります。
本書を読むには、C言語をしっかり理解しておくことが必須ですけどね。

>>システムって階層構造になっているので、いわゆるコンピューターの低級とか下層と呼ばれる部分を勉強しないといけないのでしょうか?

知らなくてもできる方もいるかもしれないけど、個人的には、勉強して知っているのが当然だと思います。
    • good
    • 0
この回答へのお礼

有難うございました。
「lex & yaccプログラミング/アスキー出版」
を参考にさせて頂きます。

お礼日時:2021/10/19 17:36

> 何故、printf("Hello World")と打ち込むと画面に「Hello World」って表示されるんだろう



これがメインのご質問なら(アーキテクチャなどの)ハードウェアの勉強をする必要はありません。

まずは「アセンブラ言語」について調べてみることをお勧めします。
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2021/10/19 17:34

№1です。

追記。
開発環境ですが、eclipseやnetbeansなどの高機能開発環境をセットアップするのが良いと思います。エディターのエラー検出機能など、便利ですし、コンパイル・実行も簡単です。
より高度なプログラムに進むのにも向いています。
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2021/10/19 17:34

>勉強しないといけないのでしょうか?



そうです

質問で書かれている答えはコンピュータの歴史を読んだら出て来る項目ばかりです
図書館でじっくり勉強することをおすすめします
    • good
    • 0
この回答へのお礼

コンピューターの作りを完全に理解するのは大変そうだ。
有難うございました。

お礼日時:2021/10/19 17:34

「コンピューターの低級とか下層と呼ばれる部分を勉強しないといけないのでしょうか?」


そんなものは必要ありません。かえって、初期には余分な知識は障害になります。
「コンピューターの物理的な部分(ハードウェア)の作りを理解するには、コンピューター科学やら工学やら学問的な知識が必要ですよね?」
物理的な部分を理解する必要はありませんし、コンピューター科学やら工学やら学問的な知識は必要ありません。
 例えばですが、エクセルで円周率の関数がありますが、円周率の計算方法を知らなくても使えます。機械が背後で何をやってるかは考えないでよいのが機械のいいところです。自分でルート2を計算する関数を作るなら、ルート2の計算方法を調べる必要がありますが。
    • good
    • 0
この回答へのお礼

有難うございました。
別にIT技術者だからといって、下層から高級レベルまで理解している必要は
無いんですね。

お礼日時:2021/10/19 17:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング