どうもMonacaソムリエです。
遅ればせながら、明けましておめでとうございます。
今年もちょっと変わった、楽しい、時にはマニアックなブログ書いていきます。
本年も宜しくお願い致します。
今回はプログラム言語について書きます。
細かい定義はあるのですが、ざっくりいうと
世界中には250言語あるそうです。
この業界に20年以上いる私が果たしてすべてのプログラム言語を把握しているか?
そんなわけありません。。。
私がプログラム言語を組んだことがある、見たことある(知っている)のはせいぜい10言語程度です。
※私がこの業界に入ったときは10個ぐらいだと思ってましたw。
コンピュータ上でシステムやアプリが動くのはプログラム言語を用いて、
命令文(プログラム)を書いて、それを機械語に翻訳してコンピュータに命令しているからです。
言い方を変えると、コンピュータは機械語しか理解できないのです。
なので、プログラムをコンピュータが理解できるように翻訳しないといけません。
そのために必要な作業がコンパイルです。
コンパイルはわかりやすくいうと、プログラマが記述したプログラム(人が理解できる内容)を
コンピュータがわかるように機械語に翻訳するのがコンパイルです。
そのコンパイルをするツールをコンパイラといいます。
Visual Studio、Xcode、Android Studioがそのコンパイルをするための開発環境です。
システムやアプリの機能をすべてを機械語で書いて開発している人はほとんどいないと思います。
なぜって??機械語って0,1の羅列(2進数)なので。。。。
わかりました??
プログラマなら聞いたことあると思いますが、プログラム言語には
高レベルAPI(高水準言語)、低レベルAPI(低水準言語)の二つに分けられます。
高レベルだから、低レベルだから優れているとか、レベルが低いということではなく、
低レベル=機械語に近い、高レベル=機械語から遠い
「近い」とか「遠い」か、よくわかんないと思われそうですが。。。
カレーライスに例えましょう!!(笑)
極端に言いますね。
低レベルAPIで作る=、材料を買ってきて、それを切って、カレールーをスパイスから一から作って米を研いで薪で火を焚いて、土鍋で焚く。
高レベルAPIで作る=野菜は宅配、カレールーは市販のルー(究極はレトルト)。ご飯はレンジでチンのご飯。
要は出来上がり(カレーライス)は同じだけど、低レベルになればなるほど原始的だと思っていただいて結構です。
では、250言語もあるのであれば、プログラム経験問わずどの言語をやればいいの?
と思うのは当然だと思います。
ここでこんなレポートがあります。
普段使用しているプログラミング言語ランキンング
(https://xtech.nikkei.com/atcl/nxt/column/18/01068/111100001/)
需要のあるプログラミング言語ランキング
(https://info.hackerrank.com/rs/487-WAY-049/images/HackerRank-2020-Developer-Skills-Report.pdf)
こうなっている。っという事だけここでは言っておきます。
これだけは言えるのですが、プログラム言語は一つですべてのシステムを開発できるわけではありません。
例えば、WebアプリならJavaScript、Java、PHP、スマホアプリならSwift、Kotlin等
環境や条件によって絞られるからです。
それによって、何を学ぶか?を選べばいいと思っています。
私がよくブログで紹介するxR(3D/AR/VR)技術で必要なプログラミング言語はC,C++です。
なぜかというと、有名どころのグラフィックAPIがすべてC,C++で記述されているからです。
※もちろん、近年ほかの言語でもグラフィックAPIは使えるようになっています。
なので、私はこの業界に入ったときにC,C++からスタートしました。
C,C++は比較的低レベルAPIなので、いろいろなことを学べました。
命令文の基礎(if文、For文、Switch文)やメモリの扱い方、クラス設計等のオブジェクト指向を
早いこと学べたのでその考え方は大いに役立っています。
つまり、プログラミング言語が変わっても大まかな考え方は変わらない(所詮最後は機械語)ので
そこに大きな壁はないかな?と個人的には思っています。
あくまで私の経験ですが、ひたすら人の書いたコード見る、盗んで自分のものにします。
動いているコードなので、それをひたすらコピペしてどう動いているのか?を
何度も見ました。そしたら、そのテクニックを覚えるので使えるようになりました。
要は先人のコードを見るのです。
ただ、ガムシャラに見ても面白くないので、
サンプルアプリを作りながら学んだ方がいいですね。
それを一から考えるのも勉強といえばそうなのですが、手っ取り早くやりたいときは
「わかりやすい」のを作れば学習意欲があがります。
「わかりやすい」とは結果が目で見てわかりやすい内容です。
計算結果や処理結果が単なる文字や数値の羅列より、
ビジュアルとして、表示出来たほうが面白いですよね?
※3Dなんかはすべてビジュアルなので、そこが面白いところです。
そこで、お勧めしたいのは世の中に公開されているWebAPIのサービスを使って
サンプルアプリを作ることです。
https://api.app-rox.com/
例えば、宿泊サイトやグルメサイト、中古車の検索サービスは結構WebAPIサービスを公開しています。
それを使うとサーバー周りやAPI等、言語を学ぶ上でネックになるところをすべて用意
してくれてますので、プログラミング言語を習得するというところに専念できます。
それとみんなが知っているサービスなので、どんなサンプルアプリを作るのか?
をとてもイメージしやすいところですね。
ある程度言語に縛られずに、その言語に合った開発環境で、検索機能、検索結果を表示、
詳細表示、これらの機能をWebAPIサービスを使って通信とか非同期処理とかシステムや
アプリを作るうえで基本的な知識を学べます。おすすめですね。
じゃあ、どの言語を学べばいいのか?です。
個人的にはC,C++、JavaScriptです。
もちろん先ほどのランキング上位に来ているというものありますが、
まず当分、無くならない言語です。
JavaScriptがなくなったら、世の中のWebブラウザはすべて動かなくなり
インターネットが出来なくなりますw。
C,C++がなくなったら、数多くのゲームや3Dシステムが動かなくなり
娯楽や建築や製造系を支えている設計システムが動かなくなり、
アナログ(すごろくとかカードゲーム)で遊んで、アナログで設計しないといけなくなります。
それが「ダメ」だとは言いませんが、それくらい多くのシステムで
使われている言語ですよ。っということが言いたいだけです。
なので、Web知識から学びたい場合はJavaScript、3D技術であれば、C,C++がお薦めです。
そういう視点でトライしてはいかがでしょうか?
当社で開発している3D・VR・ARアプリケーションの開発エンジニアを募集中です。
詳しい求人内容はバルテスグループ採用サイトをご覧ください。
画像をクリックいただきますと詳しい求人内容をご覧いただけます。
是非フォローや「いいね!」をお願いいたします!
公式アカウントはこちら