どのようなプログラムを作るかによって、それに適したプログラミング環境は大きく異なります。 多くのSEやプログラマが作成するのは、WindowsやLinuxといったオペレーティングシステムと呼ばれるコンピュータの上でプログラムを実行するための基本プログラムではなく、特定の利用目的を持った応用プログラムつまりアプリケーションプログラムです。 つまりアプリですね。 私も、そのアプリを作っているプログラマですが、これまた、アプリの種類も多種多様で、利用するハード・シーン・目的・人によって大きく変わります。
今は昔
私がプログラミング始めたころは、プログラミング言語もアセンブラ・FORTRAN・COBOL・BASICくらいしかなく、利用できるハードウェアや人も限られていました。 従いまして、これらをすべてマスターするのはそれほど? 時間はかかりませんでした。 その後多くのプログラミング言語を習得をしましたが、プログラミングの講師はしたことはありましても、生徒になったことはほとんどありません。
※大型計算機やスパコンのOSの講習は受けました。 また、オブジェクト指向が出たとき、さすがにパラダイムシフトが必要でしたので、高いお金(会社が出しましたが)で? 基本的な講習は受けたことがあります。
※私がほとんど知らない産業用の機械制御コンピュータの言語は古くからあります。
ちなみに、今でも新しいプログラミング言語が出てきますが、スタートはみな同じなのに、何故か、講師になる側と生徒になる側に分かれます。 講師になる人はたいてい、仕事で必要になるとかで資料を読み漁り、とりあえず使ってみるとか、実践的な経験を積んでいるからです。 ですから、逆に、具体的に作りたいプログラムがなければ、動機付けも弱くそのプログラミングの知識は身につきません。 おっと、話が横にそれましたw
アプリの中で生活
振り返って、今はどうでしょう。
スマフォ・ゲーム機・PCはもちろんのこと、家電や店舗のIOT(Internet of Things)を含めて、コンピュータが使われてない機器を探すが難しいくらい、巷に溢れ、その機能や目的も多種多様です。
多くのプログラミングやハードウェア・OS・フレームワークを経験した私でも知らないものがたくさんです。 とはいっても、しょせん人が作るもの・使うもの、ほとんどそれまでの知識の応用でしかありません。 目的や背景・ベースとして使用している技術を考えるとリーズナブルな仕様や仕組みになっているものです。 そうなっていないものや、信頼性などの品質の悪いものは、使い勝手が悪く、遅かれ早かれ淘汰されるでしょう。
上流工程
アプリ開発に使用するツールとして、ビルド開発環境に関係なく使用する定番のツールがあります。
UML (設計ツール)
従いまして、アプリを作る側は、上記のことをよく考えて、どのようなハード・OS・フレームワーク・通信・ライブラリ・言語・データ等を選定することもを含めて設計しなければなりません。 20年くらい前からオブジェクト指向設計のツールとして使用されているUML(Unified Modeling Language) などを使用することになるでしょう。 私の場合、比較的少人数で開発することが多かったため、UMLは必要なもののみ使用していました。
私は、上流設計の工程では、ユースケース図、パッケージ図などを利用していました。
具体的にプログラムの概略を設計する時は、クラス図は欠かせません。 オブジェクト指向のプログラムは分解するとクラス単位になるからです。 FORTRANなど手続き指向のプログラムでは、サブルーチンや関数単位になります。 Windowsなどに代表されるGUI(Graphical User Interface)を持つプログラムはオブジェクト指向で作成することになります。 少し、複雑なロジックやコンテキスト(文脈または状況依存)を考慮しなければならないクラスなどについては、アクティビティ図(昔のフローチャートとほぼ同じ)やシーケンス図、ステートチャート図を描くことになるでしょう。
ただ、納品する場合はまだしも、将来の自分のため書くのであれば、概略だけにとどめておいた方が無難です。 なぜなら、実装、テスト、修正を重ねていくと細かく書いても、こまめにメンテナンスしないとコードとの乖離が大きくなるからです。 コード内のコメントにDoxygen など(Java の場合は Java Doc)を積極的に利用しましょう。 クラス図などは自動で作ってくれます。
git (バージョン管理)
私が、このブログで紹介しようとしているのは、企業でプロジェクトを組んで多数のSEが関わって作成するプログラムを作る環境ではなく、もう少し狭い範囲で、例えば、個人的にアプリを作りたいとか言うレベルのものです。 ですから、バージョン管理も git などを利用しますが、あくまで自分のためのものであって、必ずしもリモートレポジトリを置かなくてもよいと思います。 (邪道かもしれませんがw) リモートリポジトリは、個人が単一のアプリを作る場合でも複数のPCで異なった環境でビルドしたい場合は必要でしょう。 利用する場合、git hub などは、公開ソフト以外料金が発生しますので、git Lab や OneDrive を利用するのがおすすめです。 私は、両方使用しています。
フリーウェアなどで、ソースからビルドする必要がある場合は、git リポジトリからクローンして、構築するのが定番になっています。