初心者向けのプログラム言語
イントロダクション
「プログラム言語を学ぼうとは思うんだけど、何を学べば良いのがわからない」という、悩みを何処かのSNSで見かけました。 ちょいと、思う事があったので云々かんぬん記載しようと思います。
結論から言うと
やりたいと思った言語をやるべきと思います。理由や理屈なんてものは後から付いてくる物だと思いますので…
それに「途中で挫折するのが嫌だ」とか「理解出来るか不安だ」など不安要素は沢山あると思いますが、何をやってもそういう不安はつきものです。
とりあえずは、何かを作ってみるってのが良いと思います。
ぶっちゃけた話
何か新しいことを始めようとした時何かしらの「動機」があると思いますので、それを大切にした方が良いと思います。ちょいとパターン分けして考えてみましょう。自分の考えでは以下のようになります。
<ダメパターン・シュミレート>
- 「プログラミングを始めるが、コードを見て挫折」
とりあえず、見てわからなかったらゲンナリしまよね(笑)、本当の問題は「次にどうして良いかわからない」為、再挑戦する事なく断念…と言うのがこれの正体だと思います。人によるのでわかりませんが、ここでプログラミング・スキルその1「デバック」です。PDCAではCheckに当たるでしょうか?とにかく反省です。ここで言う反省は、リンク先にもありますが、行動なり、あった物事を省みるという事です。つまり…
問題を正確に把握する
という事です。問題を把握したら解決の糸口になるかもしれないし、そうでないかもしれません。次に… 2. 「コードを書き始めたけど、いつの間にやら挫折」
早い話が、続かなかったパターンです。これは、正直やったけどあまり「面白くなかった」とかが原因だと思うので、挫折して「次の面白いもの」を探す方が賢明だと思います。 3. 「悪い評判を聞いて、挫折」
噂を聞いてやる気が無くなったパターンですね…何かを行う上で、その土台になるのは「やる気」です。これが無くなったら何やってもダメでしょう(笑) 心の整理とか、休むとか…周りをウロつくとか、時間をかけて様子見をする事をオススメします。
他にもありますが…
まとめると、挫折しそうになったら以下の手順を踏みましょう、という事が言いたいわけです。
- 挫折しそーだ、という事を感知する
- 挫折しそーな原因を探す
- その原因を解析、何が問題かを明確にする
- 打開策を考えてなんとかする
プログラミングでは、以下のようになります。
- エラーだ、という事を認識する
- エラーの原因を探す
- その原因を解析、何が問題かを明確にする
- 打開策を考えてなんとかする
このように眺めてみると、面白いほど似てるな〜と思います。実際に「これってパグ?」などという言葉はテスト中には良く聞く言葉です(笑)、つまりエラーを認識すると言うのは「正しい」「正しくない」の区別を明確にして、問題を「正確に」把握するという事です
くどいようですが
Javaでクロスプラットホーム開発とか、いかがでしょうか? 企画〜開発〜テスト〜リリースまで自分でやる事が可能です。ぶっちゃけて、一人は辛いので、仲間を集めましょう。
プログラマ必須スキル
誤解されがちですが話をする(説明する)スキルが必要です。というか求められます。初期段階では求められませんが、後半戦になると求められます。 「〜さん、この機能にこんなのつけて欲しいんだけど…」とか「この画面の〜をXXして欲しいんだけど…」「〜って出来る?」「なんで出来ないの?」…挙げればきりがないのですが、こんな事を言われたら説明せざるを得ないので、まぁ国語力と共に、説明力が求められます。 そして、「じゃ、お願い❤️」なんて言われた日には作業見積もりから提案書書いて…となりますが、ここでもあーだこーだと説明しなくてはならない事が沢山あります。
身近な所では
単純に仲間集めでしょう、チーム作って、プロジェクト立ち上げて、もし上手くいったら一攫千金、失敗したら、楽しいサークル活動…リスクの低い有意義な事だと思います。 汎用性とビジネスという話ならJavaがオススメ、オブジェクト指向を理解するという部分でもJavaがオススメ(笑)
でわでわ。。。
関連ページ
<サイトマップ>
JavaFx はじめてでも大丈夫な訳
イントロダクション
JavaFxチュートリアルをはじめていますが「何が大丈夫なのよ?」と疑問に思いましたので、その訳を記載します。
はじめに
プログラミングじゃなくても、同様ですが「継続的にやる」必要があります。 その中で、面白味が見えてくる事も多いはずです。なので、ちょいと自問自答してみてください。「自分は何でJavaFx(プログラミング)をやろうとしてるのか?」この答えは自分の中にあります。
動機がクリアになった
先程の自問自答で見えたと思いますが、「動機」言葉を変えると「目標」「欲望」色々と出ると思いますが、それに向けて「やる気が出る」という事が大切です。
はじめてのプログラミング
プログラムというのは「よくわからん」とか「難しい」というイメージがあろうかと思いますが、世の中の事象で「簡単な事」の方が少ないと思います。逆に難しくすれば、いくらでも… まぁ、やってみれば良いと思います。それから「どーする?」「こーする?」を考えてみれば良いと思います。
土台無しでやる
何かを始める時は殆どの場合で予備知識だったり、経験の無い事が多いと思います。そんな時は「まず真似る」のが一番早いし、理解も早い。ただし真似たものを理解する必要があり、怠ると後で面倒なことになります。1つずつ確実に学ぶのが遠回りに見えて最短のルートです。
本題
JavaFxは画面を作成するAPIです。作成したプログラムを直接目で見る事が出来ます。→「こー書いたら、こーなる」が目に見える。 なので、コードと起動結果の関係がわかりやすいという事が言えるはずです。自分はJava Swingで「オブジェクト」とか「インスタンス」とか理解しました。そして、イベント処理の時に「ポリモーフィズム」を使うので、いわゆる「オブジェクト指向言語の奥義」も理解が進むと思います。*インジェクションとかデリゲートも「ポリモーフィズムの内です」 ここで、オブジェクト指向を理解してしまえば、巷のプログラミング言語は殆どオブジェクト指向なので「どの言語も行ける」わけです。ちなみに、他の高レベルな言語だと、低レベルな実装をすることはないのでインジェクションとかデリゲートの意味が実装レベルで理解出来ないと思います。
インジェクション
Dependency Injectionの事を言ってます。Javaでは、既にスタンダードなものになりました。「依存性の注入」なんて呼ばれてます、使用するクラス(部品)のインスタンスをプログラムコードの外で取得してしまう実装方法です。ウェブアプリでよく使います。
デリゲート
Delegate)の事を言ってます。大雑把に対象とするメソッドを直接呼び出して使用する仕組みの事です。wikiにあるような「〜言語で〜」と言うのは古い話だと思います。今はどの言語でも使われている技術だと思っています。
早い話
コードを書いて実行結果を見て…を少しずつやって行くとプログラムも必然的にわかるようになるという事です。 その意味で「質より量」で勝負するのです(笑)
JavaFX チュートリアル〜今度こそ、初めてでも大丈夫:Label〜 – PGボックス
関連ページ
<サイトマップ>
Java Fxで何が出来る?
イントロダクション
Java、php、Python C#など色々な言語でつまみ食い開発をやって来ましたが、そろそろ進んでいる方向がわからなくなって来たような気がします。なのでちょいとまとめて見ようと思います。
プログラム言語が沢山
WindowsやMac、Linux(android, RPiなど)色々なOSがあり、それぞれに基本となるプログラム言語が違います。 あくまでも自分の感想ですが、各言語に関して特徴を記載します。
C言語はオールマイティ
ほとんどのOSで、マイコンボード(Arduino, RPi)ではこの言語で作ったアプリを起動する事が出来ます。自分の知る限りでは、全てのOSで起動出来ます。 用途としては、ゲームや「組み込み系システム」→炊飯器のマイコン部分や家電、カーナビなど、はっきり言ってなんでもあり!な言語です。ただし、多くの部分を自分で実装する必要があります。 ライブラリも沢山ありますが、Javaほどではありません。
しかし、欠点もある
なんでもありな分、実装には高い技術力とマンパワーが必要になります。そんなわけで、大規模開発では他の言語に遅れを取っているように見えます。 ちなみに、TensorFlowやBlender(3dモデリングアプリ)はC/C++で作られているようです。そして、ゲームエンジンUnrealも同様です。
Pythonはお手軽
C言語で作られたプログラム(モジュールを読み込み起動するプログラム言語です。TensorFlowもPythonで扱う事が出来、機械学習では大活躍している言語です。他にもGoogleトレンドとかOpenCvなどを手軽に扱う事が出来ます。Py Gameなど、ゲーム作成が出来るライブラリもあります。特徴としてはライブラリがたくさんあり、本当は「難しい」ことも簡単に着手できるところが素晴らしい、中々になかなか。。。
C#はUnity
Unityが今流行っているようで、VRやプレイステーションなど、様々なデバイス(任天堂DSやPSPなど)でも起動できるアプリを作成出来ます。そのためには、対象のドキキュメントを読んでそれに対応した手順を踏む必要がありますが… 他にも、色々な事が出来ます、がやはりOSがWindowsに限られます。余談ですが、最近はクロスプラットホームにも対応してるようなので今後が楽しみな言語でもあります。
Java Scriptは汎用的
ウェブブラウザーでは最も多く使われているであろう言語です。最近はNode.jsなどブラウザー以外でも動くものもあり、汎用性が高くなりました。扱いもやりやすいので、子供向けのマイクビットとか、スクラッチなどの上で動かせるので、プログラミング学習でも使われているようです。
PHPはウェブで活躍
自分も利用している、レンタルサーバーではPHPが使える環境にあります。その他Python 2.X、CGIが使えます。 よくある、無料レンタルサーバーでもPHPが使えるので、プログラム自体も難しくないのですぐに使えるようになると思います。 余談ですが、JavaエンジニアからPHPに乗り換える人も多いようです。 自分のイメージでは、ウェブデザイナーが着手しやすい言語だと思っております。リクエストを受けた時(サーバーにアクセスがあった時に)HTMLを出力するプログラム(スクリプト)なので動的(入力によって表示が変わる)HTMLを生成できるのが魅力です。 有名どころでは「ワードプレス(WordPress)があります。ほとんどのレンタルサーバーで使用可能だと思っております。 とにかく「ノンプログラマでもウェブサイトが作れる」と言うところがポイントです。
Javaもなんでもいける
ぶっちゃけた話「C言語ほどではない」のですが、C言語は出木杉くんだと思います。いずれはC言語での実装をやろうと思ってはいるのですが、一人で開発しようとするとマンパワー不足になってしまいやれることが少なくなってしまうのですが、Java言語は違います。 ポイントは以下の通りです。
つらつらと、アピールポイントを記載しましたが、要点は「実装レベルがCに近い」と言うところです。コンパイルしてCLASSファイルを作ると言う部分では、ある意味「同じようなもの」になると思います。
つまり、大体のことは大体できる
と言うことを言いたかった次第です。また上にあげたプログラム言語はC以外がオブジェクト指向言語になります。C言語は「オブジェクト指向」と言う言葉が出る前からあり、オブジェクト指向で実装することもできます。ちなみにJavaも同様です。単純にスクリプト的な実装〜クラスオブジェクトを基礎にしたスクリプト(この場合、Javaはクラスを作った上でスクリプト処理を走らせます。)
本題
今までに記載したように書く言語にそれぞれの特徴がありますが、その中でJavaFXで何をするのか?と言う部分について記載したく思います。 JavaFXはGUI作成を行うAPI(プログラムのセット「アプリケーションインターフェース」)です。早い話がプログラムをするためのクラス・セットです。これで画面を作成して、そこからいろんな処理を行うことで様々なことを実現します。 他の言語でも似たようなことはできると思いますが「スピード」「汎用性」「拡張性」の部分で一番バランスが良いと思います(自分の思いが多めです)正直のところ、比較検証とかやっていないので「こーです」と言えません。ただ「オブジェクト指向プログラミング」を行おうとする時にはベストな言語だと思います。 理由は、以下の通り 1. C言語に近い(低レベル)な実装ができるので、処理が早い (注意) 無駄な処理の多いプログラムを書くと遅くなります。 2. 高レベルAPIが揃っているのでPythonなどのような呼部だけで要件を満たせることも結構ある 3. 高レベル〜低レベルまでの実装ができるので汎用性が高い
Javaは大体のことは大体できる
と言うことが言いたかったことです。ちなみにJavaが使えれば、他の言語はほぼスムーズに理解できると思います。自分なんかはJavaでやってきているのですが、Javaの特性上「エクセルVBA」「SQL・PL/SQL」「Shellスクリプト」「JavaScript」「HTML(XHTML)+CSS」なども一緒に使用することが多く、結局使えるようになってしまいました。 PHPも同様に使っています。
自分の中で基本を作る
つまるところ、言語はなんでもよくて、プログラミングの基本となるものをどれかの言語で自分の中に作れれば「おっけ」と言うことです。 その基本を作るのに「Java」が一番おすすめです。 プログラムで「どんな面白いことをやろうか?」と言うのが一番大切な動機だと思います。
JavaFxでなにやる?
大雑把に、PC、スマホ、Arduinoなどのシングルボードコンピュータで動かせるのでゲームなど大体のモノが作れます。技術的には、ほとんどの言語ベースになるC言語が土台なので問題なく新しい言語も理解出来るようになると思います。
でわでわ。。。
関連ページ
<サイトマップ>
プログラミングとPDCA〜プログラミングのススメ〜
イントロダクション
プログラミングで身につく事に「PDCAサイクルを自発的に行える様になる。」と言うのがあります。現実的には「やる気」がないと出来ないのですが… 裏を返せば、やれば出来る様になります。結局は本人次第ですが、わりかしやりやすいと思います。
根拠は?
プログラミングで延々と繰り返す事になる、作業順序がこれに当たるからです。 全ての人が、この方法でやるものなのか?と言えば答えはノーです。でも、少なくとも自分や周りのプログラミングのできる人はみんなPDCAサイクルをものにしています。
プログラミングのサイクル
- 作りたいものを決めます
- 作る為に必要な情報、資源(画像や使用するライブラリ)を集めます 3.実装を行い、とりあえず動く様にします
- テストを行い、想定外のエラーに対するシュミレーションと対策を講じます
- リリース、システム(アプリ)をより良いものに更新して行きます
ここまできたら、はじめに戻り繰り返します。 上の1〜5の工程では小さなレベルで「設計」「実装」「テスト」「再度設計」が繰り返されます。つまり、Plan-Do-Check-Actionが繰り返されると言うわけです。これに慣れてくると…
色んな応用が利く
という事です
やっぱりJava
自分がおススメするのはJava言語です。 世間巷にあるプログラミング言語の中でC言語に近く、プラットホーム(OS)に依存しない、かつネットワークにも強い… そして、現在(2019/02/20)では仕事として最も多いのはJava案件(らしい)なので、生活にも困らないし流行り(機械学習〜3dモデル)にも乗り遅れてない。 1. ディープラーニング 2.Iot & Arduino
他にも沢山関連サイトがあります。 そして、オープンソースです→無料なのです!
やってみたい!
この気持ちが一番大切です、学習効率が良く周りの人にも良い影響を与えるものだと思います。
この動画は、自分の作成したものです。Google play storeに上げようかと思っています。
関連ページ
<サイトマップ>
Java ハローワールド〜OpenCvまで
イントロダクション
ここ最近は、機械学習の理解方法を探して色々やっていたのですが、OpenCvのアルゴリズムや機械学習(KNN)など、TensorFlowを理解するのに良いと思いました。TensorFlowではCNN→畳み込みフィルターを使用しています。まぁ色んな書籍を読んでもわからなかったんですけどね(笑)
因みにOpenCvでは近傍法(KNN)を使ったりコンボリューション(畳み込み)を理解したりとヒントになるものが沢山あるので、これはやるしかない!と思った次第です。
そして丁度、画像解析から機械学習に繋げようと思っていたので「これは、みんなでやれたら良いな!」と思ったのです。
そんなわけで
目的のアプリ、機会学習テストなどを行うJava Fxで作って行こうとなりました。ハローワールド〜Javaの基礎的なことをやりながら、作って行きます。
途中、寄り道をしながらやるので…
初心者にも出来る、内容にしたいと思います。
一発目
でわでわ。。。
関連ページ一覧
- Java Install Eclipse〜開発ツールのインストール〜
- Java Git clone in Eclipse 〜サンプルの取得〜
- Eclipse Gitリポジトリの取得 〜GitからソースをPullしよう〜
- IntelliJ IDEA Git〜Gitリポジトリからクローン〜
- Java Basic Level 1 〜Hello Java〜
- Java OpenCV 環境セットアップ(on Mac)
Javaをススメる理由
イントロダクション
Javaをススメはしたけれど、具体的な事は何も記載していませんでした。
そんなわけで記載します。特に「どの言語にしようか?」と悩んでる方などは特に…
だけど、結局はやってからじゃないと「何もわからない」と思います。
やりやすい(と思う)サンプルコードもリンク先にあります。
なにはともあれ、はじめのプログラム「ハローワールド」をやってからどの言語をやるか考えてみるのも良いのではないでしょうか?
理由と具体例
→ポインタ、オペレーターなど操作可能な分、理解するのが難しい。つまりなんでもできるけど、難しい。
2.Javaを使えるようになったら、大体のプログラム言語は読めるようになる、つまりはJavaは色んな言語やOSにアクセスしやすいのでJavaから(C言語、)SQL、Java Script、コマンドプロンプトなどを使う事が多い。
→母体がC言語なので他言語のライブラリを読み込みJavaで使用できる
→JDBC〜CORBAなどネットワーク処理がデフォルトでついてくる(JDK)
などのライブラリが豊富なので、その他の言語に触れる機会が多い
- “derby” の検索結果 – PGボックス
- RPi Java Swing〜ラズパイにJava Swingアプリを起動する〜 – PGボックス
- TensorFlow Java 環境構築〜JavaでもTensorFlow〜 – PGボックス
3.コンソール〜スマホアプリまでハローワールドが簡単にできる、つまりチュートリアルなどがネットに沢山あるという事です。
→コンソール(OpenGL)
JOGL OpenGL in Java Lv1〜JOGLでハローワールド〜 – PGボックス
→その他のプラットホーム(git 連携)
Java Git clone in Eclipse 〜サンプルの取得〜 – PGボックス
→ネットワーク通信で様々な機器へ
Java Network Socket〜極小サーバー〜 – PGボックス
でわでわ。。。
プログラムの習得手順
イントロダクション
プログラムの話をする人は結構いるけど、実際コードの話をする人ってあまりいないなぁと思いました。
「理論は後からついてくる」パターンの学習手順だと思ってます。
実績のある理論には、机上の理論では勝てません。という事を実感できると思います。
プログラミングのススメ
Javaの場合ですがプログラムってどんなもの?ってのがわかると思います。
知識技術なので、理解すればすぐに使えます。理解するまでが大変ですが…
プログラム 習得 順序 手を動かして理解 – PGボックスzenryokuservice.com
オススメ
簡単なゲームを作る。
プログラムで絵を描く。
人の作った(著作権フリーの)3dモデルを動かす。