プログラミングを始めるためのアウトライン
もはや初学者だった頃のことは思い出せないが、Pythonが台頭してきた現代においてはあまり深いところまで知る必要はないかのように思う。端的に初学者が知っておくべきポイントを挙げると下記のようになる。
※なお、プログラマは自らのことをエンジニアと言いがちだが、ここではメカエンジニアと区別して、ソフトウェアエンジニアと読んでおく。
※基本的にはWindowsOS限定で話を進める。メカ屋でmac使いなんていないよね?
- 重要なこと
- プログラミング言語の違い
- プログラミング学習の仕方
- 開発環境
- 小ネタ
1.重要なこと
まずもって重要なことはモチベーションである。それは、何が作りたいか、解決したい課題はなにか、ということである。
もし勉強のためになにかプログラミングをしてみようとしているのであれば、時間の無駄なのでやめたほうが良い。
強いられていやいや勉めるのはよくないし、自発的学習では目的がなければならない。
モチベーションの高さと知識定着率の良さとには相関があるらしい。
したがって、作りたいものがないのであればyoutubeでも見ていたほうが有意義。
2.プログラミング言語の違い
作りたいものによって選ぶべき言語が異なる。主にどのようなものを作りたいかによって以下の3種のソフトウェアに大別されるジャンルがある。
また、最終的に開発環境のないパソコンでアプリを使用したい、あるいはアプリを他の人に配布したい場合があるが、
これに関してコンパイラ言語とスクリプト言語というものなどについても触れたい。
話を簡単にするために若干の嘘が入る場合があるかもしれないが、気になったところは他の方の解説記事を参照されたし。
2-1. 製作物ジャンルによる違い(重要)
この章はこの節だけ読んで後は読み飛ばしてもいいレベルで重要。
作りたいものによって基本的にはほぼ言語が決まるといっても過言ではない。特に、初学者やメカ屋さんは選択の余地がない。
言語は単一で使用できない場合もある点には留意されたい。
- GUI系:インターフェイス(マウスでクリックしたり、文字を入力したりできるようなウィンドウ)を必要とするアプリ
C#, HTML + JavaScript, Python + Kivy, Java - 計算系:微分方程式の計算や数値シミュレーション、画像解析、アルゴリズム研究で使用する素朴なアプリ
C, C++, Python, Java - 組み込み系:ロボットや家電をはじめとするメカトロニクス製品に搭載されているマイコン・SoCのチップ上で動かすためのソフトウェア(ファームウェア)
C, C++, Java
以上、ジャンル別に言語をいくつかピックアップしてみたが、メカ屋的にはGUI系か計算系かに絞られるはず。
組み込み系は流石にファーム屋さんに任せましょう。
結論、メカ屋さんはGUI系ならC#を、計算系ならPythonを使うのが良い。
Python + Kivy や C は結構習得難易度が高い。手に職をつけたいなら、挑戦してもいいかも。
ただし、C系はメモリの関係とか難しいので、どっちもどっちかもしれない。
なお、GUI系アプリ開発では見える部分だけをC#で作って、内部処理はPythonで作るという方法もある
(個人的にはおすすめだが、いきなり言語2つに挑戦はどうかな)。
2-2. ソフトウェア実行に関する違い
- コンパイラ言語:
よく見かける “.exe” の拡張子がついた実行形式と呼ばれるファイルを作成可能なもの。
比較的配布が容易。プログラム全体をコンパイル(パソコンが理解できる状態に変換)してから実行される。動作が速い。 - スクリプト言語:
非ソフトウェアエンジニアは余り見ることのない言語系。開発環境と呼ばれるソフトウェアの実行環境が必要。
頑張ればexe化も可能。コード(a = b+1みたいなプログラムの記述)が1つ1つ実行することが可能(インタプリタ言語と呼ばれるもの)。動作が遅い。
アプリケーションの配布には、開発環境の構築バッチファイル・スクリプトのディレクトリの特定などが必要となる。
2-3. その他動作環境による違いなど
この節は読み流しても大丈夫。
動作環境が何に依存するかで下記のような分類も可能。
- webアプリ:chrome / IE / Firefox などのブラウザ上でのみ動作可能なアプリ
- nativeアプリ:ブラウザやメモ帳、エクスプローラー、パワーポイント、LINEといったOS上で直接動作するアプリ
OSによる違いもある。それぞれのメジャーなプログラミング言語も併記しておく。
- Andoroidアプリ:Kotlin, Dart
- iOSアプリ:Swift, Dart
- windowsアプリ:C系
- macOSアプリ:Swift
- クロスプラットフォームアプリ:HTML + CSS + JavaScript + PHP
理念というか宗教的な違いもあるか……?ちょっと違うか。
下記はどちらかというとプログラミング手法のようなもの。
ただ、言語によって思想的な傾向がある。いずれにせよメカ屋さんには関係ない話。
- オブジェクト指向:
メカ屋的なアナロジーで説明すると、図面を作ってから、現物を作るというプロセスを踏むことで、図面を使い回したいという思想。
他の例えでは、ネジとか小物部品を作って他の製品にも使い回したい、みたいなアナロジーもよく言われる。
小難しい専門用語がたくさん出てくるのでメカ屋にはおすすめはしない。 - 関数型:
プログラムをある程度まとまった機能に分けてコードを記述する感じのスタイル。 - 手続き型:
手続きという言葉の通り、一定の順序で、つまりコードを上から順に実行していくようにするオーソドックスなスタイル。
再利用性が低いデメリットがあるとか言われているが、小規模プログラムならどれも同じなので、このスタイルで基本は良い。
3.プログラミング学習の仕方
ググる。以上。
なんていうのは半分冗談で、学習者のバックグラウンドによって若干学び方も変わってくるかも?
2章をざっと読んで、”あばばばば” “生理的に無理!” とならなければ、基本的に何かしらの講習や講座・講義を受ける必要はない。
完全に初学者の場合は無料なら受けておいたほうが良いが、基本的にyoutubeで無料の講義があるのでそちらのほうが時間的制約がないのでおすすめ。
初学者かどうかは、次のものがわかるかどうかによる。
- コード、ソースコード
- バグ、デバッグ、エラーコード
- コメント、コメントアウト
- 代入: a = 1; a = a + 1; // 変数aの中身は2となる。
- 条件文:if-else文
- ループ: for文、while文
で。
“あばばばば” “生理的に無理!”な人は絶対に対面での講習を受けたほうが良い。少人数ワークショップでも大学の講義でもよいが。
受けてなんとなくイメージが掴めたら、多少適正はあるので、続けてyoutubeを見ながら開発を行えば良い。
イメージが掴めないようなら、適正はないので諦めるが吉。
プログラミングの流れは以下の通り。
- 開発環境をパソコンにインストールする。開発環境は言語によって異なる(後述)。
- Hello World! という文字列をターミナルなどに表示させることで、開発環境が使える状態になったことを確認する。
- まず、作りたいものを構成する要素を細分化し、機能ごとに分類する。本当は仕様書を事前に作るのが良いが……。
ex) 電卓アプリを作りたい場合、次のような分類を行い、なんとなく計画をたてる。
・ウィンドウの作成
・1-9の数字ボタンの作成・記号ボタンの作成・計算実行ボタン
・計算結果の表示欄の作成
・数字ボタンを押したときの動作・記号ボタンを押したときの動作
・計算処理
・計算処理結果の表示
・想定外の使い方をされた場合の想定:ボタンの同時押しなど
・ソースコードの不要なコードの削除・コメントの追加など(この作業をリファクタリングという)
・UXを高めるためのレイアウト変更・色彩設計など意匠を調整 - 上記3で分けた項目1つだけを実装する。それ以外の実装はしない。絶対に。
同時に色々実装してエラーやバグが出た場合、どの時点の実装がだめだったかわかりにくい。
ex) 数字ボタンの作成なら数字ボタンを1つしか作らない。
※ 実装に際して次のようにググると良い。:「C# ボタン 作り方」 「C# ボタン 押された」
※ エラーに際してはターミナルに表示された文字をそのままコピーしてぐぐると良い:「Python syntax error 何(原因)」
※ バグに関しては状況を簡潔にしてググると良い。:「Python openCV グレースケール できない」 - 4で実装した機能は一度コメントアウトするか、別のファイルに書き写すかする。
その後、トライしてない項目を実装する。 - 上記5を繰り返し、全項目完了したら、まずは計算処理系の機能ではなく、表示系のコードから1つずつ増やして実装していく。
そのたびに実行してエラーとならないかバグはないか確認する。 - 上記6をすべて終わらせることで晴れてアプリ開発終了となる。
基本的にはググって出てきたコードをコピペ → 動作確認 → 仕様をなんとなく理解 → 調整 のステップの繰り返しで開発できる。
なんなら、作りたいアプリケーションそのもののが落ちていることもある。
4.開発環境
代表的あるいは使いやすい環境は以下の通り。導入方法等は他の方の記事に譲る。むしろyoutube動画の方がわかりやすいので、ググって。
- Visual Studio: C, C++, C#, Visual Basic(VB), Pythonなどの開発が可能な統合開発環境。有料(個人使用、機能制限ありなら無料)。
- Anaconda(Jupyter/Spyder/VScode含む): Python開発環境。有料(個人使用なら無料)。
- WinPython + VScode: Pythonの実行環境+高機能エディタ。無料。VScode上でPythonが実行できるように設定が必要。
- Chrome + VScode: webアプリ(HTML + CSS + JavaScript)の開発環境。無料。ただし、これだけではリッチなことはできない。
結論としては、C#やるなら、Visual Studio。PythonやるならWinPython + VScode。
※VScodeの正式名称はVisual Studio Code。 Visual Studioとはべつもの。インストール不要のwebアプリも最近できた。
5.小ネタ
C言語はプログラミング言語の祖といっても過言ではない言語。大体どの言語もCの影響を受けている。
また、Cには兄弟姉妹がいる。C++, C#。文法は概ね一緒。Cを一通りやれば、大体どの言語もなんとなーく使えるようになる。かも。
C++はC言語の拡張版でオブジェクト指向的な思想を取り込んでいる。基本的にC++はCと互換性があり、混在して使用することが可能な場合も多い。
C#はC++++みたいな感じ。プラスマーク2個を2段にしたら#マークに見えるでしょ?ただし、C, C++と互換性なし。GUI作れる。
POSシステムはC++, C#とか使われてたりする。あと、VBとかも。
VBAってあるでしょ。エクセルマクロ。あれは滅ぶべき。許さない。
個人レベルで使うにはいいかもだけど、配布して使わせちゃいかんでしょ。
他人が作った古いVBAなんてどうやってデバッグするんスか。スパゲッティコードぐるぐる。
というか、Officeソフトなんて産業廃棄物使わせないでほしい。windowsとVScodeだけ作ってりゃいいんですよ。microsoftさんは。
大企業のmicrosoft信仰どうにかならないものか……。
ちなみに、あばばばば知っている人いますかね。芥川龍之介。
最近人気のPython。なぜ人気か。
それは料理で例えると、カレーを作りたい人にカレー調理パック(カット野菜, 出汁, ルー, 鍋, 水, コンロ含む)を与えられるような気の利いた言語だから。
他の言語だと、カレーを作りたい人は、野菜を買いに行く・野菜を選ぶ・野菜を移動させる・……・強火にするなどかなり原始的なところからやらなきゃいけない。
カレーが作れるという点ではどちらも同じだが、作るための労力は段違い。
Python には、モジュール・ライブラリ・フレームワークと呼ばれる”どこかの誰かがもうすでに作ってくれたプログラム”がたくさん用意されている。
また、Pythonを使用している人が多いので情報が手に入りやすい。自分がぶち当たった壁は大体他の人がもうすでにぶち当たって解決済み。
そんなこんなでわからないことがあってもググれば、日本語のブログ記事なんかが簡単に引っかかる。
そういえばPythonでできることってなんですかぁ?って聞かれることがしばしばある。
プログラミング言語は得手不得手あれど、基本的にはできることは変わらない。例外はあるが。
ソフトウェアエンジニアあるある:
先方「〇〇って実装できますか?」
SE1「技術的には可能です(めんどくさい)」
SE2「技術的には可能です(時間めっちゃかかるけど…)」
SE3「技術的には可能です(コストによる)」
SE4「技術的には可能です(やりたくない)」
SE5「技術的には可能です(それ作る意味なくない?)」
Google[ 技術的には可能 ]
その他ソフトウェアエンジニアあるある:
下記リンクの0:26あたりからのあるあるはめちゃくちゃ分かる。
>>> リンク:youtube