プログラミングにおけるIQの壁

      2017/09/18

a0002_007191

「算数は得意だったけど、数学は苦手…」
「高校までは数学嫌いだったけど、大学の数学やって数学の面白さが分かってきた!」

これらは、算数 → 数学 → 大学の高度な数学へと段階を経ていく際にぶつかるIQの壁です。

算数は具体的な計算をしますが、数学は式を組んで証明することが中心になります。

それはつまり、抽象度の階段を上がるということなんです。

その階段を上がる力がIQ(知能指数)です。

算数はできたけど、数学は苦手という人は数学に必要なIQが足りなかったということです。

プログラミングにもこれと似たIQの壁が存在します。どんなものなのかくわしく紹介します。

アプリケーションをプログラミングする

アプリケーションは具体的であり、アプリケーションに必要な機能を実装していけばいいので、ライブラリ・フレームワークをプログラミングするのに比べれば抽象度は高くありません。

とはいえ、人間が考えたアプリケーションの仕様をコンピュータが理解できるプログラミング言語に変換しなければなりません。

それはアプリケーションの仕様という抽象概念を具体的なコードに落とし込む作業です。それには高度なIQを必要とします。

プログラミングは何をするにも高いIQを使うということです。

ライブラリ・フレームワークをプログラミングする

ライブラリ・フレームワークをプログラミングするにはアプリケーションの全体を俯瞰して眺めることが必要です。すると、共通部分が見えてきます。

「このロジックと、ここのコードはメソッドに切り出すことで、同じ仕組みを使って実装できるな」といった具合にです。

つまり、ライブラリ・フレームワークを開発するにはアプリケーションを開発するよりもさらに高いIQを必要とするということです。

プログラミング言語をプログラミングする

プログラミング言語を実装するには、その言語が必要な機能の実装方法を知っていて、それをどのような構文で表現すればいいかを考える能力が必要です。

プログラミング言語が持つべき機能の本質を見抜き、それを構文表現に落とし込むための高度なIQが必要となります。

ミドルウェアをプログラミングする

代表的なミドルウェアであるRDB(リレーショナルデータベース)には数学の関係代数が使われています。

ECサイトのレコメンドエンジンではベイズ統計という統計学が使われています。

数学理論をソフトウェアとして実装するのには、数学とソフトウェア空間を行き来して、思考を組み立てられる高度なIQを必要とします。

OSをプログラミングする

OSをプログラミングするにはハードウェアが持つ全機能をソフトウェアからアクセスする方法を知っていて、ソフトウェアがハードウェアをどのように制御するのが良いかを考える能力が必要です。

また、OSの機能をアプリケーションから利用させるAPIを実装する際には、どのようなインターフェースを用意すれば最も(性能的 & 安全性的 & 自由度的に)良いかを考えなければなりません。

ハードウェア全体をどのように抽象化してOSとして表現するかを考えられる高いIQが必要となります。

抽象度の壁がIQの壁 → その壁を破る方法は?

アプリケーションが作れてもフレームワークを作ることができない人がいます。それは、フレームワークはアプリケーションよりも抽象度が高く、その抽象度を理解するIQがないためです。

ですが、IQよりも大切なことは、作りたい気持ちです。

「作りたい!」

と思った瞬間、それを作るための技術を学ぶ意欲が生まれます。

そして、試行錯誤しながらプログラミングに没頭してるうちに自然とIQも上がっている、そういうものなんだと思います!

プログラミング初心者におすすめのサービス
1. 講師から対面で学びたい派なら

プログラマカレッジをおすすめします。ProEngineerという転職エージェントが運営しているプログラミングスクールです。20代限定なんですが、無料で受講できて、修了後、就職支援もしてくれるんです。最高過ぎですよ、これ!!就職の紹介料を企業からもらえるのでスクールを無料にできるんでしょうね。すばらしいシステムだと思います!

30代以上の方には

プログラマカレッジは20代限定なので30代以上の方にはWebスクをおすすめします。受講料の返金保証がついているし、毎日11時〜23時まで通い放題なのでとてもいいと思います!

2. 自宅で学びたい派なら

「就職保証付き」オンライン就職予備校をおすすめします。Javaエンジニアコースでは就職保証がついているのでプログラマーとして就職したい方にはぴったりです。Javaエンジニアの求人ってめっちゃ多いし、求められる技術レベルもそこまで高くないのでちゃんとした教育プログラムなら就職保証できるだろうなとJavaエンジニア経験者の私も思います。

3. つまづいた時に質問したくなったら

プログラマー専用の質問サイトteratailをおすすめします。 つまづいた時にteratrailで質問すれば教えてもらえます。

これらのサービスを活用すれば、全くの初心者からでもプログラミングをばっちり出来るようになると思います!レッツトライです!

 - 能力開発