プログラミング
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/18 15:16 UTC 版)
プログラマ
プログラミングをする人をプログラマという。プログラミングを行うには一般に、コンピュータ科学を中心としたプログラミングそれ自体についての能力や知識と、書こうとするプログラムが対象とする問題領域などについての能力や知識の両方が必要である。
職業としてのプログラマ
プログラマの仕事
この他、プログラムが、作者以外の人によって利用される場合には、プログラムの利用方法や機能について質問を受けることがある。プログラムを、意図したとおり稼働させてゆくためには、これらの問い合わせに対応する必要もある。
一般に、職業としてプログラミングを行う場合、これらの作業が工程として含まれる。大規模なプログラミングでは、これらの作業を分業することも多い。
このような業務は、ソフトウェア工学という学問のソフトウェア開発工程の分野として扱われる。
プログラミングコードがある程度自動生成できるようになった今、専門家の予測通りプログラミングエンジニアの役割は変わりつつあるが[6]、現時点ではコード自動生成の商用・学術利用には著作権上の課題がある[7]。
プログラミング言語
プログラミング言語が異なれば、プログラミングのスタイル(プログラミングパラダイム)も異なる。どの言語を使うかの判断には、企業としてのポリシー、その用途への適合性、サードパーティのパッケージが使えるか、個人の好みなど様々な要素がある。理想的には、用途に最も適した言語を選ぶべきである[8]。しかし、その言語を使えるプログラマが十分揃えられないとか、その言語の処理系に問題があるとか、実行時の効率が悪いといった問題から、最適な言語を選べないこともある。
アレン・ダウニー (Allen Downey) は、著書『計算機科学者のように考える方法』(How To Think Like A Computer Scientist) で次のように書いている。
言語が違えば、詳細も違って見えるが、どんな言語にも次のような基本的命令要素がある。
- 入力: キーボード、ファイル、その他の機器からデータを入手する。
- 出力: 画面にデータを表示したり、ファイルその他の機器にデータを送る。
- 演算: 加減算のような基本的算術操作を行う。
- 条件付き実行: 条件をチェックして、一連の処理を行うか否かを判断する。
- 繰り返し: ある処理を繰り返し実行する。通常、毎回何かが変化している。 — Allen B.Downey、How to Think Like a Computer Scientist§What is a program?
プログラミングパラダイム
今日までに、プログラミングの進歩に貢献したパラダイムとして、次があげられる:
- プログラムの実行制御の仕組みとして、命令から命令へと直接移動する代わりに、論理的な順接・反復構造を用いてロジックの抽象化を目指した構造化プログラミング
- 変数の使用による副作用の発生を排除しようとした関数型プログラミング
- 宣言型プログラミングを可能にした論理プログラミング
- データと手続きの直交化を押し進め、人間の概念構成に近い表現を可能にしたオブジェクト指向プログラミング
プログラミングには、文字による言語で記述する方法ばかりではなく、視覚言語や図形言語で記述する方法であるビジュアルプログラミングという方法もある。
最近のプログラミング
ソフトウェア開発 |
---|
中心となる活動 |
パラダイムとモデル |
方法論とフレームワーク |
開発支援 |
プラクティス |
ツール |
標準と機関 |
用語集 |
|
品質
ソフトウェア開発手法がどうであれ、最終的にはプログラムは基本的な属性を満たさなければならない。プログラミングにおいてそれを気にかけておくことで、デバッグやその後の開発およびユーザーサポートにかかる時間とコストを削減できる。ソフトウェア品質を確保する方法は様々だが、以下の5つの属性が最も重要である。
- 効率性: リソース使用量(プロセッサ、メモリ、デバイス、ネットワークその他)は可能な限り少ない方がよい。
- 信頼性: プログラムは正しく動作しなければならない。それは単にソースコードが正しく実装されているというだけでなく、誤差の伝播を少なくするとか、典型的な値の範囲に関するエラー(オーバーフロー、アンダーフロー、ゼロ除算など)を防ぐという観点も含まれる。
- 頑健性: データ型の間違いなど実行時エラーによるプログラム停止を誘発するような事態に対処できなければならない。これは、特にユーザーとのやり取りの場面や、エラーメッセージの処理などで重要となる。
- 移植性: 再プログラミングしなくとも、任意のソフトウェア環境やハードウェア環境で動作すべきである。
- 可読性: 後の保守をコーディングした人が行うとは限らないため、命名規則やコメントなどをわかりやすくしておく。
方法論
ソフトウェア開発の第一段階は要求分析であり、その後モデル化し、実装し、デバッグする。これら作業については様々な方法論がある。要求分析で一般的な方法論としてユースケース分析がある。
モデル化技法としてはオブジェクト指向分析設計 (OOAD) とモデル駆動型アーキテクチャ(MDA)がある。統一モデリング言語 (UML) は OOAD や MDA での記法として使われている。
データベース設計では、似たような技法として実体関連モデルがある。
実装技法としては様々なプログラミングパラダイムがある(オブジェクト指向プログラミング、手続き型プログラミング、関数型プログラミング、論理プログラミングなど)。
デバッグには統合開発環境 (IDE) が使われることが多い(Visual Studio、NetBeans、Eclipseなど)。独立したデバッガ(gdbなど)も使われている。
言語利用状況
どのプログラミング言語が一番使われているかというのは、非常に難しい問題である。言語によっては特定の分野でのみ一般的なものもあるし(例えば、COBOLは企業のデータセンターでよく使われており、FORTRANは科学技術計算に強く、C言語は組み込み市場で強い)、汎用的に様々なアプリケーションを書くのに使われている言語もある。
言語の人気を測定する手段として、求人広告に挙げられている言語を数え上げる方法がある[9]。また、既存のソースコードの行数を言語毎に推計する方法もある(ただし、言語によって同じ機能を実現するのに必要な行数が異なるため、補正が必要)。
デバッグ
バグだらけのプログラムは使いものにならないため、デバッグは重要である。C言語やアセンブリ言語などは、慣れたプログラマであっても、バッファオーバーランや不正なポインタやメモリの初期化忘れ/解放忘れといったバグを作りこみやすい。バッファオーバーランは隣接するメモリ領域を破壊し、全く関係ない箇所でプログラムに異常が発生する原因となる。このため、C言語やC++でのプログラミング向けに Valgrind、Purify、BoundsChecker といったメモリデバッガが開発されてきた。
Java、C#、PHP、Python といった言語にはそのような問題がほとんどないが、性能は低い。ただし、データベースアクセスやファイル入出力が性能を決定付けるような分野では、これらの言語の性能でも何ら問題ない。また、最近ではこれらの言語の処理系でも性能が向上してきている。
プログラミングレス思想
プログラミング言語が使えるようになったことにより、機械語によるプログラミングを人間が直接する必要がなくなったのも一種の「プログラミングレス」だと言えばそれは大成功していると言えるだろうし(プログラミング言語の研究はその初期には「自動プログラミング」等と呼ばれていた)、結局「思想」というものが何を指すのか明確でないので、どうとでも言えることである。あるいは、現代においてはアプリケーションソフトウェアを使うだけでもコンピュータの利活用の幅がおおいにある、というのも一種の「プログラミングレス」であろう。理屈としては、ドメイン固有言語のうち、チューリング完全でないようなものは汎用の言語ではないから、それらを使ったコンピュータの利活用も「プログラミングレス」と言えなくもない。また、GUIによる設定やドラッグ&ドロップでアプリケーションが開発できることなどを指して、プログラミングレス、あるいは、ノンプログラミングということもある[10]。
注釈
- ^ これは、タイムシェアリングシステムの発達とも関連する。
- ^ たとえば、アクションゲームで1フレーム中に行わなければならない計算が可能かどうかが、開発の最後までわからなかったりしては困るだろう。
- ^ ないし極く単純なアセンブリ言語
- ^ ただし、デバッグがあることをあてにしてルーズにプログラムを書くことは厳に戒められねばならない。バグにも種類があり、たとえば、インタプリタでも最初の構文解析で検出されるような簡単なものなら問題ないが、突き止めるのが極めて困難な部類のバグ(特異なバグを参照)はできる限り早い時点で回避されるに越したことはない。
- ^ 2019年度(令和元年度)秋期まではCOBOLが選択可能だった。
- ^ 元々は初級システムアドミニストレータ試験(初級シスアド)に出題されていたが、2009年より基本情報技術者試験に移行した。初級シスアドは2009年春期を最後に廃止された。
- ^ 2011年まではPerlが出題対象に含まれていた。
出典
- ^ Shaun Bebbington (2014年). “What is coding”. 2014年3月3日閲覧。
- ^ Shaun Bebbington (2014年). “What is programming”. 2014年3月3日閲覧。
- ^ A 13th Century Programmable Robot. University of Sheffield.
- ^ Villiger, Jessica; Schweiger, Simone A.; Baldauf, Artur (2022-10). “Making the Invisible Visible: Guidelines for the Coding Process in Meta-Analyses” (英語). Organizational Research Methods 25 (4): 716–740. doi:10.1177/10944281211046312. ISSN 1094-4281 .
- ^ http://catb.org/jargon/html/B/bottom-up-implementation.html
- ^ “What Are The Benefits Of Chat GPT-4 Over GPT-3.5”. mytasker.com. 2023年5月26日閲覧。
- ^ Arnold, Vanessa (2023年2月21日). “ChatGPT Copyright: Everything you need to know” (英語). neuroflash. 2023年5月26日閲覧。
- ^ 荒井省三、いげ太『実践F# 関数型プログラミング入門』技術評論社。ISBN 978-4-7741-5127-4 。
- ^ Survey of Job advertisements mentioning a given language
- ^ 株式会社エクス コラム 「ノンプログラミング が熱い!7つの背景」 2017年11月13日閲覧
- ^ Paul Graham (2003年). Hackers and Painters 2006年8月22日閲覧。.
- ^ Paul Graham『ハッカーと画家』オーム社、2005年 ISBN 978-4-274-06597-2
- ^ s:プログラマが知るべき97のこと/コードは設計である
プログラミングと同じ種類の言葉
品詞の分類
名詞およびサ変動詞(作る) | 合作 製図 プログラミング 創造 擬作 |
- プログラミングのページへのリンク