LinuxとWindowsのプログラムは作った後の用途が違う!

2020年9月24日

某ブログを読んでいて「プログラミングの勉強で挫折するのは自分の書いたプログラムがどのように使われるの実感できないから」と書いてありました。

なるほど。プログラミング教育でよくある”Hello World”はそれ自体が誰かの役に立つことはないですもんね。

この記事ではあなたの作ったプログラムがどのように世の中に広まっていくのかを紹介します。

プログラミングの系列ざっくり3つ

プログラミングのリリースの話をする前に、その種類を考えます。大きくざっくり3つにして考えるとわかりやすいと思います。

  • Linux
  • Windows
  • スマホアプリ

スマホアプリ系 - よくわからないのでそのうちまとめます

スマホアプリだけOS名ではないですが、iOS・android系と考えてよいでしょう。この分野はサーバーとの連携が必須なのでLinux系プログラミングに+αということでしょうか。

私は古い世代のITエンジニアなのでスマホアプリの開発についてはまだイメージができていません。ですのでこの記事ではLinux系列のプログラミングとWindows系列のプログラミングの違いを説明します。

Linux系のプログラミング

Linux系のプログラミングは一言で言うと「データ処理」です。Linux系と名前を付けましたが、プログラミングに以下の物を使っていたらこの系統と思ってください。

  • Linux
  • Python
  • html
  • C(C++)
  • WEBサーバー
  • VPS

「WindowsにPython入れてディープラーニングしてるけど?」という方もいるかもしれません。

しかし、それはディープラーニングの学習と評価をWindowsでやっても、モデルができたときにLinuxサーバーに乗せてWebサイトなどから公開することになります。

というかそこまでもっていかないと事業としては成り立っていません。サーバーに実装できなければ趣味や勉強の範囲から出てません。

これに当てはまる人は、最終的にはLinuxの知識が必要です。ということで、Linux系のプログラミングの製作からリリースまでの手順は以下のような感じです。

1 プログラミング

何らかの処理を自動化するためにプログラミングをします。この時点ではLinuxでもWindowsでもOKです。言語もPythonでもJavaでもいいです。

この際、入力は何なのか?出力は何なのか?を明確にしておかなければいけません。

例えば、機械学習を使ってECサイトのレコメンドエンジンを作るとするならば、入力はユーザーのプロフィールや行動履歴で、出力はお勧めの商品などになります。

これらの入出力に合わせてPythonなどのプログラミング言語で最適解を導くモデルを作成します。

2 移植

作ったプログラムをサーバー上で動作するように改変します。

WindowとJupyterでPythonで開発している人ならば、PythonのスクリプトをLinuxサーバーにコピーするだけでだいたい動くはずです。

Cで開発している場合はLinuxサーバー上でコンパイルしなおしてLinuxサーバーで動くように実行ファイルを変えておく必要があります。

前項のECサイトのように例えると、作ったモデルをサーバーにコピーし、サーバーのOS上で推論ができる環境を整えます。PythonならばPythonのバージョン整合やライブラリのインストールなど。計算コストが高いようならサーバーの性能を調整します。

3 UI(ユーザーインターフェース)との連結

必ずしもUIが必要ではないですが、多くの場合UIと連結して使われます。 WEBの場合だとJavaスクリプトを使っていると思うので、ユーザーがプロフィールを入力した時点で入力されたデータと学習したモデルからおすすめの製品を推測します。

前のECサイトで例えると、ユーザーのプロフィールや行動履歴をデータベースに収集し、そこからモデルに入力するプログラム、またこのプログラムの実行タイミングなどを決定します。

モデルから出力されたデータの仕様方針も決めます。レコメンドエンジンだとデータベース内の商品に順位が付きますので1位から順にユーザーにお勧めするようなUIを考えて、実装します。

Windows系プログラミング

次にWindows系のプログラミングですが、Linux系に対比して次のようなキーワードが当てはまります。

  • Windows
  • Visual Studio
  • C#
  • Basic
  • USB
  • LAN
  • シリアル通信
  • GPIB
  • パソコン(デスクトップ、ノート)

全体的に目の前の環境で完結するイメージが強いです。このように小さい環境で実用的なものが作れることが、私が初心者にWindows系のプログラミングを進める理由です。

Windows系プログラミングの中でも私が勧めているが、Windows + C# + シリアル通信 + 計測器です。この組み合わせは、すぐに職場で使ってもらって会社の利益になります。

またWindows系のプログラミングは作った後の手続きも簡単です。ざっとですが、以下のような手順になります。

1 プログラミング

はじめにプログラミングをします。Windows系ではVisual Studioを使うのが楽です、中でもVisual C#は補完機能が超絶便利で初心者が選ぶには適していると思います。

初めてのプログラミングにC#を勧める理由は別の記事を読んでください。ほかにもプログラミングの記事を書いていますのでページ右の検索窓から探してください。

プログラミングを独学するのにC#を勧める理由

2 発行(Publish)

Visual Studioの発行の機能を使ってインストーラーを作成します。発行されたインストーラーによりほかのWindowsでソフトを使用できます。

コードを非公開にしない場合はプログラミングしたPC上でビルドしてそのまま使っても大丈夫です。私の場合はほぼこの方法で使っています。

まとめ

この記事ではLinux系のプログラミングとWindows系のプログラミングの実装手順について説明しました。

Linux系のプログラミングは主にWebサーバを使ってECサイトのような商業的な利用が想定されます。PythonやJava ScriptのプログラミングではLinuxの知識が不可欠でしょう。

逆にWindows系ではPCと機械をつないで動作を制御するなどの工業的な利用が想定されます。Windows系ではC#だけわかればプログラムの発行までできるので、お勧めです。

皆さんはどちらが自分に合っているでしょうか。私は両方好きなので両方できますが、これからはスマホアプリも必須でしょうね。頑張りたいです。