本記事は、画像変換ソフト作成を通して、この世界の魅力に触れてみようという企画シリーズの最後の記事になります。
これからプログラミング学習をしてみよう!という方を対象に
- 今後、どのように勉強していけばいいか!?
をご紹介します。
様々なパターン別でご紹介致します。
- 今回、紹介する学習手順は、脱初心者レベルを目標にしています。
- 筆者のお勧の方法であり、万人向けでない可能性があります。
ご承知おき下さい。
本記事は、プログラムに触れた事が無い人を対象に、画像変換ソフト作成を通して、この世界の魅力に触れてみようという企画シリーズの1記事になります。
企画シリーズ全体は、下記の通りです。
Pythonを勉強しようかどうか、判断材料の1つにして頂ければ幸いです。
「プログラムを体験して楽しむ」企画
進め方ステップ
最初に、どの道に進みたいかを検討する
まず最初に、自分が何を作りたいか・どんな分野に興味を持っているのかを考えてみます。
例えば
- ロボットを作りたい
- 自動で会話してくれる、システムが作りたい
- ゲームが作りたい
- 掲示板みたいな、HPが作りたい
- 自動の、株取引システムを作りたい
などなどです。
目的によって学習する内容も異なるので、何に興味があるかを決めてから学習した方が、効率的です。
いきなりそんな事言われても、わかんないよー (> <) という方は、少しでも楽しそうと思える分野から初めてみるのがお勧めです。
(学習していく中で、向き、不向きが分かる事も多いため、軌道修正すればいいかと思います。)
各分野別、学習の進め方紹介
次の順番でご紹介します。
- 組込み系(ロボット等)を作りたい
- ロボット等のセンサーから取得したデータの、分析屋になりたい
- 自動応答マシンを作りたい(
ボッチなので、友達を作りたい) - 株等の自動取引システムを作りたい(
億り人の仲間入り〜♪) - ゲーム作り(AR、VRなど、これからはバーチャル世界!!)
- ECサイトや掲示板を作りたい(みんな、集まれ)
- スマホアプリを作りたい
- Windows、Mac用アプリを作りたい
その他にも色々あると思いますが、楽しそうなものをピックアップしてみました。
どんな分野に進むにしても、共通事項の学習
どんな分野に進むにしても、最初に
- プログラム言語の、基本的な文法学習
- オブジェクト指向の基本的な使い方、浅いレベルでいいので、概念の理解(深いレベルとなると、完全な沼なので、ソフトを作りながら学習した方がいいです。)
は必須になります。
ちょっと大変だとは思いますが、そこを乗り切ってしまいましょう!
入門レベルの本、一冊位を習得するイメージです。
本での学習はちょっとという方は、Udemy等、動画で学習できる環境が整っています。
Udemyは、頻繁にセールスキャンペーンを実施しています。
欲しいコンテンツをお気に入りに登録しておき、キャンペーンの時に購入するのがお勧めです。(コンテンツにもよりますが、90%以上安くなるキャンペーンも頻繁に実施されています。)
本記事では、チームで開発するためのツール、バージョン管理や、コード品質を保証する手法の類は、省略しました。
(必要に迫られからでも、大丈夫だと思ったからです。)
各分野に特化した、学習内容
① 組込み系(ロボット等)を作りたい
組み込み系といえば、昔はC言語(C++含む)の使用以外、考えられませんでした。
組み込み系の処理能力は限られていたので、コードが軽く、処理能力の高いC言語との相性が高かったためです。
最近はハードウェアが発達して来た事もあり、入門者の場合、まずはPythonがお勧めです。必要に応じて、C言語を学習するスタイルでいいかと思ってます。
組込み系の場合、様々なセンサーからデータを収集→分析→行動 の流れが多いですが、Pythonを使用すると、分析ライブラリが豊富で、実装が容易化できます。
当ブログでも、簡単なおもちゃを作った記事をかいているので、参考にしてみて下さい。(本当に簡単なプログラムなので、感じがつかめると思います。)
実際の学習手順は以下がお勧めです。
産業用装置の場合
「産業用装置や、産業用ロボットの制御がしたい」という方がいましたら、全然別の話になってしまいます。
産業用ロボット
引用:ファナック㈱のHPより
そもそも、産業系はラダー回路とか、ティーチング等で制御するのが主流になっています。(Pythonみたいなプログラミング言語は、基本的には使用しません。)
左図の、シーケンサー部分の回路が、「ラダー回路」と呼ばれているものです。
引用:はじめてのシーケンサー
筆者は、ラダー回路作りを業務で従事した経験があるので、需要がありましたら記事にしてみます。
(あまり、需要がないと思いますが・・)
② ロボット等のセンサーから取得したデータの、分析屋になりたい
いわゆる「データーサイエンティスト」になりたい、という人向けです。
プログラム言語としては、紹介してきた「Python」がお勧めです。
学習手順としては以下がお勧めです。
数学(統計学・線形代数)の知識がある程度、必要になります。
ライブラリを使えば、中身が分からなくても処理ができてしまいます。
しかし、中身が分からないと、どこかで行き詰まる可能性 大です。
③ 自動応答マシンを作りたい
現状の技術では、ディープラーニングが最も適していると思います。(他の技術では、無理そうです・・)
例えば、Googleが紹介した下記動画のように、「美容院に電話して予約してくれる」システム等です。(1分 10秒位からご覧下さい。)
こちらは、AIが実店舗の美容院に電話して、AIが実際の人間に対して、電話でやりとりしてしています。
学習の進め方は、以下がお勧めです。
この分野も数学をある程度知っている方が、理論が勉強しやすいです。
また、この応答システムをサーバーを使って処理したい場合、サーバー系のプログラムも組む必要があります。
「⑥ECサイトや掲示板を作りたい」のバックエンド側の処理をご参照下さい。
④ 株等の自動取引システム
みんなが見つけていない、必勝ロジックを見つけたら、もう人生勝ったようなものです。(お金は自由の土台です!)
(筆者は、それほど勝率が高くありません・・)
自動売買システム自体は、Pythonで構築可能です。(筆者は、ビットコイン、FX、株取引システムを作っています。)
売買システムを作る事も重要ですが、最終的にアルゴ(いつ売買するかを判断するアルゴリズム)作りが肝になって来ます。
そのためには、データサイエンスの技術が重要になってきます。
現在の株式市場では、半分以上アルゴで処理されていると言われています。
ますます熱い領域になること、間違いなしです。
⑤ ゲーム作り
私が学生時代は、Cを使って書いていました。Cは処理速度が速く、当時のハードウェアでは、C以外の言語では厳しい状況でした。(ゲームの種類にもよりますが・・)
現在では、ゲームエンジン使った開発が簡単です。
その場合、「Unity or Unreal_Engine」の2択になると思います。
「ゲームエンジン」とは、ゲームの基本部分(どんなゲームでの共通で処理する所)が組込れ、開発者は、効率よくゲーム開発できるモノです。
ゲームの基本部分の例ですが、ゲームエンジンががまだ普及してなかった時代は、
- 敵と味方がぶつかった(いわゆる、当たり判定) 処理をしたい場合、敵と味方が距離いくつ以下なら、当たり判定にするとか、全部書いていました。
そういったゲームでよく使用される機能が、既に組み込まれています。
どちらも個人利用の場合、無料で使用する事が可能ですが、日本語情報が多いという点で、「Unity」がお勧めです。
対応ソフトも、2D/3D両方を作ることができ、Andorid/Windows/Mac/Linux等 幅広く作る事ができます。(3Dモデルは、別ソフト(Blender等)で作って、Unityに持って来たりしています。)
ただしこの場合、プログラム言語はC#になります。
学習手順は、以下の1つだけですが、奥が深いです。
⑥ ECサイトや掲示板を作りたい
サーバー系プラグラムを作る事になります。
この分野は、フロントエンド(画面の見せ方)側と、バックエンド(サーバー)側に別れます。
それぞれ、以下のようになります。
- フロントエンド → HTML、CSS、JavaScript のセット
- バックエンド → Java、Ruby、C#、Python、Go のどれか
フロントエンドは、上記3つを使うのが標準になっています。(簡単な画面の場合、JavaScriptは使わない場合もあります。)
バックエンドは、様々な言語が使用されていますが、今回紹介したPythonも使われています。(大規模なプロジェクトになると、Java等が使われる傾向にあります。)
「Webフレームワーク」とよばれるモノを使用すると、楽にWebアプリが作れます。
家の土台とか骨格は作られていて、中身作るだけ みたいなイメージです。
Pythonの場合、Django,Flaskと呼ばれる「Webフレームワーク」が有名です。初心者の場合、とっつきやすい、Flaskをお勧めします。
長いです・・・
それぞれ、脱初心者レベルとして、分かり易い記事を書いていこうかなと思っております。
⑦スマホアプリを作りたい
残念ながら、Pythonは向いていません・・
Androidの場合、Java/Kotlin、iOSの場合は、Swiftが主流です。
(Pythonで作る方法もありますが、情報も少なく、お勧めできません。)
ただ、「⑤ゲーム作り」で紹介したUnityを使えば、色々なOSに対応したアプリを作る事が可能です。
筆者自身は、JavaにてAndroidアプリを作成・公開してきましたが、Swiftは触った事がないので、iOSアプリを作りたい方は、別のソースを参考にして頂ければと思います。(筆者には分かりませんw )
Androidアプリの作り方(下記の1つだけです。)
⑧ Windows、Mac用アプリを作りたい
Windowsアプリは、C#を使ったVisualStudioを使うのが一般的で、Macアプリは、Swiftを使って作るのが一般的です。
その上でですが、実はPythonでも、両方のアプリを作る事が可能です。(細かい所に手が届きませんが、だいたいは普通に作る事ができます。)
- 一度、Pythonで作ってみてから、物足りないと思ったら、本格的にC# or Swiftに移行しても遅くはないと思っております。
間違いなく、Pythonの方が学習コストが低いです。
下記の学習手順になります。(下記の1つだけです。)
UI作成ライブラリとして、「wxPython」がオススメです。
- 作成後のアプリの見た目(UI)が洗練されていたり、
- ユーザがウインドウの大きさを変えた時に、再配置し直す必要がありますが、その処理が簡単
ただ日本語情報が少ないため、こちらも需要がありましたら、記事にしていきたいと思っています。
まとめ
各分野別(代表的なモノのみ)で、脱初心者レベルを念頭に、お勧めの学習手順を紹介してきました。
まとめると、こちらになります。(繰り返しますが、iOS系は筆者は分かりません(笑))
基本部分は同じですが、その先、勉強するべき内容が異なっている状況です。
また今回、学習する順番を示してきましたが、それぞれが奥が深いので、ある程度まで学習したら、次に進んでしまうのがいいと思います。(沼にはまって、つまんなくなってしまいます・・)
やっぱりプログラムは作って楽しむのが重要だと思っています。
必要に応じて、また戻ってきて、更に学習するスタイルの方が長続きするかなと思っています。
企画全体を通して
この企画では、プログラムに触れた事が無い人を対象に、画像変換ソフト作成を通して、この世界の魅力に触れてみようという事で記事にしてきました。
一人でもプログラムを初めてみようと思った方がいれば、嬉しい限りです。
学習においては、実際にコードを書いて作ってみるというのはとても重要ですが、何より楽しみながら続けるというのが重要だと思っています。
実際に動いた時の感動は、いつ味わってもいいものです♪
雑談
今回の学習手順の中で、あえてソフトウェア工学的な部分や、再利用可能なプログラムとかの話は省略しました。
いきなりそんな物を学習しても、楽しくないと思ったからです。
今後ですが、ノウハウ的な単発記事を数記事書いた後、独学でプログラミング学習する方を対象にした記事をまた書いていきたいと思っています。
多くの方がよく躓く、オブジェクト指向の入門かな?と思っています。(変更になったらごめんなさい。)
オブジェクト指向は、プログラミングを書く上で必須の知識になりますが、結構とっつきにくい概念です。
オブジェクト指向の深いレベルは、哲学的な概念に近くなってしまいます。(関係するとは何か?抽象とは何か? みたいな感じ。ほんとマジです。)
そんなのをすっ飛ばして、できるだけイメージで伝えられたらと思っています。
最後まで読んで頂き、ありがとうございました。
また、お会いしましょう。